Inspiration

Resumes are dead PDFs. Recruiters skim them in 6 seconds and forget. We wanted
anyone — students, career switchers, devs without a portfolio — to turn their
existing resume into a living, shareable personal site without touching a
template gallery or fighting Wix.

## What it does
CVfy takes a resume (PDF or paste), extracts experience, projects, skills, and education with an LLM, and generates a polished portfolio site published at a
custom slug (cvfy.app/u/your-name). Users can edit content, swap themes, link
GitHub for live project data, and reshare instantly.

## How we built it

  • Next.js 15 App Router + React 19 for the editor and public portfolio pages
  • Vercel AI SDK + Claude/OpenAI for resume parsing and section generation
  • Neon Postgres + Drizzle ORM for portfolio + user storage
  • NextAuth for auth, with admin roles and GitHub account linking
  • Vercel Blob for resume + image uploads
  • Tailwind + shadcn/ui for the design system
  • Deployed on Vercel with preview deployments per PR

## Challenges we ran into

  • Reliable resume parsing across wildly inconsistent PDF layouts
  • Keeping LLM output structured and cheap (prompt caching + schema-constrained generation)
  • Handling external image URLs cleanly when deleting from Blob
  • SEO + OG image generation for public portfolio pages

## What we learned
Structured output + tight schemas beat clever prompts. Caching LLM calls per resume hash dropped costs ~80%. Shipping a real public URL on day one made the
product feel finished long before it was.

## What's next

  • Custom domains
  • Theme marketplace
  • Auto-sync from LinkedIn / GitHub
  • Analytics dashboard for portfolio views

Built With

  • anthropic-claude
  • drizzle-orm
  • neon-postgres
  • next.js-15
  • nextauth
  • openai
  • react-19
  • tailwind-css
  • typescript
  • vercel
  • vercel-ai-sdk
  • vercel-blob
Share this project:

Updates