Settings

Product

Roadmap

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.

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 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.

Planned next

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

Milestones (high level)

  1. 1.M1 — Real sessions: done (create/join/invite + Clerk).
  2. 2.M2 — Venues: done (filters + Google + candidates + vote list).
  3. 3.M3 — Vote + match: partial (votes + progress done; real match still to build).
  4. 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.