Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Events
Videos
Audiobooks
Packt Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds

WebDevPro

74 Articles
Apurva Kadam
19 Sep 2024
11 min read
Save for later

WebDevPro #72: Open-Source Python Projects, VS Code Extensions, React Mindset, macOS Sequoia is available, Notes on OpenAI’s new o1 chain-of-thought models.

Apurva Kadam
19 Sep 2024
11 min read
Web development blogs, tutorials and resources inside!Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }Join Roman Lavrik from Deloitte Snyk hosted DevSecCon 2024Snyk is thrilled to announce DevSecCon 2024, Developing AI Trust Oct 8-9, a FREE virtual summit designed for DevOps, developer and security pros of all levels. Join Roman Lavrik from Deloitte, among many others, and learn some presciptive DevSecOps methods for AI-powered development.Save your Post!WebDevPro #72: Open-Source Python Projects, VS Code Extensions, React Mindset, macOS Sequoia is available, Notes on OpenAI’s new o1 chain-of-thought models.Hi ,Welcome to the web app development world with the 72nd edition of _webdevpro!In this edition we cover web development community discussions on:11 Open-Source Python Projects You Should Know in 202450 Must-Know VS Code Extensions for Faster DevelopmentWhy React Won the Front-End Race13 top open-source tools to ship your apps fasterReact Mindset: How New React Developers Should ThinkDon't miss our repository of manually curated collection of Tailwind CSS resources for web developers.In our relatively new section captures internet jibber-jabber about the mobile ecosystem:Scramble: Open-Source Grammarly AlternativeApple Mobile Processors Are Now Made in America. By TSMCCombining the Power of Python and the Flexibility of ExcelmacOS Sequoia is available, bringing iPhone Mirroring, Apple Intelligence to MacNotes on OpenAI’s new o1 chain-of-thought modelsToday's news covers Laravel, Ruby on Rails, Swift and Vue.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email!If you liked this installment, fill in our survey below and win a free Packt PDF.Take the Survey Now!Thanks,Apurva KadamEditor-in-Chief, PacktWeb Dev Community SpeakWhat are Web developers discussing? What are the latest tips and tricks? Shortcuts and experiments? Cool tutorials? Releases and updates? Find it all out here.11 Open-Source Python Projects You Should Know in 2024 - Python is one of the easiest programming languages, and it can be used in almost every technical field — whether it's data science, automation, IoT, AI, machine learning, or web development. And the most interesting part of Python is that it’s100% open-source, which makes it even more powerful and dynamic. Yet, most developers overlook Python when building their web applications which limits its potential. In this article, I've covered 11 open-source Python projects that every web developer should keep an eye on.50 Must-Know VS Code Extensions for Faster Development - Are you spending more time tweaking your code than writing it? Do you feel like your VS Code setup could use some superhero-level upgrades? Well, buckle up, because we’re about to zoom through the50 must-know VS Code extensionsthat will skyrocket your productivity and help you code like a pro! Whether you're coding for fun or trying to meet that impossible deadline these extensions are here to make your life easier.Why React Won the Front-End Race - React, the king of front-end frameworks—or should I say "libraries," since React purists will remind you every 10 minutes that it’snota framework. But let's not get caught up in the technicalities. If you're doing any serious front-end development in 2024 and you're not using React, then congratulations, you're a hipster. But for the rest of us mere mortals, React has emerged as the undeniable winner of the front-end race, and here’s why you should love it.13 top open-source tools to ship your apps faster - I have worked with many successful developers from different pre-seed and seed-stage companies. And they all had three reasons for their product's success: Ship fast, get customer feedback, and iterate faster. With that in mind, here is a curated a list of open-source tools you can use to build your products faster.React Mindset: How New React Developers Should Think - React, a popular JavaScript library for building user interfaces, has revolutionized front-end development by enabling developers to create reusable components and manage complex UIs efficiently. However, adopting the right mindset is crucial for new developers to navigate React's unique paradigms. Let’s explore the essential principles and strategies that shape the "React mindset."Web Dev ReposCheck this space for new repos, projects and tools each week! This week we bring you a collection of Tailwind UI Libraries, Components & Templates:Svelte Headless UI- Unofficial Svelte port of Headless UI.Xtend UI- Tailwind CSS components with advanced interactions and animations.Headless UI Float- Floating UI integration for Headless UI.Vanilla Components- Set of fully customizable Vue components.Sailboat UI- Modern UI framework for Tailwind CSS.Built At Lightspeed- Massive directory of 500+ Tailwind templates, starters and UI kits.Statichunt- Open source directory of hand-picked free and premium Tailwind templates & Starters.Trending TitlesMastering PyTorchBuy now at $41.99$28.99Building Production-Grade Web Applications with SupabaseBuy now at $39.99 $27.99Mastering Python Design PatternsBuy now $31.99$21.99Internet Jibber-JabberRandom curious musings and interesting words about Mobile Dev on the Internet.Scramble: Open-Source Grammarly Alternative - Scramble is an open-source Chrome extension that leverages AI to enhance your writing directly in your browser. It's designed to be a more customizable and privacy-respecting alternative to Grammarly.Apple Mobile Processors Are Now Made in America. By TSMC - TSMC’s first Arizona chips are now in production, and Apple is ready to be the first cab off the rank with mobile processors made using the foundry’s 5nm process. Apple’s A16 SoC, which first debuted two years ago in theiPhone 14 Pro, is currently being manufactured at Phase 1 of TSMC’s Fab 21 in Arizona in small, but significant, numbers, my sources tell me. Volume will ramp up considerably when the second stage of the Phase 1 fab is completed and production is underway, putting the Arizona project on track to hit itstarget for production in the first-half of 2025.Combining the Power of Python and the Flexibility of Excel - Python in Excel is now generally availablefor Windows users of Microsoft 365 Business and Enterprise. Last August, in partnership with Anaconda,we introducedan exciting new addition to Excel by integrating Python, making it possible to seamlessly combine Python and Excel analytics within the same workbook, no setup required. Since then, we’ve brought the power of popular Python analytics libraries such as pandas, Matplotlib, and NLTK to countless Excel users.macOS Sequoia is available, bringing iPhone Mirroring, Apple Intelligence, and more to Mac - macOS Sequoia, the latest version of the world’s most advanced desktop operating system, is available today as a free software update for Mac. macOS Sequoia brings exciting new features, including iPhone Mirroring, which expands Continuity by enabling access to and control of iPhone directly from macOS; big updates to Safari; a new Passwords app; and more. Starting next month, macOS Sequoia will introduce Apple Intelligence,1the personal intelligence system that combines the power of generative models with personal context to deliver intelligence that is incredibly useful and relevant while protecting users’ privacy and security.Notes on OpenAI’s new o1 chain-of-thought models - OpenAIreleased two major new preview modelstoday:o1-previewando1-mini(that mini one isnot a preview)—previously rumored as having the codename “strawberry”. There’s a lot to understand about these models—they’re not as simple as the next step up from GPT-4o, instead introducing some major trade-offs in terms of cost and performance in exchange for improved “reasoning” capabilities. Web Development TutorialAn excerpt from 'Django 5 by Example'By Antonio MeléCreating forms from modelsWe need to build a form to let users comment on blog posts. Remember that Django has two base classes that can be used to create forms:FormandModelForm. We used theFormclass to allow users to share posts by email. Now, we will useModelFormto take advantage of the existingCommentmodel and build a form dynamically for it.Edit theforms.pyfile of yourblogapplication and add the following lines:from .models import Commentclass CommentForm(forms.ModelForm):class Meta:model = Commentfields = ['name', 'email', 'body']To create a form from a model, we just indicate which model to build the form for in theMetaclass of the form. Django will introspect the model and build the corresponding form dynamically.Each model field type has a corresponding default form field type. The attributes of model fields are taken into account for form validation. By default, Django creates a form field for each field contained in the model. However, we can explicitly tell Django which fields to include in the form using thefieldsattribute or define which fields to exclude using theexcludeattribute. In theCommentFormform, we have explicitly included thename,email, andbodyfields. These are the only fields that will be included in the form.Read the 'Django 5 by Example' book now!What's Happening in Web Development?Your dose of the latest releases, news and happenings in the Web Development industry!LaravelTemPHPest PHP Extension for VSCode - TemPHPest is an extension for Visual Studio Code to improve writing PHP in VS Code. Created by Liam Hammett, this package adds rich PHP features that will enhance the experience tremendously while writing PHP.Chaperone, Defer, Cache::flexible, and more are now available in Laravel 11.23 - The Laravel team released v11.23 this week, with the Laracon US 2024 open-source updates likedefer(), concurrency, contextual container attritubes, and more.Ruby on RailsAdd Solid CableThis change starts to useSolid Cableas the default Action Cable adapter in production, configured as a separate queue database inconfig/database.yml. It keeps messages in a table and continuously polls for updates.Deprecate Benchmark.ms and add benchmark to the gemspecRuby plans to makebenchmarka bundled gem. This change sets up deprecation of Rails core extension in favour of the bundled gem for future.Deprecate unsigned_float and unsigned_decimal short-hand column methodsThis change deprecatesunsigned_floatandunsigned_decimalshort-hand column methods.As of MySQL 8.0.17, theUNSIGNEDattribute is deprecated for columns of typeFLOAT,DOUBLE, andDECIMAL. Consider using a simple CHECK constraint instead for such columns. More details can be foundhere.Allow BroadcastLogger to pass through kwargsSome Logger implementations may want extend the logging interface to provide optional information via keyword argument. This change enhancesBroadcastLoggerto allow the same.Fix travel_to to set usec 0 when with_usec is false and the given argument is String or DateTimeBefore this changetravel_todid not setusecto0depending on the argument (StringorDateTime). This PR fixes this behavior to make it uniform.Fix .left_outer_joins when multiple associations have the same childThis change fixes an issue where.left_outer_joinsused with multiple associations that have the same child association but different parents does not join all parents. Previously, using.left_outer_joinswith the same child association would only join one of the parents. After this fix it now correctly joins both parents.SwiftAnnouncing Swift 6 – Swift announced the general availability of Swift 6. This is a major new release that expands Swift to more platforms and domains. Many people know of Swift as a language for app development, with a million apps on the App Store. But Swift is great for more than just apps. Swift’s safety, speed, and approachability make it a great choice for many other use cases including libraries, internet-scale services, and the most performance-critical and secure code. Swift 6 scales even further through new low-level programming features, an embedded Swift language subset, expanded Linux and Windows support, new cross-platform APIs including the new Swift Testing library, and more.VueAnnouncing Vue 3.5 - The release of Vue 3.5 "Tengen Toppa Gurren Lagann" is here! This minor release contains no breaking changes and includes both internal improvements and useful new features. We will cover some highlights in this blog post - for a full list of changes and new features, please consultthe full changelog on GitHub.And that’s a wrap.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{line-height:0;font-size:75%}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 25611

Apurva Kadam
26 Sep 2024
10 min read
Save for later

WebDevPro #73: Open-source AI repositories, Important React Hooks, Chrome Extensions, New Features in CSS, FlowTracker, Learn Git Branching.

Apurva Kadam
26 Sep 2024
10 min read
Web development blogs, tutorials and resources inside!Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }Experience the easiest File API on the Internet!Add file uploads and retrieval in minutes so you can focus on building your app — because you’ve got better things to code than infrastructure.Try now!WebDevPro #73:Open-source AI repositories, Important React Hooks, Chrome Extensions, New Features in CSS, FlowTracker, Learn Git Branching.Hi ,Welcome to the web app development world with the 73rd edition of _webdevpro!In this edition we cover web development community discussions on:14 Case Studies: Master System Design in a Month8 must-know open-source repositories to build cool AI appsMastering React: A Guide to the Most Important React Hooks21 Chrome Extensions to Boost Your Productivity11 New Features and Functions Arriving in CSSDon't miss our repository of manually curated collection of Tailwind CSS resources for web developers.In our relatively new section captures internet jibber-jabber about the mobile ecosystem:Warning: macOS Sequoia 15 may bypass DNS encryptionFlowTrackerLearn Git BranchingAdze: Universal Logging for Modern JavaScriptBan warnings fly as users dare to probe the “thoughts” of OpenAI’s latest modelToday's news covers Laravel, Ruby on Rails, Soring.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email!If you liked this installment, fill in our survey below and win a free Packt PDF.Take the Survey Now!Thanks,Apurva KadamEditor-in-Chief, PacktGrow, Make a Difference, and Win! Participate in the Latest Developer Nation Survey!What changed in the way you code for 2024? What has happened in the tech world in the last months? Take this shorter version of the Developer Nation survey, learn about new tools, influence the future of development and share your insights with the world!Take the Survey!Web Development Community InsightsFellow Dev Discussions on the Internet.14 Case Studies: Master System Design in a Month - Are you looking tomaster system designin record time? The fastest way to accelerate your learning is by studying real-world architectures of companies that handle massive scale and complexity. We've curated 14 essential case studies that reveal the secrets behind some of the world's most efficient and scalable systems. Dive in, and in just one month—or even less—you'll significantly elevate your system design prowess.8 must-know open-source repositories to build cool AI apps - As someone building AI apps, I see a massive spike in user interest, and this is undoubtedly the best time to master building AI apps. So, I have compiled a list of 8 open-source repositories you can use now to build robust AI systems.Mastering React: A Guide to the Most Important React Hooks - React Hooks were added to React in version 16.8, and they’ve completely changed the way we write React apps. Before hooks, we had to use class components to manage state and lifecycle methods, which could make our code complicated, especially in larger apps. Hooks allow us to use functional components to handle things like state, side effects, and performance optimization more easily.21 Chrome Extensions to Boost Your Productivity - As software developers, we always seek ways to make our jobs easier and improve productivity. Chrome extensions are very useful tools when it comes to increasing efficiency and boosting the productivity. In this blog post, I will share some of the best developer Chrome extensions.11 New Features and Functions Arriving in CSS - On September 13, 2024, the CSS Working Group released thefirst Public Working Draft for the CSS Values and Units Module Level 5. It is an extension of theprevious levelthat includes some interesting additions. Things that were unimaginable not so long ago are making their way into the specs: random values, using attributes as values in any property, being able to use the order in calculations... It looks promising. Many of these features have a common denominator: they simplify the CSS code. This blog lists all the new changes.Web Dev ReposCheck this space for new repos, projects and tools each week! This week we bring you a collection of Tailwind UI Libraries, Components & Templates:📚 Tailkits- Curated Tailwind CSS components, templates, UI kits, resources, tools & more.📚STDF- Mobile web component library based on Svelte and Tailwind CSS.📚TWC - Lightweight library to create reusable React + Tailwind CSS components.📚Tremor- React library to build charts and dashboards with Tailwind CSS.📚Preline UI- Open-source Tailwind CSS components library for any needs.🧩TailBlocks- 60+ different ready to use Tailwind CSS blocks.🧩Tailwind Components- Community-driven Tailwind CSS component repository.Trending TitlesMastering PyTorchBuy now at $41.99$28.99Building Production-Grade Web Applications with SupabaseBuy now at $39.99 $27.99Mastering Python Design PatternsBuy now $31.99$21.99Internet Jibber-JabberRandom curious musings and interesting words about Web Dev on the Internet.Warning: macOS Sequoia 15 may bypass DNS encryption - While investigating a DNS-related issue on macOS 15 Sequoia, we discovered that some DNS requests—particularly those made via certain low-level legacy APIs—were not being received by our proxy! There appears to be a bug in macOS Sequoia causingsomerequests to bypass the installed DNS proxy and be sent unencrypted to the system’s default name server instead.FlowTracker - Track data flowing through Java programs, gain new understanding at a glimpse. FlowTracker is a Java agent that tracks how a program reads, manipulates, and writes data. By watching a program run, it can show what file and network I/O happened, but more importantly connecting its inputs and outputs to show where its output came from. This helps you understand what any Java program's output means and why it wrote it.Learn Git Branching - Interested in learning Git? Well, you've come to the right place! "Learn Git Branching" is the most visual and interactive way to learn Git on the web; you'll be challenged with exciting levels, given step-by-step demonstrations of powerful features, and maybe even have a bit of fun along the way.Adze: Universal Logging for Modern JavaScript - Modern JavaScript frameworks likeNextJS,NuxtJS, andSvelteKitcombine your "back-end" and "front-end" code in the same location.Adze is universalwhich means it can be executed on theserver side or the browser sidewithout any extra considerations. Use it anywhere!Ban warnings fly as users dare to probe the “thoughts” of OpenAI’s latest model - OpenAI truly does not want you to know what its latest AI model is "thinking." Since the companylaunchedits "Strawberry" AI model family last week, touting so-called reasoning abilities with o1-preview and o1-mini, OpenAI has been sending out warning emails and threats of bans to any user who tries to probe how the model works. Web Development TutorialAn excerpt from 'Django 5 by Example'By Antonio MeléCreating templates for the comment formWe will create a template for the comment form that we will use in two places:In the post detail template associated with thepost_detailview to let users publish comments.In the post comment template associated with thepost_commentview to display the form again if there are any form errors.We will create the form template and use the{% include %}template tag to include it in the two other templates.In thetemplates/blog/post/directory, create a newincludes/directory. Add a new file inside this directory and name itcomment_form.html.The file structure should look as follows:templates/blog/post/includes/comment_form.htmldetail.htmllist.htmlshare.htmlEdit the newblog/post/includes/comment_form.htmltemplate and add the following code:<h2>Add a new comment</h2><form action="{% url "blog:post_comment" post.id %}" method="post">{{ form.as_p }}{% csrf_token %}<p><input type="submit" value="Add comment"></p></form>In this template, we build theactionURL of the HTML<form>element dynamically using the{% url %}template tag. We build the URL of thepost_commentview that will process the form. We display the form rendered in paragraphs and we include{% csrf_token %}for CSRF protection because this form will be submitted with thePOSTmethod.Read the 'Django 5 by Example' book now!What's Happening in Web Development?Your dose of the latest releases, news and happenings in the Web Development industry!LaravelFetch PHP is a Lightweight HTTP Library Inspired by JavaScript's fetch()nk - Fetch PHPis a lightweight HTTP library inspired by JavaScript's fetch, bringing simplicity and flexibility to PHP HTTP requests. It uses the Guzzle client behind the scenes, offering synchronous and asynchronous requests with an easy-to-use API.Validate Console Command Input With the Command Validator Package - The Command Validator package byAndrea Marco Sartorimakes validating the input of console commands a cinch using Laravel's beloved Validator. All the Laravel Validator rules you know and love work with this package, along with any custom validation rules. This package integrates with your application's console commands using the providedValidatesInputtrait, which includes an abstractrules()method.Laravel 11.24 Released - The Laravel team released v11.24 this week, with new shorthands for Process fakes, anullOnUpdate()method for foreign key definitions, support for retrying multiple batch IDs when retrying jobs, and more. A quick note that as of the time of writing, auto-discovery of console commands in theapp/Console/Commandspath was broken in v11.24.0. This issue was quickly patched inv11.24.1.Ruby on RailsRails World 2024 is next weekSafe travels to everyone heading to Toronto! All sessions will be recorded and published on theRails YouTube channel, so subscribe to get notified.[RF Guides] Active Record ValidationsThe Foundation is still hard at work on updating the guides, this time they have made a pass through the Active Record Validations guide. Give it a look and help them spot any issues!Add ability to use multiple rate limits per controllerWith this PR, you can now add multiplerate_limitdefinitions in your controller.Remove Sucker Punch Active Job adapterSucker Punch existed before ActiveJob, but ultimately uses similar code to the async adapter under the covers. This adapter will be removed in a future release of Rails.Do not include redis by default in dev containerIn Rails 8, newly generated apps will use the Solid gems by default, which do not depend on Redis.Add if_not_exists option to add_enum_valueThis PR adds support to use the PostgreSQL optionIF NOT EXISTSwhen adding enum values viaadd_enum_value.Include options when instrumenting ActiveSupport::Cache::Store deleteNowcache_delete.active_supportandcache_delete_multi.active_supportevents will include the options passed to the delete method.Spring Spring Shell 3.2.8, 3.3.3 and 3.4.0-M2 are now available - Spring Shell3.2.8,3.3.3and3.4.0-M2has been released and are now available from Maven Central andMilestone Reporespectively.Spring Modulith 1.3 M3, 1.2.4, and 1.1.9 released - Spring Modulith 1.3 M3, 1.2.4, and 1.1.9 is here. While the latter two ship the usual bugfixes and service release bugfix upgrades, I am particularly delighted about the milestone releases as it contains two major community contributions.Spring Boot 3.4.0-M3 available now - Spring Boot3.4.0-M3has been released and is now available fromhttps://repo.spring.io/milestone. This release includes111 enhancements, documentation improvements, dependency upgrades, and bug fixes.And that’s a wrap.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{line-height:0;font-size:75%}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 23948

