Bookmarks
Everything I know about good API design
Most of what modern software engineers do involves APIs: public interfaces for communicating with a program, like this one from Twilio. I’ve spent a lot of time…
Your code is your responsibility, even if AI wrote it
When you submit a pull-request, you accept full responsibility for the code you're submitting. This comes up so often in conversation I ...
AI is a tool. You shouldn't be.
Render JSX to images.Skip the browser.
Generate Open Graph images, social cards, and PDF documents from JSX, HTML, and CSS. Render with Rust and WebAssembly without a headless browser.
A rule has to hold on both sides of an API boundary. Do you duplicate the code, share it, or let the backend drive the invariant?
Learn Grid Lanes to create masonry layouts in pure CSS. Absorb the possibilities with the Field Guide’s interactive playground. Return to the cheat sheet. Get inspired by six real examples with dozens of variations.
The Best Loading States Are No Loading States
Applications often end up with all sorts of UI whose sole purpose is to occupy the space where data should eventually appear. We're all spending a surprising amount of time solving the same problem, and none of it is really product work.
How's Linear so fast? A technical breakdown
breakdown of the architecture behind Linear's speed: local-first sync, MobX observables, instant first loads, and a keyboard-first design.
The internet you grew up on isn't dying. A commercial veneer glued on top of it is. A visual essay about what actually persists.
Serve Markdown to AI agents and LLMs via the Accept: text/markdown header. Browsers get HTML, agents get clean Markdown.
Let's take a look at why the common, horizontal code structure is not ideal, where it breaks down, and what we can do about it.
Details that make interfaces feel better
A collection of details that make your interfaces feel better.
A collection of TailwindCSS utility classes for expanding the hit area of interactive elements.
Nobody Gets Promoted for Simplicity
We reward complexity and ignore simplicity. In interviews, design reviews, and promotions. Here’s how to fix it.
Why I don't use down migrations
Every once in a while, someone opens a PR on one of our open source packages adding a down function to the migration. I usually close those PRs fast with a thank you and a message “We don’t use down migrations in our projects”. While down migrations might seem like a safety net, they're often a…
How we enabled Content Security Policy for everyone
How we rolled out a Content Security Policy for every Buttondown newsletter archive, even with custom HTML, without breaking authors' pages.
When you’re hiring, seek out people who are managers of one. What’s that mean? A manager of one is someone who comes up with their own goals and executes them. They don’t need heavy direction. They don’t need daily check-ins. They do what a manager would do — set the tone…
SQLite-on-the-Server Is Misunderstood: Better At Hyper-Scale Than Micro-Scale
Learn why SQLite-on-the-server fits hyper-scale systems when each tenant gets an isolated database with local reads, durable storage, and simple…
An opinion on why we shouldn't switch to the smallest design too early.
More invoker commands, and more reasons not to use JavaScript please
The Invoker Commands API moved the implementation of button click handlers upstream, from JS to the HTML, and now it is supported by all modern engines
My own agent skills for tools I use. Contribute to sergiodxa/agent-skills development by creating an account on GitHub.
The Incredible Overcomplexity of the Shadcn Radio Button
Radio buttons are built into web browsers. Why are we using a UI library that wraps another UI library that rebuilds radio buttons from scratch? Why does rendering a radio button require multiple dependencies and several kilobytes of JavaScript? How did we make a built-in browser control so…
Affordances: The Missing Layer in Frontend Architecture
This is my personal site, where I write about Ruby, programming, and any of my varied fascinations.
Confirmation dialogs with zero JavaScript
This is my personal site, where I write about Ruby, programming, and any of my varied fascinations.
This is my personal site, where I write about Ruby, programming, and any of my varied fascinations.
Logging Sucks - Your Logs Are Lying To You
Why traditional logging fails and how wide events can fix your observability
Micro-libraries need to die already
Somehow people are still putting tiny libraries on npm, and it really needs to stop.
Stacked PRs. Stacked diffs. Stacked changes. A better workflow to manage pull requests.
Composition Is All You Need by Fernando Rojo at React Universe Conf 2025
Composition is React’s most powerful tool, but it’s also one of the most misunderstood.At React Universe Conf 2025, Fernando Rojo, Head of Mobile at Vercel, ...
Tips for good UI implementation
A collection of tips and techniques I've learned while implementing designs over several years.
No, you don't want to hire "the best engineers'
I think this might be the meanest thing I've ever written.
Prefer using gaps to margins when it comes to your component layouts.
Syntax Highlighting code snippets with Prism and the Custom Highlight API
Can you Syntax Highlight a code snippet on the web without overloading the DOM with a ton of <span> elements wrapped around the tokens? Thanks to the Custom Highlight API, you can!
Resilient Import Maps - Better Theme Development and Beyond
Import maps are great for both performance and developer experience, but their original limitations made them hard to use, especially at Shopify’s scale. We stepped up and pushed changes across the HTML spec, Chromium and WebKit to fix these issues at the web platform level. Now, developers can…
The core problem is that toasts always show up far away from the user's attention.
See Also: Asking Smart Questions.
Every now and then, in online chat rooms I hang around in, someone pops in and says something in the lines of,
please don't say just hello in chat
a guide to better developer communication
Turning your API inside-out.
The Back-end for Front-end Pattern (BFF)
When I was at SoundCloud, being transparent about our architecture evolution was part of our technology strategy. Something we’ve talked about on countless occasions but never really described in d...
Maybe don't navigate(-1) in Remix/React Router
Remix/React Router 7 has a handy hook for navigating without the user interacting. It covers use cases like:
Class methods are Ruby’s useEffect
Tread carefully around both escape hatches
Notes on code, communication, and craft
How I Stay Sane Implementing Stripe
How to implement Stripe without going mad. Contribute to t3dotgg/stripe-recommendations development by creating an account on GitHub.
How to create a good domain model is the subject of many books, but here’s a lesson I learned at 37signals: don’t be aseptic, double down on boldness.
We love concerns and have been using them for years in large codebases. Here we share some of the design principles we use.
A common critique of Rails is that it encourages a poor separation of concerns. That when things get serious, you need an alternative that brings the missing pieces. We disagree.
Active Record, nice and blended
Active Record restates the traditional question of how to separate persistence from domain logic: what if you don’t have to?
Globals, callbacks and other sacrileges
Maximalist positions are a thing in our industry. Take a technique, outline its drawbacks, extrapolate you can’t use it under any circumstance, and ban it forever. We are lucky that Rails embraces exactly the opposite mindset as one of its pillars.
Stop just using “Frontend” or “Backend” to describe the Engineering you like
Why the “frontend” vs “backend” engineering axis doesn't map well to engineers’ psychology. And how using just one division can lead to job mismatches, turnover, and even push some new grad engineers into product management.
You Can't Not Have a Framework
Lots of hubbub about frameworks versus libraries in browser development. Its an unavailing conversation because the choice doesn't really exist.
This doesn't warrant a blog post
But that doesn't matter, publish it anyway
"Because I wanted to" is a perfectly valid reason to build something.
Layered Architectures with Laravel
I'm Martin Joo, a software engineer and content creator. This blog is about PHP, Laravel, Domain-Driven Design, Test-Driven Development, APIs.
Don't Sleep on AbortController
Learn how to make anything abortable in JavaScript.
When I started my career, REST was at the peak of its adoption. It had become the de facto standard for designing web APIs with vast amounts of tutorials, resou
A quick blog on how I would implement auth for my applications.
Crafting engaging experiences for the internet.
Counterscale and the New Self-Hosted
Back in January I launched an open source product. It’s called Counterscale, and it’s a web analytics service to help you understand your website traffic.
Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity
Designing Software that Maximizes Developer Productivity. Learn how Shopify took its code base from monolith to modular monolith.
Migrating from Radix to React Aria: Improving Accessibility and UX
We migrated from Radix and Ariakit to React Aria to enhance accessibility, improving keyboard navigation, screen reader support, and overall user experience.
Building future facing frontend architectures
A deep dive into how component based frontend architectures can implode with complexity at scale, and how to avoid it.
Navigating the future of frontend
Make sense of modern frontend meta-frameworks. Connect the dots between fundamental concepts old and new.
We should ban margin from our React components. Hear me out.
In Loving Memory of Square Checkbox
History of checkboxes and radio buttons in user interfaces
A basic guideline on implementing auth for the web.
I’ve noticed a common anti-pattern across teams and organizations I’ve been a part of: the desire to make decisions faster.
RSC is React Server + Component | bobae kang
React Server Component is best understood as React Server + Component, not React + Server Component.
Passkey-Based Auth in Remix (feat. Alex Anderson) - YouTube
Alex teaches Brooks how to implement passkey-based (i.e. passwordless) authentication using the Web Authentication API via his Remix WebAuthn Strategy packag...
Remix Movies: build a movie browser with Remix - YouTube
Pull all the levers Remix offers to build a better website with ⚡️ fast data loading - HTML from the server - out-of-order HTTP streaming - In-memory JavaScr...
Trellix: build a Trello clone using Remix - YouTube
Trellix is a basic Trello clone in Remix with some not-so-basic user interactivity. We'll use this example application to explain many web concepts in Remix,...
An interactive guide on designing better target sizes on the web.
Increasingly miffed about the state of React releases
JavaScript, math, maps, etc
The Website vs. Web App Dichotomy Does Not Exist
A one-dimensional spectrum can't sufficiently capture the tradeoffs involved in web development.
Why Fetch Promise Does Not Reject on Error Responses
The fetch Promise doesn't reject on error responses and that's entirely correct! Here's why.
A Well-Known Links Resource - Jim Nielsen’s Blog
In my previous article exploring what might go on my blog’s home page, I wondered aloud: It’d be neat to be able to surface (credible) sites that are linking…
The OG Social Network: Other People’s Websites - Jim Nielsen’s Blog
“Organize the world's information and make it universally accessible and useful.” That’s Google’s stated mission. But what if the world's information becomes…
Rationale for a Browser-Level Color Scheme Preference - Jim Nielsen’s Blog
Sara tweeted : If you automatically switch your blog theme to dark colors using @.prefers-color-scheme, please please provide a way to switch to a light theme…
A Well Known URL For Your Personal Avatar - Jim Nielsen’s Blog
Well-known URLs are pretty neat. I’ve even dared propose one before here on my blog. And now I’m here to propose another: .well-known/avatar The idea is…
Stop Lying to Your Users | Epic Web Dev by Kent C. Dodds
Chances are your app is lying to your users. I know you don't mean it. Building truthful apps is hard. But you've been lied to by so many other apps you use ...
Challenging Established Norms: Making Component Fetching the Exception
Initially, integrating data concerns within our components appeared intuitive to me and simplified the developer experience. However, I eventually found reasons to treat it as a last resort.
Be the browser’s mentor, not its micromanager
Key principles using modern CSS, fluid type, fluid space, flexible layout and progressive enhancement will help you to build better front-ends that work for everyone.
The ideal viewport doesn’t exist
Before you settle on basing design decisions on a handful of strict breakpoints, make sure you consider the vast fragmentation of screen sizes and browser viewports.
A little bit from David Pierce’s Who killed Google Reader? One feature took off immediately, for power users and casual readers alike: a simple sharing system that let users subscribe to see …
The fediverse and the indieweb
I love the indieweb and what it stands for:When you post something on the web, it should belong to you, not a corporation. Too many
The “Don’t Repeat Yourself” (DRY) principle is my main motivation for adding content to my site—especially to my “notes” section. I’ve gone as far as linking my
Everything You Can Test In Your Laravel Application
A common challenge in testing is not only HOW to test something, but WHAT you can test. That's why I have made a list of all the things I like to test in my applications.
Don't make me think, or why I switched to Rails from JavaScript SPAs
I picked Ruby on Rails over React-based SPA to build Reviewbunny and it was wonderful. I didn't procrastinate determining the perfect setup …
Generating income from open source
Ink has been getting some good traction lately and it's already being used by some well-known companies for a while. Like most other open so…
Client-side JavaScript and React criticism: What comes next?
How do we improve JavaScript usage, teach progressive enhancement and reconcile the community?
Fast and maintainable patterns for fetching from a database
In this post, I want to talk about how we can build better application frameworks and how we can structure code in our applications more clearly.
A collection of bad practices in HTML, copied from real websites.
Streaming HTML to a browser as your server generates it seems simple, right? Here is what you need to know for effective streaming.
Prioritise content over components
Visually, components are unique, flexible units to compose complete layouts. For content, they can trap reusable data into single-use decorations.
Overcoming Popular Issues With React Projects
Front-end tips from Nick Olszanski
I've got an new idea for an application, so naturally I started thinking about what tech stack I want to use to build it. Lately I've been a bit bothered by the growing complexity of Next.js, and I've been hearing so many good things about Remix, so I jumped in a gave it a shot.
Progressively enhance for a more resilient web
There has been a lot of talk on the socials lately about progressive enhancement. Some good, some bad, and while the bad is often misled I get it.
Get in Zoomer, We're Saving React
Looking back, and forward
What if your Index Page was Smart?
Let's rethink the humble Index Page from first principles.
Block Links: The Search for a Perfect Solution
I was reading this article by Chris where he talks about block links — you know, like wrapping an entire card element inside an anchor — being a bad idea.
Debug your server-side Remix code using VSCode
Debug server-side Remix using VSCode. GitHub Gist: instantly share code, notes, and snippets.
Maybe personal sites aren’t a real social media alternative for most people. I take Mia’s point: For the record, I would way rather have blockquote’d Mia’s words there with …
Trent Walton’s blog. Trent is a web designer and co-founder of Luro and Paravel
Using rel=preload for responsive images
If you’re looking to preload images in your webpages it’s probably because you’re trying to improve your Core Web Vitals scores, most specifically Largest Contentful Paint (LCP). Given these will be part of Google’s ranking algorithm in 2021 it’s vital …
How to avoid layout shifts caused by web fonts
One of the biggest causes of layout shifts for my clients is late-loading web fonts, let's look at how to optimise them!
Why Remix doesn’t infer types from loaders for useLoaderData
The fully-stacked web framework. Contribute to remix-run/remix development by creating an account on GitHub.
Survivorship Bias in Web Performance
Why your analytics shows your site as faster than it is, and why FCP is a key metric to optimise for.
The "best" way to manage icons in React.js
How to remove icons from JavaScript bundles without losing the flexibility of inline SVG
Live validation is problematic
Find out why validating forms as the user types or moves between fields causes more problems than it solves.
Stop building client-side forms
Forms are deceptively hard. Client-side forms are 10x harder.
Why Decentralization Isn't as Important as You Think
If you’ve spent any time at all on crypto Twitter, you’re familiar with the web3 narrative. It goes like this: in the beginning, the web was “truly decentralized.” Against all odds, the World Wide ...
Why I Quit Google to Work for Myself
For the past four years, I’ve worked as a software developer at Google. On February 1st, I quit. It was because they refused to buy me a Christmas present.
Envato Market has recently introduced a new concept called a Use Case to help us reduce the amount of logic in our Rails models and controllers, while simultaneously revealing the features of our application.
UX Myths collects the most frequent user experience misconceptions and explains why they don't hold true.
Why we use progressive enhancement to build GOV.UK
There seems to be a common belief among front-end developers that progressive enhancement is either old fashioned or has simply been replaced by single page applications. This is a problem of perception. We’d like to explain why we use progressive
Building a resilient frontend using progressive enhancement
How to build web pages so they work in HTML first: starting with HTML, extra styles and features, using JavaScript.
I Want To Confirm a Prompt That We Stay Alert
Rich Harris wrote an incisive piece about the recent drama surrounding Chrome and its sudden breakage of certain JavaScript APIs ( confirm() , prompt()…
Disclaimer : these are mostly thoughts I’m thinking out loud with no real coherence or point to drive home. Writing it all is a way to question what I actually…
Last week, I learned that the Google Chrome team is planning to deprecate alert(), prompt(), and confirm(), the three browser-native ways to surface a modal window to users. The phrasing of the ticket implies that this is only on cross-domain sites (ie. third-party iframes), which in-and-of itself…
Back to the Bad Old Days of the Web
A short rant about the current state of web standards.
This is the blog of Peter-Paul Koch, web developer, consultant, and trainer. You can also follow him on Twitter or Mastodon. Atom RSS
How to save the open web, & get (re)started with RSS
Client-Side Architecture Basics
Though the tools we use to build client-side web apps have changed substantially over the years, the fundamental principles behind designing robust software have remained relatively the same. In this guide, we go back to basics and discuss a better way to think about the front-end architecture…
Organizing App Logic with the Clean Architecture
In this article, you'll learn about the Clean Architecture, why we should separate the concerns of large applications into layers, the 6 most common types of application logic, and which layer they belong to.
Implementing DTOs, Mappers and the Repository Pattern
There are several patterns that we can utilize in order to handle data access concerns in Domain-Driven Design. In this article, we talk about the role of DTOs, repositories & data mappers in DDD.
Imagine that you are looking at the blueprints of a building. This document, prepared by an architect, tells you the plans for the building. What do these plans tell you?
Better Software Design with Application Layer Use Cases
In this article, we explore how organizing application logic as Use Cases in the application layer helps to make large typescript projects easier to reason about.
Wikipedia says an Anemic Domain Model "is the use of a software domain model where the domain objects contain little or no business logic (validations…
Value Objects - DDD w/ TypeScript
Value Objects are one of the primary components of Domain-Driven Design. Here's a simple Value Object class in TypeScript.
Don't overabstract your components
Improve your component's API by writing focused abstractions that make your components composable.
Starting with Version 15, Safari supports the theme-color <meta> tag both on macOS and iOS. That’s exciting news because now the first desktop browser
A reflection on skip links and what a native HTML skip link could look like
Rendering optimizations that come naturally.
Implement a Skip Link for Navigation-Heavy Sites
Add a link to the beginning of your page to help keyboard navigators skip over repeated links.
Meaningful Motion with Action-Driven Animation
Simple guiding principles for making animations more meaningful
An Interactive Guide to CSS Transitions
This comprehensive guide shows how to use CSS transitions! A back-to-basics look at the fundamental building blocks we need to create microinteractions and other animations.
What is that preload? What does it do? And how can it help you? Preload gives developers the ability to define custom loading logic without suffering the performance penalty that script-based resource loaders incur. In human terms, it’s a way to tell a browser to start fetching a certain resource…
The unreasonable effectiveness of simple HTML
I've told this story at conferences - but due to the general situation I thought I'd retell it here. A few years ago I was doing policy research in a housing benefits office in London. They are singularly unlovely places. The walls are brightened up with posters offering helpful services for…
Open Peeps is a hand-drawn illustration library to create scenes of people. You can use them in product illustration, marketing, comics, product states, user flows, personas, storyboarding, quinceañera invitations, or whatever you want! ⠀
Basic System Design concepts every Software Engineer should understand.
A primer on investing for designers and developers
Thoughts on design, engineering, and building products. Essays and reflections from Brian Lovin.
In Critical Defense of Frontend Develop
The field of frontend development is in another crisis, largely due to an incomplete, misinterpreted definition and a bizarre mess created by “web development as a commodity” and “web development as software development.” How frontend development is more than development, and what we can (and…
As a web developer, you may take it for granted that you cannot nest a hyperlink. I mean, you can nest a hyperlink, but more likely than not you already know how problematic that can be — and not just because the validator will kick that back as an error.…
Scalable Vector Graphic (SVG) is emerging as the preferred graphic format to use on the web today. Are you abandoning the icon font or replacing old pg, gif
This post contains everything you need to know about alt-texts! When to use them and how to perfectly craft them. By me, Daniel, a web…
Polymorphic React Components in TypeScript
How to define strongly-typed React components that can inherit props from arbitrary HTML elements
Several years ago I got curious about how css worked at scale. When I first started out, there weren’t nearly as many learning resources as there are now. There were a few books that my friends lent me and a couple of decent blog posts. But CSS was still pretty new and most people hadn't started…
Let me share with you the experiences I have made lately with React Query. Fetching data in React has never been this delightful...
Mobile-first, a solution to the constraints of devices in the early days of mobile computing revolution. Back then it made a lot of sense, and even to this day it works well in a lot of situations. Though what it invariably does do is create two…
TL;DR: Stop using the word drop-down. Instead choose a term that accurately describes the control you want. I have worked both with native platform developers and web developers. While control names might differ, if a control was functionally the same then it was not an issue. A TextBox, for…
Decoupling, Architecture and Teams
This article discusses the relationship in software development between code organisation and social organisation. I discuss why software an...
TL:DR Successive, well intentioned, changes to architecture and technology throughout the lifetime of an application can lead to a fragmente...
Homepage of Michel Weststrate
"He's a frontend guy, is this even a fair question to ask?" The head of engineering was worried about our systems design question …
How React Query gives you almost everything you thought you needed GraphQL for
GraphQL solves every problem you've ever had talking to APIs on the frontend. Mention a switch to GraphQL to your team and they think it's a joke. Rewrite our entire app? oh you jokester. React Query is the perfect middle ground ❤️
Engineers often jump into Redux, MobX, XState, or Recoil before they really need to. That's what large orgs use so it must be right.
What is the Value of Browser Diversity?
In May 2019 I attended a talk by Mike Taylor who works on webcompat at Mozilla. Mike told the sordid story of window.event, a non-standard IE invention that was replicated in Konqueror, which showed up in Webkit, which stuck around in Blink, and was now Mike’s problem in Firefox. It was a good…
Margins and Composability in CSS
Engineering and thoughts.
Nailing Your First (Info-Product) Launch
Microconf 2018 talk recap
Defining Component APIs in React
Design engineer and aspiring indie game dev based in Brooklyn, NY
The Modern Front-End Design System Stack
Design engineer and aspiring indie game dev based in Brooklyn, NY
Building the New facebook.com with React, GraphQL and Relay
Open source projects like React, GraphQL and Relay are powering more and more Facebook services. In this session, we'll discuss how we use the latest...
Techniques for keeping your app code under control even when requirements shift dramatically.
When frontend means full stack
Reflections on the shifting responsibilities of frontend developers.
About HTML semantics and front-end architecture
A critical look the term 'semantic HTML' and the limitations it has created for web engineers
I probably go back and read Nicolas Gallagher's amazing About HTML semantics and front-end architecture blog post once a week.
CSS Utility Classes and "Separation of Concerns"
Over the last several years, the way I write CSS has transitioned from a "semantic" approach to something more like what people call "functional CSS." In this post I explain how I got to this point and share some of the lessons and insights I've picked up along the way.
Second-guessing the modern web
What if everyone's wrong?
Daydreaming a post-HTML Utopia
Writing Type-Safe Polymorphic React Components (Without Crashing TypeScript)
A blog about TypeScript, mostly.
“One of the great commandments of science is, "Mistrust arguments from authority." Too many such arguments have proved too painfully wrong. Authorities must prove their contentions like everybody else.” ~ Carl Sagan
How to Design a Web Application: Software Architecture 101
Originally posted on Educative.io So you’ve embarked on the entrepreneurial journey to build your ow...
A skeleton screen is a technique of rendering placeholders for text, numbers, and other parts of a UI that haven't yet loaded. As a user interacts with the UI, they immediately…
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
frontend design, react, and a bridge over the great divide
I'm Brad Frost, an independent creator, web designer & developer, teacher, speaker, writer, musician, and artist based in Pittsburgh, PA.
The Elements of UI Engineering
What makes UI engineering difficult?
Let’s say there is a divide happening in front-end development. I feel it, but it's not just in my bones. Based on an awful lot of written developer
Taming the asynchronous beast with ES7
By: Nolan Lawson Published: 05 March 2015
We have a problem with promises
By: Nolan Lawson Published: 18 May 2015
7 Principles of Rich Web Applications
7 actionable principles for websites that want to make use of JavaScript to control their UI and deliver the best performance
🌱 My blog is a digital garden, not a blog
The phrase “digital garden” is a metaphor for thinking about writing and creating that focuses less on the resulting “showpiece” and more on the process, care, and craft it takes to get there.
Shape Up: Stop Running in Circles and Ship Work that Matters
Shape Up will help you break free of “best practices” that aren’t really working, think deeper about the right problems, and start shipping meaningful projects your team can celebrate.
I first got online in 1993, back when the Web had a capital letter — three, in fact — and long before irony stretched its legs and unbuttoned its flan
Design Systems and Front-End Architecture by Stuart Robson
What is a Design System?
Turning the database inside-out with Apache Samza
Confluent is building the foundational platform for data in motion so any organization can innovate and win in a digital-first world.
I'm Brad Frost, an independent creator, web designer & developer, teacher, speaker, writer, musician, and artist based in Pittsburgh, PA.
The sectioning elements in HTML5 are <nav>, <aside>, <article>, and <section>. <body> is also kind of a sectioning element since
Going Indie. Step 2: Reclaiming Content
We have lost control over our content. To change this, we need to reconsider the way we create and consume content online. We need to create a new set of tools that enable an independent, open web for everyone.
— The personal website of Sara Soueidan, inclusive Web UI engineer
Why Text Buttons Hurt Mobile Usability
The usability standards for buttons are higher for mobile apps than desktop apps. With a smaller screen and finger navigation, mobile buttons must be easy to tap, read, and recognize. Most solid buttons meet this standard, but text buttons rarely do. Before you use text buttons on your app, here’s…
📢 Various README templates & tips on writing high-quality documentation that people want to read. - race2infinity/The-Documentation-Compendium
Bulletproof node.js project architecture 🛡️
Bulletproof node.js project architecture 🛡️
The Power of Sensible Defaults
Choosing the “best tool for the job” is a mantra that many software engineers repeat when asked to explain their choice of tool, language or framework. In some cases, this choice is right, however far too many times in my career I’ve seen “best tool for the job” loosely translate to whatever was…
A free guide to all HTML elements and attributes.
I graduated with a Computer Science minor from the University of Virginia in 1992. The reason it’s a minor and not a major is because to major in CS at UVa you had to go through the Engineering School, and I was absolutely not cut out for that kind
CSS Reference is a free visual guide to CSS. It features the most popular properties, and explains them with illustrated and animated examples.
In this article, I describe several architecture issues I faced in my career.
Learn how to design awesome UIs by yourself using specific tactics explained from a developer’s point-of-view.
Scaling React Server-Side Rendering
I had the opportunity to work on scaling a React rendering service, adapting a fixed hardware provision to deal with increasing load. Over the course of many months, incremental improvements were made to the system to enable it to cope with demand. I thought it might be useful to share the more…
Some of the components I've explored here have specific standardized requirements in order to work as expected. Tab interfaces, for example, have a prescribed structure and a set of interaction behaviors as mandated by the WAI-ARIA specification. It's at your discretion how closely you follow…