← Donovan Armstrong  /  Home
Case study
Cafelist
2026
01

Cafelist

Live

NYC coffee shops actually worth working from.

view live project
Why I built it

Cafelist started from a simple real-world frustration: most coffee shop discovery tools are optimized for ratings or aesthetics, not for actually working.

I spend a lot of time working in cafés, and there wasn’t a great way to discover places based on what actually matters when you’re trying to get something done: seating, outlets, atmosphere, noise level, laptop-friendliness.

The project gave me a concrete way to experiment with scraping workflows, structured location data, search and discovery UX, lightweight recommendation systems, and operational data pipelines.

It was partly influenced by Nomad List and the broader idea that niche, utility-driven internet products create strong user value when they focus deeply on one specific workflow. Cafelist applies that mindset to coffee shops, specifically for people trying to work, think, or spend extended time somewhere.

How it works

Filter 148 NYC cafés by Wi-Fi, outlets, quiet, and late hours. Spots I’ve walked personally get a verified stamp; the rest are auto-scored from review text. The result is a list ranked by workability instead of stars.

filter: wifi · outlets · quiet ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The Lost Draft tribeca Charlotte Cafe murray hill Coffee Pro astoria ○ 145 lower-fit cafés filtered
Architecture

A small data pipeline behind a static-feeling site. Scrape and structure, score against the workability criteria, write to Supabase, read on the page.

data Google Places API source café metadata store Supabase structured café records + scores app Next.js filter UI, list view host Vercel public hosting
Operational visibility

Cafelist is small. Most days nothing fails. But “nothing failed” only counts if I can verify it.

A simple operations view pulls deploy state from Vercel, runtime error counts from production, and Supabase health from the database. It’s a 30-second check before I assume everything’s running, and the starting point if something goes sideways.

Cafelist operations view showing all systems healthy, KPI cards for latest deploy state, runtime errors over 24h, Supabase health, and domain status, plus a recent deploys table
cafelist operations view · live data from vercel + supabase
back to home