-
Dave Winer, Think different about developers:
This is the same problem web devs have, we have to become resellers for Amazon S3. Why can't Amazon, who already has an account for every freaking person in the world, let the user own their own data, which I believe they would reallllly like. I don't want access to it, I just want to make great tools for them to use
This echoes something I wrote about years ago: separating publishing from hosting.
The current paradigm for web-based software is all-in-one silos. The software and your data are trapped together on servers controlled by the software creators.
But, it doesn't have to be this way. Software should be separable from the files and content it handles—even when deployed to a server. It should access your data, with permission, wherever you control it. Developers shouldn't need to also become data landlords.
Brent Simmons recently wrote about this recently in Why NetNewsWire Is Not A Web App:
If it were a web app instead, I could drop the developer membership, but I'd have to pay way more money for web and database hosting. Probably need a CDN too, and who knows what else.
What if he didn't have to worry about database hosting at all? Let users bring their own databases. Let developers write apps that use them. Much of the complexity disappears—you might even end up with a static web app running entirely in the browser with access to the user's online data.
I've pitched this before at Mozilla: every Firefox account should come with a bit of public web hosting and private data storage that web apps can request permission to use. Users could pay to expand capacity. Alternative providers could compete with Mozilla. Developers could build tools without capturing everything users do with them. The whole ecosystem could gin up interoperable formats for apps to use. We've been here before.
But I'm not great at product pitches, and I don't know how this attracts users or makes money. I don't think I'd be able to start my own company to make it happen. Also, lately, I hear every startup is looking for an unassailable "moat"—and that's especially intensified with the current age of generative AI and its thirst for data. Stumping for a more user-sovereign web seems a bit quaint in general nowadays.
-
Simon Willison on no-build wedev:
If you've found web development frustrating over the past 5-10 years, here's something that has worked worked great for me: give yourself permission to avoid any form of frontend build system (so no npm / React / TypeScript / JSX / Babel / Vite / Tailwind etc) and code in HTML and JavaScript like it's 2009.
This blog has a "backend" build process to produce the static HTML. But, the frontend is pretty much build-free.
Web development with "vanilla" JavaScript has gotten pretty good in the last decade, thanks to Modules, dynamic import()
, Custom Elements, and a pile of other relatively recent APIs.
The easy path at work these days tends to be Next.js, but I kind of hate it. All my side projects start with touch index.{html,js,css}
. I roll on from there with maybe a live-reload HTTP server pointed at the directory (e.g. npx reload src
).
That said, I have started playing with carefully re-introducing some build tooling for a few side projects - but, only for external dependencies. I've tinkered a bit with using esbuild to compose bundles as JS modules importable by the rest of my unbundled modules.
The nice thing about this is that I can treat those external dependencies as standalone utility modules without infecting the rest of my project with build machinery. I can even just check in a copy of the built asset to keep the project stable and usable, years later.
-
Dan Sinker, The Who Cares Era:
The writer didn't care. The supplement's editors didn't care. The biz people on both sides of the sale of the supplement didn't care. The production people didn't care. And, the fact that it took two days for anyone to discover this epic fuckup in print means that, ultimately, the reader didn't care either.
It's so emblematic of the moment we're in, the Who Cares Era, where completely disposable things are shoddily produced for people to mostly ignore.
This hits me hard right now. It’s part of a broader sadness I’ve been feeling—especially around the shrinking prospects for paid work that actually feels career-meaningful.
Dan calls it “disheartening,” and I feel that. He also writes, “It’s easy to blame this all on AI, but it’s not just that.” Exactly. This didn’t start with LLMs. They just sped things up—and ensured even fewer people get paid to produce an ever-growing volume of slop.
What’s worse: much of this output isn’t even for people anymore.
The user isn’t the customer. And they’re not the product either. The real product is behavioral optimization—metrics on a dashboard. The paying customer is somewhere else entirely, and the "content" is just a means to nudge behavior and juice KPIs.
That’s why we see this flood of AI-generated blog posts, podcasts, and articles that barely say anything and just conjure a vibe. Why publish something devoid of editorial oversight or substance? Like, who is this for?! It meets a quota, hits a keyword target, triggers an engagement metric. But, it doesn't reach a person except incidentally or by accident.
The point isn’t to communicate. It’s to simulate relevance in order to optimize growth. It's all goal-tracking, A/B tests, fake doors, and dark patterns.
It’s not publishing. It’s performance art for algorithms. Interpretive dance for the bots. It's sympathetic magic—building the runways and replicas, hoping the traffic increases.
And that’s what makes me so sad. It reveals such a grim meathook future ahead, a solipsistic view of humanity: most people reduced to NPCs in someone else's growth funnel. Not peers. Not audiences. Just marks—behavioral units to be nudged for another uptick.
Anyway, I don’t have a better conclusion than Dan’s: "In the Who Cares Era, the most radical thing you can do is care." He’s right. And honestly, I’m still trying to figure out what that looks like, day to day—besides being caremad and grumpy all the time, that is.
-
Keith Kurson, "The End of Glitch (Even Though They Say It Isn't)":
The thing that breaks my heart isn’t just that another platform is shutting down—it’s that we’re losing one of the last places on the internet that prioritized joy and experimentation over engagement metrics and revenue optimization.
Glitch was always one of those platforms I wanted to love more than I actually did. I kept a paid membership for a while, built a few projects there, and genuinely rooted for what they were trying to do.
But I kept bumping against its limits. The editor never quite clicked for me, and I found myself gravitating toward other hosting options: AWS, GitHub Pages, even hardware in my basement. When Fastly acquired Glitch, I assumed they'd evolve it toward something more like Amazon Cloud9 or GitHub Codespaces—powerful cloud development environments where I've actually gotten real work done. Fastly has all the pieces to build that kind of product—but maybe the Glitch folks could have done it with a bit of whimsy?
The social aspects never hooked me either, though that's more a reflection of my own limitations than of Glitch. Being social takes effort for me, and I never quite got pulled into that community.
The Sustainability Problem
I admired how the Glitch team cultivated that community space, even if I didn't fully participate in it. Which makes its wind-down all the more frustrating.
What breaks my heart is the same thing Kurson identifies: platforms that prioritize creativity over metrics rarely survive. Most of these efforts end up ephemeral unless they're self-funded labors of love by people who pay their bills elsewhere.
I keep wishing Mozilla offered something like this—imagine if every Firefox Account came with hosting, storage, and compute, maybe with an IDE integrated right into MDN. But even Mozilla has struggled to find sustainable models for tools that help people create rather than just consume.
Casualties of the AI Gold Rush
There's something particularly galling about Glitch's timing. We're in the middle of an AI gold rush where capital flows freely to companies building the next ChatGPT wrapper, but platforms that actually help humans learn to code and create can't find sustainable footing. The bots are watching us dance and getting all the funding instead.
It feels like 2000-2002 all over again—a lot of frothy investment that'll eventually crash, leaving us to figure out who was pets.com and who was Amazon. I don't expect it all to evaporate, but we're headed for serious churn until or unless new actually generative cycles emerge. Glitch feels like a casualty of that transition.
The web needs more places that prioritize joy and experimentation. Losing them one by one makes the internet a little less magical, a little more extractive, and a lot less welcoming to the next generation of creators who might have learned to love building things on the web.
-
For years, I've tinkered with game development on the web. But, I haven't finished (m)any games. So, I decided to just focus more on finishing little interesting sketches of graphics and sound. This time around, I'm playing with portals—er, I mean Web Components
[ ... 215 words ... ]
-
For years, I've tinkered with game development on the web. But, I haven't finished (m)any games. So, I decided to just focus more on finishing little interesting sketches of graphics and sound. This time around, I'm playing with portals—er, I mean Web Components
[ ... 215 words ... ]
-
In my previous posts, I tinkered with a few variations on clustering ideas by named topics using embeddings and text generation. In this post, I'm going to show off a web UI that I built to make this stuff easier to play with interactively.
[ ... 2149 words ... ]
-
I like deploying robots to include more of the team in our core development loop
[ ... 1720 words ... ]
-
So, I wanted to produce a GIF animation of a graph diagram changing over time. What I came up with wasn't the slickest result, but it's close enough to what I'd initially imagined.
[ ... 857 words ... ]
-
I wanted to write more about building my Easy-Blog Oven. I mainly glued together things I already knew, but I think I learned some things and had some surprises anyway.
[ ... 5165 words ... ]
-
I made a new static site generator for my blog. It's not very clever. I've been calling it my "Easy-Blog Oven" and it seems to be working well so far.
[ ... 545 words ... ]
-
Last year, I started work on a new Test Pilot experiment playing with themes in Firefox.
[ ... 1864 words ... ]
-
Firefox Test Pilot is becoming a statically-generated site from content in flat files. We're moving away from Django and PostgreSQL, and it's been a bit of a journey.
[ ... 1128 words ... ]
-
Ever since I switched this blog over to a Gulp-based toolchain - holy crap, 2 years ago - I had a TODO to wire this thing up for continual deployment. Well, today I finally did it.
[ ... 291 words ... ]
-
[ ... 703 words ... ]
-
The open web is a beautiful thing that empowers makers while offering users leverage. There's nothing else like it. It's constantly improving. It's up to you what you do with it.
[ ... 2758 words ... ]
-
I built a toy app using React for web and native to get a feel for whether this hybrid approach is worth using. I think the answer is "yes" - but mainly for apps whose business logic & data models are more complex than their views.
[ ... 1648 words ... ]
-
Did you know that The Verge delivers you to around 20 companies for advertising & tracking purposes? I didn't. That might foul up your web experience a little bit. Maybe we should try something different.
[ ... 2948 words ... ]
-
[ ... 562 words ... ]
-
More random stuff collected and updated throughout the day.
[ ... 281 words ... ]
-
I'm pleased with this project layout for a node.js-based web client /
server app.
[ ... 296 words ... ]
-
I've long agreed that many sites, like blogs, are better baked than
fried. It makes for web hosting that's cheaper to run and simpler to
maintain. I've also often thought that using a database can be an
anti-pattern for managing content. But, what I've also found is
that baked sites often yield a poor writing environment. That said, I think
I'm going to give it another try, because I think I might have found a new
approach that works for me.
[ ... 1195 words ... ]
-
In my last two posts, I wrote about how I’ve been thinking about building yet another microblogging tool and how I think it might be interesting to separate web publishing apps from web hosting. Well, I started tinkering, and I’ve got a rough prototype working.
[ ... 1014 words ... ]
-
[ ... 47 words ... ]
-
I made a hero ship with beam weapons. I even built drifting asteroids that handle smashing into things. What gave me trouble was finding a way to teach enemy ships how to avoid smashing into things. You know, not perfectly, but just well enough to seem vaguely cunning and worth pretending to outsmart in a video game.
[ ... 1611 words ... ]
-
The Entity, Component, & System design pattern is old hat for many game developers. But, keep in mind that I’m a web developer, and mostly on the server side of things for the past decade or so. One of my last big revelations was discovering the Model, View, & Controller way of doing things. Apropos of that, this ECS thing seems to be a Big Deal of similar proportions.
[ ... 1445 words ... ]
-
So, I’ve been working on a retro space game for the web. I planned it as a fun project to “sharpen the saw” and get myself more current on some newer technologies. I also planned to use it as blog fodder, writing little diary entries about what I’ve been doing & discovering along the way. But, 147 commits and almost 4 months later, I’ve had fun doing the coding and have totally neglected the writing.
[ ... 208 words ... ]
-
I decided to start writing a retro space game for the web, because I thought it might be a good way to exercise a lot of interesting technologies and have fun to boot. You know, like how sending rockets into space yields astronaut ice cream & anti-shock trousers back down on Earth. But, I’ve also wanted to make games all the way back to my Atari 2600, Commodore 64, and Apple ][ days – because Warren Robinett is my hero.
[ ... 473 words ... ]
-
I want to add some team-based features to django-badger. I was hoping that someone had already built a reusable app to do most of the work for me. This happens quite a lot when I’m working with Django. Unfortunately, I haven’t quite found what I’m looking for yet. Consider this blog post either the product of my thinking out loud toward a rough spec, or a long-winded lazyweb search query.
[ ... 418 words ... ]
-
I’ve contributed code to a number of projects, often as a drive-by bug fix in a GitHub pull request. And, usually, I’ll try to do as the Romans do and follow the local naming and coding conventions. But, sometimes, I’ll fall back to my personal conventions and get dinged in the code review.
[ ... 561 words ... ]
-
Back in September, I wrote that I wasn’t leaving MDN. And, I’m not, really. But, it turns out that FirefoxOS needs some help to reach its first release milestones. So, some of us webdevs from around Mozilla are temporarily switching our daily efforts over to slay bugs on Gaia. That’s the layer of FirefoxOS which provides the overall system UI and core apps.
[ ... 1651 words ... ]
-
I’ve been interested in developing open web apps (aka the single-page app) for years. But, it feels like the space is really on fire now, since the advent of HTML5 tech and the recent moves by Mozilla and Google toward truly “appifying” these things to compete with offerings from iOS and Android. Lots of pieces have come into alignment, and great things are coming together—never mind what the folks at Facebook say.
So, I think I’m going to build a simple app and blog about it. And, these days, the first thing I think about when starting a web app is: How do I get it onto the web?
[ ... 1502 words ... ]
-
In my thinking about things IndieWeb and user-supported cloud infrastructure, I’ve had a couple of notions bouncing around in my head that might help clarify some “products” I’d like to build if and when I have time. I guess this would be good to blog about, so maybe someone else can steal my ideas (if they’re any good). Because, after all, much of this is sourced from material I’ve stolen from guys like Dave Winer.
[ ... 870 words ... ]
-
[ ... 452 words ... ]
-
[ ... 384 words ... ]
-
[ ... 1077 words ... ]
-
[ ... 1031 words ... ]
-
[ ... 947 words ... ]
-
[ ... 235 words ... ]
-
[ ... 300 words ... ]
-
Oh hey, look! It's another blog post—and this one
is cross-posted on hacks.mozilla.com.
I won't say this is the start of a renewed blogging habit, but let's see what happens.
Drag and drop is one of the most fundamental interactions
afforded by graphical user interfaces. In one gesture, it
allows users to pair the selection of an object with the
execution of an action, often including a second object in the
operation. It's a simple yet powerful UI concept used to
support copying, list reordering, deletion (ala the Trash / Recycle Bin),
and even the creation of link relationships.
Since it's so fundamental, offering drag and drop in web
applications has been a no-brainer ever since browsers first
offered mouse events in DHTML. But, although
mousedown, mousemove, and
mouseup made it possible, the implementation has been
limited to the bounds of the browser window. Additionally,
since these events refer only to the object being dragged,
there's a challenge to find the subject of the drop when
the interaction is completed.
Of course, that doesn't prevent most modern JavaScript
frameworks from abstracting away most of the problems and
throwing in some flourishes while they're at it. But, wouldn't
it be nice if browsers offered first-class support for drag and
drop, and maybe even extended it beyond the window sandbox?
As it turns out, this very wish is answered by the HTML 5 specification
section on new drag-and-drop events, and
Firefox 3.5 includes an implementation of those events.
If you want to jump straight to the code, I've put together
some simple demos
of the new events.
I've even scratched an itch of my own and
built the beginnings of an outline editor,
where every draggable element is also a drop target—of which
there could be dozens to hundreds in a complex document, something
that gave me some minor hair-tearing moments in the past
while trying to make do with plain old mouse events.
And, all the above can be downloaded or cloned from
a GitHub repository
I've created especially for this article—which continues after the jump.
[ ... 3204 words ... ]
-
[ ... 604 words ... ]
-
[ ... 1760 words ... ]
-
In my last post, I got all fluffy about how cool Ubiquity is but didn't share any code to prove the point. As it happens, I have come up with at least one useful command that I'm starting to use habitually in posting bookmarks to Delicious. You can subscribe to my command or check out the full source—this post will serve as a dissection of the thing. Since this will be fairly lengthy, follow along after the jump.
Oh, and it's been awhile since I posted something this in-depth around here, so feel free to let me know how this first draft works. And, bug reports and patches are of course welcome.
[ ... 3181 words ... ]
-
[ ... 1079 words ... ]
-
[ ... 749 words ... ]
-
[ ... 617 words ... ]
-
[ ... 199 words ... ]
-
[ ... 783 words ... ]
-
[ ... 442 words ... ]
-
[ ... 105 words ... ]
-
[ ... 823 words ... ]
-
[ ... 169 words ... ]
-
[ ... 56 words ... ]
-
[ ... 333 words ... ]
-
[ ... 84 words ... ]
-
[ ... 277 words ... ]
-
[ ... 450 words ... ]
-
[ ... 1149 words ... ]
-
[ ... 538 words ... ]
-
[ ... 2102 words ... ]
-
[ ... 830 words ... ]
-
[ ... 319 words ... ]
-
[ ... 469 words ... ]
-
[ ... 196 words ... ]
-
[ ... 63 words ... ]
-
[ ... 151 words ... ]
-
[ ... 1899 words ... ]
-
[ ... 205 words ... ]
-
[ ... 291 words ... ]
-
[ ... 353 words ... ]
-
[ ... 348 words ... ]
-
[ ... 938 words ... ]
-
[ ... 545 words ... ]
-
[ ... 217 words ... ]
-
[ ... 123 words ... ]