Few things are more annoying than losing your progress halfway through a form. Maybe the browser crashes. Maybe the tab closes. Maybe your kid yells from the other room, and you come back three hours later wondering why you thought now was a good time to fill out a mortgage application. Whatever the cause, form-saver makes those interruptions a lot less painful, which helps because forms are usually frustrating enough on their own.
Dispatches From The Internets
Never Lose Form Progress Again
Different contexts, different tools, same person
People are not static, we are dynamic. In order to meet our needs at any point in our lives or day, the UIs we create must be able to adapt to us — not the other way around.
Accessibility Assistant for Figma v52
I just hit “publish” on Accessibility Assistant for Figma v52, and I wanted to share why this release matters so much to our team.
Some blind fans to experience Super Bowl with tactile device that tracks ball
A few years ago, a couple students at the University of Washington asked me to come to their campus for a visit. They gave me a demo of an early prototype they’d been working on — a haptic feedback device that could allow someone who is Blind or low vision to follow a game. The demo took video data from a tennis match and mapped it onto the haptic tablet. It felt like Pong, but they had a bolder vision — tackling fast-moving and complicated sports like basketball, football, American football, and hockey.
I immediately invited them to pitch us for the AI for Accessibility Grant Program that I ran for Microsoft. With so much focus on assistive technology to enable folks to work and accomplish common life tasks, I loved that the OneCourt team was interested in enabling people with disabilities to enjoy leisure activities like sporting events. Moreover, I saw the potential to enable Blind and low-vision parents to experience their kids’ sporting events, which could be life-changing for them.
Needless to say, they wowed both me and the rest of the seleciton committee. We funded them to expand their prototypes and pursue partnerships with different professional sports leagues, teams, and venues. They were ambitious and it’s paying off.
Fast forward a few years and they’re enabling a handful of Blind & low vision sports fans to exerience the Super Bowl in a whole new way, using their technology. It’s amazing and I could not be more proud of them.
Congrats y’all!
Why we teach our students progressive enhancement
Excellent post and primer on progressive enhancement. I particularly love this framing:
progressive enhancement is not about preventing failure, it’s about defining what must always work.
I also want one of those ”Wat als de JavaScript uit staat?“ stickers.
Repeatable Form Fields Made Simple
Sometimes you need people to provide multiple instances of the same information: email addresses, phone numbers, team members, or emergency contacts. The form-repeatable web component handles that cleanly, including duplication, renumbering, and seamless form submission via the ElementInternals API.
A Production-Ready Web Component Starter Template
Starting a new web component from scratch usually means rebuilding the same scaffolding: test setup, build configuration, linting, CI/CD, docs, and all the rest. After building—and rebuilding—more components than I care to count, I pulled those patterns into a starter template so you can spend your time on component behavior instead of project plumbing.
Fullscreen Video and Iframes Made Easy
Adding fullscreen capabilities to videos and embedded iframes shouldn’t require wrestling with prefixed APIs or managing focus states. The fullscreen-control web component handles all of that for you — just wrap it around the element. The component handles the rest as a discrete progressive enhancement.
Dynamic Datalist: Autocomplete from an API
HTML’s datalist element provides native autocomplete functionality, but it’s entirely static—you have to know all the options up front. The dynamic-datalist web component solves this by fetching suggestions from an API endpoint as users type, giving you the benefits of native autocomplete with the flexibility of dynamic data.
Lazy Loading Images Based on Screen Size
Native lazy loading and srcset are great, but they have a limitation: they always load some variant of the image. The lazy-img web component takes a different approach—it can completely skip loading images when they don’t meet your criteria, whether that’s screen size, container size, or visibility in the viewport.
This is particularly valuable for mobile users on slow connections or limited data plans. If an image is only meaningful on larger screens, why waste their bandwidth loading it at all?