SettingsProduct
Last reviewed 2026-03-22
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 everyone can use.
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 voting (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)
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
Platform
- TanStack Start, Cloudflare Workers deploy, Drizzle + Postgres schema
- Server functions with membership and host checks on mutations
Heads up
- Match: tallies and host lock-in are live; directions / reserve actions are still placeholders.
- Session statuses `open` / `closed` exist in the schema but aren’t fully explained in the UI after voting.
Matching
- Consensus / overlap rules and a real match result from everyone’s votes
- Match page: chosen venue, map, directions, reserve/share actions
Sessions
- Full lifecycle in the product (e.g. when to use open vs closed, post-match flow)
Experience & quality
- Automated tests for critical flows (Vitest is available; tests not written yet)
- Stronger error boundaries and async loading patterns
- Deeper observability (metrics beyond basic logging)
- Optional: live vote updates (e.g. WebSockets) instead of polling/refetch
- 1.M1 — Real sessions: done (create/join/invite + Clerk).
- 2.M2 — Venues: done (filters + Google + candidates + vote list).
- 3.M3 — Vote + match: partial (votes + progress done; real match still to build).
- 4.M4 — Polish: tests, match UX, lifecycle hardening.
Detailed status lives in plan/roadmap.md in the repo — keep it in sync when you change this page.