Most CV tools tell you to "add more keywords" or "use action verbs." That's not help, that's noise.
RejectCheck was built around a different premise: a rejection isn't just a formatting problem, it's a signal that there's a gap between who you are on paper and who the job requires. The goal isn't to dress up your CV — it's to close that gap for real.
Where other tools stop at feedback, RejectCheck goes further. It tells you what skills you're missing, then gives you a concrete plan to actually build them: project ideas with specs, CV rewrites, and time estimates. And if you want to stress-test your application before the real thing, the AI Interview puts you through a live voice interview tailored to the specific job — questions adapted to your gaps, your profile, and the JD's expectations.
The target user is a developer who wants to be the right candidate, not just look like one.
- Rejection risk score — 0–100 score with a Low / Medium / High verdict and confidence rating
- ATS simulation — keyword coverage check with a pass/fail result and a list of critical gaps
- Seniority analysis — compares expected vs. detected seniority, flags experience gaps
- CV tone audit — detects passive language and identifies weak bullet points
- GitHub audit — assesses code quality and project signal strength (optional)
- LinkedIn audit — checks alignment between your profile and the job description (optional)
- Red flag detection — employment gaps, short tenures, vague titles, skills without evidence
- Skill gap radar — visual breakdown of technical gap across primary and secondary skills
- Roadmap — numbered fix steps with before/after examples, project ideas, and time estimates
- Project recommendation — a concrete portfolio project spec tailored to the target role
- CV rewrite (Improve CV tab) — AI rewrites your CV based on detected issues: injects missing keywords, fixes tone, adds seniority signals. Exportable as PDF.
- AI Interview (AI Interview tab) — 10-minute voice interview simulated by AI, tailored to the job. Questions are generated from your analysis — skill gaps, red flags, JD expectations. Turn-based: the AI speaks and listens, detects when you finish, and asks follow-ups when answers are vague. After the interview: a full performance report with axis scores (communication, technical relevance, composure, etc.), per-question feedback, key strengths and improvements. Retry with new questions anytime, with attempt history tracked.
The dashboard (/dashboard) is a 3-tab command center for returning users.
Home tab
- 4 stat cards: avg rejection risk score, active applications, total AI interviews, active plan + renewal date
- Skill profile radar chart — aggregated across all analyses
- Recent analyses — 4 most recent with score badge and one-click access
- À traiter — surfaces urgent items: applications without reply in 14+ days, active interviews, new unread analyses
Analyses tab
- Score evolution chart with period selector
- Paginated and searchable analysis list
- Each analysis row is expandable: shows all linked AI interview attempts inline (score, date, link to report)
- Interview chip shows count if attempts exist, or a "+ Interview" CTA to start one
- Export and delete actions per row
Applications tab
- 5 stat cards: Total, Interviewing, Offers, Rejected, Response rate (interviewing + offer + rejected / total)
- Full application table (searchable, sortable) with status badges and a side drawer for details
- Kanban view — toggle between table and board view; 5 columns (Interested → Applied → Interviewing → Offer → Rejected); drag cards between columns to update status; search applies to both views
| Layer | Technologies |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS v4 |
| Backend | NestJS 11, TypeScript, Zod, Prisma, PostgreSQL (Supabase) |
| AI | OpenAI GPT-4o (ATS, CV audit), Anthropic Claude Sonnet (technical analysis, interview evaluation) |
| Voice | OpenAI Whisper (STT), OpenAI TTS, GPT-4o-mini (conversation logic) |
| Payments | Stripe (subscriptions, webhooks) |
| Auth | Supabase Auth |
Browser (port 3000)
└── Next.js frontend
└── NestJS backend (port 8888)
├── POST /api/analyze — streaming CV analysis (SSE)
├── POST /api/analyze/rewrite — AI CV rewrite (premium)
├── POST /api/interview/start — generate interview questions + TTS
├── POST /api/interview/answer — Whisper transcription + next question
├── POST /api/interview/complete — Claude post-interview analysis
├── GET /api/interview/history — past attempts (filterable by analysisId)
├── Stripe webhooks
└── Supabase PostgreSQL
Core analysis pipeline, CV rewrite, and AI Interview are all functional end-to-end. Ongoing work is focused on refining AI output quality and expanding the interview evaluation depth.
