Lets Eat helps a group pick a place to eat: start a session, set filters, invite people, swipe on venues, then land on a match with ranked picks, host lock-in, maps, and directions — with optional push and in-app alerts.
What's live today
Sessions & identity
Create, list, and join sessions backed by Postgres
Invite links and deep links (`/join/:code`, `?sessionId=` on filters & vote)
Clerk sign-in; host and members tied to Clerk user IDs
Host can start the session (moves from draft → voting)
Filters & venues
Session filters: cuisine, price, dining style, radius, area search, schedule
Map + Google Places search; host refreshes candidate restaurants into the session
Vote stack loads real venues from your session’s candidate list
Voting
Swipe / pass persisted per person and venue
Group voting progress and completion summary (refetch-based)
Matching
Consensus-style ranking (max likes, fewer passes, then name) with unanimous / majority / tie badges
Match page: leaderboard, host lock-in, OpenStreetMap preview, Google Maps directions links
Social
Friends: requests, accept/decline, list
Friend groups for quicker invites from filters
Admin
Read-only admin views for sessions and usersClerk metadata role `admin`; Admin link in nav when public metadata is set
Notifications
Web Push subscriptions and in-app inbox (NotificationBell)
Friend session invites with `/join/session` — push + in-app when someone invites you
Alert when the host locks a restaurant (decision notifications)