Gone. Gone from the registry since 6 Oct.
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
One address for any MCP client. You sign in once, after adding it.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Odel could not list its tools without signing in.
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

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.
docs/api/v1.md, the OpenAPI spec at public/openapi.yaml, and the runnable curl playbook at public/skill.md)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 Cursorhttps://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/p/<slug> (HTML, /json, and /md); contact PII and raw text are never exposed| Layer | Technology |
|---|---|
| Framework | Next.js 16, React 19, TypeScript 6 |
| AI | Vercel AI SDK v7 + OpenAI (tiered GPT-5 models) |
| Resume Rendering | Typst (local binary, <100ms compilation) |
| Design System | Phantom — soft, flat aubergine/lavender (Tailwind CSS + shadcn/ui) |
| Database | Neon PostgreSQL + Drizzle ORM |
| Auth | Neon Auth (Stack Auth) + API keys for agents |
| Payments | Stripe (outcome-based credits) |
| Rate limiting | Neon Postgres (fixed-window) |
| Observability | OpenTelemetry / Langfuse (optional) |
| Deployment | DigitalOcean VPS, Docker, Traefik, GitHub Actions CI/CD |
git clone https://github.com/ChanMeng666/easy-resume.git
cd easy-resume
npm install
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.examplefor the full annotated list. Rate limiting and webhook idempotency use the existing Neon Postgres — no Redis required.
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
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:
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)
This project is licensed under the MIT License - see the LICENSE file for details.
Chan Meng
Vitex - AI-Powered Resume Generation Platform
Made with care by Chan Meng