Kinnari Chohan
12 May 2025
10 min read
Save for later

WebDevPro #90: GSAP Goes Free, PostgreSQL 18 Beta Launches, Node 24 Overhauls Windows Support

Kinnari Chohan
12 May 2025
10 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #90: GSAP Goes Free, PostgreSQL 18 Beta Launches, Node 24 Overhauls Windows Support 🌍🔍 Crafting the Web: Tips, Tools, and Trends for Developers New developer products provide a glimpse into the future of app building on HubSpot, including deeper extensibility, flexible UI, modern development tools, and more HubSpot’s AI-powered ecosystem presents a global opportunity projected to reach $10.2 billion by 2028. To fuel that growth potential, we are opening up our platform more –introducing an expanded set of APIs, customizable app UI, and tools that better support a unified data strategy. Start Building Today Hi , This week’s lineup brings practical upgrades across the board. GSAP is now free for commercial use, PostgreSQL 18 Beta 1 introduces performance boosts and JSON improvements, and Node.js 24 drops MSVC support in favor of LLVM. Figma launches new tools that blur the line between design and deployment, and OpenSearch 3.0 enhances vector performance for modern search workloads. Here’s what’s catching our attention: 💡 OpenAI Acquires Windsurf – A strategic move into agentic AI, bolstering autonomous decision-making capabilities 🎞️ GSAP Goes Free – One of the top JS animation libraries is now fully free for commercial use 🐘 PostgreSQL 18 Beta – MERGE boosts, JSON_TABLE support, and logical replication upgrades 🛠️ Node.js 24 Released – Drops MSVC, adds LLVM/Clang and new built-in features 🎨 Figma Sites & Make – AI-powered site builder and coding assistant mark Figma’s big bet on AI-led workflows 🧭 OpenSearch 3.0 – Vector database performance upgrades and native embedding model support We’ve also dropped a new workstation gear spotlight, rounded up expert insights on TypeScript, Rails, and microservices, and slipped in a dev tip to keep you from waging war with your browser cache. Let’s dig in! Want to be featured in WebDevPro? Share your tips or takes—we’re all ears! Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. Latest news: what's new in web development? 🧑‍💻 From licensing changes to backend shifts, this week’s news covers updates that can reshape your workflow, whether you're building interfaces, managing data, or optimizing performance. 🎞️ GSAP Goes Free: Big news for frontend animation: GSAP (GreenSock Animation Platform) is now completely free for commercial use. It’s one of the most powerful, performance-friendly JS animation libraries—and now there’s no licensing friction. 🔍 Anthropic Launches Web Search API: Claude just got a browser. Anthropic has released a Web Search API that lets Claude models access up-to-date web content, positioning it as a direct rival to ChatGPT’s Browse and Perplexity AI. Expect tighter integrations and more real-time reasoning in future Claude-powered tools. 🛠️ Node.js 24 Drops MSVC Support: Node 24 is live and it’s cutting ties with Microsoft Visual C++ Build Tools (MSVC). Windows devs will now use LLVM/Clang by default. Also included: a built-in navigator object and experimental watch mode enhancements. 🎨 Figma Launches AI Site Builder: Figma’s new Sites tool lets users generate full websites from designs, while Make uses Claude 3.7 to turn prompts into working code. It’s a big step toward design-to-deploy, all inside Figma. 🐘 PostgreSQL 18 Beta Lands: PostgreSQL 18 Beta 1 is out, and it’s already turning heads. Highlights include MERGE performance boosts, JSON_TABLE support, authentication changes, and a fresh take on logical replication. Now’s the time to test those migrations. 🧭 OpenSearch 3.0 Dials Up Vector DB Performance: OpenSearch 3.0 is here with major improvements to vector search performance and native support for text embedding models. Devs building AI-powered search tools now have a serious open-source contender. 🧠 OpenAI Acquires Windsurf: In its latest talent-and-tech grab, OpenAI has acquired Windsurf, a stealthy AI agent startup focused on autonomous decision-making. It’s a signal that OpenAI is gearing up for more advanced agentic behavior in future models. These 4 bestsellers are worth $149 on their own. Get them plus 18 more top C# and .NET books in our Mega Bundle for just $18! Expert corner: what's the web community talking about?🎙 The dev community is digging into real-world patterns and pain points, smart migration paths, overengineered microservices, and better AI agent design. We’ve rounded up the sharpest takes, just for you. 🧩 Microservices Are Overkill (Until They’re Not): Thinking of going microservices too early? You’re not alone. This sharp teardown from Nexo argues that most startups hurt themselves by going distributed before they’ve nailed product-market fit. Focus on fast delivery first, modularity can come later. 🤖 What a Year of AI Agents Taught Us: SourceBot shares battle-won lessons from a year of building autonomous agents. TL;DR: Most agents fail without proper environment shaping, evaluation loops, and resource awareness. Bonus: great takeaways for devs building tool-using AI systems. 🛡️ Clean Authorization in Rails with Pundit: Looking to implement authorization in your Ruby on Rails app without making a mess? This DZone guide to Pundit shows how to separate business logic cleanly and keep things scalable as your app grows. 🔄 JavaScript to TypeScript, the Right Way: Blindly converting JS to TS often leads to friction. This Infoworld piece offers a sensible migration strategy: start with strict JSDoc, gradually layer in types, and reserve full conversions for stable code. 🧠 Reasoning with Model Context Protocols: Want to improve LLM context management across tasks and tools? This deep dive into Model Context Protocols (MCP) explores how Azure and open systems use structured memory and signals to keep AI agents grounded and goal-aligned. Ready to "Vibe Code" the right way? Don’t miss your shot to learn the AI coding workflow in just 3 hours. Register your interest now, and we'll email you as soon as booking for our event goes live! Desk it like it’s hot 🖥️ In this new section, we’re spotlighting the tech, tools, and accessories that turn a decent dev setup into a dialed-in command center. Whether you’re remote full-time or just upgrading your side-project space, these picks bring serious signal. Monitor: Dell UltraSharp U2723QE: A 27” 4K display with crisp resolution, accurate color, and a built-in USB-C hub to tame your cable chaos. Keyboard: Keychron K8 ProWireless, hot-swappable, and endlessly customizable. Great for devs who want mechanical feel with modern flexibility. Headphones: Sony WH-1000XM5Class-leading noise cancellation and buttery-soft comfort—perfect for deep work sessions or noisy coworking zones. Exclusive expert spotlight: From code to system design 🎤 As AI tools take over boilerplate generation, developers are being called to do more than just ship syntax. They’re being asked to understand architecture, supervise AI output, and design systems that scale. In this issue, Shalini Goyal shares why foundational system thinking is now a must-have, especially in AI-assisted workflows. It’s no longer just about how fast you can write code, but how well you can guide it, fit it into the bigger picture, and spot where things could go wrong. To dive deeper into that mindset, we’re also featuring Spring System Design in Practice, your playbook for designing robust, secure, high-performance web apps with Spring. Whether you're working with microservices or building from scratch, this book lays down the architectural thinking you need to stay relevant. 🎬 Bonus:We’ve dropped an extra clip from the conversation on X. Check it out and follow WebDevPro for more expert takes. Packt:You also mentioned something interesting, about how important it is becoming now to have system design imbibed right from the beginning. And it's not something anymore, you know, for someone at a higher position only to inculcate. Do you also see this change happening more rapidly now with the growth of AI and how AI is being used in development workflows, whereby you know you can probably get AI to write your own code, but what does that make you then? You need to start leveling up and starting to think about design a bit more rather than just writing code. Shalini Goyal: So with the greater involvement of AI and be it any company, any project, I think we are not looking for people who know the syntax really well because AI can help you with that. So the demand is not for the people who can write the code very quickly. The demand is actually for the people who have a strong foundation with any kind of programming language, with any kind of technical skill we are talking about here, and can actually give a supervision to the AI. Rather than, you know, just writing the boilerplate code or starting from scratch, they can use the AI to build something. And they know when the AI is going wrong, so they can provide supervision on top of it. And to add to it, definitely it's required that our engineers or the developers community the web developers or you know anybody in on that side they are, you know, able to look at a high level picture, can look at the complete architecture, relate to it, and ensure that their piece of code or their piece of work actually fits in well. It's adding value rather than saying just, you know, my piece of work works, is standalone or, you know, this is fine. They need to know the bigger picture. They need to know the whole architecture and how it's actually getting aligned. So the responsibility in that way is increasing on everyone's shoulders. And, you know, previously we used to look at, many companies used to look at the candidates from, “Can you write the syntax?”, “Do you know the syntax?”, “How fast can you write code?”, and all that. I think we're going away from that gradually and slowly, or maybe, um you know, very fast, you can say. AI in the spotlight 🔦 ⏳ AI and Social Are Killing the Click A new Enders Analysis report confirms what many devs suspected: the open web is losing visibility fast. As AI models like ChatGPT, Gemini, and Claude serve up full answers in search results, users are skipping websites altogether. Publishers are feeling the pain—nearly 50% have seen a drop in traffic—and TikTok is now a go-to for news and how-tos. 👀 SEO? It’s no longer enough. 🔍 The new game: Generative Engine Optimization (GEO) 📱 And platform-native content is winning the attention war. For devs, this isn’t just a traffic dip—it’s a signal to rethink how we design for discovery in an AI-first world. Developer tip of the week 💡 Avoid Hard Refresh Dependency in Dev Mode If you find yourself constantly hitting Cmd+Shift+R (or Ctrl+F5) during development, there’s likely a caching misstep in your setup. Instead: ✅ Use cache-busting headers (Cache-Control: no-store) for dev servers ✅ Add hashed filenames for static assets in production ✅ Automate reloads with tools like Vite, Parcel, or Webpack HMR This simple shift saves time, reduces bugs, and keeps you from chasing phantom layout glitches caused by stale assets. And that's a wrap 🎬 That’s it for this issue! Have something to share: a tool, setup, or community insight? Hit reply or send it our way. We love featuring what real devs are building, breaking, and learning. Until next week! Cheers! Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 21793

Apurva Kadam
12 Sep 2024
9 min read
Save for later

WebDevPro #71: Frontend Dev + Data Structures & Algorithms, GitHub Repos, Frontend Apps 10x Faster, Chrome extensions, EarthKart, Google Workspace mandates OAuth.

