|
| 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 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. |
0 commit comments