Slowing Down the Machine: Building Calm Web Tools with AI
There is a prevalent, almost deafening narrative right now about how to use AI for software development. The script usually goes something like this: generate an entire SaaS stack in four minutes, pump out three micro-apps before lunch, deploy to Vercel, monetize, and scale to the moon. Everything is framed around velocity, optimization, and market dominance.
I’m using AI, too. But I’m using it to do the exact opposite.
I’m using it to slow down.
I’m not trying to build a venture-backed tool that harvests emails, and I’m definitely not trying to “disrupt” anything. Instead, I’ve been using AI agents to help me return to a time when web development actually felt exciting, tactile, and understandable—back when the web was a collection of small, personal, and quiet spaces rather than a race to package every idea into a heavy web application.
Unlearning the Reflex to Over-Engineer
Over the years, the modern web ecosystem trained us to over-engineer by default. Got a simple project idea? The modern reflex demands a massive setup: a heavy frontend framework, a complex build pipeline, a utility CSS engine with a hundred build-step plugins, and an army of third-party dependencies just to render a form and write to a database.
Somewhere along the way, we traded the joy of knowing how our code actually worked for the convenience of running npm install until our machines ran out of memory.
Lately, I’ve been using AI to help me build a growing collection of calm, local-first, or minimalist experiments designed around simple data structures and privacy:
- ZeroBuild: A tiny, flat-file PHP micro-framework for personal sites, built with zero compile steps, minimal overhead, and an optional lightweight API layer for when a page genuinely needs a sprinkle of reactive JavaScript.
- Waymarks: A non-performative travel journal designed strictly for personal memory-keeping, not for public clout or social feeds. This is a good example of using AI to build a tool that is minimal by default, but can be expanded upon later if needed. It is built with AlpineJS, Turso and vanilla CSS.
- MiVerso: A quiet, distraction-free poetry writing app designed to be personal by default, with an optional toggle to publish a piece only when it feels ready. Built with SvelteKit, TailwindCSS and Turso.
- musi-k: My personal music microblog—a simple space to document what I’m listening to without algorithmic recommendations or engagement bait. Built with vanilla CSS, HTML and JS. I also built a custom browser extension for posting videos straight from a YouTube page, auto-populating the title, channel, and embed code. And I built a simple endpoint using PHP and SQLite, making it fast and requiring no additional overhead.
When I pull an AI agent into my workflow for projects like these, the very first thing I do is set boundaries. AI models are trained on the open internet, which means their default instinct is to hand you React boilerplates, massive dependency trees, and heavy utility frameworks for every single line of styling.
I have to actively guide my AI agents to think simpler:
- We don’t need a full framework for this. This is a single page with a form. Let’s use native HTML5, CSS and JS.
- We aren’t adding a build pipeline.
- Native CSS is exceptionally capable now, let’s write plain CSS and follow the foundations I have set in my starter CSS files.
- Since we need some DOM manipulation, let’s use AlpineJS to add some interactivity.
- Let’s use SvelteKit for this app as I need SSR and API routes, including runes and will be deployed on Netlify.
It turns out AI is actually great at this if you force it out of its default habits. It becomes an exceptionally patient pair programmer that helps me explore data flows, reason through native web standards, and write clean, direct code. I have also found that providing foundation docs helps push the AI in the right direction. I will expand upon this strategy in a future post. But the basic idea is using either markdown files with context about my goals, my stack and project requirements to allow the AI to create with the guidance I provide, or using “starter” files like a main CSS file with @layer and defined separation of concerns between layers.
Building to Learn, Not to Ship
When you strip away the pressure to “ship product” or monetize a user base, the nature of the work changes completely.
I’m not interested in building apps that extract attention or lock user data behind proprietary clouds. I want tools that feel calm. Applications that do one specific job well, respect user privacy, and then get out of the way.
Using AI in this context isn’t about generating code I don’t understand so I can cross a finish line faster. It’s about using a tool to re-examine the fundamentals. It allows me to spend time thinking about how data moves, how native Web Components or simple backend scripts fit together, and how much performance and elegance we gave up when we decided every single paragraph of text needed a complex JavaScript runtime to render.
The early web felt open and experimental because people were building things simply because they wanted them to exist, at a pace that allowed them to comprehend what they were making.
AI doesn’t have to be the ultimate accelerator for mindless digital production. If you steer it right, it can be a tool that lets you strip away the noise, skip the modern setup tax, and just enjoy writing code for the web again.
Up next: While I love returning to basic patterns, I haven’t abandoned modern web stacks entirely. In the next post, I’ll talk about how I apply this same “calm AI” mindset to building full-scale, modern web apps like PasaPuerto, Tenure, and Card-Drop without losing my sanity or losing sight of clean code.