Apurva Kadam
12 Sep 2024
9 min read
Web development blogs, tutorials and resources inside!Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }Get your Ticket Now!WebDevPro #71: Frontend Dev + Data Structures & Algorithms, GitHub Repos, Frontend Apps 10x Faster, Chrome extensions, EarthKart, Google Workspace mandates OAuth.Hi ,Welcome to the web app development world with the 71st edition of _webdevpro!In this edition we cover web development community discussions on:Frontend Dev + Data Structures & AlgorithmsGitHub Repos Essential for Every React DeveloperHow to Build Frontend Apps 10x Faster10 Chrome extension to make you 10x web developerProvide context to GitHub Copilot ChatDon't miss our repository of manually curated collection of Tailwind CSS resources for web developers.In our relatively new section captures internet jibber-jabber about the mobile ecosystem:A memory layer for personalised AIIsmyblueyourblue?DawarichEarthKart: Google Maps Driving SimulatorDeadline looms: Google Workspace mandates OAuth by September 30Today's news covers Laravel, Spring and Svelte.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email!If you liked this installment, fill in our survey below and win a free Packt PDF.Take the Survey Now!Thanks,Apurva KadamEditor-in-Chief, PacktWeb Dev Community SpeakWhat are Web developers discussing? What are the latest tips and tricks? Shortcuts and experiments? Cool tutorials? Releases and updates? Find it all out here.Frontend Dev + Data Structures & Algorithms - How DSA Can Power Your React App - Frontend focused interviews often don’t care about DSA at all. And for those of us that remember studying DSA at school/college, all the examples felt purely algorithmic (for good reason), but there were hardly any examples or guidance on how the products we use every day leverage this concept. Here are a few data structures that you can leverage in your React app today!GitHub Repos Essential for Every React Developer - React is one of the most used frameworks for building frontend today. With many frameworks of React, more options are taking React to the next level. So, learning React is a must when learning web development especially when you are involved in frontend development. Last year’sStackOverflowsurvey shows that React is the most used web framework for building frontend. This blog looks into some of the essential React-based GitHub repositories that you can look into to learn and improve in React.How to Build Frontend Apps 10x Faster - We have all been there when the backend isn't ready with APIs so the frontend developers manually hardcode the response. It's time consuming and comes with a lot of indirect problems. This article explores how Requestly can help you build frontend applications at least 10x faster by reducing dependency on backend developers.10 Chrome extension to make you 10x web developer - In webdevelopment, having the right tools at your disposal can make a significant difference in your workflow.Chrome extensions have become essential for developers and designers, as they offer everything from debugging aids to design inspiration directly in your browser.Here's a selection of top Chrome extensions that every web developer and designer should consider adding to their toolkit.Provide context to GitHub Copilot Chat - Context is key. This is true across all forms of communication, including with generative AI assistants like GitHub Copilot. When you're interacting with GitHub Copilot Chat, there's numerous features available to you to help point Copilot in the right direction, to help it understand what you're looking for. In turn, the suggestions you'll receive will improve! Let's walk through some of the most powerful techniques to help you get the most out of the tool.Web Dev ReposCheck this space for new repos, projects and tools each week! This week we bring you a collection of Tailwind UI Libraries, Components & Templates:Tailwind UI- Component library made with Tailwind CSS.Headless UI- Completely unstyled, fully accessible UI components.Catalyst- Beautiful, accessible application UI kit for React.VueTailwind- Vue.js UI library using Tailwind CSS.Flowbite- Open-source component library built with Tailwind CSS.a17t- Atomic design toolkit built to extend Tailwind CSS.tails-ui- React UI library using Tailwind CSS.tails- Hand-crafted templates and components using Tailwind CSS.Internet Jibber-JabberRandom curious musings and interesting words about Mobile Dev on the Internet.A memory layer for personalised AI -Mem0(pronounced as "mem-zero") enhances AI assistants and agents with an intelligent memory layer, enabling personalized AI interactions. Mem0 remembers user preferences, adapts to individual needs, and continuously improves over time, making it ideal for customer support chatbots, AI assistants, and autonomous systems.Ismyblueyourblue? - People have different names for the colors they see.Language can affect how we memorize and name colors. This is a color naming test designed to measure your personal blue-green boundary. Color perception is tricky to measure–vision scientists use specialized calibrated equipment to color perception. Graphic designers use physical color cards, such as thosemade by Pantone, so that they can communicate colors unambiguously. Here we use your monitor or phone to test how you categorize colors, which is far from perfect, since your calibration may differ from mine.Dawarich - Dawarich is a self-hosted web application to replace Google Timeline (aka Google Location History). It allows you to import your location history from Google Maps Timeline and Owntracks, view it on a map and see some statistics, such as the number of countries and cities visited, and distance traveled.EarthKart: Google Maps Driving Simulator - You can Drive on Google Maps! Discover the thrill of racing through the world's most iconic locations right from your device! EarthKart is a real-world driving simulator that combines the speed and excitement of kart racing with the revolutionary integration of Google Maps. Experience the ultimate Google Earth driving simulator as you traverse through the urban jungles of New York, glide along the Great Wall of China, or speed through the winding alleys of Marrakech. The entire Earth is your racetrack in this drive on Google Maps Driving Game!Deadline looms: Google Workspace mandates OAuth by September 30 - Google Workspace administrators, consider yourselves on notice: In less than a month, many third-party apps (mail, calendar, etc.) will stop connecting to Workspace accounts. The change, effective September 30, will see Google disable access to "less secure apps," or LSAs, for all Google Workspace accounts. Those who haven't checked their Workspace Admin consoles recently will notice that LSA settings have already been removed, so there's no avoiding this change. Web Development TutorialAn excerpt from 'Django 5 by Example'By Antonio MeléCreating forms with DjangoLet’s start by building the form to share posts. Django has a built-in forms framework that allows you to create forms easily. The forms framework makes it simple to define the fields of the form, specify how they have to be displayed, and indicate how they have to validate input data. The Django forms framework offers a flexible way to render forms in HTML and handle data.Django comes with two base classes to build forms:1. Form: This allows you to build standard forms by defining fields and validations.2. ModelForm: This allows you to build forms tied to model instances. It provides all the functionalities of the baseFormclass, but form fields can be explicitly declared, or automatically generated, from model fields. The form can be used to create or edit model instances.First, create aforms.pyfile inside the directory of yourblogapplication and add the following code to it:from django import formsclass EmailPostForm(forms.Form):name = forms.CharField(max_length=25)email = forms.EmailField()to = forms.EmailField()comments = forms.CharField(required=False,widget=forms.Textarea)We have defined our first Django form. TheEmailPostFormform inherits from the baseForm class. We use different field types to validate data accordingly...read more.Read the 'Django 5 by Example' book now!What's Happening in Web Development?Your dose of the latest releases, news and happenings in the Web Development industry!LaravelUnoPim is a Product Information Management System Built With Laravel - UnoPim is an open-source Product Information Management (PIM) system built on the Laravel framework. You can use it to organize, manage, and enrich product information in one central place.SpringSpring Tools 4.25.0 released - The 4.25.0 release of the Spring Tools 4 for Visual Studio Code, Eclipse and Theia. Important highlights include:(Spring Boot)Code lenses added to explain SPEL expressions and AOP annotations with Copilot (VSCode only)(Spring Boot)Symbols, content-assist, and navigation support added for@Named,@Resource,@Inject, and@ConditionalOnResource(Spring Boot)Syntax highlighting and validation for CRON expressions inside@Scheduledannotation (VSCode only)(Spring Boot)Navigating to definition for some elements of Data Queries embedded into@QueryannotationsSvelteLibraries, Tools & ComponentsThis gooey tooltipis fluid and satisfyingselect-kitis a one-stop solution for all your select/combobox/autocomplete needsssgoiis a page transition library thats support animated page transition with every browser - including Safari@svelte-put/preactionis a proof-of-concept Svelte preprocessor that allows usage of "preaction" - an extension to Svelte action with the ability to add static attributes on server-sidesvelte-standaloneis a series of configurations that aims to process any svelte widget to a single standalone javascript filesvelte-cartesianis a single component that helps with rendering all prop combinations of a provided component for visual regression testingTrending Titles50 Algorithms Every Programmer Should KnowBuy now at $39.99$27.98Modern Generative AI with ChatGPT and OpenAI ModelsBuy now at $39.99 $27.98Learn React with TypeScriptBuy now $35.99$24.99And that’s a wrap.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{line-height:0;font-size:75%}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 14068

Apurva Kadam
06 Sep 2024
12 min read
Save for later

WebDevPro #70: Web Storage, Frontend Resources V2, React Frameworks Comparison, Window Size in Pure CSS, Claude for Enterprise, TinyGPT.

Apurva Kadam
06 Sep 2024
12 min read
Web development blogs, tutorials and resources inside!Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }Developing for iOS? Setapp's 2024 report on the state of the iOS market in the EU is a must-seeHow do users in the EU find apps? What's the main source of information about new apps? Would users install your app from a third-party app marketplace?Set yourself up for success with these and more valuable marketing insights in Setapp Mobile's report iOS Market Insights for EU.Get Insights FreeWebDevPro #70: Web Storage,Frontend Resources V2, React FrameworksComparison, Window Size in Pure CSS, Claude for Enterprise, TinyGPT.Hi ,Welcome to the web app development world with the 70th edition of _webdevpro!In this edition we cover web development community discussions on:Understanding Web Storage: LocalStorage, SessionStorage, and CookiesFrontend Resources V29 open-source gems to become the ultimate developerComparing The Top React FrameworksGet Window Size in Pure CSSDon't miss our repository of manually curated collection of Tailwind CSS resources for web developers.In our relatively new section captures internet jibber-jabber about the mobile ecosystem:CSS @property and the New StyleAnnouncing The Kagi AssistantClaude for EnterpriseBuilding LLMs from the Ground Up: A 3-hour Coding WorkshopTinyGPTThe web's clipboard, and how it stores data of different typesMajor book publishers defeat Internet Archive appeal over digital scanningToday's news covers Angular, Django, Laravel, Ruby on Rails and Svelte.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email!If you liked this installment, fill in our survey below and win a free Packt PDF.Take the Survey Now!Thanks,Apurva KadamEditor-in-Chief, PacktWeb Dev Community SpeakWhat are Web developers discussing? What are the latest tips and tricks? Shortcuts and experiments? Cool tutorials? Releases and updates? Find it all out here.Understanding Web Storage: LocalStorage, SessionStorage, and Cookies - In modern web development, managing data on the client side has become an essential skill. Developers often rely on localStorage, sessionStorage, and cookies to store data in the user’s browser. While these three mechanisms serve similar purposes, they have distinct differences in terms of capacity, persistence, and use cases. In this blog, we'll explore these differences, with examples, to help you better understand when and how to use each one.Frontend Resources V2 - This collection is packed with a wide range of tools that cover everything from building stunning user interfaces to fine-tuning performance and much more. These resources have been invaluable. Hoping they’ll be just as useful for you.9 open-source gems to become the ultimate developer - For me, AI is everywhere.But sometimes, it's hard to understand what a fun project is and what project you can use for your website. I have curated a list of 9 open-source repositories you can implement into your repository tomorrow!Comparing The Top React Frameworks - When learning React, we all start with the CRA (create-react-app) library. It is a good place to begin the journey of React but using it for building a project today is not a good idea. There are many reasons to switch from traditional CRA to the modern framework of React, which can offer many more features. There are various alternatives based on your requirements such as SSR, performance, etc. In this blog, we are going to investigate some of the top alternatives that you can use instead of CRA.Get Window Size in Pure CSS - We all know that CSS used to be the most challenging part of web development. However, it has become even harder nowadays. You wouldn't believe it, but now CSS can define properties, do the math, and even directly get the window size! This article will show you how to do it.Web Dev ReposCheck this space for new repos, projects and tools each week! This week we bring you a collection of Tailwind CSS tools:Tailwind Grid Generator- Drag and drop Tailwind CSS grid generator.Tailwind Box Shadows Generator- Box Shadows generator.Windframe- Tailwind CSS drag and drop builder to rapidly build and prototype websites.Static Tailwind- The most used Tailwind classes, precompiled, with no build step.Design GUI- AI-powered Chrome extension for managing colors in daisyUI and shadcn/ui.Internet Jibber-JabberRandom curious musings and interesting words about Mobile Dev on the Internet.CSS @property and the New Style - The@propertyat-rule recently gained support across all modern browsers, unlocking the ability to explicitly define a syntax, initial value, and inheritance for CSS custom properties. It seems like forever ago that CSS Houdini and itsCSS Properties and Values APIwere initially introduced. The ensuing demo explores what's possible in the next generation of CSS.Announcing The Kagi Assistant - Kagihas been thoughtfully integrating AI into our search experience, creating a smarter, faster, and more intuitive search. This includesQuick Answerwhich delivers knowledge instantly for many searches (can be activated by appending ? to the end of your searches),Summarize Pagefor the quick highlights of a web page, and even the ability toask questions about a web pagein your search results. And all of these features are on-demand and ready when you need them. Today we’re excited to unveil the Assistant by Kagi. A user-friendly Assistant that has everything you want and none of the things you don’t (such as user data harvesting, ads & tracking). Major features included in this blog.Claude for Enterprise - TheClaude Enterprise planto help organizations securely collaborate with Claude using internal knowledge is here. Teams with more context do better work. The Claude Enterprise plan offers an expanded 500K context window, more usage capacity, and a native GitHub integration so you can work on entire codebases with Claude. It also includes enterprise-grade security features—like SSO, role-based permissions, and admin tooling—that help protect your data and team.Building LLMs from the Ground Up: A 3-hour Coding Workshop - If you’d like to spend a few hours this weekend to dive into Large Language Models (LLMs) and understand how they work, I've prepared a 3-hour coding workshop presentation on implementing, training, and using LLMs.TinyGPT - TinyGPT is a minimalistic library for implementing, training, and performing inference on GPT models from scratch in Python, with no external dependencies. Inspired byNanoGPT,Tinygrad,Pytorch, andMLX, TinyGPT aims to be as educational as possible, avoiding complex optimizations that might obscure the underlying concepts.The web's clipboard, and how it stores data of different types - If you've been using computers for a while, you probably know that the clipboard can store multiple types of data (images, rich text content, files, and so on). As a software developer, it started frustrating me that I didn't have a good understanding of how the clipboard stores and organizes data of different types. I recently decided to unveil the mystery that is the clipboard and wrote this post using my learnings. We'll focus on the web clipboard and its APIs, though we'll also touch on how it interacts with operating system clipboards.Major book publishers defeat Internet Archive appeal over digital scanning - A U.S. appeals court sided with four major book publishers that accused the nonprofit Internet Archive of illegally scanning copyrighted works and lending them to the public online for free and without permission. The 2nd U.S. Circuit Court of Appeals in Manhattan agreed with Hachette Book Group, HarperCollins Publishers, John Wiley & Sons and Penguin Random House that the archive's "large scale" copying and distribution of entire books did not amount to "fair use." Web Development TutorialAn excerpt from 'Django 5 by Example'By Antonio MeléUsing a class-based view to list postsTo understand how to write class-based views, we will create a new class-based view that is equivalent to thepost_listview. We will create a class that will inherit from the genericListViewview offered by Django.ListViewallows you to list any type of object.Edit theviews.pyfile of theblogapplication and add the following code to it:from django.views.generic import ListView class PostListView(ListView): """ Alternative post list view """ queryset = Post.published.all() context_object_name = 'posts' paginate_by = 3 template_name = 'blog/post/list.html'ThePostListViewview is analogous to thepost_listview we built previously. We have implemented a class-based view that inherits from theListViewclass. We have defined a view with the following attributes:We usequerysetto use a custom QuerySet instead of retrieving all objects. Instead of defining aquerysetattribute, we could have specifiedmodel = Postand Django would have built the genericPost.objects.all()QuerySet for us.We use the context variablepostsfor the query results. The default variable isobject_listif you don’t specify anycontext_object_name.We define the pagination of results withpaginate_by, returning three objects per page.We use a custom template to render the page withtemplate_name. If you don’t set a default template,ListViewwill useblog/post_list.htmlby default.Now, edit theurls.pyfile of theblogapplication, comment the precedingpost_listURL pattern, and add a new URL pattern using thePostListView class.Read the 'Django 5 by Example' book now!What's Happening in Web Development?Your dose of the latest releases, news and happenings in the Web Development industry!AngularThe future is standalone! - Angular v19 will makestandalone: truethe default for components, directives, and pipes. In v14 we introduced a developer preview“standalone” feature, which made it possible for the first time to build an application that didn’t rely on NgModules. Since then, standalone has been stabilized, and has become the recommended way to write Angular code by the Angular team. The CLI generates components withstandalone: trueby default, and the Angular docs teach standalone first to all new Angular developers.DjangoDjango security releases issued: 5.1.1, 5.0.9, and 4.2.16 - In accordance withour security release policy, the Django team is issuing releases forDjango 5.1.1,Django 5.0.9, andDjango 4.2.16. CVE-2024-45230: Potential denial-of-service vulnerability indjango.utils.html.urlize(). urlizeandurlizetruncwere subject to a potential denial-of-service attack via very large inputs with a specific sequence of characters.LaravelChaperone Eloquent Models in Laravel 11.22 - The Laravel team released v11.22 this week, with thechaperone()Eloquent method for inverse relations, support for passing backed Enums to Queuable methods, the ability to pass backed Enums to route->name()and->domain()methods, and more.PostgreSQLPostgreSQL 17 RC1 Released! - The PostgreSQL Global Development Group announces that the first release candidate of PostgreSQL 17 is now available for download. As a release candidate, PostgreSQL 17 RC 1 will be mostly identical to the initial release of PostgreSQL 17, though some more fixes may be applied prior to the general availability of PostgreSQL 17.Ruby on RailsAdd Solid CacheSolid Cache will be the new default caching backend for production deployments out of the box in Rails 8.Add Solid QueueConfigure Solid Queue as the default Active Job backend alongside Solid Cache. Both can be skipped with--skip-solid.Allow registering test directories for code statisticsMake it easier for third party gems, to register test directories.Silence healthcheck requests from the logAddRails::Rack::SilenceRequestmiddleware and use it viaconfig.silence_healthcheck_path = pathto silence requests to “/up”. This prevents the Kamal-required healthchecks from clogging up the production logs.Fix authentication generator double signaturePreviously the session id stored in the cookies was signed twice: withcookies.signedandsession.signed_id.Update TimeWithZone inspect to match Ruby 1.9+ ISO 8601 formatThis updatesTimeWithZone#inspectto match the ISO 8601 style time which Ruby has used forTime#inspectsince 1.9+. This makes TimeWithZone match Time’s formatting except for the precision in the timestamp and including the zone’s name. This only impacts#inspectmethod, as#to_shad already been updated to use the new ISO 8601 style formatting.Update Rails Routing GuideReviewed version can be read onEdge Guides.Update Active Record Associations GuideReviewed version can be read onEdge Guides.SvelteWhat's new in Svelte and Language Tools$state.frozenhas been replaced with$state.raw(5.0.0-next.218,Docs,#12808)$state.ishas been removed. RIP, little guy (#12916)svelte:optionsnow lets you set thecss: "inject"compiler option on a per-component basis (5.0.0-next.209,#12660)<svelte:component>is now unnecessary in runes mode and therefore is deprecated (5.0.0-next.203/217,#12646and#12694):globalis now allowed in more places - making it easier to use in<style>tags and fixing issues with Tailwind's@apply(5.0.0-next.199,Docs,#12560)Svelte's typescript definition generator that comes with@sveltejs/packagewill now warn when its diagnostics detect that ad.tsfile was not generated (svelte2tsx@0.7.14,#2428)You can now specify a tsconfig inemitDts- helpful when working in a monorepo (svelte2tsx@0.7.16,#2454)VueJSAnnouncing Vue 3.5 - Today we are excited to announce the release of Vue 3.5 "Tengen Toppa Gurren Lagann"! This minor release contains no breaking changes and includes both internal improvements and useful new features. We will cover some highlights in this blog post - for a full list of changes and new features, please consultthe full changelog on GitHub.Trending TitlesBuilding LLM Powered Applications$39.99$27.98CompTIA Security+ SY0-701 Certification GuidePrint $44.99Django 5 By Example$39.99 $27.98And that’s a wrap.P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{line-height:0;font-size:75%}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 9675

