Skip to content

Commit fac6b2f

Browse files
authored
Add blog post: Building an AI-Native Web Platform as a Solo Developer (#108)
Includes screenshots of all tools and the full writeup covering: - The acceleration curve (194 commits in 3 months) - Speed run PR timestamps - GPU tool architecture breakdown - Agent integration workflow - Tonight's Discord session as narrative anchor
1 parent 3a64a49 commit fac6b2f

10 files changed

Lines changed: 166 additions & 0 deletions
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
---
2+
title: "Building an AI-Native Web Platform as a Solo Developer"
3+
date: 2026-03-17
4+
slug: building-an-ai-native-web-platform
5+
draft: false
6+
---
7+
8+
I built a 40,000-line full-stack platform with 8 GPU-powered AI tools, a booking system, an invoicing system, a browser-based DAW, and a code review harness. A complete invoicing system with PDF generation shipped in under a minute. A booking system with calendar UI, email confirmations, and ICS attachments — 2,301 lines — merged in 5 minutes. Tonight I built an email briefing system, audited the entire codebase, fixed every performance issue, and cleaned up all dead code in a single Discord session.
9+
10+
This is what AI-native development looks like in 2026.
11+
12+
## The Acceleration Curve
13+
14+
The commit history tells the real story. austn.net started as a portfolio site in February 2025. For months it was a side project — 10 commits here, 15 there. Then something clicked.
15+
16+
| Month | Commits | What happened |
17+
|---|---|---|
18+
| Feb–Oct 2025 | ~97 | Portfolio site, basic tools, experimenting |
19+
| Dec 2025 | 34 | Started taking it seriously |
20+
| Jan 2026 | **88** | AI workflow clicked — shipped 8 major features |
21+
| Feb 2026 | **53** | Booking, invoicing, music gen, video gen, pitch detection |
22+
| Mar 2026 | **19** (and counting) | Code review harness, agent integration, full codebase audit |
23+
24+
194 of 291 total commits happened in the last 3 months. The codebase didn't grow linearly — it exploded once I figured out how to work with AI effectively.
25+
26+
## Speed Runs
27+
28+
Here are actual PR timestamps from the git history. These aren't cherry-picked — this is just how fast things ship now:
29+
30+
| Feature | Lines | Time to merge |
31+
|---|---|---|
32+
| Booking system (calendar, email, ICS) | +2,301 | 5 minutes |
33+
| Invoice system (PDF gen, line items, payments) | +1,730 | 37 seconds |
34+
| Video + Music generation | +1,946 | 5 seconds |
35+
| Code review harness (diff parsing, LLM pipeline) | +1,701 | 21 seconds |
36+
| Pitch detection tool with piano roll | +1,327 | 12 seconds |
37+
| Claude Corner (AI content showcase) | +1,181 | 11 seconds |
38+
39+
Those merge times aren't typos. When you trust your AI workflow and your test suite, reviewing a well-structured PR takes seconds.
40+
41+
And tonight — in a single session from Discord — my agent built a briefing email system, audited 40,000 lines for performance issues, fixed every critical finding, cleaned up all dead code, and created the blog post you're reading right now. Total time: about 2.5 hours. Total PRs: 4. Net result: +413 lines added, -467 removed, and the codebase is healthier than it started.
42+
43+
## The Stack
44+
45+
austn.net runs on Rails 8, React, PostgreSQL, Redis, and Sidekiq, deployed on Hatchbox with auto-deploy on merge to main. The AI tools talk to a self-hosted ComfyUI instance running on my own GPU over Tailscale.
46+
47+
| | |
48+
|---|---|
49+
| **Total lines of code** | ~40,000 |
50+
| **Models** | 20 |
51+
| **Controllers** | 39 |
52+
| **Services** | 23 |
53+
| **Background jobs** | 22 |
54+
| **React components** | 48 |
55+
| **Developers** | 1 (+ AI) |
56+
57+
## The Architecture That Makes It Work
58+
59+
Every GPU-powered tool on the site follows the exact same pattern:
60+
61+
**Controller → Job → ComfyUI Client → Redis Service → ActionCable**
62+
63+
1. User hits `/generate`. Controller queues a background job, returns a `generation_id` immediately.
64+
2. The job inherits from `GpuJob` — a 129-line base class that handles Redis-based GPU locking (one task at a time), automatic retries with exponential backoff, and health status tracking.
65+
3. The job talks to ComfyUI through `ComfyuiClient` — a single 182-line API client that handles workflow submission, polling, and output retrieval for every AI tool.
66+
4. Results get cached in Redis through a service inheriting from `BaseRedisService`, which provides namespaced keys and configurable TTLs.
67+
5. ActionCable pushes real-time updates so the UI reflects progress instantly.
68+
69+
The shared infrastructure is about 400 lines. Each new tool adds roughly 60-80 lines of tool-specific code. I have 8 tools running on this pattern. Adding a 9th would take 30 minutes.
70+
71+
That's the real lesson: the time investment isn't in building features, it's in designing the abstraction correctly. `GpuJob` took maybe an hour to get right. It saved weeks across everything that followed.
72+
73+
## The Tools
74+
75+
### Text-to-Speech
76+
77+
![TTS Tool](/blog/tts-screenshot.png)
78+
79+
Upload text, pick a voice, tweak exaggeration and CFG weight. Generates speech using a self-hosted model. Supports batch processing — upload a CSV, generate dozens of clips. Results are shareable via unique links.
80+
81+
### Music Generation
82+
83+
![Music Generation](/blog/music-screenshot.png)
84+
85+
The most feature-rich tool. Enter lyrics, pick a genre/mood preset or write custom tags, set duration and guidance. Generates full songs with vocals using ACE-Step on ComfyUI. This one consistently surprises people.
86+
87+
### Stem Separation
88+
89+
![Stem Separation](/blog/stems-screenshot.png)
90+
91+
Upload a song, get back isolated vocals, drums, bass, and other stems. Powered by Demucs. Great for remixes, karaoke, or just hearing what's buried in a mix.
92+
93+
### Background Removal
94+
95+
![Background Removal](/blog/rembg-screenshot.png)
96+
97+
Upload any image, get a transparent PNG. Multiple model options for different use cases — general purpose, human segmentation, anime.
98+
99+
### 3D Model Generation
100+
101+
![3D Model Generation](/blog/3d-screenshot.png)
102+
103+
Upload an image, get a 3D GLB model with an interactive preview right in the browser using react-three-fiber. Turns product photos and character art into usable 3D assets.
104+
105+
### The DAW
106+
107+
![MIDI Studio](/blog/daw-screenshot.png)
108+
109+
A full browser-based digital audio workstation. Piano roll editor, multiple synth engines (FM, AM, subtractive), effects chain (reverb, delay, distortion, filter), mixer with per-track controls, and pattern saving. Built with Tone.js and React. Not a GPU tool — runs entirely in the browser — but the most complex piece of the frontend.
110+
111+
### Booking System
112+
113+
![Booking System](/blog/booking-screenshot.png)
114+
115+
Full scheduling with availability management, calendar UI, time slot generation, email confirmations with ICS calendar attachments, and cancellation flows. Admin dashboard for managing everything.
116+
117+
### Code Review Harness
118+
119+
Submit a GitHub PR URL and get an AI-powered code review. The system fetches the diff, triages files by priority, reviews each section individually, then synthesizes findings. Clean pipeline architecture.
120+
121+
### Blog
122+
123+
Markdown-based with YAML frontmatter. I write in Obsidian, an import job copies posts into the app, uploads images to Cloudflare R2, and creates database records. Recently I've started writing posts by voice-messaging my AI agent on Discord — it transcribes, writes, commits, and pushes without me opening an editor.
124+
125+
## The Agent Layer
126+
127+
This is where the workflow gets interesting. I run [Hermes Agent](https://github.com/hermes-agent/hermes) — an open-source AI agent that lives in my Discord server with full access to my development machine.
128+
129+
What that means in practice:
130+
131+
**I voice-message an idea, it becomes a deployed feature.** Tonight I described a briefing email system in a few texts. The agent built the mailer, the API endpoint, the HTML template, committed it, pushed a PR, and set up a cron job to research news and send me digests every other day. I merged from my phone.
132+
133+
**I ask for a codebase audit, it finds real bugs.** "Look for performance issues" turned into a report that identified Redis connection leaks, memory-blowing zip downloads, missing database indexes, N+1 queries, and a race condition in invoice numbering. It then fixed all of them, ran tests locally, and opened a PR. 109 tests, 0 failures.
134+
135+
**I ask for a dead code cleanup, it removes 381 lines.** Found unused concerns, orphaned routes, dead JavaScript components, duplicate rake tasks, and a controller that would 500 in production because it never existed. Cleaned everything up, extracted a shared `MoneyFormattable` concern from three duplicate implementations, and fixed an auth bypass bug.
136+
137+
The agent isn't replacing me. It's removing every piece of friction between having an idea and shipping it. I decide what to build. It handles the git workflow, the testing, the deployment. The entire pipeline is automated: push to main → CI passes → Hatchbox deploys.
138+
139+
## What This Teaches
140+
141+
**Get the abstractions right and everything accelerates.** The `GpuJob` base class took an hour to design. It enabled 8 tools to ship in days instead of weeks. The same pattern applies to the agent workflow — once the PR → CI → deploy pipeline was automated, the cost of shipping dropped to nearly zero.
142+
143+
**Rails is criminally underrated for platforms like this.** ActiveJob, ActionCable, ActiveStorage, the mailer framework — Rails gives you the building blocks for a complex platform out of the box. I didn't need microservices. I needed a well-organized monolith.
144+
145+
**Self-hosting AI models is worth it.** Running ComfyUI on my own GPU means no API costs, no rate limits, full control. The `ComfyuiClient` is 182 lines and it's the gateway to every AI capability on the site.
146+
147+
**AI-assisted development is a force multiplier, not a replacement.** The architectural decisions — the base class hierarchy, the Redis caching strategy, the real-time update pattern — those came from experience. AI generated a lot of code. I designed the system. The difference matters.
148+
149+
**An AI agent as a team member changes the game.** Having an agent in Discord means I can ship from anywhere. Waiting in line? Voice message a feature request. On the couch? Review and merge a PR on my phone. The agent handles implementation. I handle direction.
150+
151+
## The Numbers
152+
153+
| | |
154+
|---|---|
155+
| **8** | GPU-powered AI tools sharing one architecture |
156+
| **40,000** | lines of code |
157+
| **194** | commits in the last 3 months |
158+
| **109** | automated tests |
159+
| **4** | PRs shipped in tonight's Discord session |
160+
| **-381** | lines removed in dead code cleanup |
161+
| **1** | developer |
162+
| **0** | microservices |
163+
164+
The web is still the most powerful distribution platform. A URL is all anyone needs. Combine that with self-hosted AI, a well-designed monolith, and an agent-driven development workflow, and a single developer can build things that would have required a team two years ago.
165+
166+
That's not a prediction. That's what I did.

public/blog/3d-screenshot.png

228 KB
Loading

public/blog/blog-screenshot.png

392 KB
Loading

public/blog/booking-screenshot.png

194 KB
Loading

public/blog/daw-screenshot.png

250 KB
Loading

public/blog/homepage.png

731 KB
Loading

public/blog/music-screenshot.png

305 KB
Loading

public/blog/rembg-screenshot.png

230 KB
Loading

public/blog/stems-screenshot.png

250 KB
Loading

public/blog/tts-screenshot.png

207 KB
Loading

0 commit comments

Comments
 (0)