Shortlistable is a full-stack web platform for job seekers who want to move from a generic resume to an application-ready CV faster. Users import a PDF or DOCX, create a structured base CV, paste a job description, receive an AI match analysis, trigger asynchronous parsing/rewrite/export jobs, and download a polished version for recruiters and ATS systems.
Job seekers often rewrite CVs manually for each application, but they do not know which keywords, experience bullets, or evidence gaps matter most. That creates slow application cycles and generic resumes that can be ignored by ATS filters or recruiters.
Shortlistable centralizes the flow: import or build a base CV, analyze the target role, surface missing keywords and weak evidence, enqueue long-running parsing/rewrite/export work through Redis/RQ, then guide the user toward a cleaner, role-specific CV without losing the original profile.
Parsing heterogeneous resumes while preserving enough structure for editing and export.
Keeping AI suggestions truthful: the system must improve wording and evidence without inventing skills or experience.
Balancing ATS optimization with human readability so the final CV does not become keyword-stuffed.
Moving expensive document parsing, OpenAI/Ollama calls, ATS scoring, section enrichment, and Playwright PDF rendering into queue-backed workers so the UI remains responsive.
Designing retries, TTLs, worker heartbeats, SSE job streams, and failure states for background work that depends on external AI and document services.
Designing a workflow that feels fast for repeated applications while still giving users control over every generated change.
The production system is split between `matchcv_web` and `matchcv_backend`. The web app is a Next.js 16/React 19 client deployed on Vercel; it owns the product UI, localized SEO pages, Supabase browser session handling, API proxy routes, and SSE job-stream consumption. The backend is a Python 3.12 FastAPI service behind Nginx, with auth/rate-limit middleware, SQLAlchemy repositories, Supabase Auth/Storage integration, Stripe billing routes and webhook handlers, and AI/document services. Long-running work is handled by Redis + RQ: requests enqueue jobs into the `ai` or `pdf` queues, `worker-ai` processes CV parsing, ATS scoring, job-fit recommendations, and section enrichment, while `worker-pdf` runs Playwright/Chromium PDF rendering. Job status is exposed through `/api/jobs/{id}`, `/stream`, and `/result`, with retries, TTLs, worker heartbeat checks, rq-dashboard, and RedisInsight for queue operations.
User uploads a PDF/DOCX resume or starts from an empty structured CV.
User pastes a job description; backend extracts requirements, keywords, and soft-skill signals.
FastAPI enqueues AI or PDF jobs in Redis/RQ; the web app follows progress through SSE.
worker-ai compares the CV against the role, computes a match score, and highlights missing evidence.
User reviews AI rewrite suggestions before applying them to headline, skills, and experience bullets.
worker-pdf renders the final CV with Playwright/Chromium and returns an export-ready PDF.