Student hustles. Nationwide. A multi-campus marketplace for Eduvos student entrepreneurs, built for the Eduvos Hack Jam 2026 (Incubation Hub Marketplace).
npm install
cp .env.example .env.local # then fill in Supabase values
npm run dev # http://localhost:3000
Checks: npm run lint, npm run typecheck, npm run build. Health check: GET /api/health.
| Variable | Exposure |
|—|—|
| NEXT_PUBLIC_SUPABASE_URL | browser |
| NEXT_PUBLIC_SUPABASE_ANON_KEY | browser |
| SUPABASE_SERVICE_ROLE_KEY | server only |
Live (team only, behind Vercel Authentication): https://vossie-market-place.vercel.app. Every push to main redeploys.
Vercel project vossie-market-place, functions pinned to Dublin (vercel.json) next to the Supabase project (eu-west-1).
Environment variables (Production and Preview): NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY (sensitive, server only),
and for the team demo DEMO_LOGIN_ENABLED=true + DEMO_PASSWORD. Only enable demo login while Deployment Protection is on, and switch it off
(or remove the variable) once email sign-in works (docs/EMAIL_SETUP.md). Supabase > Authentication > URL Configuration must list the Vercel URL.
Captured from a real two-user run (npm run test:flow): a buyer enquires, the seller replies in realtime, completes the sale, and the buyer confirms.
| 1. Enquire | 2. Buyer thread | 3. Seller bell | 4. Seller dashboard |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 5. Safety tip | 6. Did it happen? | 7. Buyer confirms | 8. Inbox |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 9. Seller profile with trust badge | 10. Browse cards with badges |
|---|---|
![]() |
![]() |
GitHub can show the code and these screenshots but cannot run the app (it needs a server, Supabase and realtime). To get a live URL, import this repo into Vercel and add the three environment variables above.
npm run db:seed (demo data, safe to rerun), npm run test:rls, npm run test:messaging, npm run test:smoke,
npm run test:moderation, npm run test:theme, npm run test:ui, npm run test:flow and npm run test:phase5 (the last three need a production server: npm run build && npx next start -p 3111),
npm run test:discovery and npm run db:audit (need DATABASE_URL). Demo logins: set DEMO_LOGIN_ENABLED=true locally only.
Run the app (npm run build && npm start) or use the deployed URL, with DEMO_LOGIN_ENABLED=true.
/login, tap “New student”. Browse to Thandi’s Kitchen > Chicken kota with atchar./login, tap “Thandi’s Kitchen”. The bell shows a new enquiry; open /sell/enquiries (New tab) and open the chat./s/thandis-kitchen on either phone: the Top Hustler badge and “Usually replies within an hour” show; /how-trust-works lists the rules.Demo logins (with DEMO_LOGIN_ENABLED=true): Admin (staff), Mentor (staff), Aisha (seller waiting for approval), New student, Thandi’s Kitchen.
/s/aishas-bakes is live.npm run test:phase5) hide the listing at 3 reporters; Aisha sees “Under review” and a notification that names nobody./admin is a 404 for the mentor.