|
| 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—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> |
0 commit comments