Suppose I want to greet you in my favorite color. This would require combining information from two different computers. Your name would be coming from your computer. The color would be on my computer.
I’ve written and spoken many, many times about the Cache-Control response header and its many directives, but one thing I haven’t covered before—and something I don’t think many developers are even aware of—is the Cache-Control request header.
Time is what keeps everything from happening at once. —Ray Cummings It’s hard to write much code without encountering the need for when. We might need to record when something happened. Or dictate when something should happen. Or give a range during which the thing can happen. Or in some other way, our code needs to deal with dates and times.
How I use the 'Three Layers of Data' architecture pattern for React and Next.js apps to avoid common pitfalls, tech debt, and improve performance
Most of us underestimate data fetching complexity until it’s too late. Many projects begin innocently with useEffect() and fetch() sprinkled across components. Before you know it, the growing tangle of error handlers, loading states, memoization, and caching logic turns your code into a debugging nightmare.
Okay, so in Astro you have two things: Astro Components: They have the .astro extension. They execute exclusively on the server or during the build. In other words, their code is never shipped to the client.
If you have opened Copilot Chat in VS Code lately and didn’t notice the tiny dropdown hiding at the bottom, you’re not alone. It’s easy to miss, especially when you’re heads down trying to get something shipped.
When building a project, it’s very likely that we will install third-party packages from npm to offload some tasks. On that topic, we know there are two major types of dependencies: dependencies (prod) and devDependencies (dev). In our package.json, it might look something like this:
If you know how JavaScript works behind the scenes in the browser environment (I highly recommend you check this 15-minute read article if you don't know), it's relatively easier to understand unlike Node.js. It doesn't have a bunch of phases or so on. But why does Node.
If you’ve built a frontend application in the past five years, you’ve probably had a moment where you stared at your state management setup and thought, “Why is this so unnecessarily complicated?” Between prop drilling, context hell, reducer bloat and the never-ending debate
Poor internet connectivity doesn’t have to mean poor UX. With PWA technologies like IndexedDB, service workers, and the Background Sync API, you can build an offline-friendly image upload system that queues uploads and retries them automatically — so your users can upload stress-free, even when offline.
“The best moments in our lives are not the passive, receptive, relaxing times… The best moments usually occur if a person’s body or mind is stretched to its limits in a voluntary effort to accomplish something difficult and worthwhile.
One of the most consistently neglected parts of today’s user experiences is our handling of errors. We’re so busy designing the happy paths through our products that we often forget to give the same care and attention to the times when things will go wrong.
When you build a native app, all application code typically runs on the main/UI thread by default. When you experience lag, the best way to reduce it is to offload business logic—such as computation and networking—from the main thread to multiple background threads.
We all want our UIs to feel great and animations can definitely help with that. But how do you actually create a great animation? This article is a collection of practical tips to help you go from good to great animations.
What's your position on Tailwind? Love or hate? Seems to be no in-between for that one. Even if you've never used it, you probably heard of it by now. It's the second most popular UI framework out there after all, and the source of lots of hype in certain corners of the internet.
The rise of AI assistants in coding has sparked a paradox: we may be increasing productivity, but at risk of losing our edge to skill atrophy if we’re not careful. Skill atrophy refers to the decline or loss of skills over time due to lack of use or practice.
We’re excited to announce that you can now install JSR packages directly using both pnpm and Yarn! Not only can you access JSR packages via pnpm and yarn, but you can also install any npm packages with a JSR dependency.
But what exactly is llms.txt, who’s using it, and—more importantly—should you care? llms.txt is a proposed standard for helping LLMs access and interpret structured content from websites. You can read the full proposal on llmstext.org.
About three years ago I saw a quite curious and interesting post on Hacker News. A student, Christopher Tarry, was able to use cosine similarity against a vector of top words frequencies in comments, in order to detect similar HN accounts — and, sometimes, even accounts actually controlled by the same user, that is, fake accounts used to uncover the identity of the writer.
AI is not a linear process. To scale effectively, engineering leaders must account for varied edge cases, presenting a new set of challenges. AI offers huge wins for engineering teams, but almost as many headaches along the path to successful implementations.
In this tutorial, you'll build a simple AI chat app using React.js on Next.js and the OpenAI API. You'll learn how to set up an API route to send prompts to OpenAI and build a frontend that displays the conversation in real time.
For most of the last decade, being a software engineer has been a lot of fun. Every company offered lots of perks, layoffs and firings were almost unheard of, and in general we were treated as special little geniuses who needed to be pampered so we could work our magic.
React and Next.js have powered some of the web’s most ambitious projects in the last few years. In this period, teams have pushed the envelope on performance (achieving dramatic gains in Core Web Vitals like LCP and the new INP metric), balanced server-side and client-side rendering trade-offs, devised clever caching and state management schemes, and improved both developer and user experience.
Whether it’s building, testing, or deploying code, automating manual processes is key to improving developer experience and achieving a successful DevOps strategy.
After ten years of being a vivid space user, I decided to move all my projects to tabs. 😲 I applied this change to this blog's repository, and a problem came to light. If you change the formatting of hundreds of files, you're messing with your Git history. git blame becomes pretty useless.
REST (or, rather, how REST is broadly used) encourages you to think in terms of Resources rather than Models or ViewModels. At first, your Resources start out as mirroring Models. But a single Model rarely has enough data for a screen, so you develop ad-hoc conventions for nesting Models in a Resource. However, including all the relevant Models (e.g. all Likes of a Post) is often impossible or impractical, so you start adding ViewModel-ish fields like friendLikes to your Resources.
Rolldown is a blazing-fast JavaScript bundler written in Rust, designed to work seamlessly with the Rollup API. The primary goal of it is to power Vite as its unified bundler in the near future. Right now, Vite relies on esbuild for lightning-quick local development and Rollup for production builds.
Small models get better, regulation moves to the states, and more. The new AI Index Report shows a maturing field, improvements in AI optimization, and a growing saturation of use - and abuse - of this technology.
This is an article about Vite and its features which are related to the node_modules of your projects. In this article, we will explore how Vite deals with them in different modes and scenarios.
It’s not that hard to build a fully functioning, code-editing agent. It seems like it would be. When you look at an agent editing files, running commands, wriggling itself out of errors, retrying different strategies - it seems like there has to be a secret behind it.
This post is about a bad code pattern I see quite often. It’s about state management, particularly state synchronization. Often it is a source of bugs, glitches, and performance problems. Usually it is solvable by adjusting the state shape.
Historically, in a browser, programmatic access to cookies has revolved around the document.cookie API, which is simply a string getter/setter. To read a single cookie from that string, you must parse the whole string into a structured format.
As it happens, I already wrote a post on why Commas are Bad. We did not arrive at any specific conclusion apart from commas maybe being worth rethinking and replacing with some other things. Among all the languages and formats that could do with fewer of them...
As a dad of two toddlers with very particular tastes—one constantly wants treats for dinner and the other refuses anything that isn’t beige—I view dinnertime at my house as a nightly episode of “Chopped: Toddler Edition.
Remember the SSR Performance Showdown? And Theo's coverage of it? Now that @fastify/vue and @fastify/react reached 1.0.0, it's time for a revisit. Especially because we didn't test metaframeworks back then. We were just looking at the raw performance of frontend frameworks. Now, how do Vue and React fare when used in Fastify, Nuxt and Next? Let's find out.
In March, over 1,000 developers and technologists gave us insights into what they think about open source and the role it plays with AI. The emergence of powerful and cost-effective open-source models has intensified the debate between open-source and proprietary AI.
At Hopp, we're building a cross-platform remote control application designed for a low-latency remote pair programming experience. Providing the best possible user experience is our top priority. Early in the development journey, the decision came to use either Tauri or Electron to build the app.
It is easy to assume that hiring solid engineers has never been simpler because fewer businesses are posting jobs and more engineers are competing for roles. But I’ve been talking with engineering managers, directors, and heads of engineering at startups and mid-sized companies, and got a surprise: they say the opposite is true!
In fact, many report that in 2025 they find it harder to hire than ever. This seems like a contradiction worth digging into, so that’s what we’re doing today, covering..
AI is changing how we think about coding. While tools evolve, critical thinking, problem-solving, and creativity remain the essential skills for top developers. GenAI is fast changing the modus operandi of software development.
Synchronous API integrations create temporal coupling [1] between two services based on their respective availability. This is a tighter form of coupling and often necessitates techniques such as retries, exponential delay and fallbacks to compensate.
Many of us became software engineers because we found our identity in building things. Not managing things. Not overseeing things. Building things. With our own hands, our own minds, our own code. But that identity is being challenged.
There is a misconception that Cursor and Claude are just for prototypes. While this combo is great at writing new code, it’s also very effective at structuring code, standardizing, refactoring, and maintaining large projects. It’s super exciting since you can build software 5-30x faster.
I’ve been trying to write this post at least a dozen times. I don’t mean this figuratively; at one point, I literally had a desktop folder with a dozen abandoned drafts.
Oracle has just issued its latest reply in the ongoing proceedings at the US Trademark and Patent Office. We’re now waiting on the USPTO to weigh in—this is the moment when public attention matters.
Reconciliation is the process by which React updates the DOM to match your component tree. It’s what makes React’s declarative programming model possible - you describe what you want, and React figures out how to make it happen efficiently.
Fixing performance issues in the real world means bridging the gap between your development environment and the diverse performance experiences of your users. In this post, we'll look at new features in Chrome DevTools that help you base more of your performance debugging decisions on real data rather than guesswork.
A step-by-step guide to shrinking your React bundle with a real example. In this post, I’ll show you 7 proven ways to reduce bundle size and speed up your builds — with a real demo you can try.
Cover Flow – the iconic carousel of tilted album covers made famous by Apple in the late 2000s – remains a visually striking UI pattern. Originally seen in iTunes and Mac OS X Finder, Cover Flow let users flip through items as if browsing a tangible collection.
Anthropic Claude 3.7 Sonnet, Claude 3.5 Sonnet, OpenAI o3-mini, and Google Gemini Flash 2.0 are now generally available in GitHub Copilot. With this change, these models are promoted from preview release terms to generally available release terms.
Microservices changed how we build software by breaking systems into composable, independently deployable units. But as systems scale, so does the cognitive and operational load on developers — tracking dependencies, debugging across services, and managing deployments.