Skip to content

wesleyramalho/mypdfcv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

177 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyPDFCV

mypdfcv.com — A modern, client-side resume builder with real-time preview, AI-powered text improvement, and one-click PDF export.

image image

Features

  • Real-time preview — See your resume update as you type
  • PDF export — One-click, pixel-perfect PDF generation via @react-pdf/renderer
  • AI text improvement — In-browser AI (runs via WebAssembly, no data sent to servers)
  • Drag-and-drop sections — Reorder resume sections with @dnd-kit
  • Profile photo — Upload and crop a profile photo
  • LinkedIn import — Pre-fill your resume from your LinkedIn profile (optional OAuth)
  • Dark mode — Full light/dark theme support
  • Privacy-first — All data stored in localStorage. Nothing leaves your browser.

Packages

MyPDFCV's core logic is published as standalone npm packages — no Next.js required:

Package Description
@mypdfcv/pdf-core Resume types, templates, validation schemas, and PDF generation
@mypdfcv/i18n Internationalization with 7 bundled locales
@mypdfcv/mcp-server MCP server for AI-powered resume PDF generation

MCP Server

Generate resume PDFs directly from AI assistants (Claude, Cursor, etc.) using the Model Context Protocol:

# Claude Code
claude mcp add mypdfcv -- npx -y @mypdfcv/mcp-server

Or add to Claude Desktop / Cursor config:

{
  "mcpServers": {
    "mypdfcv": {
      "command": "npx",
      "args": ["-y", "@mypdfcv/mcp-server"]
    }
  }
}

Then ask your assistant: "Generate a resume PDF for John Doe, a senior software engineer"

See the MCP server repo for full documentation.

Tech Stack

Getting Started

1. Install dependencies and build packages

npm install
npm run build:packages

2. Set up environment variables

cp .env.example .env.local

3. Generate an AUTH_SECRET

npx auth secret

This writes AUTH_SECRET to .env.local automatically. Alternatively, run openssl rand -hex 32 and set it manually.

4. Start the dev server

npm run dev

Open http://localhost:3000.

Available Scripts

Command Description
npm run dev Start development server
npm run build Build for production
npm run start Start production server
npm run lint Run ESLint
npm run build:packages Build packages
npm run test:e2e Run Playwright e2e tests (headless)
npm run test:e2e:ui Open Playwright UI for interactive debugging
npm run test:e2e:headed Run e2e tests with visible browser

E2E Tests

End-to-end tests use Playwright and cover preview rendering, PDF export, and cross-surface consistency across all 7 templates.

# Install browsers (first time only)
npx playwright install chromium

Tests reuse a dev server on port 3000 (reuseExistingServer: true). Make sure npm run dev is running before using test:e2e:ui.

Environment Variables

Copy .env.example to .env.local and fill in the values:

Variable Description
AUTH_SECRET NextAuth.js secret for session encryption
NEXTAUTH_URL App URL for NextAuth.js callbacks
LINKEDIN_CLIENT_ID LinkedIn OAuth app client ID
LINKEDIN_CLIENT_SECRET LinkedIn OAuth app client secret
NEXT_PUBLIC_LINKEDIN_OAUTH_ENABLED Enable/disable LinkedIn import feature (true/false)
NEXT_PUBLIC_APP_URL Public-facing app URL
NEXT_PUBLIC_POSTHOG_KEY PostHog project API key (optional)
NEXT_PUBLIC_POSTHOG_HOST PostHog ingest host (default: https://us.i.posthog.com)

LinkedIn OAuth Setup (Optional)

To enable "Import from LinkedIn", add these to .env.local:

LINKEDIN_CLIENT_ID=your_client_id
LINKEDIN_CLIENT_SECRET=your_client_secret
NEXT_PUBLIC_LINKEDIN_OAUTH_ENABLED=true
AUTH_SECRET=your_auth_secret

LinkedIn app requirements:

  • Scopes: openid, profile, email
  • Authorized redirect URL: http://localhost:3000/api/auth/callback/linkedin
  • Production redirect URL: https://mypdfcv.com/api/auth/callback/linkedin

Analytics (PostHog)

Product analytics are powered by PostHog (free tier, 1M events/month). Analytics are optional — the app works without a key.

To enable, add to .env.local:

NEXT_PUBLIC_POSTHOG_KEY=phc_your_key_here
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com

Privacy: anonymous profiles only, IP not stored, Do Not Track respected.

Tracked Events

Event Properties Metric
resume_created templateId, source (blank/template/import) Resume creation rate
resume_deleted Churn signal
resume_duplicated Engagement
template_selected templateId Most popular templates
pdf_exported templateId, locale Export conversion rate
ai_improve_requested fieldType AI feature usage
ai_improve_accepted fieldType AI acceptance rate
file_imported fileType Import method preference
linkedin_import LinkedIn import usage
locale_changed from, to Language preferences
$pageview (automatic) Page traffic
$pageleave (automatic) Editor dropoff

Deployment

The production site runs at mypdfcv.com.

Recommended deployment: Vercel (zero-config for Next.js).

Contributing

Contributions are welcome! To get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feat/your-feature)
  3. Commit your changes
  4. Push to your fork and open a Pull Request

Please make sure your code passes linting (npm run lint) before submitting.

License

This project is licensed under the MIT License.


Created by Wesley Ramalho

About

mypdfcv.com is a modern, free resume builder with real-time preview, AI-powered text improvement, and one-click PDF export.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages