Friends First is a polished MVP for structured, in-person social events that help undergraduate students meet organically in real life. The product is friends-first, low pressure, and student-verified: students apply, may be selected, confirm a ticket, check in with student ID, and after the event submit the name of someone they connected with. If both people submit each other, Friends First can share contact information after consent review.
This repository is web-first and Vercel-ready, while keeping the backend shape portable enough to support a future Expo React Native client.
- Next.js App Router
- TypeScript
- Tailwind CSS
- shadcn/ui-style component structure
- Framer Motion
- Supabase
- PostgreSQL
- Stripe placeholder integration
- Vercel deployment target
.
├── app/ # App Router pages and lightweight API routes
├── components/ # Reusable UI primitives, forms, sections, admin views
├── lib/ # Mock data, validation, Supabase/Stripe helpers, utilities
├── supabase/
│ ├── migrations/ # SQL schema for the MVP
│ └── seed.sql # Seed data for local/demo environments
├── types/ # Shared types for database portability
├── .env.example
├── components.json # shadcn/ui config
├── tailwind.config.ts
└── vercel.json
- Warm, premium, mobile-first landing page with slightly self-aware campus branding
- How It Works page explaining the full event lifecycle
- Multi-step application form with validation
- Pending / waitlist state page
- Selected invite confirmation page with Stripe placeholder reserve flow
- Post-event connection submission flow
- Simple admin dashboard with applications and mutual match queue
- Testimonials section
- Supabase/Postgres schema covering the requested entities
- Mock/sample data for frontend development and seeding
- Install dependencies:
npm install- Copy environment variables:
cp .env.example .env.local- Start the dev server:
npm run dev- Run validation before pushing:
npm run checkThe app runs at http://localhost:3000.
Required for the current scaffold:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYNEXT_PUBLIC_APP_URLSTRIPE_SECRET_KEYNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEYSTRIPE_WEBHOOK_SECRETRESEND_API_KEY
Notes:
- Stripe is a placeholder in this MVP. The UI and
/api/stripe/reserveroute are structured so you can later replace them with a real SetupIntent or uncaptured PaymentIntent flow. - Resend is not wired yet, but included because selection/confirmation emails are an obvious next integration.
- Create a new Supabase project.
- Add the values from
.env.exampleinto.env.local. - Run the SQL in
supabase/migrations/20260311133000_init.sql. - Run the seed script in
supabase/seed.sql. - Replace the mock frontend submission flows with inserts into Supabase or Edge Functions.
Suggested first production tables already included:
usersprofileseventsapplicationsticketscheckInsconnectionSubmissionsmutualMatchescontactConsenttestimonialsadminNotes
- Import the repository into Vercel.
- Set the project framework to Next.js if it is not auto-detected.
- Add the environment variables from
.env.example. - Deploy.
No custom server is required. The app is ready for standard Vercel builds.
- Shared data concerns live in
lib/andtypes/, not inside page components. - Supabase/Postgres stays backend-agnostic enough for a future mobile client.
- The current API routes can later move to
/packages/api, Supabase Edge Functions, or a dedicated service without changing the frontend information architecture. - A future
/apps/mobileExpo app can reuse validation schemas, database types, and shared DTOs with minimal reshaping.
main: always deployablecodex/mvp-foundation: initial scaffold branch for this MVP- short-lived feature branches after that, for example:
codex/authcodex/supabase-write-pathscodex/stripe-reservationscodex/admin-ops
Suggested workflow:
- Branch from
main. - Keep PRs narrow and reviewable.
- Merge to
mainonly afternpm run checkand a local smoke test pass.
chore: scaffold Next.js app shell and project configfeat: build landing, application, and post-event flowsfeat: add admin dashboard and mock data layerfeat: add Supabase schema and seed datadocs: add setup, deployment, and branch strategy guidance
If you prefer a single first push for the MVP, squash those into one PR and keep the granular plan as future issue structure.
- Wire application and connection forms to Supabase inserts
- Replace mock auth with Supabase Auth or Clerk
- Implement real Stripe reservation flow
- Add selection email and confirmation expiry automation
- Add row-level security policies and server-side action paths
- Add event check-in QR or roster tooling
- Add a shared package for future Expo/mobile reuse
- Add analytics, monitoring, and error reporting
This scaffold is organized so you can create a branch named codex/mvp-foundation and open a PR with:
- polished MVP UI
- Supabase schema and seed data
- placeholder API routes
- deployment and setup docs
If local git is unavailable, fix the Xcode command line tools license state first, then run:
git checkout -b codex/mvp-foundation
git add .
git commit -m "feat: bootstrap Friends First MVP"
git push -u origin codex/mvp-foundation