Skip to content

Commit 769c4d4

Browse files
committed
skateindex.com post
1 parent 272dc38 commit 769c4d4

4 files changed

Lines changed: 148 additions & 51 deletions

File tree

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
---
2+
tags:
3+
- articles
4+
- AI
5+
- skateboarding
6+
- software
7+
title: Vibe coding skateindex.com
8+
date: 2026-04-04
9+
---
10+
<p>
11+
I just finished my first programming project built entirely with AI-generated code.
12+
</p>
13+
<p>
14+
The project was <a href="https://skateindex.com">skateindex.com</a>.
15+
It's a static site that gives the user a list or map of skate shops around a given location.
16+
This also includes tools for finding skate shops in advance, downloading photos, and manually reviewing shops.
17+
</p>
18+
<h3>Claude</h3>
19+
<p>
20+
I used <a href="https://claude.com/product/claude-code">Claude code</a>.
21+
I got the "pro" plan, which was $20 for 1 month.
22+
</p>
23+
<p>
24+
I tried to use something like the Ralph Wiggum approach based on
25+
<a href="https://youtu.be/4Nna09dG_c0?si=jPLJRHnGc3kCQX1h">this video by Geoffrey Huntley</a>.
26+
This was my first time doing anything like this, so I took some liberties.
27+
I <em>did</em> have an implementation plan file, which I had Claude update.
28+
Each time I started a session, I asked it to work on the next feature on the plan.
29+
And the end of a session I asked it to update the plan.
30+
I kept a close eye on things the whole time.
31+
I didn't "review" all changes but I at least skimmed through everything.
32+
</p>
33+
<p>
34+
I mostly used Opus 4.5, though I used Opus 4.6 for a few sessions at the end of the month.
35+
Here are the numbers from <code>/stats</code>:
36+
</p>
37+
<ul>
38+
<li>Sessions: 40</li>
39+
<li>Active days: 10</li>
40+
<li>Most active day: January 24</li>
41+
<li>Longest session: 13 hours, 20 minutes, 4 seconds</li>
42+
<li>Longest streak: 3 days</li>
43+
<li>Opus 4.5: 70.7% (in: 59.9k, out: 9.1k)</li>
44+
<li>Opus 4.6: 29.3% (in: 511, out: 28.1k)</li>
45+
</ul>
46+
47+
<h3>The project</h3>
48+
<p>
49+
My goal with the project was to spend as little money as possible.
50+
That influenced many decisions, such as the static site, the choice of API,
51+
and the decision to build a list of shops in advance.
52+
</p>
53+
<p>
54+
It was a simple project. Nothing about the project is novel.
55+
But I wanted to implement a simple project for the purposes of learning how to use LLMs to write code.
56+
It was more about using the LLM than creating the website.
57+
</p>
58+
<p>
59+
However, the entire project wasn't easy or straightforward.
60+
The area I spent the most time on was ensuring we find as many skate shops as possible without false positives.
61+
That said, what is a skate shop? If a store sells a few longboards or completes, should it be on the list?
62+
If they have a deck wall and a case with individual parts, but they primarily sell snowboards, should it be on the list?
63+
Or do we include only core skate shops?
64+
</p>
65+
<p>
66+
I tried to include only shops that had more than a handful of decks in stock along with a selection of trucks and wheels,
67+
whether skateboards were their primary concern.
68+
As far as I know, it's not possible to determine this from the Places API listing.
69+
</p>
70+
<ul>
71+
<li>Most stores, even core shops, don't have the skate shop type</li>
72+
<li>Some skate shops have a skate-themed word in their name or website, but not all do</li>
73+
<li>Searching for "skate shop" yields many false positives, including hockey stores, ski and snowboard stores, and surf shops</li>
74+
</ul>
75+
<p>
76+
I had other problems.
77+
At first, the app got only a single page of results per location.
78+
But sometimes there are multiple pages of results.
79+
Claude also struggled to figure out why shops weren't included in the results.
80+
</p>
81+
<h3>Quality results</h3>
82+
<p>
83+
I wanted the shop results to be quality.
84+
If the results are no better than searching Google Maps, why use my project?
85+
For example, see <a href="https://www.skateboards.com/skate-shops">skateboards.com</a>,
86+
which clearly grabbed all results for "skate shop" without filtering.
87+
</p>
88+
<p>
89+
I tried to do some filtering on name and website, both to include and exclude shops.
90+
For example, include the shop if the name contains "skateboard" but exclude it if the name contains "ice arena."
91+
However, this left almost a thousand shops I was unsure of.
92+
</p>
93+
<p>
94+
<strong>I reviewed almost a thousand shops by hand.</strong>
95+
I checked websites, photos, and Google Maps reviews.
96+
It took me about 2 months to review all of them.
97+
All I had was the <a href="https://github.com/cberes/skateshopfinder/blob/main/scripts/review-shops.js">review tool</a>
98+
that claude made to print out websites and Google Maps links.
99+
</p>
100+
<h3>What I liked</h3>
101+
<p>
102+
The LLM successfully completed the project.
103+
Furthermore, it was a project that I might not have found the time to work on.
104+
Claude built a functional website that looks decent.
105+
The basic website was working within just a few sessions.
106+
</p>
107+
<p>
108+
It helped me make some decisions about how to implement the project.
109+
This was helpful for parts of the app I was unfamiliar with, like the Google Places API and JavaScript tools.
110+
The LLM suggested features I might not have thought of, like shareable URLs.
111+
It handled parts of the app that I might have struggled with, like CSS.
112+
</p>
113+
<h3>What I didn't like</h3>
114+
115+
<ul>
116+
<li>I spent $38 because the LLM got the Google Places free tier wrong.
117+
It claimed I could make 5000 free requests, when actually I was limited to 1000 requests.</li>
118+
<li>The first attempt at filtering skateshops was very slow.</li>
119+
<li>There were several bugs in the code. Humans write bugs, too. But don't think that AI is perfect.</li>
120+
<li>I asked Claude to write tests each time it made changes. Sometimes those tests were useless and I had it remove them.</li>
121+
<li>While it handled things I'm not very strong with like CSS, that means I gained no experience working in those areas.</li>
122+
<li>I don't know the code very well. It's like looking at code that someone else wrote.</li>
123+
<li>Either I abandon the project, I keep paying for Claude, or I need to spend extra time reviewing the code before adding features or fixing bugs.</li>
124+
</ul>
125+
126+
<h3>Would I do it again</h3>
127+
<p>
128+
I would try this approach again, but only under certain circumstances.
129+
I would do this again if I thought the project could generate revenue,
130+
but I wasn't particularly interested in solving any of the problems involved.
131+
</p>
132+
<p>
133+
I usually enjoy writing code.
134+
Even with mundane parts of programming, there are decisions to make and things to think about.
135+
However, using the LLM wasn't programming. I was delegating work to it.
136+
</p>
137+
<p>
138+
I have the project to show for it, but it feels like someone else did the work.
139+
What could have been a labor of love was neither labor nor love.
140+
</p>
141+
<p>
142+
I do like using LLMs for certain parts of programming.
143+
It can be very useful setting up a project skeleton.
144+
It's great for answering questions about things I'm unfamiliar with, like JavaScript libraries and build tools for example.
145+
It can be good to bounce ideas off it&mdash;sometimes the LLM considers aspects of design decisions that I haven't.
146+
But I would prefer using the LLM as a tool to help me with a project rather than using it to do the entire project.
147+
</p>

claude-usage.txt

Lines changed: 0 additions & 46 deletions
This file was deleted.

package-lock.json

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tags.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export default [
2+
'AI',
23
'digital detox',
34
'eleventy',
45
'javascript',

0 commit comments

Comments
 (0)