Building a Boulder Gym Directory with Claude Code
How a non-developer went from WordPress + Elementor to vibe coding a fully functional directory site—and actually enjoyed the process.
View Live Site →
The Shift
I'm not a developer. I've spent years building sites with WordPress and Elementor, which works, but the lack of control was sometimes frustrating. I wanted to become more independent from Elementor specifically and have less bloat. I wanted to see if pages really are much faster without all of that overlay. Now, with AI and what people call "vibe coding," I can think in systems, orchestrate problems, and let Claude Code handle the technical details.
This boulder gym directory is my practice project. It's a real business idea with a legitimate monetization model, but more importantly, it's my way of learning how to work with AI as a building partner. Within 24 hours of my first prompt, I had a functioning MVP with filters, maps, sorting, and data enrichment. And honestly? It really plays on the parts that I like doing in the creation process. It lets me be creative and enjoy building.
The Workflow That Actually Worked
I didn't just jump into Claude Code and start prompting. I took a structured approach that turned out to be surprisingly clever:
Requirements Discovery (Claude Chat)
Started in Claude's chat interface to talk through requirements: what the directory needs, how data should be structured, what features matter, SEO considerations. This became my foundation document.
Learning from Others (YouTube + Claude)
Found YouTube tutorials on building directories. Extracted the scripts, pasted them into Claude chat, and had discussions after each video. This helped me refine the requirements and catch things I'd missed—features, structure, markup, SEO tags.
Breaking It Down (Claude Chat)
Had Claude break everything into manageable chunks. It created five sequential prompts that I could feed to Claude Code one by one. This turned an overwhelming project into a clear, step-by-step process.
Building the Foundation (Claude Code)
Worked through the five prompts systematically. Within a few hours, I had a bare-bones but functional directory website. Not pretty yet, but it worked.
Iterating and Refining
From there it was all iteration. Walk through the site, see what needs changing, prompt Claude Code to fix it. Design tweaks, structural changes, adding features, removing complexity. The kind of back-and-forth that actually feels productive.
What I Learned
Vibe coding actually works
I can build functional sites without being bogged down by little technical problems that aren't in my field of expertise. I can find ways to work through these technical problems that I come up with. The roadblocks that used to stop me now just... don't.
My strengths are systems thinking
I'm good at understanding problems, thinking in systems, and orchestrating solutions. I don't need to be the one writing the code. I just need to understand what's happening.
Manual first, automate second
My first impulse is to want to automate everything immediately. But doing things manually first taught me where the real problems are. Now I can automate intelligently.
Start small and niche
Choosing boulder gyms in Germany meant a few hundred data points, not thousands. Small enough to manually review, big enough to feel real. Geographic + topic niching was perfect for learning.
Human input still essential
Claude couldn't see certain problems, like why gyms weren't being added to Airtable (the city dropdown was hardcoded). I needed to understand the logic to fix it.
Reducing complexity over adding features
A lot of my iteration work was removing things. Icons that added nothing. Overcomplicated filters. The best version was simpler, not fancier.
Building is fun again
I feel in the zone when doing this. I'm genuinely excited to see ideas come to life. Even my wife has to hear about it (she doesn't understand much but shares the joy—what a gal!).
The Clever Bits
Airtable as the Data Foundation
I knew from the start I wanted Airtable as the backend. It's easy to integrate, keeps data clean, and I already understood how it works. This wasn't just convenient—it gave me a clear mental model for how data flows through the site.
Structuring Amenities with Boulder Grips
The amenities needed to be filterable: cafe, training area, kids' area, courses, etc. Instead of boring icons, I had them styled to look like boulder climbing grips. A small touch, but it makes the site feel considered.
Maps with Leaflet, Not Google
Claude suggested Leaflet over Google Maps for easier integration. I trusted the suggestion. It worked perfectly. Sometimes you don't need to be the expert—you just need to know when to trust good advice.
Scraping + AI Enrichment
I manually scraped data for the first five or six gyms to understand what information mattered. Then I used a scraping tool to pull 25 reviews per gym and had Claude Code extract amenity information and write short AI-generated descriptions. Manual to understand, then automate.
"I have a tendency to want to automate everything from the beginning. But this was a good experiment for me to see what I should do manually first. I need to go through it manually to understand where the problems lie. Then I can develop better automations from that foundation."
Premium Listings from Day One
Monetization isn't the priority yet, but I built the structure for premium listings from the start: detailed pages, images, better placement. Planning ahead without overbuilding now.
SEO Baked In
Directories are perfect for SEO. I'm targeting city-specific keywords: "best boulder gyms in [city]," "boulder gyms for kids in [city]." Claude helped structure markup and tags correctly from the beginning.
Where It Got Messy
Scripts That Almost Worked
Claude had a tendency to write scripts to solve problems. I played along because I wanted to understand what was happening. But there were always little things that needed fixing—sometimes my fault (an extra space), sometimes Claude's (missing context). It still required a human to understand what was actually happening.
The Airtable City Dropdown Problem
I'd set cities to a dropdown menu in Airtable to prevent typos from creating phantom city pages. But the scraped data included surrounding cities like Potsdam near Berlin, and since Potsdam wasn't in the dropdown, those gyms weren't added. Claude couldn't see this problem. I changed the field type to free text, which let new cities be added automatically. I figured the risk is small because I can clean up the data manually if need be. It's not something that takes a genius, just a little logical problem to solve.
Empty Columns Breaking Scripts
I had a "short description" column that Claude's script was supposed to populate. All the fields were empty, so the script didn't recognize the column existed. I had to manually confirm it. Small things like this still need human input (or somebody with experience who can predict these problems, but I'll get there).
Data Quality Challenges
Getting clean, accurate data turned out to be one of the more interesting challenges. I needed AI to help filter and enrich the scraped data, which created its own set of problems.
Boulder Gyms vs. Climbing Gyms
I only wanted boulder gyms, not climbing gyms with rope climbing. Getting AI to reliably distinguish between the two took some work. Even trickier were businesses that had "climbing" in their description but weren't gyms at all—tree maintenance companies, building maintenance services, that kind of thing. I had to iterate on the filtering logic to catch these edge cases.
Review Crawling Issues
At first, the AI was only looking at gym titles and descriptions to determine amenities. It took me a while to figure out that it wasn't actually reading all the reviews I'd scraped. Once I realized what was happening, I adjusted the prompt to make sure it processed the full review data.
The Negative Indicator Problem
Another issue: if reviews mentioned an amenity negatively ("no cafe," "wish they had a kids area"), the AI would sometimes disregard that amenity entirely instead of marking it as absent. I had to prompt around that behavior to get it to handle negative mentions correctly.
Claude's Self-Correction
Surprisingly, Claude actually did a pretty good job at self-managing once I started questioning what was happening. Pushing back with "are you sure?" or "can you check that again?" often led to better results. Still, getting from messy scraped data to clean, structured information in less than 24 hours is pretty wild.
What Actually Worked
After all the iterations and problem-solving, I ended up with a 3-layer detection system that dramatically improved data quality: keyword detection searching actual review text, AI analysis with proper context, and a website scraper as fallback. The key was using OR logic across all three—if any layer found an amenity, it got included.
The Breakthrough Insight
Negative signals are positive data. When reviews said "cafe is expensive" or "kids area is small," that actually confirmed the amenity existed. A complaint about something is still evidence that it's there. Once I understood that, detection rates jumped.
The Numbers
Amenity detection went from around 10% to 87% average across all categories. Cafe detection improved from 10% to 87%. Training area detection: 10% to 87%. The system went from barely usable to actually reliable.
Timeline: Less than 24 hours from first prompt to a production-ready system that can process a new city in about 5 minutes (versus 8 hours of manual work). Not perfect, but functional and scalable.
Why This Feels Different
Working with AI like this makes me think about problems differently. I'm orchestrating solutions, not getting stuck in implementation details. I can really play on my strengths: systems thinking, understanding logical problems. The technical roadblocks that used to frustrate me into quitting can just be prompted away.
It's exciting. I feel in the zone. I'm genuinely thrilled to see these things come to life. This is what building should feel like.
What's Next
Finish the MVP
Complete the core features: submission form that funnels into Airtable, AI verification of new gyms, "claim this listing" button for premium upgrades. Keep it simple and functional.
Launch and Learn
Get it live. See if it gets traffic. Test the SEO strategy. Learn what works and what doesn't. This is a real business experiment, not just a portfolio piece.
Build the Next One
This is just the foundation. I chose boulder gyms specifically to learn the process with a manageable dataset. Now that I understand how to build directories, I can apply this to other niches. The workflow is repeatable.
Keep Vibe Coding
I've started projects before, but I often abandoned them for other shiny ideas. Now, because the building part is such a flow situation, I'm enjoying building these things a lot more than manually hacking together no-code tools.
I'm super excited to see what else is going to happen in the future. There are still some problems, of course, but I'm excited about the future with this.
The Real Lesson
I don't need to be a developer to build real things (but it couldn't hurt to partner with one to get things right). I just need to think clearly, structure problems well, and use the right tools.
AI isn't replacing the thinking. It's removing the roadblocks that prevented me from acting on my thinking. Getting things done now is much easier, and that's pretty cool. The creative work of entrepreneurship feels like it's more prevalent now, which I'm really enjoying.