A stable, presentation-ready recruiting platform built for a DBMS mini project.
- Next.js 16 (App Router)
- TypeScript
- Tailwind CSS + shadcn-style components
- Supabase (PostgreSQL + Auth)
npm run dev- Create a Supabase project
- Copy
.env.exampleto.env.localand add your keys - Important:
NEXT_PUBLIC_SUPABASE_URLmust be the project root only:- Correct:
https://YOUR_REF.supabase.co - Wrong:
https://YOUR_REF.supabase.co/rest/v1(causes auth errors)
- Correct:
- In Supabase → Authentication → URL Configuration, set:
- Site URL:
http://127.0.0.1:3000(or your Vercel URL in production) - Redirect URLs:
http://127.0.0.1:3000/auth/callbackhttp://localhost:3000/auth/callbackhttps://YOUR_APP.vercel.app/auth/callback(production)
- Site URL:
- If you see "Invalid path specified in request URL", your
NEXT_PUBLIC_SUPABASE_URLincludes/rest/v1— remove it. - Run
supabase/schema.sqlin the SQL Editor - Optionally run
supabase/seed.sqlafter creating a recruiter account
| Route | Description |
|---|---|
/ |
Landing page |
/jobs |
Job listings |
/jobs/[id] |
Job details + apply/save |
/login |
Sign in |
/register |
Sign up (job seeker / recruiter) |
/profile |
User profile |
/dashboard/student |
Job seeker dashboard |
/dashboard/recruiter |
Recruiter dashboard |
/dashboard/admin |
Admin dashboard |
Without Supabase env vars, the app runs in demo mode with sample jobs so localhost always loads for presentations.
To force Demo Mode locally, run the app without NEXT_PUBLIC_SUPABASE_URL and
NEXT_PUBLIC_SUPABASE_ANON_KEY. Public jobs, job details, student dashboard,
recruiter dashboard, and admin dashboard render from bundled demo data. Auth
forms remain visible but ask for Supabase configuration before sign-in or
registration.
Use the following capture set for README assets, slide decks, and final project
submissions. Save images under public/screenshots/ if you want them served by
the app.
| Screenshot | Route | What to capture |
|---|---|---|
01-landing.png |
/ |
Hero, navigation, feature preview |
02-jobs-discovery.png |
/jobs |
Search, filters, sort controls, upgraded job cards |
03-job-detail-match.png |
/jobs/demo-1 |
Match score, circular visualization, skill gap analysis |
04-student-dashboard.png |
/dashboard/student |
Sidebar, stats, applications, recommended jobs |
05-recruiter-dashboard.png |
/dashboard/recruiter |
Analytics, candidate ranking, post-job form |
06-admin-dashboard.png |
/dashboard/admin |
Platform stats, charts, admin tables |
07-auth.png |
/login |
Login screen and Supabase setup messaging |
Recommended viewport sizes:
- Desktop:
1440x1000 - Mobile:
390x844
Recommended command sequence before capturing:
npm run lint
npx tsc --noEmit
npm run build
npm run devOpen http://127.0.0.1:3000, switch the browser to the target viewport, and capture the routes above.