Kinnari Chohan
19 May 2025
10 min read
Save for later

WebDevPro #91: Agentic AI, Dev Workflow Shifts, and What’s Breaking in 2025

Kinnari Chohan
19 May 2025
10 min read
Crafting the Web: Tips, Tools, and Trends for DevelopersAdvertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }WebDevPro #91: Agentic AI, Dev Workflow Shifts, and What’s Breaking in 2025 🌍🔍Crafting the Web: Tips, Tools, and Trends for DevelopersHi ,This week’s lineup brings sharp signals from across the stack. DeepMind’s new coding agent is raising the bar on performance-first AI, Databricks and Neon team up for frictionless serverless SQL, and OpenAI just relaunched Codex to supercharge your IDE. Rails expert Chris Oliver calls out complexity as the real challenge in modern development, and we’ve got a hands-on pick for mastering React Hooks in production.Here’s what’s catching our attention:🧠 AlphaEvolve by DeepMind – A Gemini-powered coding agent tuned for performance-first problem solving💻 Databricks + Neon – Run transactional SQL in your lakehouse with no infra setup🤖 OpenAI Codex Returns – Relaunched to power multi-file reasoning and smarter IDE integration🎤Chris Oliver on Rails & Dev Complexity – Why it’s not about frameworks, it’s about shipping📚 Learn React Hooks – A practical guide to Hooks, state machines, and scalable UI patternsWe’ve also rounded up the future of “vibe coding,” plus dropped a dev tip to help you scale without the server sprawl.Want to be featured in WebDevPro? Share your tips or takes—we’re all ears!Advertise with usInterested in reaching our audience? Reply to this email or write to kinnaric@packt.com.Learn more about our sponsorship opportunities here.Latest news: what's new in web development? 🧑‍💻 From strategic layoffs to agentic AI and language evolution, this week’s news cuts to the core of where web and software development is heading. These updates aren’t just buzz—they’re shaping what you ship and how you build.🧠 DeepMind’s AlphaEvolve Reinvents Competitive Coding:AlphaEvolve is DeepMind’s new coding agent built on Gemini 1.5 Pro and trained on algorithmic benchmarks. It doesn’t just autocomplete—it designs and refines code with the goal of outperforming human solutions. Early demos suggest it's tuned for performance-first problem solving, not just syntax completion.💻 Databricks Brings Serverless SQL with Neon:Databricks has teamed up with Neon to integrate serverless Postgres into its lakehouse ecosystem. This means developers can now run transactional SQL workloads with no infrastructure setup, directly within their data workflows. It’s a move toward unifying analytical and operational data access.🌊 Windsurf Launches Custom AI Models for Dev Flow:Vibe coding startup Windsurf is going beyond wrappers and launching its own LLMs, built in-house for fast, fluid dev experiences. By training models specifically for software workflows, it aims to cut friction and bring more context-awareness to AI coding.📉 Microsoft Leans on AI While Letting Go of Devs:Microsoft confirmed AI now writes up to 30% of its internal codebase—at the same time as layoffs hit engineering teams hardest in its home state. It’s a clear signal that AI isn’t just accelerating dev cycles, it’s reshaping how teams are staffed.🛠️ OpenAI Relaunches Codex to Power AI-Driven Dev Workflows: OpenAI’s newest iteration of Codex is built for real coding use cases—autocomplete, multi-file reasoning, and tighter IDE integration. It’s designed to go beyond text generation and actually understand your repo.💡 Java 25 Delivers Cleaner Syntax and Developer Perks:JDK 25 introduces preview features like unnamed variables, improved pattern matching, and a new classfile API. While not flashy, these updates signal Java’s steady march toward modern syntax and smoother tooling for enterprise-scale development.🦀 Rust 1.87 Lands with Smoother Trait Imports and Dev Tooling: Rust’s latest release improves trait visibility with use Trait as _, simplifies rust-analyzer updates, and tightens up the Lint system. Small quality-of-life boosts that make writing and maintaining Rust feel cleaner.Machine Learning Summit 2025Level up your skills with exclusive insights from top ML experts! 40% OFF if you book now.🎤 LLMs AMA with Sebastian RaschkaAsk your most pressing questions about large language models📈 GPTs for Time Series with Khuyen TranDiscover how to bring generative models to real-world forecasting.💡Learn directly from Luca Massaron, Thomas Nield, and 20+ ML experts in a power-packed lineup of live sessions, workshops, and AMAs.Use Code: EARLY40REGISTER NOW AND GET 40% OFFExpert corner: what's the web community talking about?🎙Still think vibe coding is harmless? Still trusting AI to write prod code? This week’s lineup brings receipts—from Rust-level brain strain to the slow fade of Stack Overflow. Crack open a few tabs, your future self might thank you.🔓 Lock-Free Rust is a Brain-Bender:Lock-free code in Rust sounds elegant—until you’re wrangling atomic ordering, memory fences, and data races that sneak past the borrow checker. This deep dive unpacks the pain and beauty of building correct, fast concurrency the hard way.🧠 Serde Reflect Brings Runtime Type Magic to Rust: Rust isn’t known for runtime reflection, but Serde Reflect changes the game. A great read on how macro-heavy code can gain runtime introspection—without sacrificing safety or performance.📉 Stack Overflow is Almost Dead:Pragmatic Engineer breaks down what every dev has felt: AI is faster than SO, and nobody wants to write answers anymore. With real data on traffic, answer rates, and community fatigue—it’s more than just vibes.🎭 The Dark Side of Vibe Coding: AI tools can autocomplete a function, but can they explain it? This sharp critique of “vibe coding” challenges the growing habit of copy-paste confidence—where fluency feels real, but understanding isn’t.🕸️ Agentic Mesh is Coming to the Enterprise:What happens when agents start collaborating at scale? This post explores AI orchestration, multi-agent ecosystems, and why “agentic mesh” could be the next big layer in enterprise automation.🚨 Can AI Agents Manage Vulnerabilities?:As agentic AI creeps into production, security teams face new risks. This post tackles what changes when autonomous agents make decisions—and why security workflows aren’t ready yet.Packt catalogue: must read dev books📚Learn React Hooks by Daniel BuglBuild fast, scalable React apps with Hooks and state machines—packed with real-world patterns for cleaner code and better performance.🧩 Master custom and advanced hooks for cleaner, scalable components⚡ Optimize app performance with real-world patterns and state management🤖 Build complex workflows using XState and state machinesGrab your copy!Zen for Devs 🧘‍♂️Not every tab needs to run a build. Sometimes your brain just needs 2 minutes of stillness—or a view that isn’t your IDE.Here’s your mini mental refresh:🌍 WindowSwap: Peek through someone else’s window—New York skyline, Swiss hills, or a quiet Tokyo street. Pure, passive calm.🔊 Noisli: Build your ideal background blend—rain + typing + train ride? Perfect for deep focus or decompression.📜 The Zen of Python: 19 lines of elegant truth—even if you don’t write Python. Let it wash over your architecture brain.🧘‍♀️ Do Nothing for 2 Minutes:Seriously. Try it. No keyboard. No mouse. Just ocean waves and a timeout for your mind.Exclusive expert spotlight: Chris Oliver on Rails and Dev Overload 🎤This week, we caught up with Chris Oliver, a Rails veteran and the founder of GoRails, to talk about what’s tripping up developers in 2025—and how to stay focused on building real software.Chris Oliver is a software developer based in St. Louis, Missouri. He's an expert in Ruby on Rails and the founder of GoRails, a platform helping Rails devs learn, build, and deploy their ideas. He’s also a conference speaker and podcaster, known for bringing clarity to the complexity of modern web dev.🎥 Watch the clip onX. Follow us on WebDevPro for more dev insights and hot takes.Packt: What would you say is the biggest challenge that Rails developers face today?Chris Oliver:I would say that most of what I see people struggling with is they always want to use the hot new tools—whatever's the latest thing.But I don’t see enough developers, not just Rails devs, just… go build stuff. Go get good at understanding how users use it. Learn how to fix what feels clunky. Learn to build things that are accessible.The biggest challenge today is the sheer complexity. You need to know keyboard accessibility, CSS, JavaScript, server-side performance, database indexing, good architecture—it’s an overwhelming amount just to build solid software.A lot of devs are chasing magical libraries that promise to just “do it all,” but it almost never works perfectly. There are always weird edges that don’t quite fit.The real skill is knowing when to say:“We can build this the way it was asked—but we could do 90% of it faster if we adjust a bit. Let’s ship that, test it, and iterate.”At the end of the day, you’ve got to get something into your users’ hands. That’s what really matters. It’s easy to lose sight of that with so many tools and choices around.AI in the spotlight 🔦Google’s next teammate isn’t human—it’s a coding agentA new AI tool in development promises to assist devs across the entire software lifecycle. 🧠 Handles more than code—think docs, planning, and workflow tasks 🔄 Built to integrate seamlessly into your existing dev stack ⚙️ Aims to automate the boring parts so you can focus on logic and architecture 👀 Still under wraps, but expected to debut soonThe future of dev tooling isn’t just AI-assisted—it’s AI-native. Stay ready.Developer tip of the week 💡Go Serverless to Scale SmarterIn 2025, serverless architecture is a go-to move for building fast, flexible, and cost-effective web app. ⚙️ Auto-scales with traffic—no server setup needed 💸 Pay only for what you use—ideal for startups and MVPs 🚀 Faster deployments with less ops overhead 🧰 Great for APIs, microservices, and event-based workflowsUse Vercel Functions to deploy serverless functions alongside your frontend. Or try AWS Lambda for backend logic at scale.Serverless lets you focus on code—not infrastructure.And that's a wrap 🎬That’s a wrap for this issue! Got a tool, stack tweak, or dev story? Hit reply—we love featuring real builders and their breakthroughs.Until next week—code smart and ship well.Cheers!Kinnari Chohan,Editor-in-chiefSUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND!*{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 8824
Unlock access to the largest independent learning library in Tech for FREE!
Get unlimited access to 7500+ expert-authored eBooks and video courses covering every tech area you can think of.
Renews at $19.99/month. Cancel anytime
Kinnari Chohan
26 May 2025
10 min read
Save for later

WebDevPro #92: Smarter Tools, Cleaner Code — Claude, Stitch, and Kotlin’s Big Week

