03 · Solo builder

Answering “where should we eat?” with one confident pick

eatwithlocal.com: Your next meal, decided.
Intro

Local is an iOS app I’m building on my own. You ask for food the way you’d text a friend, and it answers with one pick, two backups, and what to order.

Every pick is built from what critics, locals and creators actually say about a place, not a flattened star average.

!

Problem

Picking a place means an hour of maps, reviews and videos, and ratings don’t say what to order or whether it fits tonight.

✎

Solution

One call instead of a list of twenty, built from critics, Reddit and creators, with a group mode and imports from notes, reels and Maps.

✦

Results

A private beta in LA with the waitlist live. New York is next.

The problem

Deciding where to eat shouldn’t take an hour of reviews

Picking a place is a small decision that eats a lot of time. You check a map, then the reviews, then a list someone posted, then a video, and you still end up somewhere fine.

Ratings flatten everything

A 4.6 tells you nothing about whether it’s quiet enough to talk, or what to order.

The good stuff is scattered

Critics, Reddit threads and creators all know things, but they live in different places.

“Somewhere good” means a dozen things

Date night, a group of eight, one vegetarian: the right answer depends on who’s asking.

Design opportunity

How might we turn everything a city says about its restaurants into one pick you can trust, for exactly what you want tonight?

Inside the app

Every screen, in the order you’d meet it

Local has three tabs, Home, Map and Saved, and it ships in light and dark mode. The screens below are real, from the beta, and they mix both modes.

Opening the app

Home asks one question, based on the time of day, like “dinner tonight?” or “something sweet?” late at night. One button makes the call, and the chips underneath cover everything else.

Home in the evening: dinner tonight?
LightEvening
Home late at night: something sweet?
LightLate night

Telling Local your taste, once

Not every preference is equal, so taste has three levels: hard lines that are never broken (like allergies), dislikes Local avoids when it can, and boosts that make a pick feel made for you.

Hard lines: allergies and restrictions
LightHard lines
Flexible dislikes and boosts
LightFlexible dislikes and boosts

Asking

You can tap where, cuisine and occasion, or just type it like a text. Follow-ups work like a conversation, “what about something with meat? my friends aren’t vegetarian”, and when nothing fits, Local says so instead of forcing a pick.

Choosing where, cuisine and occasion
LightTap to ask
A conversation with follow-ups
DarkFollow-ups
An answer with the pick card
DarkThe answer
A pick in light mode
LightSame thing, light

One pick, two backups

Instead of a list of twenty, Local makes one call, with #2 and #3 a swipe away. Each card tells you what to order and one practical tip.

The local pick
DarkThe pick
The number two pick
Dark#2
The number three pick
Dark#3

The place, in detail

Opening a place shows what to order from the menu, what it’s good for, parking, and why it fits you. When Local can’t confirm something, it says so plainly, like “vegetarian fit is not verified yet”. I’d rather it admit a gap than guess about someone’s diet.

Place detail with what to order and parking
DarkWhat to order
Place detail flagging an unverified vegetarian fit
DarkHonest about gaps
Place detail in light mode
LightLight mode

Planning with friends

Picking for a group is the hardest case, so it has its own flow. Everyone shares their must-knows, and Local finds one place that works for the whole table. Scroll sideways for each step.

Sending the taste check invite link
Dark1 · Send the taste check
Setting the essentials for each person
Light2 · Each person’s must-knows
Group preferences: where, cuisine, vibe, budget
Light3 · Blend the group
Local's call for the group
Light4 · One call for everyone
The group's picks on a map
Light5 · List or map
Backups for the group
Light6 · Backups, and re-run

Map

Every pin carries its Local Score, so the strong spots stand out before you tap anything, scored by quality, not by who paid.

The map with Local Score pins
LightLight
The map in dark mode
DarkDark

Saved

Saved splits Local’s picks from your own finds, and your finds can be filtered by where they came from: reels, notes or Maps. Paste a list and every place comes back as a real recommendation, with a score and what to order.

Saved places in light mode
LightYour places
Saved places in dark mode
DarkFilter by source
Pasting a list of places
LightPaste a list
Places saved from a notes list
LightSaved, with picks

Pricing

A three-day free trial, then $2.99 a month or $29.99 a year. The paywall leads with what you get: the exact dish to order, unlimited picks, reels and lists turned into saved spots, and dinners planned with friends.

Local's paywall
DarkThe paywall
How it works

Built from what the city actually says

Every pick is read from critics, locals and the creators filming the city: Eater, the LA Times, the Infatuation, r/FoodLosAngeles, and the dishes people really order.

The sources behind a Local pick
The sources behind a pick.

Local Score rates how good a place is, using ratings, critic coverage, standout dishes and creator posts. Whether it fits you is a separate question, answered by the pick.

Local Score built from four signals
One number, four signals.

Understand the ask first

An intent and conversation layer on the Claude API reads the request before anything is searched: where, what kind of food, the occasion, and for groups, everyone’s budget and diet.

Search what people wrote

A retrieval pipeline over reviews, critic coverage and creator content, stored as embeddings in Postgres with pgvector on Supabase.

Scope it to ship

v1 is one city, LA, done properly: every source, score and dish pick built for one place before spreading thin. v2 takes the same setup to New York.

A waitlist before the app

The landing page went live first, so there are people to hand the app to the day it’s ready.

Pick a request to see the parts the intent layer looks for. This is an illustration, not live output.

Illustration, not live output
The landing page

eatwithlocal.com

I designed and built the waitlist site to explain the app in three moves, ask, map and save, and to show the save-from-anywhere flows as they’d really happen on a phone.

Ask, Map and Saved on the landing page
Ask, Map and Saved.
Saving a spot from an Instagram reel
Share a reel to Local, and the creator gets credited.
Importing a Google Maps list
Bring your Google Maps lists.
What’s next

LA first, then more cities

Local is in private beta in LA, and the waitlist is open at eatwithlocal.com. Next up is bringing Local to New York.