Back to Projects
SaaS AI

Shortlistable

AI Resume Studio & Job Matching

Shortlistable helps candidates show how their actual experience fits a specific role. They can create a CV from a template or import an existing document, reconstruct its layout, edit content and presentation, and compare it with a job description. The analysis connects role requirements to evidence in the CV and proposes changes candidates can review before applying. I conceived the matching logic and document-reconstruction architecture, and built the resume studio, export pipeline and commercial access with dedicated background processing.

Next.js React TypeScript FastAPI Python PostgreSQL Managed data services Redis RQ Docker Nginx Payment integration AI integration Playwright

# Homepage Preview

Shortlistable homepage showing the AI-powered CV tailoring workflow

Problem

Candidates face two kinds of rework: rebuilding an existing CV in a new editor and rewriting it for each role. A keyword checklist alone cannot explain whether their experience supports a requirement, and generated wording can distort facts or damage the document's presentation.

Solution

Shortlistable connects document reconstruction with an editable resume studio and role-specific analysis. It examines alignment, supporting evidence and CV quality, then offers concrete, reviewable changes to existing content. Candidates refine the wording and layout before exporting, while import, matching, AI enrichment and PDF rendering run in dedicated background queues.

# What You Can Do

Start from the CV you already have

Import a PDF or DOCX and recover structured content. Reconstruct a document's columns, typography and visual elements, then review its editable preview.

Shape content and presentation

Create a CV from a template or edit an imported one. Work with repeatable experience and education sections, rich text, colors, margins and a live document preview.

Understand your fit for a role

Compare your CV with a job description. Review requirement-level matches, supporting experience, missing evidence and quality issues to identify what needs attention.

Apply AI suggestions with control

Review concrete rewrites for existing CV content and choose which changes to apply. Fact-preservation checks help retain named skills and experience details.

Prepare the next application

Manage CVs and versions, refine your document for another role, and preview the final result before downloading a PDF.

Follow processing from the studio

Track import, analysis and export progress while working in the editor. Account settings bring subscription access and usage credits into the same product.

# My Contribution

# Full Stack & Infrastructure

Frontend & Product

Next.js 16 App Router React 19 TypeScript Tailwind CSS 4 next-intl next-themes Radix UI Lucide React Framer Motion Tiptap editor React Hook Form Zod Sonner Usage analytics Responsive marketing pages SEO sitemap

Backend & API

Python 3.12 FastAPI Uvicorn Pydantic v2 Pydantic Settings SQLAlchemy 2 psycopg2 python-jose FastAPI middleware CORS Auth middleware Rate limit middleware Health routes REST API routers

AI & Documents

LLM API integration Document parsing Role matching CV quality analysis Section editing Layout reconstruction Image processing OCR PDF/DOCX processing Browser-based PDF rendering

Workers & Queue

Redis RQ ai queue cv_import queue job_fit queue pdf queue worker-ai worker-cv-import worker-job-fit worker-pdf Retries and timeouts Result / failure TTLs Worker heartbeats SSE job status RQ Dashboard RedisInsight

Data & Storage

PostgreSQL Managed authentication Managed data access Profile access Object storage Document storage Image storage Preview storage Template storage User profiles CV versions Job analyses Billing catalog Subscription state

Infrastructure & Ops

Managed web hosting Docker Docker Compose Nginx reverse proxy Basic auth for admin tools uv lockfile Playwright Chromium install Redis appendonly persistence Environment-based config Shell/PowerShell launchers Application operations

Integrations

Subscription management Hosted checkout Usage credits Billing webhooks AI inference API Managed authentication Next.js API proxy Product analytics Remotion marketing videos

# Technical Challenges

Parsing heterogeneous resumes while preserving enough structure for editing and export.

Reconstructing typography, columns, geometry and visual assets while binding extracted content to editable CV sections.

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.

Isolating document import, AI analysis, section enrichment and Chromium rendering in separate queues to prevent one slow workload from delaying all users.

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.

# System Architecture

Shortlistable deploys the Next.js studio on managed hosting and a separate FastAPI backend behind Nginx on a Docker Compose host. A private bridge network connects the API, Redis and four Python RQ consumers: cv_import, ai, job_fit and pdf. Managed identity, PostgreSQL and object storage sit outside that network. Workers call an inference service or render with Playwright/Chromium, then persist results and documents. The Next.js proxy relays API requests and SSE job status; a payment service delivers billing webhooks to the public API origin.

Key Features

  • PDF/DOCX resume import and structured CV builder
  • Layout reconstruction and editable imported CVs
  • Requirement-level job matching with supporting CV evidence
  • Semantic alignment, evidence support and CV quality analysis
  • AI-assisted tailoring with user validation before export
  • Dedicated import, job-fit, AI and PDF worker queues
  • Server-sent job status updates for long-running processing
  • Export-ready CV workflow and subscription access
100%

Managed web hosting serves the web application. A separate Docker Compose host runs the API and RQ workers; authentication, PostgreSQL and files use managed data services.