Kinnari Chohan
26 May 2025
10 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #92: Smarter Tools, Cleaner Code — Claude, Stitch, and Kotlin’s Big Week 🌍🔍 Crafting the Web: Tips, Tools, and Trends for Developers Hi , This week, web development takes a confident leap forward. Claude gets introspective, Gemini moves into your browser, and Google’s Stitch promises cleaner UI code with zero pixel panic. Shopify’s widget set is ready for prime time, and Microsoft? They just dropped 50+ new tools to redefine how workflows run. Here’s what’s shifting the stack: 🧬 Claude 4.1: Anthropic’s AI gets smarter and a lot more dev-friendly 🧩 Google Stitch: From mockups to production-ready UI, with AI in the middle 🤝 JetBrains + Spring: A strategic partnership to accelerate Kotlin-native backend dev 🎤 Chris Oliver on Dev Complexity: Why chasing “hot” tools won’t ship better software 🚀 Smarter Caching: From CDN tweaks to header tricks, here’s what actually works 🕸️ Circuit Breakers for Microservices: Fail gracefully and avoid cascading chaos Plus, we’ve got a must-read for Java devs: Software Architecture with Spring, a hands-on guide to designing systems that scale, evolve, and survive the real world. Want to be featured in WebDevPro? Share your tips or takes—we’re all ears! Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. Latest news: what's new in web development? 🧑‍💻 This week’s releases signal a clear message: the web isn’t waiting for you to catch up. From drag-and-drop storefronts to code-ready design systems, the dev stack is evolving toward speed, clarity, and a lot less friction. 🧬 Claude 4 Isn’t Just Chatty. It’s Getting Introspective:Anthropic just dropped Claude 4.1, and it’s not your average autocomplete AI. This model reasons, rewrites, and even reflects on how it thinks. Claude’s now better at solving problems than GPT-4—and it’s terrifyingly polite about it. For devs? You get API access, long context, and enough code chops to write that backend you’ve been procrastinating. 🧩 Google’s Stitch Could Make Frontend Design Sane Again: Meet Stitch: Google’s attempt to rescue UI design from pixel purgatory. It reads your mockups and spits out component code like it’s been pair programming with Figma. Less grunt work, more “Oh hey, this actually compiles. 🛍️ Shopify’s Storefront Widgets Are Now Drag-and-Drop Dev Candy: Shopify's Web Components are now production-ready, and it’s a dream for e-comm devs. Drop in a cart, product card, or variant picker without rebuilding the planet. Framework-agnostic, fully styled, and ready to convert. This is Shopify finally treating devs like first-class users. 🤖 Microsoft Is Going Full Agentic. And It’s Coming for Your Workflows:At Build 2025, Microsoft announced it’s not just Copilot anymore, it’s Copilot, Agents, and a whole Agentic Web. Think AI that reads docs, hits APIs, manages state, and knows when to ask questions. Your app isn’t the product anymore. Your workflow is. 🔗 Kotlin + Spring Join Forces: JetBrains just announced a strategic partnership with the Spring team, aligning Kotlin’s roadmap more tightly with Spring’s modern architecture patterns. Expect faster iteration, deeper tooling, and official support that closes long-standing gaps in backend development. A strong signal for Kotlin shops building production-grade services. 🛠️ 50+ New AI Tools. Yes, You Read That Right: And if that wasn’t enough, Microsoft’s got more: over 50 new tools aimed at making you an AI overlord. Phi-3 extensions, dev agents, language bridges, Copilot everywhere. This isn’t just about speeding up dev. It’s about flipping the dev stack inside out. Machine Learning Summit 2025 Level up your skills with exclusive insights from top ML experts! 40% OFF if you book now. 🎤 LLMs AMA with Sebastian Raschka Ask your most pressing questions about large language models 📈 GPTs for Time Series with Khuyen Tran Discover how to bring generative models to real-world forecasting. 💡Learn directly from Luca Massaron, Thomas Nield, and 20+ ML experts in a power-packed lineup of live sessions, workshops, and AMAs. Use Code: EARLY40 REGISTER NOW AND GET 40% OFF Expert corner: what's the web community talking about?🎙 This week, the dev stack shows its teeth. From Copilot turning co-architect to Firebase embracing agents, the real skill now is knowing what not to over-engineer. 🚀 Cache Me If You Can: Optimize Web Performance with Smarter Caching: From CDN layers to header hacks, this guide is your go-to for making sure your users stop hitting the reload button out of spite. TL;DR? Cache is king, but only if you wield it right. 🧠 Copilot: Assistant or Autonomous Dev-in-the-Making?: This Copilot breakdown isn’t fan service, it’s field notes. Copilot is no longer just an autocomplete tool, it’s edging into full-on agent territory. Big question: Are you steering the AI, or is it steering your backlog? 🕸️ Microservices Need a Safety Net: Circuit breakers aren’t just for your fuse box. This guide to building resilient microservices lays out how to use fallback patterns that keep your app online when one service eats dirt. ☕ Java Gets Cleaner with Method References: Method references in Java are still misunderstood. This explainer makes the case for cleaner lambdas, less repetition, and just enough syntax sugar to make legacy code look modern. Worth it, even if you think you know this already. 🧪 Firebase Meets Agentic AI: Firebase Studio’s new agent integrations are wild. Imagine AI agents that don’t just deploy your app, they diagnose it, test it, and help fix bugs. It’s not future-talk anymore. This is now. And Firebase’s new studio is where the dev+AI handshake just got real. 🎓 Want to Get Hired in Java? These Certs Still Matter: You don’t need alphabet soup on your resume—but some Java certifications still open real doors. Here's a look at which ones hiring managers care about in 2025, and which are just digital dust collectors. Packt catalogue: must read dev books📚 📘 Software Architecture with Spring by Wanderson Xesquevixos Not just how to build, how to architect. This guide gives Java developers a blueprint for designing systems that scale, evolve, and survive the real world. 🧱 Break up monoliths with Spring-powered microservices ⚙️ Build resilient systems with event-driven and serverless patterns 🧭 Make smart architectural calls that align with real business needs Grab your copy! Tools to Regain Focus 🧘‍♂️ Building in 2025 means juggling tabs, tokens, and ten thousand Slack pings. Here are two hand-picked tools to reclaim your cognitive real estate and get back into flow: 📐 Ray.so — Code Snippets That Spark Joy: Need to share code without the clutter? Ray.so turns your code into clean, beautiful images with syntax highlighting, perfect for docs, decks, or dev blogs. Bonus: no login required. 🎧 Focusmate — Virtual Body Doubling for Deep Work: It sounds weird, but it works. Book a 25- or 50-minute session, get matched with a silent accountability partner, and commit to one task. No chat. No judgment. Just focus. Exclusive expert spotlight: Chris Oliver on AI, Rails, and Real-World Coding 🎤 This week, we’re sharing another slice of our interview with GoRails founder Chris Oliver; this time on generative AI and where it falls short. Chris shares why today’s dev tools still feel a bit behind, and what would make them truly useful in the trenches. Spoiler: speed and specificity matter more than hype. Chris Oliver is a software developer based in St. Louis, Missouri. He's an expert in Ruby on Rails and the founder of GoRails, a platform helping Rails devs learn, build, and deploy their ideas. He’s also a conference speaker and podcaster, known for bringing clarity to the complexity of modern web dev. 🎥 Watch the clip onX. Follow us on WebDevPro for more dev insights and hot takes. Packt:Have you used Generative AI in your development workflows, and what are your views on how effective it is? Chris Oliver: Oftentimes when I work these days, I'm not Google searching things that often anymore. I go straight to the source code for libraries and look at what blew up. I want to see what it expected, what its reasoning was for doing this logic. Then I can understand where I went wrong much better. When we get to the point where we can take that context and tell Cursor or whatever, “Hey, I'm using Rails, I have this error, I'm on Rails version 6.1,” and it can load up Rails 6.1 source code on GitHub and analyze that. When it can be that specific and fine-tuned, I think we’re going to get an incredibly powerful helper that can code along with you and be extremely accurate. But part of the issue now is that it’s indexing everything on the Internet, which may or may not be accurate. We already have a hard enough time figuring out if we’re looking at old Rails documentation on a blog post versus the latest version. Until that improves, that’s where I struggle with it. I want it to work, and I want to be able to use it. Also, it’s a little bit too slow today. Waiting for Claude to generate code for a couple of minutes feels like sitting and waiting for your code to compile, which we don’t do in Ruby, because it’s interpreted on the fly. So it kind of feels like stepping back in time. I sit and wait, get distracted, open TikTok or something on my phone, and I end up getting pulled out of the zone, waiting for it to finish. AI in the spotlight 🔦 🧠 Gemini Moves Into Chrome — Welcome to the AI-Native Browser Gemini is now built into Chrome for paid users. Summarize pages, rewrite copy, or brainstorm in the tab you’re already in. No extensions. no jumping out, just native, always-on AI that thinks with you, directly from the toolbar. Developer tip of the week 💡 🛠️ Bring AI to Your Web App, No Backend Needed Edge is quietly redefining what frontend devs can do with AI—no cloud required. Here’s what’s new and why it matters: 🧪 New APIs in Edge let developers run AI models directly in the browser, no backend required ⚡ Powered by Phi-3-mini, enabling text generation, summarization, and content editing locally 🔐 Faster and more private interactions with zero server round-trips 🧭 Available now in Edge’s Canary and Dev channels, a step toward truly browser-native AI experiences And that's a wrap 🎬 That’s a wrap for this issue! Got a tool, stack tweak, or dev story? Hit reply, we love featuring real builders and their breakthroughs. Until next week! Cheers! Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
  • 1325

Kinnari Chohan
01 Sep 2025
12 min read
Save for later

WebDevPro #107: Building an AI Email Enhancer with React 19 and Vercel AI SDK

Kinnari Chohan
01 Sep 2025
12 min read
Real-world insights for sharper web dev decisions Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #107 Building an AI Email Enhancer with React 19 and Vercel AI SDK Real-world insights for sharper web dev decisions Hi , Welcome to WebDevPro #107! This week we’re tackling one of the evergreen dev puzzles: how do you build something that’s smart, reliable, and delightful to use? In today's issue, we're looking at a project that answers that question. We'll be building an AI-powered email enhancer that turns rough drafts into polished, client-ready messages with a single click. We’ll stitch together React 19’s Server Functions and useActionState for effortless form flows, bring in the Vercel AI SDK, and give it all a clean Tailwind finish. Think “practical patterns you can lift into any app,” not just a demo. Much of the inspiration for this project comes from Carl Rippon’s Learn React with TypeScript (3rd Edition), which dives deep into React 19, TypeScript, and Next.js. It is a solid guide for developers who want to build maintainable, real-world web apps while staying ahead of the curve. Back to this project, you'll learn: How to streamline form handling with React 19’s Server Functions and useActionState How to integrate AI with type safety using the Vercel AI SDK and Zod validation How to design a simple but powerful UI with Tailwind CSS And how to deliver an experience where raw text becomes polished communication with just one click By the end, you’ll see not only how to implement the feature technically, but also how these modern tools reshape development workflows. Before diving in, here’s a quick look at last week’s top stories you may have missed: Node.js v22.19.0 “Jod” is now LTS, bringing long-term stability and production-ready reliability. Claude for Chrome launches in pilot, letting the AI see, click, and fill forms directly in the browser. jQuery 4.0.0-rc.1 arrives, a lighter, modern release dropping legacy APIs. Have any ideas you want to see in the next article? Hit Reply! Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. ⚡ Key Technologies in Play React 19 Server Functions Form handling evolves with React 19. Server Functions paired with useActionState bring automatic state management, built-in loading states, and direct client-server integration. The result is progressive forms that remain reliable even when JavaScript is turned off, reducing friction for both developers and users. Vercel AI SDK Integrating AI calls becomes far more approachable with the Vercel AI SDK. Type-safe schemas validate responses at runtime, guaranteeing that output matches the format you expect. This layer smooths out differences between providers while keeping the developer experience consistent and reliable. Tailwind CSS Styling remains fast and fluid with Tailwind CSS. Utility classes allow for responsive layouts, accessible defaults, and polished design without stepping away from the component you are building. It ensures that the focus stays on functionality while maintaining a professional finish. 🛠 Project Setup Creating the foundation for the enhancer begins with a fresh Next.js project. Using the latest scaffolding options, you get TypeScript, Tailwind, ESLint, and Turbopack out of the box. Run the following commands in your terminal: npx create-next-app@latest email-enhancer --typescript --tailwind --app --eslint --src-dir --turbopack --no-import-alias cd email-enhancer npm install ai zod @ai-sdk/openai Once complete, open the email-enhancer folder in your preferred code editor. You now have a clean environment ready for server-side AI calls, validation, and styling, with all the dependencies in place to move forward. 🔧 Environment Configuration Before calling any AI models, the application needs secure access to your OpenAI key. Create a .env.local file in the project root and add: OPENAI_API_KEY=your_openai_api_key_here This keeps credentials on the server side only, never exposed to the client, which is essential for protecting your account and keeping the bundle lightweight. 🖥 Building the Server Function With the environment ready, the next step is to define the server logic that will handle email enhancement. Inside the src/actions folder, create a file named enhance-email.ts and add: "use server"; import { openai } from "@ai-sdk/openai"; import { generateObject } from "ai"; import { z } from "zod"; const enhanceResultSchema = z.object({ originalTone: z.string(), toneDescription: z.string(), alternative: z.object({ optimizedContent: z.string(), explanation: z.string(), }), }); type EnhanceEmailState = { success: boolean; errors?: string[]; result?: z.infer<typeof enhanceResultSchema>; loading?: boolean; content?: string; }; A few key details stand out: The "use server" directive ensures all exported functions run exclusively on the server. Nothing here gets bundled to the client, which keeps the app performant. Zod schemas play a central role. enhanceResultSchema specifies the exact structure the AI response must follow: detected tone, a tone description, an optimized rewrite, and an explanation of changes. Type safety throughout. The EnhanceEmailState type captures possible outcomes of the request: success, errors, validation results, or loading state. Keeping the original content in state means users won’t lose their draft during submission. This approach sets the stage for a predictable, developer-friendly workflow, where AI output is both structured and trustworthy. ⚙️ Implementing the Server Function With the structure in place, the next step is to bring the enhanceEmail function to life. Every Server Function in React 19 accepts two parameters: the previous state and the incoming FormData. In this case, the state placeholder is named _ since it is not used directly. export async function enhanceEmail( _: EnhanceEmailState, formData: FormData ): Promise<EnhanceEmailState> { try { } catch { return { success: false, errors: [ "An error occurred while analyzing your email. Please try again.", ], content: "", }; } } The try-catch structure ensures that even unexpected failures return a clear error message rather than breaking the user experience. 🔍 Validating Draft Content Before any AI call is made, the submitted email draft must be checked for quality and length. This prevents unnecessary API usage while guiding users toward meaningful input. const rawContent = formData.get("content"); const validationResult = z .string() .min(50, "Email content must be at least 50 characters long") .max(2000, "Email content must be less than 2000 characters") .refine( (content) => content.trim().length > 0, "Email content cannot be empty" ) .safeParse(rawContent); if (!validationResult.success) { return { success: false, errors: validationResult.error.errors.map((err) => err.message), content: typeof rawContent === "string" ? rawContent : "", }; } const content = validationResult.data; The validation rules enforce a minimum of 50 characters to ensure substance and a maximum of 2000 characters to keep requests cost-efficient. If validation fails, the function immediately returns errors while preserving the draft content so nothing is lost. 🤖 Making the AI Call Once validation succeeds, the function sends the draft to OpenAI through the Vercel AI SDK’s generateObject. By providing the schema upfront, the response is guaranteed to follow the required structure: Original tone Tone description Optimized content Explanation of changes const { object } = await generateObject({ model: openai("gpt-4o-mini"), schema: enhanceResultSchema, prompt: `Analyze the tone of this email and provide alternative versions optimized for different contexts. Original email: "${content}" Please: 1. Identify the current tone (e.g., professional, casual, aggressive, friendly, etc.) 2. Provide a brief description of the current tone 3. Generate an enhanced version of the email that is professional, respectful, and client-focused 4. Explain what changes were made and why Keep the core message and intent intact while adjusting the tone appropriately. `, }); return { success: true, result: object, content: typeof rawContent === "string" ? rawContent : "", }; This approach combines type safety with structured AI responses, ensuring the app never has to guess at the format of the returned data. Importantly, all calls remain server-side, meaning the OpenAI key defined in .env.local is never exposed to the client. 📝 Creating the Enhance Email Form Component With the server logic in place, the next step is building the user-facing form. Start by creating components/enhance-email-form.tsx inside the src folder: "use client"; import { useActionState } from "react"; import { enhanceEmail } from "@/actions/enhance-email"; import { EnhancedEmailDisplay } from "./enhanced-email-display"; export function EnhanceEmailForm() {} Declaring "use client" ensures this component runs on the client side, which is required for React hooks. Here, the form will connect directly to the server function enhanceEmail, while also rendering a child component for displaying results, EnhancedEmailDisplay. The fact that a client component can call into a server function directly is part of what makes React 19 such a powerful upgrade for developer experience. 🔄 Using the useActionState Hook The useActionState hook ties the form directly to the server function, managing submission, pending states, and validation feedback without extra wiring. export function EnhanceEmailForm() { const [state, formAction, isPending] = useActionState(enhanceEmail, { success: false, }); } state: Holds the most recent result of the server function call, including errors or enhanced content. formAction: A handler passed to the form’s action attribute. On submit, it automatically sends form data to the server. isPending: A boolean that signals when a request is in progress, making it easy to show loading states or disable input. 📮 Rendering the Form Here’s the core structure of the enhancer form: state: Holds the most recent result of the server function call, including errors or enhanced content. formAction: A handler passed to the form’s action attribute. On submit, it automatically sends form data to the server. isPending: A boolean that signals when a request is in progress, making it easy to show loading states or disable input. export function EnhanceEmailForm() { const [state, formAction, isPending] = useActionState(...); return ( <div className="max-w-4xl mx-auto p-6 space-y-8"> <h1 className="text-3xl text-center font-bold text-gray-900 mb-2"> Email Enhancer </h1> <form action={formAction} className="space-y-6"> <div> <textarea aria-label="Email content" name="content" rows={8} className={`w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 ${ state.errors ? "border-red-500" : "border-gray-300" }`} placeholder="Enter your draft email content here..." disabled={isPending} defaultValue={state.content ?? ""} /> {state.errors && ( <p className="mt-1 text-sm text-red-600"> {state.errors.join(". ")} </p> )} </div> <button type="submit" disabled={isPending} className="w-full bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors" > {isPending ? "Enhancing ..." : "Enhance Email"} </button> </form> </div> ); } Key highlights: The textarea captures draft email content, with error messages shown inline when validation fails. The submit button is dynamically disabled while requests are pending, improving feedback and preventing duplicate submissions. Default values are retained in state so users never lose their text after a failed submission. 📊 Displaying Enhanced Results When enhancement succeeds, the EnhancedEmailDisplay component renders the analysis and improved version of the email: {state.success && state.result && ( <EnhancedEmailDisplay originalTone={state.result.originalTone} toneDescription={state.result.toneDescription} alternative={state.result.alternative} /> )} The display component highlights: Current Tone Analysis: Detected tone and descriptive summary. Optimized Version: A rewritten version styled for professionalism. What Changed: A plain-language explanation of adjustments. export function EnhancedEmailDisplay({ originalTone, toneDescription, alternative, }: { originalTone: string; toneDescription: string; alternative: { optimizedContent: string; explanation: string; }; }) { return ( <div> <div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-6"> <h3 className="text-lg font-semibold text-blue-900 mb-2"> Current Tone Analysis </h3> <p className="text-blue-800 mb-2"> <span className="font-medium">Detected Tone:</span> {originalTone} </p> <p className="text-blue-700">{toneDescription}</p> </div> <div> <h3 className="text-lg font-semibold text-gray-900 mb-4"> Optimized Version </h3> <div className="bg-white border border-gray-200 rounded-lg p-6 shadow-sm"> <div className="bg-gray-50 border rounded-md p-3 mb-4"> <p className="text-gray-800 whitespace-pre-wrap"> {alternative.optimizedContent} </p> </div> <div> <h5 className="text-sm font-medium text-gray-700 mb-2"> What Changed: </h5> <p className="text-gray-600 text-sm">{alternative.explanation}</p> </div> </div> </div> </div> ); } 🌐 Wiring It Into the App Finally, the main page imports and renders the form: import { EnhanceEmailForm } from "@/components/enhance-email-form"; export default function Home() { return ( <main className="min-h-screen bg-gray-50 py-8"> <EnhanceEmailForm /> </main> ); } Launching the app with npm run dev makes the enhancer available at http://localhost:3000. Each form submission sends a POST request to the server function, and responses are streamed back chunk by chunk, ensuring fast feedback for users. ✅ In action: a rough draft goes in, a professional email comes out. The enhancer not only transforms content but also teaches users how to refine tone through clear feedback on what was changed and why. ✅ Conclusion This project walked through the full cycle of building an AI-powered email enhancer with React 19, from configuring environment variables to deploying a user-friendly form. Along the way, we saw how Server Functions reduce the need for manual wiring, how Zod validation safeguards both user input and AI responses, and how the Vercel AI SDK creates type-safe integrations that feel seamless in practice. Tailwind CSS added polish without slowing development, keeping the focus on functionality. The larger takeaway is that modern frameworks are not only about shipping features faster but about reshaping how we think about developer experience. By combining server-first form handling with reliable AI outputs, developers can deliver tools that feel both intelligent and trustworthy. 📌 Sprint Challenge Think about your own workflow. Where could an AI-assisted enhancer help? Drafting code reviews, improving documentation, or polishing customer communication? Pick one small scenario and prototype a form powered by a server function and validation. Even a simple experiment can surface new ideas for reducing friction in daily development. Got 60 seconds? Tell us what clicked (or didn’t) Cheers! Editor-in-chief, Kinnari Chohan SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0

