LunchCrew is a small web app for teams deciding where to eat lunch together. It gives a crew a reusable invite link, a daily ballot, nearby place suggestions, lightweight identity, and a simple history of past winners.
- Next.js 15
- React 19
- TypeScript
- Tailwind CSS 4
- Supabase
- Supabase Edge Functions for places lookup and Stripe flows
- Creates or restores a crew from a shareable invite code
- Generates a fresh lunch poll for the current UTC day
- Lets teammates add places manually or from nearby suggestions
- Syncs votes live with Supabase realtime, with polling fallback
- Stores lightweight member names per device
- Tracks recent winners and a simple leaderboard
- Supports optional founding-plan checkout via Stripe
- Install dependencies
npm install- Create local env vars
cp .env.example .env- Fill in the required values
- Client-side:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
- Server-side / Edge Functions:
GOOGLE_MAPS_API_KEYSUPABASE_URLSUPABASE_SERVICE_ROLE_KEYLUNCHCREW_BASE_URLSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRET
EXPO_PUBLIC_* vars are only kept for backward compatibility in the codebase and are not required for the web app.
- Apply the database schema in Supabase
- Run
supabase.sql
- Start the app
npm run devThis repo includes Edge Functions under supabase/functions:
places-proxystripe-create-checkoutstripe-webhook
Those functions require server-side secrets. Do not expose service role, Stripe secret, webhook secret, or Maps API keys in client-side env vars or frontend code.