I woke up at 10 a.m. on a Saturday with a huge headache. I was dehydrated, my eyes were half-blind from the screen, and I felt like I had slept for maybe four hours. I had gone to bed at 2 a.m. because I couldn't pull myself away from a prompt.
The night before, I had thrown a rough, three-sentence instruction at my AI coding agent to build a dynamic weather widget for a climbing map I was developing. I was too exhausted to even check if it understood what I wanted before passing out. Waking up, I dragged myself to the computer, refreshed the local environment, deployed the pending commits, and there it was: a fully functioning weather slider. I could scrub through the day and watch the weather change across a geographic grid.
I was as excited as a kid. I haven't felt this drugged by the pure progress of building software since I first discovered computer animations as a teenager.
It all started on a whim on Tuesday. I recalled a moment I had while driving home from a climb, in which I complained to my climbing partner that day that local climbing reports from our local climbing club weren't indexed by Google. Inspired by DHH’s recent keynote about "vibe coding," I figured, what does it cost to try?
I sat down and asked an AI model to one-shot an API that could scrape and return articles for specific alpine routes. By Wednesday, I had a working API deployed. It had scraped 12,000 reports from Slovenian alpinist clubs, extracted the metadata, and merged overlapping records.
When I deployed the initial version, the memory overhead of Ruby on Rails was too high for the tiny instance I wanted to rent. So, I prompted the AI to rewrite the entire backend into Python using FastAPI. It did. We wrote tests, spun it up, and it ran flawlessly on the cheapest tier using just 90MB of memory. I even built an MCP (Model Context Protocol) server so I could query the database directly from my AI clients.
Then things escalated. I wanted a map. An hour later, I had a map. But matching route names and geolocations from unstructured club data is messy. Instead of manually fixing the data, I gave the AI agents tools to research the mountains themselves. I then told the system: “Look at the climbs in this sector and fix the duplicates.” It went out, researched the names, verified which routes were actually duplicates versus just similarly named, and merged them with almost zero interaction from me.
By Friday, the core of prviklin.si was done. I shared it with some classmates from the AAO alpine school on Saturday, and their minds were blown.
Over the course of the build, I spent about €200 on LLM API costs for data processing—absolute peanuts considering it standardized nearly 100,000 data points, cross-referenced driving times, and built seasonality histograms. I did hit some walls; a side quest to have the AI automatically annotate the start of climbing routes from topo images failed completely.
But watching this come together made me realize something profound about where our industry is right now. I used to think vibe coding was just for baby projects or trivial scripts. I was wrong. The project scaled, the complexity grew, and the AI kept up, adding features at a pace I could never match manually.
It’s incredibly exciting, but also a bit sobering. If I can build this today, someone with a better AI might rewrite it in three months. The barrier to writing code is approaching zero. We are entering an era of rapid, relentless idea validation. But because the code itself is no longer the bottleneck, I believe the actual moats of the future won't be software—they will be data quality, long-term relationships, and user trust.
Comments
Post a Comment