Request / responseQueued workPersistent dataEvents / callbacksControl / operations
Shortlistable infrastructure · Deployment topology Managed web hosting serves the web application. A separate Docker Compose host runs the API and RQ workers; authentication, PostgreSQL and files use managed data services. The connection table below provides a text equivalent of every arrow. WEB HOSTING Managed web runtime BACKEND HOST · DOCKER COMPOSE Private bridge network · only Nginx publishes HTTP / HTTPS MANAGED DATA SERVICES Managed services · outside the Docker network Candidate browser → Next.js application: HTTPS Next.js application → Identity service: Auth / JWT Next.js application → Nginx: HTTPS · API + SSE Certificate services → Nginx: TLS files / reload Nginx → FastAPI / Uvicorn: HTTP · private upstream FastAPI / Uvicorn → Redis / RQ: Enqueue / job status Redis / RQ → Python RQ workers: RQ dispatch FastAPI / Uvicorn → PostgreSQL: SQL / TLS FastAPI / Uvicorn → Object storage: Storage API Python RQ workers → Object storage: Read inputs / store artifacts Python RQ workers → PostgreSQL: Persist CV / analysis results Python RQ workers → AI inference service: HTTPS · inference FastAPI / Uvicorn → Payment service: Billing API Payment service → Nginx: Signed webhooks CLIENT Candidate browser CV studio Authenticated session SERVICE Next.js application React · Managed hosting API proxy + job SSE proxy EXTERNAL Identity service Session / JWT Sign-in and token verification SERVICE Nginx TLS reverse proxy · 80 / 443 Private upstream: api:8000 SERVICE Certificate services TLS renewal + proxy reloader Persistent ACME / TLS files SERVICE FastAPI / Uvicorn Python · SQLAlchemy CV, jobs, credits and billing DATA STORE Redis / RQ Job queues + job state AOF volume: redis_data WORKER Python RQ workers Four separate processes Import · AI · job fit · PDF DATA STORE PostgreSQL Managed PostgreSQL CVs, versions, billing, credits DATA STORE Object storage Document / image buckets CV files, previews, templates EXTERNAL AI inference service External inference API Matching and document AI EXTERNAL Payment service Checkout + subscriptions Webhook delivery to the API HTTPS Auth / JWT HTTPS · API +SSE TLS files /reload HTTP · privateupstream Enqueue / jobstatus RQ dispatch SQL / TLS Storage API Read inputs /storeartifacts Persist CV /analysisresults HTTPS ·inference Billing API Signedwebhooks
Scroll inside the canvas to explore. Zoom for detail, or fit the whole diagram.

Web and API are separate deployments

Next.js proxy routes forward authenticated requests and job streams to FastAPI. PostgreSQL is hosted outside the application container network.

Persistence and operations

Redis uses append-only persistence; CVs and commercial state live in PostgreSQL, and documents in object storage. Certificate renewal and a reloader maintain the origin TLS certificates.

Runtime boundaries

The web application, backend containers and managed services are separate deployment boundaries. Operational dashboards are kept outside the public application surface.

Read all connections (14)
FromToProtocol / responsibilityFlow
Candidate browserNext.js applicationHTTPSRequest / response
Next.js applicationIdentity serviceAuth / JWTRequest / response
Next.js applicationNginxHTTPS · API + SSERequest / response
Certificate servicesNginxTLS files / reloadControl / operations
NginxFastAPI / UvicornHTTP · private upstreamRequest / response
FastAPI / UvicornRedis / RQEnqueue / job statusQueued work
Redis / RQPython RQ workersRQ dispatchQueued work
FastAPI / UvicornPostgreSQLSQL / TLSPersistent data
FastAPI / UvicornObject storageStorage APIPersistent data
Python RQ workersObject storageRead inputs / store artifactsPersistent data
Python RQ workersPostgreSQLPersist CV / analysis resultsPersistent data
Python RQ workersAI inference serviceHTTPS · inferenceRequest / response
FastAPI / UvicornPayment serviceBilling APIRequest / response
Payment serviceNginxSigned webhooksEvents / callbacks

Separate workloads

Import, role matching, enrichment and rendering use dedicated queues so they can be processed independently.

Preserve document fidelity

Document extraction and layout reconstruction are separate concerns, joined by semantic bindings and a reviewable preview.

Make progress visible

The editor consumes job status through SSE and fetches the completed result rather than blocking on a long HTTP request.

# User Flow & Journey

Import or create

Step 01

Upload a PDF/DOCX, reconstruct its layout or start with a template.

Target Role

Step 02

User pastes a job description; backend extracts requirements, keywords, and soft-skill signals.

Review the match

Step 03

Compare the CV with the role and review missing evidence and suggested improvements.

Tailor & Validate

Step 04

User reviews AI rewrite suggestions before applying them to headline, skills, and experience bullets.

Export

Step 05

Preview the finished document and download the tailored CV as a PDF.

Flow Analysis

From an existing resume to a tailored, export-ready application.

Discuss this Project
← Back to Projects Contact Me →