Kinnari Chohan
25 Aug 2025
7 min read
Save for later

WebDevPro #106: Python 3.14 steadies releases, Node.js adds crypto and compression, Django pushes accessibility forward

Kinnari Chohan
25 Aug 2025
7 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #106: Python 3.14 steadies releases, Node.js adds crypto and compression, Django pushes accessibility forward 🌍🔍 Crafting the Web: Tips, Tools, and Trends for Developers Hi , Welcome to WebDevPro #106! This week, we highlight releases that favor stability, frameworks embracing responsibility, and research that challenges how we think about AI. 🐍 Python 3.14 RC2 fixes bytecode issues while keeping ABI compatibility steady 🟢Node.js 24.6.0 adds new crypto, zstd compression, and a modernized fs module ♿Django publishes accessibility guidelines to make inclusive design a shared task 🧠 Research shows empathetic AI often trades off accuracy and reliability 🔒 MCP vulnerabilities highlight protocol risks On to the details… Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. Take the Survey Now Latest news: what's new in web development? 🧑‍💻 🐍 Python clears the path for 3.14 Release Candidate: Python 3.14 RC2 focuses on stability, with a bytecode fix that means older .pyc files must be recompiled, but the ABI remains untouched, so existing wheels keep working. I see this as the kind of behind-the-scenes change that reinforces Python’s cautious release cadence: disruptions are rare, and when they come, they’re handled with precision to keep the ecosystem steady. 🟢 Node.js v24.6.0 arrives: Node.js v24.6.0 packs in subtle but meaningful updates: system CA integration for easier certificate handling, new cryptography options like ML-DSA, better compression with zstd dictionaries, and a more efficient fs module with Utf8Stream. Our takeaway here is how Node continues to modernize without drama. It’s less about flashy features and more about evolving its foundations for long-term resilience. ♿ Django makes accessibility a shared task:Django’s new accessibility guide gives developers clear steps to ensure features are usable by everyone, especially those relying on assistive tools. What strikes me is how this pushes accessibility from being a nice-to-have into a shared community responsibility. It’s a reminder that frameworks aren’t just code, they’re cultural touchpoints that set the tone for what good software looks like. 🌱 Spring clears legacy paths with 7.0.0-M8 available: Spring’s M8 milestone introduces an @HttpServiceClient annotation to simplify HTTP client setup and accelerate the move from AntPathMatcher to PathPattern. From my perspective, Spring is taking a firm stance on clearing away legacy patterns, and that clarity matters. It’s easier for developers to adopt new idioms when the framework itself signals where the future lies. 🤖 GitHub turns Copilot into a teammate:The new Copilot Agents panel on GitHub lets developers hand off tasks to AI agents and receive the results as draft pull requests. This is a fascinating development because it reframes Copilot from a line-by-line assistant into a workflow partner. It’s the difference between autocomplete and actual delegation, and that shift could reshape how teams think about distributing engineering effort. Staying sharp in .NET means more than just skimming release notes. You need practical tips, proven patterns, and scalable solutions from experts who’ve been in the trenches. That’s exactly what you’ll get with .NETPro, Packt’s new newsletter, along with a free bestselling eBook as a welcome bonus when you sign up. Join .NETPro — It’s Free Expert corner: what's the web community talking about?🎙 🤗Warm-hearted AI comes at a cost: A new arXiv paper shows that making language models more empathetic actually reduces their reliability and increases sycophantic tendencies. From my standpoint, this underscores an important trade-off: emotional charm in AI boosts user comfort but risks undermining honest, critical output. Balancing warmth with truthfulness will be key in AI design going forward. 📖 Understanding MCP’s pitfalls (and a good companion read): The Model Context Protocol (MCP), akin to an “HTTP for AI,” standardizes how LLMs connect to tools and data. I’d recommend pairing this insight with the Getting Started with the Model Context Protocolbook, which offers foundational guidance, both practical and strategic. Together, they frame MCP’s promise and help developers build confidently with context-aware agents. 🔗 Django brings APIs closer to developers:Django now supports full API workflows from backend to client libraries using Django REST Framework, drf‑spectacular for OpenAPI spec generation, and openapi‑generator for creating clients, with automation via Dependabot and GitHub Actions. Personally, this shift feels like a leap in developer productivity: automated specs and client syncing reduce friction and keep integrations tight. 🌐The browser has already evolved:A provocative "SPA is dead" post from the RedwoodSDK team argues that the hacks we created, such as routing workarounds, manual state syncs, are now obsolete; the browser itself is robust enough for proper web architecture. This feels like a turning point: we can finally build "the web again" instead of bending it to look native. 🟢 Vue’s future is the community itself:Stack Overflow reflects on Vue’s path forward, suggesting that the future of the framework lies less in its codebase and more in its passionate users and contributors. I find that compelling: frameworks thrive when their developer communities drive innovation, collaboration, and real-world usage. Vue’s strength lies in its creators. Want to be featured in WebDevPro? Share your tips or takes, we’re all ears! This week's book drop 📚 📘 Mastering RESTful Services with Java by Marián Varga, Pedro Henrique Pereira de Andrade, Silvio de Morais, Thiago Bomfim, and Igor Avancini Fraga Ready to take your APIs from “it works” to production-grade? This hands-on guide walks you through designing, securing, and scaling REST services with Java, backed by real-world examples. ✅ Build clean, reliable endpoints that are easy to maintain ✅ Lock down your APIs with modern authentication ✅ Boost performance and deploy with confidence This is a perfect pick for Java developers who want their APIs to shine in the real world. Order your copy now! Developer tip 💡 🗣️ Spin up live preview environments for every pull request One of the most effective ways to accelerate feedback and reduce integration headaches is to auto-deploy preview environments for each pull request. Instead of waiting for staging merges or passing screenshots around, you give reviewers and stakeholders a real, isolated instance of the app tied to the PR. They can test the UI, API behavior, and integrations immediately. Tools like Bunnyshelland Koala show how this practice turns feedback loops from days into minutes. Why I think this matters: Reviewers see the change in context, not in theory. Bugs and edge cases surface earlier, when they’re cheapest to fix. Developers get the psychological safety of knowing their code runs in a production-like setting before merge. This is the kind of workflow shift that makes teams not just faster, but calmer, because everyone knows what they’re reviewing and why it matters. Got a minute? Tell us what clicked (or didn't) 🎬 And that’s a wrap. Got a request, a bug to bust, or a genius trick to share? Send it our way. Back in your inbox next week. Cheers! Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0

Kinnari Chohan
14 Jul 2025
6 min read
Save for later

WebDevPro #99: Angular introduces custom profiling tools, TypeScript adds LSP updates, and Figma's new MCP server

Kinnari Chohan
14 Jul 2025
6 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #99: Angular introduces custom profiling tools, TypeScript adds LSP updates, and Figma's new MCP server 🌍🔍 Crafting the Web: Tips, Tools, and Trends for Developers Hi , Welcome to WebDevPro #99! This week’s issue is a goldmine of must-know releases, emerging trends, and sharp community takes. Here's what you don't want to miss: ⚙️ TypeScript 5.9 beta: Faster symbol search, smarter completions, and Go-to-Definition that finally behaves. 🧠 Figma’s new MCP Server: Say goodbye to messy exports. Structured design data now flows straight into your dev stack. 🔍 Performance tuning in Angular: Angular’s new custom profiling track gets serious about SSR and hydration debugging. 🧪 Storybook 9.0 brings smarter UI testing: Interaction testing and a11y checks now baked in, no extra config needed. 🧼 Smarter CSS Cleanup with AI: New research shows how machine learning can cut unused styles and slim down your stylesheets automatically. Let's dig in! Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. Latest news: what's new in web development? 🧑‍💻 ⚙️TypeScript 5.9 beta adds language server protocol enhancements: The latest TypeScript beta focuses on polish. Symbol search is faster, completions are more context-aware, and Go to Definition is finally getting smarter about overloads. No flashy features, just quality-of-life upgrades devs will feel every day. 🔍 Angular launches custom profiling track: Performance tuning in Angular just got an upgrade. This new profiling track integrates with Chrome DevTools and visualizes hydration, change detection, and Signals more clearly. If you’re debugging Angular SSR or optimizing large apps, this one’s for you. 🔧 Node.js 24.4 lands with V8 12.4 and diagnostic tweaks: Node 24.4 quietly drops updates to diagnostics_channel, better WebSocket behavior, and a V8 bump that improves performance under the hood. It’s incremental, but stability matters when your runtime is in production everywhere. 🧩 Figma’s Dev Mode MCP Server: Figma’s new MCP Server quietly rewires how design tokens and UI code connect. Now, devs can pull structured design data straight into their stack, no more manual sync or messy exports. One tool for the whole UI loop, finally working like it should. 🌠 Perplexity launches Comet browser with built-in AI:Chrome dominance isn’t shaking yet, but Perplexity’s new Comet browser is aiming for utility over ubiquity. It lets you search with natural questions, get summaries inline, and ask follow-ups without switching tabs. 🤖 AWS to debut AI agent marketplace with Anthropic: This week, AWS is rolling out a dedicated space for pre-trained AI agents, tightly integrated with Bedrock. Anthropic is in at launch, which means Claude-powered tools will be just an API call away for any team working in the AWS cloud. Make your breaks smarter than your bugs 🧠 Tired of scrolling aimlessly between commits? Next time you take a breather, give your brain something fun and useful. 🧩 Try Untrusted,a game where you hack JavaScript logic to escape puzzles. It’s like VS Code meets escape room. 🧠 Then run a quick check on Human Benchmark to flex your memory, focus, and problem-solving muscles. Warning: Oddly addictive. Side effects may include better debugging and faster PR reviews. Expert corner: what's the web community talking about?🎙 🔄 Async Ruby gets a future-focused reality check: Paolina Carmine unpacks the growing interest in async Ruby, tracing the why and the what's next. This take is practical and grounded in real-world limitations. Devs who’ve written concurrent code in Ruby (or tried to) will find this one especially validating. 📡 Most REST APIs aren't really RESTful: Florian Kraemer calls out common violations of REST principles, showing how most APIs claiming the badge miss on constraints like statelessness and proper resource modeling. This is a reminder that solid API design still matters. 🧠 What agentic apps actually look like: Beam offers a practical lens on what it takes to build agentic applications that feel autonomous yet reliable. The post goes past buzzwords into concrete patterns and system design choices that shape how AI-driven apps operate in the real world. 🧭 New research rethinks how agents learn plans: A new paper from Cornell Universityexplores how agents learn and revise plans from feedback, not just static goals. The team proposes a model that mirrors human-like decision-making under uncertainty. The implications go far beyond robotics into how we think about dev workflows with AI in the loop. 🛡️Ethereum cofounder calls for copyleft in Web3:Vitalik Buterin makes the case that permissive licensing has slowed Web3’s ability to create a truly open ecosystem. He calls for a shift to copyleft licenses like AGPL to prevent corporate lock-in and ensure protocol-level transparency. It’s a bold stance that reframes licensing not as legal hygiene but as a structural choice in decentralized design. Want to be featured in WebDevPro? Share your tips or takes, we’re all ears! This week's book drop 📚 📘 Design Beyond Limits with Figma by Simon Jun Ready to turn Figma into a true collaboration engine? This book goes beyond screen mockups to show you how high-performing teams build scalable design systems, streamline handoffs, and integrate AI to boost delivery. Whether you're managing tokens, coordinating with devs, or scaling accessibility, this is your playbook for serious design-to-dev alignment. 📦 Get 25% off the paperback. Use code FIGMA25at checkout. Offer valid through Friday only. Pre-order your copy now! Developer tip 💡 Smarter UIs start with Storybook 9.0 The new Storybook isn’t just smaller, it’s smarter. Version 9.0 now includes built-in interaction testing and accessibility checks, so you can catch UI bugs and a11y issues as you build. No extra setup. No extra tools. If you work on front-end components or design systems, this update will instantly tighten your workflow. Got a minute? Tell us what clicked (or didn't) 🎬 That’s your scoop from the dev-verse this week.If your brain’s buzzing with ideas or feedback, hit reply. Until next week. Cheers! Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
Kinnari Chohan
24 Nov 2025
11 min read
Save for later

WebDevPro #119: Modern Async JavaScript, without the knots

