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
Log in or sign up for Devpost to join the conversation.