npm vitex-clistreamable-httpMITupdated 7d ago
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.
What can you do with Vitex โ AI Resume Generator?
VitexAI-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

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 atpublic/openapi.yaml, and the runnable curl playbook atpublic/skill.md) - CLI & MCP server --
vitex-cli(binvitex) is a thin client over the hosted API: a token-cheap CLI for terminals and coding agents, plusvitex mcp(a stdio MCP server vianpx -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/mcplets 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, seellms-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
- Input -- Paste a job description and describe your professional background on the homepage
- Generate -- AI analyzes, matches, tailors, and compiles your resume through an 8-step pipeline streamed via SSE
- Refine & Export -- Review the PDF preview, ATS score, and cover letter; refine with natural language; download or share
Tech Stack
| 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 |
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.examplefor 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
- LinkedIn: chanmeng666
- GitHub: ChanMeng666
- Email: chanmeng.dev@gmail.com
- Website: chanmeng.org
Vitex - AI-Powered Resume Generation Platform
Made with care by Chan Meng
Install
Add Vitex โ AI Resume Generator to your client. Pick the one you use.
{
"servers": {
"vitex-cli": {
"type": "http",
"url": "https://www.vitex.org.nz/api/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add vitex-cli -- npx -y vitex-clicodex mcp add vitex-cli -- npx -y vitex-cliamp mcp add vitex-cli -- npx -y vitex-cli{
"mcpServers": {
"vitex-cli": {
"command": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"vitex-cli": {
"command": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"vitex-cli": {
"command": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"vitex-cli": {
"command": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"vitex-cli": {
"command": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"vitex-cli": {
"type": "local",
"command": "npx",
"args": [
"-y",
"vitex-cli"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"vitex-cli": {
"command": {
"path": "npx",
"args": [
"-y",
"vitex-cli"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y vitex-cliRun `goose configure`, choose **Add Extension โ Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance19/25
- Trust13/20
- Capability0/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 0 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 0.2.1Latest | Jul 19, 2026 |