Kinnari Chohan
24 Nov 2025
11 min read
Real-world insights for sharper web dev decisions Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #119 Modern Async JavaScript, without the knots Real-world insights for sharper web dev decisions AI-Powered Development with Cursor Workshop Accelerate your coding workflow and ship apps faster with Cursor, Supabase, and OpenAI. Book Your Seat 🗓️Nov 29, 2025 | 8:30 AM – 12:30 PM (ET) | 💻 Virtual 🎟️ 40% OFF with codeCURSOR40+ 2 FREE e-books Fill This Form to Claim Your FREE E-books! Thanks for joining me for this week’s WebDevPro issue! Most things that feel slow in a web app are not actually slow. They are waiting. A request is in flight. A timer has not fired yet. The user has not clicked. Async JavaScript is how you keep the page responsive while that waiting happens. Once you see how the browser schedules work, how promises settle, and how await resumes your function, you stop guessing. Your UI starts to feel calm because your code is calm. This week’s deep dive is based on material from JavaScript from Beginner to Professional by Laurence Lars Svekis, Maaike van Putten, and Rob Percival. This book is a practical guide that breaks down modern JavaScript fundamentals with clarity. and the concepts discussed here draw from this book. Let’s start with the mental model, then build toward patterns that hold up when real-world complexity enters the picture. By the end, it becomes much easier to see what can run in parallel, what must be sequenced, what deserves a timeout, and what should be canceled the moment the user moves on. But before we get into it, here are the standout links from last week’s edition: 🪄Learn JavaScript by building Mario 🛡️ OWASP Top 10 2025 RC1 highlights emerging web security risks 📊 GitHub Octoverse 2025 🔬 Why TypeScript leads the AI era of development Have any ideas you want to see in the next article? Hit Reply! Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. The event loop is the heartbeat JavaScript in the browser runs on a single thread. You do not spin up operating system threads. You schedule work that will continue later. The browser owns an event loop. It pulls tasks off queues and runs your callbacks when results are ready. There are two queues you feel every day. The task queue holds timers and I O completions. The microtask queue holds promise reactions. The loop runs a task, then drains microtasks, then gives the browser a chance to paint. That one detail explains a lot of puzzling behavior. A continuation after await is a microtask. A callback from setTimeout(fn, 0) is a task. The microtask wins the race. You can prove it with a tiny console exercise and watch the order of logs line up with the model. console.log("A: start"); Promise.resolve().then(() => console.log("B: microtask")); setTimeout(() => console.log("C: task"), 0); (async () => { console.log("D: before await"); await null; // schedules a microtask continuation console.log("E: after await"); })(); console.log("F: end"); // typical order: A, D, F, B, E, C If the page ever feels sticky, it usually means you blocked the main thread. The cure is not a trick. Break heavy work into small pieces, yield between pieces, and let the browser breathe. Promises are a contract, not a mystery A promise represents a later value or a reason for failure. It starts pending, then becomes fulfilled or rejected, and it never changes again. You do not poll a promise. You register reactions and the runtime calls you exactly once when it settles. Chaining works because .then returns a new promise that adopts what you return. If you return a plain value, the chain moves forward with that value. If you return a promise, the chain waits. If you throw, the chain jumps to the next rejection handler. Many head-scratching bugs come from forgetting to return the inner promise and letting a chain run ahead of the work. The fix is simple. If you start more async work inside a handler, return it. Make error handling part of the design. Decide where errors become messages and where they become quiet fallbacks. Unhandled rejections will shout in devtools, but your users need a calmer story. Async and await help you read what you wrote async and await do not change promise semantics. They make the choreography readable. An async function always returns a promise. await yields inside that function until a promise settles, then either gives you the value or throws the error. You get the same behavior as a well-written chain, but in the order your brain tells the story. Keep try and catch around logical chunks, not the entire function unless it truly is one unit. Put cleanup in finally so it runs whether you succeeded or failed. That is where you stop spinners, release locks, and finish metrics. Here is a compact pattern for network work that needs clear outcomes and guaranteed cleanup. async function loadProfile(id, { signal } = {}) { startSpinner(); try { const res = await fetch(`/api/profile/${id}`, { signal }); if (!res.ok) throw new Error(`HTTP ${res.status}`); return await res.json(); } catch (err) { return { error: true, message: err.message }; } finally { stopSpinner(); } } One pitfall to keep in mind. array.map(async item => ...) gives you an array of promises. If you want the values, await them as a group. If the steps depend on each other, resist cleverness and write them in sequence. Orchestrating what overlaps and what depends A calm UI often comes down to honest orchestration. Some work can run together. Some must wait. If you are fetching user data, preferences, and notifications, start them together and join them when all are ready. If you are logging in and need the token before fetching a profile, keep that flow in sequence so the dependency is clear. For batches where one failure should not sink the rest, gather everything and inspect the outcomes after. For timing concerns, compose a timeout without twisting the control flow. function withTimeout(promise, ms) { return Promise.race([ promise, new Promise((_, rej) => setTimeout(() => rej(new Error("Timeout")), ms)) ]); } These helpers do not remove thinking. They encode intent so the code reads like the plan you had in your head. Cancellation that matches how people behave People change their minds. They type again. They navigate away. If a search response from an old query lands after the new one, it can overwrite fresh state with stale data. Treat cancel as a normal outcome. The platform gives you AbortController and AbortSignal. Wire them in and clear the pending state when the user moves on. let current = 0; async function search(q) { const id = ++current; const controller = new AbortController(); const res = await fetch(`/api/search?q=${encodeURIComponent(q)}`, { signal: controller.signal }); const data = await res.json(); if (id !== current) return; // stale result, drop it renderResults(data); } Add a simple guard like that and you avoid ghost updates even if some lower level cannot be canceled. Do not toast an error when the user intentionally cancels. Just settle the UI and let them keep going. Concurrency limits and backpressure Starting twenty operations at once feels bold until your server pushes back and your tab stutters. A small limiter gives you backpressure. Allow a fixed number of active operations. Queue the rest. When one finishes, start the next. Median times improve. Tails tighten. Rate limits hurt less. You can write a limiter in a handful of lines or use a tiny utility if your team prefers. The key is to adopt the habit on the paths that matter. If you are streaming results into the DOM, apply the same idea. Do not reflow the page for every tiny chunk. Buffer a few and render on a steady rhythm so the browser can paint between updates. Streams and async iteration when a spinner is not enough Sometimes the right move is to show progress as it happens. Users prefer a trickle of real content over a long spinner. Async iterators make this clean. Loop over incoming chunks, render slices as they arrive, and the page feels alive. Pair it with a skeleton screen so the shape of the UI is visible from the start. Your content grows into a believable frame rather than jumping from nothing to finished. Wiring the UI so async behaves Most async work starts with an event. A click, a keypress, an input change. If you wire listeners at the right time and understand how events travel through the DOM, your async code stops fighting the page. The figure on the left shows bubbling: the event fires on the target, then moves outward through its ancestors. On the right, the figure shows capturing: the event moves in from the outer ancestor toward the target before the usual bubbling phase. Watch the order of the console messages. That order is the lesson. A normal listener gives you inner to outer. A capture listener gives you outer to inner. This is why delegation works so well. One listener on a stable parent can hear clicks from many dynamic children. Attach listeners when elements exist. DOMContentLoaded is the sweet spot. If you want to intercept early, register a capture listener. If you want one place to handle many items, register a bubbling listener on a parent and let events rise to it. Here is a tiny delegation pattern that stays out of the way: document.addEventListener("DOMContentLoaded", () => { const list = document.querySelector("#todo-list"); list.addEventListener("click", async (e) => { const btn = e.target.closest("[data-action='delete']"); if (!btn) return; try { const id = btn.closest("li").dataset.id; await fetch(`/api/todos/${id}`, { method: "DELETE" }); btn.closest("li").remove(); } catch (err) { alert(err.message); } }); }); Two controls to remember as you read the figures. event.preventDefault() stops the browser’s default action. event.stopPropagation() stops the journey through the tree. They solve different problems. Use them on purpose, not by habit. Debugging without guesswork There is a fast way to get unstuck. Put a breakpoint on the await line that surprises you. Step once. Watch local variables. Watch the call stack shift when the continuation runs. Put a breakpoint in the catch you believe is responsible for that block of work and confirm that it fires. Verify that it finally runs every time. Ten minutes of that beats an hour of logs. When a flow does something odd, ask three questions. Did the handler attach at the time I thought it did? Did the promise I awaited actually reject, or did it resolve to an error-shaped value? Did my cleanup run? You can answer those in the debugger faster than you can by guessing. Make it feel fast, not just be fast People judge speed by responsiveness. Start optimistic updates where it is safe and reconcile with the server when the result arrives. Keep event handlers small so the browser can paint and react to the next input. Defer non-critical work with requestAnimationFrame or a microtask. If you need heavy computation, hand it to a worker so the main thread stays clear. The goal is not a perfect number on a benchmark. The goal is a page that feels alive even on a noisy network and a mid-range phone. A short wrap so the ideas stick Promises are the contract. async and await make the contract readable. The event loop sets the rhythm and your code decides what runs together and what must wait. Add cancel so old results never clobber new ones. Add a gentle limiter so nothing overwhelms anything else. Add retries with timeouts so failures are handled on purpose. Wire events at the right time and let delegation carry some of the weight. Debug at the await points. If you keep these habits, your app will feel composed on a good day and resilient on a bad one. If you want to go deeper into these foundations, many of the concepts in this week’s issue come from JavaScript from Beginner to Professional. It’s a solid reference to keep on your shelf, or your Kindle! Cheers! Editor-in-chief, Kinnari Chohan Got 60 seconds? Tell us what clicked (or didn’t) SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0

Kinnari Chohan
01 Dec 2025
7 min read
Save for later

WebDevPro #120: Angular 21 pushes reactivity forward, Node 24 reaches LTS, and the React community shares what matters next

Kinnari Chohan
01 Dec 2025
7 min read
Crafting the Web: Tips, Tools, and Trends for DevelopersAdvertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }WebDevPro #120: Angular 21 pushes reactivity forward, Node 24 reaches LTS, and the React community shares what matters nextCrafting the Web: Tips, Tools, and Trends for DevelopersHi ,Welcome to this week’s edition of WebDevPro!The conversation that stood out most for us this week came from the Cloudflare outage and the analysis that followed. What caught my attention was how many developers saw it as a reminder of how dependent the web has become on a small number of platforms. Instead of focusing on the technical misstep alone, much of the discussion centered on what real resilience looks like and how teams think about risk when so much of their stack lives on the internet’s shared backbone. It was interesting to see how quickly the community moved from surprise to reflection, using the outage as a moment to rethink assumptions that often sit quietly behind the scenes.Alongside that, the ecosystem kept moving in interesting ways, from new framework releases to deeper looks at the tools and habits shaping modern development.Before we jump in, here are this week’s highlights:📊 The State of React 2025 survey closes with insights that build on last year’s community trends🚨 Cloudflare outage analysis surfaces deeper lessons about resilience and infrastructure design🚀 Angular v21 introduces Signal Forms, stronger accessibility components and a modernized toolchain🟩 Node.js 24 enters long-term support with improved stability and broader platform readiness📱 CSS Grid support moves closer to React Native and brings more powerful layout capabilitiesAdvertise with usInterested in reaching our audience? Reply to this email or write to kinnaric@packt.com.Learn more about our sponsorship opportunities here.Latest news: what's new in web development? 📰🔧 Angular v21 released: Angular 21 is here with big changes: a new experimental “Signal Forms” system for reactive form state, a built-in accessibility/ARIA component library, and a revamped toolchain with a new default test runner. This release signals Angular’s push toward more reactive, type-safe patterns and modern developer ergonomics.📊 The State of React 2025 survey closes after another strong community turnout. Here'slast year's results: Devographics has closed the 2025 State of React survey, which remains one of the clearest signals of how the React ecosystem actually evolves, capturing what developers build with, what slows them down, and what they want to change. Last year’s results revealed a steady rise in TypeScript adoption, a shift toward lighter React frameworks, and growing dissatisfaction around performance debugging. This year’s data is expected to show how React developers are responding to React Server Components, new bundler competition, and the continued pressure to improve performance at scale.📱CSS Grid support may land soon on React Native:A proposal gaining traction suggests native CSS Grid support is coming to React Native, potentially bringing real layout-power (grid-based layout, responsive designs) to mobile frameworks that usually rely on flexbox or custom layout logic. This could narrow the layout feature gap between web and native apps.⚠️ Critical lessons from recent Cloudflare outage:A recent post reviews a serious Cloudflare outage and argues that the root problems were not just technical but architectural; urging teams to think harder about redundancy, failure modes, and resilience rather than just relying on cloud defaults.A sharp wake-up call for anyone building on third-party infra to treat outages as design constraints rather than rare events.🚀 Node.js 24 LTS goes live for production and serverless builds:Node.js 24 has entered LTS, and services like Vercel now offer first-class support for builds and functions targeting “24.x”.This is a good moment for teams to upgrade. The release brings improved runtime stability, updated Web API support, and long-term maintenance guarantees.Expert corner: what's the web community talking about?🎙🧠Debugging production is a mindset, not a toolset:This podcast explores how engineers approach debugging in real systems and why a calm, structured way of thinking often matters more than any particular tool. The discussion highlights how observability, curiosity and well-formed hypotheses help teams navigate failures in a way that scales with growing system complexity.🧪 A practical guide to integration testing in Django:Honeybadger offers a grounded walkthrough of integration testing in Django using the built-in test client, realistic database state and fixture patterns. The piece shows how to validate full request flows and avoid the false comfort that sometimes comes from isolated unit tests. It frames testing as a path to trustworthy backends.⏱️ Postgres can schedule tasks more cleanly than you think:This post presents a lightweight method for turning Postgres into a task scheduler by using advisory locks, row updates, and simple polling. It is a compelling alternative to heavier queue systems for tasks that do not need distributed orchestration. The approach encourages teams to examine how much infrastructure is truly needed for dependable background work.🎨 Understanding how CSS inherits and shares values across your UI:CSS-Tricks breaks down how inheritance actually works in CSS, how custom properties flow, and how shared values can simplify component systems. It is a clear explanation of why many layout issues come from assumptions about the cascade rather than the cascade itself.⚡A performance tier list for modern web animation approaches:Motion.dev evaluates various animation techniques on the web and ranks them by smoothness, reliability, and runtime cost. The analysis covers CSS transitions, CSS animations, WAAPI, JavaScript-driven motion, and mixed patterns. It is a helpful guide for choosing animation strategies that match performance goals instead of relying on guesswork.Want to be featured in WebDevPro? Share your tips or takes, we’re all ears!Agentic AI Frontier Summit 2025 (Online): From Single Models to Autonomous SystemsJoin us on Dec 13, 2025 · 9am–2pm ET / 6am–11am PT to discover how AG2, autonomous research agents, and real-world multi-agent systems are reshaping science, engineering, and AI-native companies. Get 40% off with code DEEPENG40 and secure your spot at the frontier of agentic AI.Unlock 40% off – Register with DEEPENG40This week's book drop📚RESTful API Design Patterns and Best Practices🚀 Design APIs that scale with your product using patterns that keep services stable as teams and traffic grow📘 Build confidence with a practical, hands-on approach that covers contracts, versioning, OpenAPI, and real-world design choices🧩 Avoid hidden complexity with guidance on domain-driven design, client-focused endpoints, and API evolution across distributed systems ⚡ Strengthen your architecture through techniques that reduce breaking changes and improve long-term maintainabilityOrder on AmazonOrder on PacktPubFeatured tutorial 🎓🌐 How many HTTP requests can a single machine handle?This article walks through load testing a simple HTTP server to measure how many requests a single machine can reliably serve under different concurrency scenarios. It shows how latency, CPU utilization, and event-loop behavior combine to produce real throughput limits. For developers deploying services on modest infrastructure or experimenting with serverless/hobby servers, this tutorial offers a practical exploration into performance ceilings and realistic capacity planning.Got a minute? Tell us what clicked (or didn't)🎬 That’s all for this week. If something in this issue sparked a thought, a question, or a new curiosity, I’d love to hear it.Until next time.Kinnari Chohan,Editor-in-chiefSUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND!*{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0

Kinnari Chohan
08 Dec 2025
7 min read
Save for later

WebDevPro #121: JavaScript turns 30, Django 6.0 arrives, and TypeScript 7 development updates

