# Vitex — AI Resume Generator [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/ChanMeng666/easy-resume  
**GitHub Stars:** 1  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/vitex-ai-resume-generator

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

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "vitex-ai-resume-generator": {
    "command": "npx",
    "args": ["-y","vitex-cli"]
  }
}
```

## Documentation & README

<div align="center"><a name="readme-top"></a>

[![Project Banner](./public/vitex.svg)](#)

# Vitex<br/><h3>AI-Powered Resume Generation Platform</h3>

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

[Live Demo][demo-link] · [Report Bug][github-issues-link] · [Request Feature][github-issues-link]

<br/>

<!-- SHIELD GROUP -->

[![][github-release-shield]][github-release-link]
[![][deployment-shield]][deployment-link]
[![][github-stars-shield]][github-stars-link]
[![][github-forks-shield]][github-forks-link]
[![][github-issues-shield]][github-issues-link]
[![][github-license-shield]][github-license-link]

**Share Vitex**

[![][share-x-shield]][share-x-link]
[![][share-linkedin-shield]][share-linkedin-link]
[![][share-reddit-shield]][share-reddit-link]

</div>

<!-- SHOWCASE:START — generated by readme-showcase; edit docs/showcase/showcase.scenario.json and re-run instead of hand-editing -->
## ✨ See it live

<a href="https://www.vitex.org.nz/">
  <img src="docs/showcase/hero.webp" alt="Vitex landing page — 'Your Resume, Perfected by AI' headline with Job Description and Your Background input areas and a purple Generate My Resume button" width="100%">
</a>

![Demo: typing a job description and background into Vitex — the AI resume generator form in action](docs/showcase/demo.gif)

<details>
<summary>⚙️ How it works + pricing</summary>

<img src="docs/showcase/how-it-works.webp" width="100%" alt="How It Works section: three steps — Paste JD, AI Generates (tailored resume with optimal ATS score), Download PDF (professional PDF ready in seconds)">

<img src="docs/showcase/pricing.webp" width="100%" alt="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)">

</details>

<details>
<summary>📱 Mobile view</summary>

<img src="docs/showcase/mobile-hero.webp" width="390" alt="Vitex on mobile — stacked layout with Job Description and Your Background textareas filling the screen">

</details>

<!-- docs/showcase/demo.mp4 holds a higher-quality version of the demo — drag it into a GitHub release or comment for crisp playback. -->
<!-- SHOWCASE:END -->

## 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`](cli/README.md), 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/decisions/0003-adapter-strategy-and-hosted-mcp.md).

## 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`](public/skill.md))
- **CLI & MCP server** -- [`vitex-cli`](cli/README.md) (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](docs/connectors/chatgpt.md), [Claude guide](docs/connectors/claude.md). For agent-driven setup from docs alone, see [`llms-install.md`](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

| 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

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

### Environment Variables

Create a `.env.local` file:

```env
# 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

```bash
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.

```bash
# 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](LICENSE) file for details.

## Contact

**Chan Meng**
- LinkedIn: [chanmeng666](https://www.linkedin.com/in/chanmeng666/)
- GitHub: [ChanMeng666](https://github.com/ChanMeng666)
- Email: [chanmeng.dev@gmail.com](mailto:chanmeng.dev@gmail.com)
- Website: [chanmeng.org](https://chanmeng.org/)

---

<div align="center">

**Vitex - AI-Powered Resume Generation Platform**

Made with care by Chan Meng

</div>

---

<!-- LINK DEFINITIONS -->

[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square

<!-- Project Links -->
[demo-link]: https://vitex.org.nz
[docs-link]: https://github.com/ChanMeng666/easy-resume#readme

<!-- GitHub Links -->
[github-issues-link]: https://github.com/ChanMeng666/easy-resume/issues
[github-stars-link]: https://github.com/ChanMeng666/easy-resume/stargazers
[github-forks-link]: https://github.com/ChanMeng666/easy-resume/forks
[github-release-link]: https://github.com/ChanMeng666/easy-resume/releases
[pr-welcome-link]: https://github.com/ChanMeng666/easy-resume/pulls
[github-license-link]: https://github.com/ChanMeng666/easy-resume/blob/master/LICENSE

<!-- Shield Badges -->
[github-release-shield]: https://img.shields.io/github/v/release/ChanMeng666/easy-resume?color=369eff&labelColor=black&logo=github&style=flat-square
[deployment-shield]: https://img.shields.io/badge/deployment-online-55b467?labelColor=black&logo=docker&style=flat-square
[deployment-link]: https://vitex.org.nz
[github-stars-shield]: https://img.shields.io/github/stars/ChanMeng666/easy-resume?color=ffcb47&labelColor=black&style=flat-square
[github-forks-shield]: https://img.shields.io/github/forks/ChanMeng666/easy-resume?color=8ae8ff&labelColor=black&style=flat-square
[github-issues-shield]: https://img.shields.io/github/issues/ChanMeng666/easy-resume?color=ff80eb&labelColor=black&style=flat-square
[github-license-shield]: https://img.shields.io/badge/license-MIT-white?labelColor=black&style=flat-square
[pr-welcome-shield]: https://img.shields.io/badge/PRs_welcome-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge

<!-- Social Share Links -->
[share-x-link]: https://x.com/intent/tweet?hashtags=vitex,resume,ai&text=Check%20out%20Vitex%20-%20AI-Powered%20Resume%20Generation&url=https%3A%2F%2Fgithub.com%2FChanMeng666%2Feasy-resume
[share-linkedin-link]: https://linkedin.com/sharing/share-offsite/?url=https://github.com/ChanMeng666/easy-resume
[share-reddit-link]: https://www.reddit.com/submit?title=Vitex%20-%20AI-Powered%20Resume%20Generation%20Platform&url=https%3A%2F%2Fgithub.com%2FChanMeng666%2Feasy-resume

[share-x-shield]: https://img.shields.io/badge/-share%20on%20x-black?labelColor=black&logo=x&logoColor=white&style=flat-square
[share-linkedin-shield]: https://img.shields.io/badge/-share%20on%20linkedin-black?labelColor=black&logo=linkedin&logoColor=white&style=flat-square
[share-reddit-shield]: https://img.shields.io/badge/-share%20on%20reddit-black?labelColor=black&logo=reddit&logoColor=white&style=flat-square

---

<!-- CHAN MENG PERSONAL BRAND -->
<div align="center">
  <a href="https://github.com/ChanMeng666" target="_blank">
    <img src="./.github/brand/chan-meng-logo.svg" alt="Chan Meng" width="160" />
  </a>

  <p><strong>Chan Meng</strong><br/>Need a custom app like this one? I build them — let's talk.</p>

  <a href="mailto:chanmeng.dev@gmail.com"><img src="https://img.shields.io/badge/Email-chanmeng.dev@gmail.com-EA4335?style=flat-square&logo=gmail&logoColor=white" alt="Email Chan Meng"/></a>
  <a href="https://github.com/ChanMeng666"><img src="https://img.shields.io/badge/GitHub-ChanMeng666-181717?style=flat-square&logo=github&logoColor=white" alt="Chan Meng on GitHub"/></a>
</div>
<!-- /CHAN MENG PERSONAL BRAND -->

