BLUF - I vibecoded(ish) a site called Aesthete that collects nearly 200 “aesthetically satisfying” brands and displays them in (what I hope is) an aesthetically satisfying way.
Last week I was looking for a few gifts, and so I asked Claude to help me out with ideas of brands that are like some of the brands I like and was thinking about in the moment: “What other design companies would like if I like teenage engineering craighill eames and ghostly gimme links.” (Period added for posterity.)
Alephic Newsletter
Our company-wide newsletter on AI, marketing, and building software.
Subscribe to receive all of our updates directly in your inbox.
It came back with a nice list to get started with:

But I wasn’t satisfied, so I asked it to come back with a fully comprehensive, deep research report. The nearly-3,000-word writeup was great, but a wholly unsatisfying way to explore a world of highly aesthetic products. (I published the whole thing to the Aesthete site if you want to read it.) And so, I did what any self-respecting nerd would do and fired up Claude Code and let it rip. I had a few basic requirements that I gave it:
- Typescript/NextJS/Tailwind/ShadCN: If given the choice, this is where I start. There are a bunch of reasons for this, but most importantly, I believe that when the goal is to get building, whatever set of tools feels most comfortable and will get out of the way most quickly is the best set of tools.
- Local Only: I really didn’t want to deal with any databases, keys, or anything like that. Partly because it’s another level of complication and partly because of the next requirement …
- Fast: In a particular corner of web development, some people got very excited about the McMaster-Carr website a few months ago. So excited, in fact, that someone created a NextMaster repo that tried to replicate the general aesthetic and approach on top of Next.js.
With a bit of basic scaffolding in place, I got to work. Step one was to get the data. On the upcoming episode of Forward Deployed, I talk a bit about a pattern I’ve been noticing a lot in my own behavior. Let’s call it the skill to code pipeline. Basically, I use a Claude Code skill to write out the scaffolding of a workflow. Particularly with a problem like this, where I’m not even sure exactly what data I want, not having to jump straight to code is pretty nice. Then, as I understand what I want more and more, I split out bits and pieces of the skill into scripts that can be run as part of it. It’s a great way to move from probabilistic to deterministic space as ideas harden.
In this case, the skill was about going out, finding out what the AI can about the brand, researching some “signature products,” and writing back some basic info to a big JSON file along with some product images. I ran this two or three times to get some basic data in place and then flipped over to design.
Here, I turned things over to the Anthropic frontend design skill. I gave it the basic requirements above, along with a link to the NextMaster repo, and let it rip. The skill is a great example of writing a very dense skill/prompt, at under 600 words, it delivers design that generally looks good and doesn’t have the gradients, purple, and other telltale signs of vibecoding. The whole prompt is really worth a read, but this bit is particularly relevant for the project:
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
(Separately, and this is a post I need to write, I am increasingly of the belief that prompt/skill writing is actually just converging on good writing in a very Strunk & White “vigorous writing is concise” mold.)
Pretty immediately, I dug the approach.

From there, I was off to the races. I would run two brands, see where the skill fell down, canonize some of it into scripts, and then update the skill and run some more. Eventually, I added a Claude Code agent so these could run in parallel and started running 10 or 20 at a time. Here’s a bit of what the final skill looked like:
# Brand Enrichment Skill
Enrich design brand data by scraping websites and extracting aesthetic analysis, curated products, and metadata.
## Recommended: Use the brand-researcher Agent
For the research phase, spawn a **general-purpose subagent** that follows the brand-researcher instructions:
```
Use the Task tool with:
- subagent_type: "general-purpose"
- model: "opus"
- prompt: "You are acting as the brand-researcher agent. Read the agent instructions from /Users/noahbrier/dev/01_Projects/noah-design/.claude/agents/brand-researcher.md first, then follow them to research [brand name].
Brand info:
- id: [brand-id]
- name: [Brand Name]
- category: [category]
- subcategory: [subcategory]
- country: [country]
- priceRange: [$$$$]
Your mission:
1. Research the brand thoroughly
2. Find 5-7 signature products with reliable image URLs
3. Write the enrichment JSON to scraped-content/[brand-id]-enrichment.json
4. Return a brief summary (not the full JSON)
CRITICAL: imageUrl must be actual image file URLs ending in .jpg, .png, or .webp - NOT product page URLs."
```
The agent will:
1. Do all scraping/searching in its own context (keeps main conversation clean)
2. Find reliable image URLs from DWR, Amazon, etc.
3. Write the enrichment JSON to `scraped-content/<brand>-enrichment.json`
4. Return just a brief summary
Then continue with steps below (download images, apply enrichment, update paths).
Once I had all the scraping done, I wanted to add some basic recommendations, so I asked Claude Code for the best way to handle them without adding a database. Since I could easily preprocess the embeddings (I used text-embeddings-3-large) and could process the distance calculations with Typescript, I just added a script to run the whole process on build and write out the relationships to the JSON files.
With all that done, it was a push to GitHub, a new project in Vercel, and a domain, and I was done. I would guess it was somewhere in the $100-150 range in tokens, though most of those came with my Claude Max plan.

What I think is particularly interesting about this is the idea of what I’ve been thinking of as “software for one.” A lens through which to view this project is that the whole thing is just a frontend for a research report. And while it took some time and money (not much and not much), I find it fairly easy to see a world where Claude could have just done this for me. It also continues to reinforce the huge opportunity that exists in shopping. I have a giant shopping prompt that I use for all my purchases at this point (another future post), and it just seems more and more obvious every day that consumer behavior will shift hard in this direction.
The big thing, though, is about agency: being able to build all this (or more precisely, direct Claude to build it) is incredible and further evidence of why I think this is such an amazing moment. The distance between ideas and execution has never been shorter or shrinking faster. Obviously, I have a set of capabilities that makes this possible in this moment, but I don’t think that will stay true forever—or even for long—and that’s incredibly exciting to me.