The principle behind all of it: one stack, repeated. Every new product reuses the same tools, so both I and the AI start every project already knowing the conventions. A stack the model has seen ten thousand times is a stack it generates correctly — exotic choices are where hallucinations live. And when code gets cheap, consistency becomes the expensive, valuable thing.

Editor & agents

Cursor, AI agents, multiple frontier models

The core of the workflow. Agents that read the repo before proposing changes are the difference between vibe coding and copy-pasting from a chat window.

Frontend

React, TypeScript, Vite, Tailwind CSS

One mental model for every product. TypeScript is non-negotiable — types are the contract the AI keeps having to honour.

Mobile

Capacitor (iOS & Android)

The same React codebase ships to the App Store and Play Store. Three platforms, one set of bugs — ideally.

Backend

Firebase — Auth, Firestore, Cloud Functions, Hosting

Solo developers do not want to run servers. Firestore rules, callable functions and hosting cover 90% of what my products need.

Games

Three.js, React Three Fiber, Rapier, Zustand

Physics arcade games in the browser and on iOS — Dolphin Beyond runs on exactly this. AI is surprisingly good at R3F scenes, and surprisingly bad at game feel.

Content sites

Astro (static, zero JS)

Sites like this one. Pre-rendered HTML, perfect Lighthouse scores, nothing for a browser to execute — which is also exactly what search engines prefer.

AI in production

OpenAI APIs, content pipelines

Not just AI for building — AI in the products: 500,000+ generated quiz questions in Quiz Fight, lead detection in LostLead, the news ranking pipeline in Nuze.

Services

Mapbox, API-Football, App Store / Play Store, Simply.com

Runish draws real GPS runs on Mapbox; HeadToHead pulls fixtures from API-Football; static sites deploy to a plain Danish webhotel over rsync. Boring is a feature.

What I deliberately don't use

No Kubernetes, no microservices, no self-hosted databases, no CSS framework of the month. Not because they're bad — because every piece of infrastructure is something a solo developer has to maintain at 23:41 when a Firebase rule isn't doing what it was asked. The boring stack is what makes the ambitious products possible.

See the loop this stack powers in how to vibe code, or the results on the products page. For the mobile side specifically, there's a guide on shipping one React codebase to web, iOS and Android.