The toolkit and infrastructure I build websites and apps on. AI-generated UI, GitHub for source, Vercel for hosting, Hetzner for heavier data work, and a rotating set of AI / media / social APIs depending on the project.
DEFAULT WEBSITE BUILD ORDER
| STEP | SERVICE | USE FOR |
|---|---|---|
| 1. UI scaffold | v0 | Generate Next.js / React UI from prompts |
| 2. Repo | GitHub | Source control; also small JSON state via Contents API |
| 3. Host | Vercel | Deploy + serverless functions + cron |
| 4. DB / auth | Supabase | Postgres + auth + storage when GitHub-as-DB isn't enough |
| 5. AI gen | Anthropic / OpenAI / Fal / Replicate / Runway | Text, image, video, audio |
| 6. Email + cron | Resend + Vercel cron | Transactional email + scheduled jobs |
| 7. QA | Puppeteer | Visual QA, login-gated scrape, e2e flows |
FAL VS REPLICATE
HOUSE RULES
| RULE | WHY |
|---|---|
| No hardcoded credentials in source | Env vars only, mirrored into Vercel per project |
| No Vercel Blobs for small JSON state | CDN cache makes admin writes appear stale; GitHub Contents API instead |
| Date-stamped project folders (NAME-YYYY-MM-DD) | Convention; keeps the timeline searchable |
| Verify the deployed artifact contains the change | Never assume cp / build worked |
The services I reach for first when building. Grouped by what they do. Pricing tier and exact integration detail vary per project.
Two Hetzner Cloud servers in Helsinki: a production API box that powers the Everysong music data API, and a separate ingest / staging box for building the indexes the API serves.
Everysong is the music data backbone for Driftwave, Automash, and other music projects. SQLite via better-sqlite3, served from the production API box.
All
yuribeats GitHub projects. Each card links to the repo; live URLs link to the deployed site where there is one. Public and private repos both shown — private ones are visible by name only.
All Vercel deployments. Each card links to the live site; repo column maps back to the GitHub source.