Odel
Vitex — AI Resume Generator

Vitex — AI Resume Generator

@chanmeng6661TypeScriptMITUpdated 6 days ago

Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.

View on GitHub
Server endpointStreamable HTTPOAuthProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

Project Banner

Vitex

AI-Powered Resume Generation Platform

Paste a job description, describe your background, and get a tailored, ATS-optimized resume PDF + cover letter in ~30 seconds.
Built with Next.js 16, React 19, TypeScript 6, and the Vercel AI SDK.

Live Demo · Report Bug · Request Feature


Share Vitex

✨ See it live

Vitex landing page — 'Your Resume, Perfected by AI' headline with Job Description and Your Background input areas and a purple Generate My Resume button

Demo: typing a job description and background into Vitex — the AI resume generator form in action

⚙️ How it works + pricing How It Works section: three steps — Paste JD, AI Generates (tailored resume with optimal ATS score), Download PDF (professional PDF ready in seconds) Simple, Transparent Pricing — Free ($0/forever, 3 free credits on signup), Pro ($29/month, 20 credits for active job seekers), Unlimited ($49/month, unlimited everything)
📱 Mobile view Vitex on mobile — stacked layout with Job Description and Your Background textareas filling the screen

Introduction

Vitex is an AI-powered resume generation platform that transforms a job description and your professional background into a polished, ATS-optimized resume PDF and cover letter. An 8-step AI pipeline handles everything from JD parsing and skill matching to server-side PDF compilation, with Typst compiling PDFs locally in under 100ms. It is agent-ready: every capability is reachable over an authenticated HTTP API (the web UI and the public v1 API share one pipeline core), and billing is outcome-based — you are charged only when a resume is successfully produced. The UI follows the Phantom design system: a soft, flat aubergine-and-lavender aesthetic with pill geometry, whisper-weight typography, and generous whitespace.

Vitex is built for a person plus their AI assistant on a "one core, N thin adapters" design — "The API is the UI". Everything the web app does, an agent can do over the public v1 HTTP API, the published vitex-cli, or the hosted MCP connector. The guiding framing is Career as Code: your career facts are the source, each tailored PDF is a reproducible build artifact, the refinement chain is a series of commits, outcome billing means you pay per successful build, and the exported .typ source means zero lock-in. See ADR 0003.

Key Features

  • AI Resume Generation -- Paste a job description + describe your background, get a tailored resume PDF
  • 8-Step AI Pipeline -- JD parsing, background parsing, match analysis, tailoring, ATS scoring, cover letter, document generation, server-side PDF compilation
  • Agent-Ready API -- Operate the whole product over HTTP with an API key; no browser, 2FA, or CAPTCHA (see docs/api/v1.md, the OpenAPI spec at public/openapi.yaml, and the runnable curl playbook at public/skill.md)
  • CLI & MCP server -- vitex-cli (bin vitex) is a thin client over the hosted API: a token-cheap CLI for terminals and coding agents, plus vitex mcp (a stdio MCP server via npx -y vitex-cli mcp) for Claude Desktop, Claude Code, and Cursor
  • Hosted MCP connector -- a browser-OAuth remote MCP server at https://www.vitex.org.nz/api/mcp lets non-technical users connect Vitex inside ChatGPT or Claude with a sign-in (no API key to paste): ChatGPT guide, Claude guide. For agent-driven setup from docs alone, see llms-install.md
  • Outcome-Based Billing -- Credits are charged only when a resume is successfully produced (failures are free), idempotently
  • 7 Professional Templates -- Auto-selected by AI based on industry and role (two-column, modern-cv, executive, creative, compact, banking, academic)
  • ATS Optimization -- Real-time ATS compatibility scoring with actionable feedback
  • Cover Letter Generation -- Automatically generated alongside the resume
  • Typst-Powered PDF -- Local compilation in <100ms, no external APIs required
  • Natural Language Refinement -- Describe changes in plain English; AI applies a targeted, free refinement (resume and/or cover letter) — not a full regeneration
  • Voice Profile -- Save a writing sample on a candidate profile so generated cover letters match your voice
  • Public Career Endpoint -- Publish a profile to a stable, agent-readable page at /p/<slug> (HTML, /json, and /md); contact PII and raw text are never exposed
  • Credit System -- Stripe-powered subscription plans for usage management
  • Cloud Storage -- Persistent resume management with user accounts (My Resumes history, search, and re-open)

How It Works

  1. Input -- Paste a job description and describe your professional background on the homepage
  2. Generate -- AI analyzes, matches, tailors, and compiles your resume through an 8-step pipeline streamed via SSE
  3. Refine & Export -- Review the PDF preview, ATS score, and cover letter; refine with natural language; download or share

Tech Stack

