AI-run interview platform — Phase 1 foundation: company job setup, candidate applications, and pause/resume text interview rounds.
- Next.js 14 (App Router) + TypeScript
- PostgreSQL + Prisma
- Tailwind CSS
- Simple email/password session cookies (company and candidate portals)
- Node.js 20+
- Docker Desktop (for local Postgres)
# 1. Install dependencies
npm install
# 2. Start Postgres
docker compose up -d
# 3. Copy env (already present as .env for local demo)
cp .env.example .env
# 4. Push schema + seed demo data
npm run db:setup
# 5. Run the app
npm run devOpen http://localhost:3000.
| Portal | Password | |
|---|---|---|
| Company | hiring@acmelabs.demo | company123 |
| Candidate | alex@candidate.demo | candidate123 |
Seed creates an open job posting: Full-Stack Engineer with HR (3 questions) and Technical (3 questions).
npm run dev— Next.js dev servernpm run db:push— sync Prisma schema to the databasenpm run db:seed— re-seed demo data (wipes interview/application data)npm run db:setup— push + seed
- New job postings default to draft (hidden from candidates). Set status to open to publish.
- closed jobs reject new applications; existing applicants can still finish rounds.
- Interview sessions are created lazily when a candidate clicks Start (status
in_progress). No session row means the round has not been started. - Rounds must be completed in
orderIndexorder. Pause sets status topausedand preservescurrentQuestionIndex+ saved answers; resume appends a timestamp toresumedAtand continues where left off. - After each base answer, Claude may ask at most one grounded follow-up (logged in
FollowupDecision). SetANTHROPIC_API_KEYin.envto enable follow-ups and round scoring. - When a round is submitted, each base question is scored 1–5 into
RoundScore. Open an application from the company applications list to view scores.