Kinnari Chohan
08 Dec 2025
7 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #121: JavaScript turns 30, Django 6.0 arrives, and TypeScript 7 development updates Crafting the Web: Tips, Tools, and Trends for Developers The GenAI Experience Users Already Love, Securely Accessing Your SaaS Product AI agents are knocking on the door of your SaaS product. Open it up. Frontegg AgentLink gives you the confidence that any access to your SaaS product is done responsibly, so you can fast track your role in the AI revolution. What you get with AgentLink: ✅ No-code, hosted MCP server ✅ Pick which tools to expose ✅ Set fine-grained policies for agents ✅ Human-in-the-loop & step-up safeguards Get AgentLink now! Hi , Welcome to the final WebDevPro issue of the year 🎉 We made it. One more lap around the sun, one more swirl of releases, rewrites, patches, hot takes, and the occasional “wait, what just happened” moment that only web development can deliver. If you have ever felt like this industry moves at the speed of light, you are not imagining it. But through every shift, surprise, and trend cycle, one constant has been riding along with us since the Netscape era: JavaScript. Last week, our favorite semi-colon optional, closure loving, eventually async language celebrated its 30th anniversary. It is officially old enough to rent a car, yet it is still getting new features every year. Think about that for a second. Thirty years of function scope confusion, two years of mandatory jQuery, and countless hours battling asynchronous code. Through all of it, JavaScript did not just endure. It expanded. It stepped out of the browser, sparked the rise of Node.js, and now sits inside everything from cloud databases to tiny drones. So before we get into this week’s highlights, including updates from the official team on the upcoming roadmap and new progress on TypeScript 7.0, take a second to appreciate the small miracle that keeps our industry running. A language built in ten days now holds together most applications on the planet. Happy Birthday, JS! Let's now get to the news: 🧠 TypeScript 7 development updates 📦 Django 6.0 released with Template Partials, Background Tasks, and CSP support ☁️ Anthropic acquires Bun as Claude Code hits a billion-dollar milestone ⚡ API Caching in Angular offers simple wins for performance and responsiveness 🧭 Designing for Trust and Simplicity reframes how UI clarity shapes user confidence Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. Latest news: what's new in web development? 📰 📦 Django 6.0 released:Django 6.0 is now available with Template Partials for modular markup, a built-in Background Tasks framework, new Content Security Policy support, and a refreshed Modern Email API. The release also shifts Django 5.2 into security-only maintenance until April 2028 which gives teams a long runway for planning upgrades. 🟦 TypeScript 7 development update: The TypeScript team reports steady progress on TypeScript 7 with gains in compiler performance, faster incremental builds, and cleanup work that improves the language service experience. The update confirms that 6.0 will be the final JavaScript-based release and will serve as the bridge to the new Go-powered compiler in 7.0, which is already showing speeds up to 10x faster. 🧠 Anthropic acquires Bun as Claude Code hits a billion dollar milestone: Anthropic has acquired Bun as part of its growing ecosystem around Claude Code, which just hit a one billion dollar annualized revenue milestone. The move signals a deepening commitment to performance-focused dev tooling, and Bun remains open source under Anthropic’s stewardship, now backed by more funding and long-term infrastructure support. ⚛️ React 19.1.2 released: The React team has released version 19.1.2 with a batch of fixes and quality-of-life updates. This patch focuses on improving stability and compatibility across frameworks and tools, giving teams on the React 19 line an updated, production-ready version without jumping into major changes. ☁️ Node.js 24 runtime available in AWS Lambda:AWS Lambda now supports Node.js 24 as the nodejs24.x runtime. The release introduces the updated Runtime Interface Client, removes callback style handlers, and encourages async and await as the default pattern which makes serverless functions feel more modern. AWS plans to support this runtime until April 2028. 🎨 CSS Subgrid enters practical use:Josh Comeau dives deep into CSS Subgrid, the long-awaited layout feature that brings alignment superpowers to nested elements. Subgrid allows child components to inherit parent grid structure, making responsive layouts cleaner and more maintainable. His post includes real-world examples that show how to replace fragile flex hacks with solid CSS patterns. Expert corner: what's the web community talking about?🎙 🗣️No More Self-Censorship in Developer Culture:Kerrick Long reflects on the hidden cost of silence in engineering teams. From avoiding hard truths to downplaying opinions in retros or code reviews, self-censorship erodes psychological safety and product quality. Long encourages devs to engage openly, challenge assumptions, and foster environments where candor is a strength, not a liability. ⚡ API Caching in Angular:Awais Afzal revisits a powerful but underused performance technique in Angular development: API caching. He outlines how simple memoization strategies and Angular’s built-in RxJS tools can reduce API calls, enhance responsiveness, and remove the need for premature architectural overhauls. 🦀 Rust’s Vision Document Lessons:The Rust Core Team shares a behind-the-scenes breakdown of how they developed the language's long-term vision. The post details how community consultation, iteration, and tough tradeoffs shaped the outcome and what other open source projects can learn from the process. 🧭 Designing for Trust and Simplicity: Jeremy Keith takes aim at overcomplicated UI trends with a call for straightforward design. He advocates for interfaces that prioritize user understanding, accessibility, and minimal assumptions, reminding devs that trust is built through clarity, not cleverness. 🧩 Why Tooltip Components Shouldn’t Exist: Dominik Dorfmeister critiques the prevalence of tooltip components in modern UI libraries. Rather than patching unclear interfaces with hover tips, he suggests that designers and developers focus on making core elements more self-explanatory. Tooltips, he argues, often mask deeper design problems. Want to be featured in WebDevPro? Share your tips or takes, we’re all ears! Featured tutorials🎓 🔷 Building a Metro Map UI with CSS Grid and SVG Jacob Filipp walks through how he recreated London’s iconic Victoria line using CSS Grid and SVG. The guide covers layout logic, interactivity, and keeping visual fidelity with real-world transit maps. 🧩 Custom Button Logic with Invoker Commands API This walkthrough explains how to use the Invoker Commands API to assign behaviors to buttons and extend them with custom JavaScript. Ideal for devs building accessible and interactive UI elements. 🎬 Aaand that's a wrap! As we close out the year, I want to say thank you for being here. Each issue is shaped by your curiosity and the conversations happening across the community. This is the last stop before a well-deserved break, so take care, rest well, and I look forward to starting a new chapter together in the new year. Until next time. Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
Kinnari Chohan
16 Dec 2025
5 min read
Save for later

WebDevPro #122: Rise of LLM Powered agents

Kinnari Chohan
16 Dec 2025
5 min read
Real-world insights for sharper web dev decisionsAdvertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }WebDevPro #122Rise of LLM Powered agentsReal-world insights for sharper web dev decisionsHi ,As the year winds down, there was one idea we kept coming back to and wanted to leave you with before the break.This is a short bonus note to close out the year, touching on a shift many teams are starting to notice, even if they’re not naming it yet.The quieter shift around AI agentsMuch of the conversation around AI agents still focuses on how they help teams work faster. That part is useful, but it may also be the least interesting aspect of what’s changing.A quieter shift is happening in how products are observed and operated once they are live.Most products do not fail in obvious ways. Things change gradually. A metric softens, user behaviour shifts slightly, or performance drifts away from what once felt normal. These changes are rarely dramatic, but they are easy to miss when attention is split and teams are busy moving forward.What agents are beginning to do well is take on that background attention. They sit alongside live systems, watch behaviour continuously, and surface changes that genuinely matter. This is not about adding more dashboards or alerts. It is about maintaining a steady sense of awareness without relying on someone remembering to check at the right time.From chatbots to agentic systemsOver the past couple of years, large language models (LLM) have reshaped how we think about AI. As their capabilities expanded, many teams started running into the same limitations when trying to use them in real systems:They lack long-term memory and lose context over timeThey wait for prompts instead of operating autonomouslyThey cannot naturally interact with live systems, APIs, or data sourcesAgentic systems emerged to bridge this gap.Instead of treating AI as something you talk to, agents are designed as systems that can observe, reason, and act over time. At a high level, this usually means combining an LLM with a few additional capabilities:Memory, so context carries across days or weeksPlanning, to break down goals into smaller stepsTool use, to interact with APIs, databases, and external servicesThe result is software that is less reactive and more continuous in how it operates.Where this shows up in practiceThis approach is already appearing in newer tools, especially around monitoring and operations. One example is Fload, which applies agent-based thinking to continuous product monitoring.Fload connects to app store data, revenue signals, and usage behaviour to maintain an evolving picture of how an app is performing over time. Instead of relying on periodic reviews or manual checks, the system focuses on noticing when patterns drift, not just when something breaks.In practice, this means:Watching performance continuously instead of weekly or monthlyHolding context about what “normal” looks like for a productHighlighting changes that indicate early risk or opportunityReducing the need for constant manual monitoringWhile Fload is built for mobile apps, the underlying idea is broadly relevant. As systems grow more complex, the cost of missed signals increases, and continuous attention becomes harder to sustain manually.A pattern worth paying attention toFor developers, none of this should feel unfamiliar. We already care about logs, monitoring, and observability. What agents add is continuity. They help systems remember, notice slow changes, and surface context before small issues compound into larger ones.This shift, from periodic checking to continuous watching, is likely to influence how we design products, pipelines, and operational workflows in the years ahead.If you’d like to see one real-world implementation of this idea, you can explore Fload here.Get instant answers on your app growth for freeThat’s it from us for the year.Thank you for reading, replying, and sharing WebDevPro through 2025. We’ll be back in January with fresh issues and new ideas. Until then, take a proper break.Cheers!Editor-in-chief,Kinnari ChohanHave any ideas you want to see in the next article? Hit Reply!SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND!*{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0

Kinnari Chohan
17 Nov 2025
8 min read
Save for later

WebDevPro #118: Octoverse shows explosive developer growth, OWASP highlights 2025 web risks, and TypeScript leads the AI era

Kinnari Chohan
17 Nov 2025
8 min read
Crafting the Web: Tips, Tools, and Trends for Developers Advertise with Us|Sign Up to the Newsletter @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } WebDevPro #118: Octoverse shows explosive developer growth, OWASP highlights 2025 web risks, and TypeScript leads the AI era Crafting the Web: Tips, Tools, and Trends for Developers Hi , Welcome to this week’s edition of WebDevPro! Some weeks feel shaped by flashy releases, but this one stood out for a different reason. The conversations and updates circling the web development space leaned into insight, clarity, and a deeper understanding of the systems we depend on. From security researchers sharpening the industry’s awareness of real-world risks to language architects reflecting on how AI is subtly reshaping the developer workflow, the themes this week pointed toward a community thinking more carefully about the choices that guide modern engineering. Runtime maintainers, tool authors, and educators all contributed perspectives that make it easier to see where the ecosystem is heading and what skills will matter as it evolves. In this issue of WebDevPro, we look at ideas and updates that help developers work with more precision, more awareness, and a stronger grasp of the fundamentals that keep the web running. Before we dive in, here’s a quick look at this week’s highlights: 📊 Insights from GitHub Octoverse 2025 and what they signal for the developer ecosystem 🧠 TypeScript’s rise in the AI era, with perspective from Anders Hejlsberg 🛡️ OWASP Top 10 2025 RC1 outlining the most significant web application security threats 🟩 The State of Node.js 2025 explained by Matteo Collina 🔍 A deep dive into how JavaScript source maps work and how debugging tools reconstruct execution Advertise with us Interested in reaching our audience? Reply to this email or write to kinnaric@packt.com. Learn more about our sponsorship opportunities here. AI-Powered Development with Cursor Workshop Accelerate your coding workflow and ship apps faster with Cursor, Supabase, and OpenAI. Book Your Spot! 🗓️ Nov 29, 2025 | 8:30 AM – 12:30 PM (ET) | 💻 Virtual 🎟️ 40% OFF with code CURSOR40+ 2 FREE e-books After Purchase, Fill This Form to Claim Your FREE E-books! Latest news: what's new in web development? 📰 📊 GitHub Octoverse 2025: GitHub’s Octoverse report shows a remarkable acceleration in developer growth, with more than one new developer joining every second in 2025. The data highlights how AI usage is reshaping workflows and how TypeScript has climbed to the top of language adoption. These trends reflect a year defined by rapid skill expansion and a movement toward typed, tool-assisted development. 🛡️ OWASP Top 10 2025 RC1 highlights emerging web security risks: OWASP released the 2025 update of its Top Ten web application security threats, surfacing trends that reflect how modern applications fail in practice. The new categories emphasize supply-chain exposure, insecure AI integrations, and the growing risk in misconfigured authentication flows. This release gives teams a sharper framework for assessing where their systems are most vulnerable. 🐘 Storybook 10 introduces faster builds and a redesigned developer experience: Storybook 10 arrives with significant performance improvements, including faster story loading and a smoother preview environment. The update modernizes the internal architecture and improves compatibility with React Server Components and Next.js 16. It is a welcome upgrade for teams that manage large design systems and extensive UI component inventories. 🗄️The State of Node.js 2025 by Matteo Collina: Matteo Collina’s annual deep dive into Node’s roadmap covers performance trends, upcoming runtime features, and the growing influence of JavaScript tooling that builds on top of Node rather than around it. His perspective offers a grounded view of where the platform stands and where developers' needs are guiding its evolution. 📨 React Email 5: React Email 5 updates the library to React 19.2 and Next.js 16 while retiring the older renderAsync API. The new release simplifies template rendering and gives teams tighter compatibility with current React standards. It supports a growing shift toward using React for structured communication workflows that live alongside product code. 🟩Node.js v25.2.0:Node.js 25.2.0 arrives with refinements across utilities, networking behavior and diagnostic reporting. The release strengthens how developers observe and tune their runtime while keeping the platform aligned with modern JavaScript workflows. It signals a maturing phase for Node where clarity and stability are becoming core priorities. Expert corner: what's the web community talking about?🎙 🪄Learn JavaScript by building Mario: This hands-on tutorial rebuilds classic Mario mechanics from scratch to teach JavaScript fundamentals through motion, physics and sprite logic. It is a fun, visual way to understand how code interacts with real-time systems. 🔬 Why TypeScript leads the AI era of development: Anders Hejlsberg shares how TypeScript became the most active language on GitHub and why its type system aligns naturally with AI-supported development. His perspective connects ecosystem growth to the practical value of predictable, typed code in fast-moving projects. It is a thoughtful look at how the language continues to shape modern JavaScript practice. 🔥 Bringing high-performance syntax highlighting to the browser with CSS Highlights:This article shows how the CSS Custom Highlight API can replace token-wrapped DOM structures with lightweight highlight ranges. The approach improves rendering performance and keeps HTML cleaner, which benefits any team building editors, documentation tools, or rich UI surfaces. It feels like a practical upgrade to a problem developers have lived with for years. 🧠 Making time predictable in test suites:The Angular team explains strategies for testing code that depends on timers, scheduled events, or asynchronous transitions. The post outlines how mock clocks create predictable environments that avoid flaky tests and unclear timing behaviours. It is a helpful reminder to treat time as another dependency that deserves thoughtful design. 🔖How JavaScript source maps work under the hood: Polarsignals breaks down how source maps are generated, encoded, and consumed by modern tooling. The walkthrough connects the conceptual model to concrete examples, helping developers understand how debugging pipelines reconstruct real execution paths. Want to be featured in WebDevPro? Share your tips or takes, we’re all ears! This week's book drop📚 RESTful API Design Patterns and Best Practices 🚀 Design APIs that scale with your product using patterns that keep services stable as teams and traffic grow 📘 Build confidence with a practical, hands-on approach that covers contracts, versioning, OpenAPI, and real-world design choices 🧩 Avoid hidden complexity with guidance on domain-driven design, client-focused endpoints, and API evolution across distributed systems ⚡ Strengthen your architecture through techniques that reduce breaking changes and improve long-term maintainability Order on Amazon Order on PacktPub Featured tutorials 🎓 🔁 Importing torrents in Node.js with readable patterns: Evan Hahn shares a practical walkthrough on how to parse and import torrent files using Node.js, leaning on clear data structures and stream-based patterns. The tutorial illustrates how to inspect metadata, handle buffers with intention and keep parsing logic approachable for real-world file workflows. It offers a gentle deep dive into a format many developers rarely explore directly. 🧩 Understanding Module Federation through a hands-on guide: This guide breaks down the foundations of Module Federation with simple examples that reveal how JavaScript applications can share code at runtime. The author walks through configuration, dependency boundaries and loading strategies in a way that feels accessible without hiding the architectural implications. It helps developers grasp how to design microfrontends that stay flexible and maintainable. Got a minute? Tell us what clicked (or didn't) And before we say goodbye, here's a little web dev delight of the week 🌸 KokoScript lets you write JavaScript entirely in Japanese, complete with a playground that shows how the syntax compiles back to standard JS. It is a small, charming reminder of how creative the developer community can be when experimenting with language design. 🎬That’s all for this week. The ecosystem may be moving fast, but it is energizing to see so many developers share the ideas, tools, and experiments that help the rest of us grow a little sharper. If something in this issue sparked a thought, a question, or a new curiosity, I’d love to hear it. Until next time. Kinnari Chohan, Editor-in-chief SUBSCRIBE FOR MORE AND SHARE IT WITH A FRIEND! *{box-sizing:border-box}body{margin:0;padding:0}a[x-apple-data-detectors]{color:inherit!important;text-decoration:inherit!important}#MessageViewBody a{color:inherit;text-decoration:none}p{line-height:inherit}.desktop_hide,.desktop_hide table{mso-hide:all;display:none;max-height:0;overflow:hidden}.image_block img+div{display:none}sub,sup{font-size:75%;line-height:0}#converted-body .list_block ol,#converted-body .list_block ul,.body [class~=x_list_block] ol,.body [class~=x_list_block] ul,u+.body .list_block ol,u+.body .list_block ul{padding-left:20px} @media (max-width: 100%;display:block}.mobile_hide{min-height:0;max-height:0;max-width: 100%;overflow:hidden;font-size:0}.desktop_hide,.desktop_hide table{display:table!important;max-height:none!important}} @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} } @media only screen and (max-width: 100%;} #pad-desktop {display: none !important;} }
Read more
  • 0
  • 0
Modal Close icon
Modal Close icon