Case study
Pretzel
A design library that mostly runs itself.
I save a lot of design. Shots on X, reels on Instagram, sites in my bookmarks, links in my notes. Finding any of it again meant remembering which app it was in, and usually I couldn’t.
Pretzel is my fix: one wall for everything I save, sorted, searchable and credited to the people who made it.
Plenty of sites already do something like this, and I get why. This is my take. (To be fair, it’s also an excuse to use every tool I’ve been experimenting with.)
- Role
- Solo. Design, build and marketing
- Timeline
- Two weekends, alongside my job at Deel
- Built with
- Claude Code, Next.js, Vercel and Neon
- Live
- pretzel.design
01Saving in two taps
Saving has to be quicker than not saving. On my phone it lives in the Share Sheet: tap Share on a post in X or Instagram, pick Save To Site, and keep scrolling.
02What one tap sets off
One tap starts a loop that’s done in a few seconds, before I’ve scrolled past the next post. Two more run on a clock. All three end back on my phone.
The save is a plain GET request, which is usually the wrong choice for something that writes. Here it’s safe: every link is stored once, so a double tap can’t make a duplicate.
Media is copied into Pretzel’s own storage before the card exists, so a card survives the original post being deleted. Bookmarks synced from X wait for my yes in a review queue. Saves from my phone skip it, because choosing to share is already the yes.
03A wall that reflows
Most of what I save moves, so every card on the wall plays. The wall is a masonry grid: as many 260px columns as the window fits, five at most. Drag the window’s edge to try it.
1,440 px→5 columns
Each new card drops into the shortest column, so the newest work reads across the top. CSS columns would have been less code, but they fill the first column top to bottom before starting the next.
Every card’s shape is saved with it, so the grid is worked out before a single image loads. Nothing jumps, and when the window changes, cards glide to their new column instead of snapping. Every wall follows the same rules, from launches to books.
04Sorting is a design problem
The first version tagged every post with a vision model and 20+ tags. It called over 1,000 of the 1,100+ posts Minimal. The filters narrowed nothing.
Before · 20+ tags
Posts carrying each tag, of 1,100+
- Minimal1,000+
- Vibrant400+
- Cursor Effect3
- Brutalist1
- Parallax0
Meanwhile the Typography, 3D and Editorial walls held 0, 1 and 2 shots, and the 600+ goodies had no tags at all.
After · 100+ tags in nine contexts
A sample, by context
- Color
- DarkCreamOrangePastelGradient
- Style
- EditorialBrutalistPlayfulGlassmorphismHand-drawn
- Interaction
- HoverScrollCursorParallax
- Element
- ButtonNavigationPricingTypography
- Material
- BrassWoodCast iron
- Gift for
- A designerA coffee person
The rule the model works to
“Minimal” needs a reason beyond “clean” or “simple”: say what is absent and why that is the point.
The fix was the vocabulary, not the prompt. I rebuilt it as 100+ tags in nine groups, and every tag now needs a reason the model can point to in the image. Nothing changes until I approve it.
05A shelf of goodies
Goodies are well-made objects, 600+ of them, from Braun clocks to cast-iron pans. (They’re the objects at the top of this page.) Every photo is cut out onto a transparent background, so the shelf looks like one shoot.
06Jobs, tools and skills
Every morning Pretzel reads the careers pages of design-led companies, from Figma and Stripe to Anthropic and Deel, and keeps the design roles. No AI here: a list of title patterns decides what counts, so every listing can be explained. Closed roles come down within two days.
Next to it sit Tools and Skills: the apps and AI agent skills I’d actually recommend.
07Marketing on a clock
A library nobody visits is just a folder. So getting it out there is part of the build, and most of it runs on its own.
- Jobs refreshcareers pages read, design roles kept
- New launches arrivefrom Product Hunt
- My bookmarks arrivefrom X, waiting for my yes
- Morning summaryon my phone, with anything gone quiet
- Threads worth a replyevery fourth morning
- Posts go outX and Instagram, three hours apart, 9 to 9
- Weekly cutsa product reel on Mondays, a carousel on Thursdays
A few times a day, between 9:00 and 21:00, Pretzel posts the most opened shot that hasn’t gone out yet to X and Instagram, with the original video and the creator tagged. Instagram posts are mirrored to Threads.
Mondays bring a reel of ten goodies, cut with ffmpeg. Thursdays, a themed carousel. The promo film is built in Remotion, with music and sound from ElevenLabs. For the Amazon affiliate links, ChatGPT’s computer use did the clicking.
Some things stay manual on purpose. Each morning Pretzel finds threads on X where people ask designers to share their work and sends me the best few on Telegram, each with a Reply button. It never replies on its own.
08Measuring questions, not numbers
PostHog answers a short list of questions. Does the sign-up gate bring in new people? Which walls hold attention? What do people search for that isn’t there? No session recordings, and no profiles of individual people.
09The tools I played with
Half the reason I built Pretzel was to try things. Here’s what each one actually did.
Claude Code
Wrote most of the code, from a spec I wrote first for every feature.
ChatGPT computer use
Did the clicking for the Amazon affiliate links.
Agent skills
Skills for Neon and ElevenLabs, so Claude knew their APIs.
AI Gateway
A vision model describes and tags every save.
ElevenLabs
Music and sound for the promo film, a voice for the weekly one.
Remotion
The promo film, written as React components.
Playwright
Records websites scrolling, in a browser inside a Vercel Function.
iOS Shortcuts
Saving from the Share Sheet in two taps.
Telegram
A bot that runs the whole thing from my phone.
10The stack
What keeps it running, layer by layer.
- App
- Next.js 16React 19Tailwind CSS 4Motion
- Hosting
- Vercel FunctionsVercel CronVercel Blob
- Data
- Neon PostgresDrizzle
- AI
- AI SDKAI Gateway
- Members and payments
- ClerkStripe
- Analytics
- PostHog
- Media
- sharpffmpegPlaywright
- Posting
- X APIInstagram APIThreads API
- Alerts
- Telegram Bot API
11Where it stands
Counted on 16 October.
1,200+
published posts
1,000+
creators credited by name
600+
goodies on the shelf
40+
live design roles at 10 companies
12Building for fun
In April I wrote The illusion of productivity, about everyone shipping an app in a weekend because not shipping feels like falling behind. Then I built Pretzel in two weekends. Is this the thing I was warning about? Maybe. Maybe not.
The difference I can feel is why. I wasn’t building to keep up. I was building because it’s fun. I love playing with these new tools, and every few weeks another one makes something possible that wasn’t before. It feels like being in Disneyland without enough time: I want to try every ride, and I rarely stay on one long enough to go deep.
Where I’m less sure is everything after the build. A scheduled post isn’t distribution. What would actually grow Pretzel is what my post was wary of: being visible, posting in public, showing up every day.
If I didn’t have a full-time job, that’s where the time would go, not into features. Short UGC videos of designers saving and finding work. Asking the 1,000+ creators Pretzel credits to share their own cards. Talking every week to the people who save the most.
I still don’t know which side of my own post Pretzel falls on. For now, I’m enjoying the rides.