LayerTechnology
FrameworkNext.js 16, React 19, TypeScript 6
AIVercel AI SDK v7 + OpenAI (tiered GPT-5 models)
Resume RenderingTypst (local binary, <100ms compilation)
Design SystemPhantom — soft, flat aubergine/lavender (Tailwind CSS + shadcn/ui)
DatabaseNeon PostgreSQL + Drizzle ORM
AuthNeon Auth (Stack Auth) + API keys for agents
PaymentsStripe (outcome-based credits)
Rate limitingNeon Postgres (fixed-window)
ObservabilityOpenTelemetry / Langfuse (optional)
DeploymentDigitalOcean VPS, Docker, Traefik, GitHub Actions CI/CD

Getting Started

Prerequisites

  • Node.js 18+
  • Docker (for production deployment)
  • Typst binary (for local PDF compilation)

Installation

git clone https://github.com/ChanMeng666/easy-resume.git
cd easy-resume
npm install

Environment Variables

Create a .env.local file:

# AI
OPENAI_API_KEY=sk-...

# Database
DATABASE_URL=postgresql://user:password@host:5432/dbname

# Neon Auth (Stack Auth)
NEXT_PUBLIC_STACK_PROJECT_ID=...
NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=...
STACK_SECRET_SERVER_KEY=...

# Payments (Stripe)
STRIPE_SECRET_KEY=...
STRIPE_WEBHOOK_SECRET=...
STRIPE_PRICE_CREDITS_5=...
STRIPE_PRICE_PRO_MONTHLY=...
STRIPE_PRICE_UNLIMITED_MONTHLY=...

# Canonical app origin (drives the OAuth issuer + advertised OAuth/MCP/public URLs)
NEXT_PUBLIC_APP_URL=http://localhost:3000   # prod: https://www.vitex.org.nz

# Optional: model tiering + observability
AI_MODEL_EXTRACT=gpt-5.4-mini-2026-03-17   # JD parse
AI_MODEL_REASON=gpt-5.5-2026-04-23         # generation / quality-critical steps
AI_MODEL_CHAT=gpt-5.5-2026-04-23           # edit-agent tool loop (same as reason)
AI_TELEMETRY_ENABLED=false

See .env.example for the full annotated list. Rate limiting and webhook idempotency use the existing Neon Postgres — no Redis required.

Development

npm run dev          # Start dev server on http://localhost:3000
npm run build        # Production build
npm run start        # Start production server
npm run lint         # Run ESLint

Deployment

Vitex runs as a Docker container on a VPS behind Traefik reverse proxy, with GitHub Actions for CI/CD.

# Build Docker image
docker build -t vitex .

# Run container
docker run -p 3000:3000 --env-file .env vitex

The production deployment uses:

  • DigitalOcean VPS as the host
  • Docker for containerization
  • Traefik for reverse proxy and TLS
  • GitHub Actions for automated build and deploy on push

Architecture

Monolith Next.js App (Docker Container on VPS)
|
|-- Pages
|   |-- /                    Landing page: JD + background input
|   |-- /editor              Result review: PDF preview, ATS score, cover letter, refinement
|   |-- /resumes             My Resumes history (search, open, download, delete)
|   |-- /profiles            Candidate profiles (background + voice sample) + publish
|   |-- /applications        Application tracker
|   |-- /dashboard           Credits, billing + Connections & API Keys
|   |-- /pricing             Subscription plans
|   |-- /p/[slug]            Public career endpoint (HTML, +/json, +/md)
|
|-- Transports (thin adapters over one shared core -- "the API is the UI")
|   |-- POST /api/generate     SSE stream for the web UI
|   |-- /api/v1/resumes        Public agent REST API (API key, job-based) + /api/v1/me
|   |-- /api/mcp               Hosted remote MCP (Streamable HTTP, OAuth-protected)
|   |-- /api/oauth/*           OAuth 2.1 Authorization Server (facade minting API keys)
|   |-- vitex-cli              Published npm package: CLI + stdio MCP server
|
|-- Backend Core (src/server/, transport-agnostic)
|   |-- 8-Step Pipeline: JD parse || background parse -> match -> tailor
|   |   -> ATS score || cover letter -> render (Typst) -> compile (PDF)
|   |-- Outcome billing: charge once, only on a compiled PDF, idempotent
|   |-- Auth: getCaller() resolves API key or Neon Auth cookie session
|   |-- Errors: machine-readable envelope; structured JSON logs
|
|-- Services
|   |-- Neon PostgreSQL (Drizzle ORM) -- data, credits, rate limits, job queue
|   |-- Neon Auth / Stack Auth (authentication)
|   |-- Stripe (payments)
|   |-- OpenAI (3 tiers: gpt-5.4-mini extract / gpt-5.5 reason / gpt-5.5 chat)

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact

Chan Meng


Vitex - AI-Powered Resume Generation Platform

Made with care by Chan Meng



Chan Meng

Chan Meng
Need a custom app like this one? I build them — let's talk.

Email Chan Meng Chan Meng on GitHub