paper · no. 252
Washington · WA · 252 cafes · brewed in paper
Side project · live · ☕·8 min read·shipped in 2 weeks

NEEDLE SPACE

Find a cafe in Seattle area you can work and boost productivity, in under two minutes. 252 cafes · $5.50 · solo build.

Try this · the buried signal

The data you need lives in Google reviews — it's just not phrased the way you'd search.tap a bean ↓

Soojin · Local Guide

★★★★★ · 3 weeks ago · Capitol Hill

review 3 of 5

Found this place during a long walk through the neighborhood. Super peaceful and the staff is so kind. I ended up sitting in the corner with my laptop for 3 hoursnobody bothered me. Outlets at every table, free fast WiFi. The latte art is also nice if that's your thing.

brew your search →

TL;DR

01. TL;DR

  • 🫘 Problem: Remote workers waste ~20 minutes in maps, hunting for a cafe with reliable WiFi, outlets, and a laptop-friendly policy. The data exists in online reviews, such as Google Maps, Yelp, etc. It's just buried under thousands of comments.

  • Strategy: Rejected a chatbot. Chose a search bar with filter chips that just works. Quietly tagged every cafe ahead of time from real reviews and photos, with every claim being backed by the actual reviewer quote it came from.

  • 🌿 Impact: Search results jumped from 78 to 222 cafes for "ample seating." From 43 to 154 for "laptops welcome." Users now see 2.8–3.6× more workable options, with no chat transcripts to read.

Problem Solved

02. Problem Solved

Remote workers, freelancers, and students lose ~20 minutes per attempt hunting for a productive cafe. The real challenge is that the data is just buried under thousands of irrelevant comments. The fix is to curate the data that already exists for the right question.

  • 📶 Is the WiFi fast enough for a call?
  • 🔌 Are there outlets I can actually reach?
  • ⏰ Will I be asked to close my laptop at 11am?

Why now? Remote work made cafe-as-office common. And AI can read reviews the way a person reads them, picking up that "calm" and "peaceful" mean the same as "quiet."

How I Validated

03. How I Validated

Step 1 — Survey (n=21) before writing a line of code. Tested whether the attributes I was about to build a product around (e.g., laptop policy, seating, vibe, hours, etc.) are actually what people weight when they choose a cafe.

SignalFindingWhat this meant
Visit frequency67% visit cafes ≥1×/weekRealistic, not aspirational.
Work-from-cafe52% named "study or work" as a top reasonPrimary use case is half the sample, not a niche.
Laptop-friendly weight86% Always/Often weight itLaptop friendly is the primary filter chip.
Seating weight86% Always/Often weight itAmple seating is also a key factor.
Hours weight71% Always consider hours; "late hours" surfaced unprompted twice"Open now" option is also necessary.
Vibe weight76% Always/Often consider vibeVibe can vary, but for work purposes, quiet vibe comes first.
Pet-friendly / Parking<15% Always for eitherConfirmed dropping both from the primary chip set.
Helpfulness of current sourcesMean 3.57 / 5The laptop-friendly cafe search experience gap is real!

"I would be interested in having a way to see what coffee shops are best to study at by answering questions like: is there Wi-Fi? How many tables are there? Can I get seating? Is there a pleasant vibe?"
— UW grad student (F, 25–29)

Step 2 — Shipped a constrained MVP.

Wall 1 · 5-review API cap → Most attributes came back blank.
Google's API legally returns only 5 reviews per cafe. Volume-based approaches were ruled out before they started. Meaning-extraction over fewer reviews became the only honest move.

🫘 Wall 2 · word ≠ meaning → "Peaceful" never matched "quiet."
Exact-keyword search punishes users for not guessing the exact word a reviewer used. The model had to understand "calm," "peaceful," "laid-back" all answer the same question.

How I Decided the Path

04. How I Decided the Path

The choices behind the product — what I picked and what I deliberately said no to.

Rejected · chatbot. Would force users to learn a new pattern and read AI transcripts just to trust a result.

Selected · context-aware pre-tag. Read reviews + main photo ahead of time. Store tags with source quotes. Search is plain filtering.

Two cups, one decision: 20 minutes of manual searching → 2 minutes through pre-tagged AI.

setup cost · two cups

20mins

manual searching · rejected

2mins

AI tagging · shipped

slow brew, instant pour

How I Built

05. How I Built

Trust lens · invisible AI with auditable claims

  • 🫘 Matched meaning, not just words. Tagger understands "calm / peaceful / laid-back" all mean "quiet."
  • Proved how the productivity score is calculated. Every cafe is pre-tagged with major categories.
  • 📜 Required real evidence for every tag. Stores the actual review quote alongside the tag.
  • 📷 Added a photo check as a second opinion. Never overrides a clear text answer.

Engagement lens · earning the second visit

  • 🗺 List + Map as equal-weight views. Not a default with a buried toggle.
  • 👉 Built a "Surprise Me" mode with swipe-to-decide. Borrowed the dating-app pattern.

Search Quality: Before & After

06. Search Quality: Before & After

Bars · scaled to 252 cafes

"ample seating" cafes

+184 cafes · 2.8× more ☕

keyword78 / 252
context-aware222 / 252

"laptops welcome" cafes

+111 cafes · 3.6× more 💻

keyword43 / 252
context-aware154 / 252

Laptop-policy coverage

before17%
after61%

+44 pts

Seating-info coverage

before31%
after88%

+57 pts

Impact Delivered

07. Impact Delivered

🫘 Before Needle Space
Open Google Maps → choose the location → scroll 20+ results → open 5+ cafe profiles → read ~30 reviews, images, menus per tab → still not sure → pick one → arrive → often a bad outcome, no outlets....

☕ With Needle Space
Select location, quiet, etc. → 10+ cafes match with high productivity score → pick the closest → arrive → it's what was promised. 2 minutes.

The win isn't only the time saved. It's the certainty. Every claim on every card carries a reviewer quote, productivity score card that is tailored to laptop friendly settings.

What I'd Do Differently

08. What I'd Do Differently

1. Validate the noise-level tag before building it. The LLM and regex agree only 27% on noise. Looking back, noise is too contextual (time of day, day of week) for a single tag. I'd either drop it or move to a time-aware signal. Filter chips should not lie quietly.

2. Check with the possible options in the beginning phase. I first spent hours of building keywords-based filter options, only to realize that it fails to capture the context of the reviews. Instead of jumping right to the solutions, it can save time and energy to explore any possible options upfront.

Why This Matters

09. Why This Matters

The constraint forced a better product. Five reviews per cafe meant I couldn't lean on volume or even web scraping due to platform violation. I had to make the system logic that actually can increase the accuracy. The user never sees that work. The user wants to go to the best cafe to work, and searching for the cafe should be their minimum efforts.

Live prototype

Try Needle Space yourself.

Live at needle-space.netlify.app ↗ — embedded below.

https://needle-space.netlify.app/