AnyCV is a Next.js-based web application that allows users to create and manage professional CVs and personal websites by making use of their linkedin profile. With a LinkedIn link, you can create your new stunning CV in 30 seconds.
- Framework: Next.js 15 (with App Router)
- State Management: Zustand for global state and TanStack Query for server state
- Authentication / Session Management: Auth.js v5 / next-auth with JWT
- UI Components: shadcn/ui (Radix UI + Tailwind CSS)
- Styling: Tailwind CSS
- Form Handling: React Hook Form with Zod validation
- Validation: zod
- PDF Generation: @react-pdf/renderer
- PDF Viewing: @react-pdf-viewer/core leveraging @pdfjs-dist
- Analytics: Vercel Analytics
- User authentication and profile management
- CV generation from LinkedIn profiles via the API
- Choose between multiple CV & website templates (Classic, Modern)
- CV editing and customization
- PDF export of generated CVs
- Publishing personal website under a unique https://buildanycv.com/ username
- Dark/light mode support
- Node.js 18+ or Bun 1.0+
- Install & run the AnyCV API backend
- Create a Cloudflare Account and a Turnstile Application to get a site key (you'll need the secret key in the backend). When creating a new turnstile application / site, put your localhost as domain (and other domains if you want to deploy this app, too), choose the managed option and select no on pre-clearance.
-
Clone the repository
git clone https://github.com/ZinoM21/any-cv-app cd any-cv-app -
Install dependencies
# Using npm npm install # Using Bun (recommended for faster installs) bun install
-
Create a
.env.localfile in the root directory with the following variables:# API Configuration NEXT_PUBLIC_API_URL=http://localhost:8000/api # The URL of a AnyCV Backend instance (dont forget the /api!) # NextAuth Configuration AUTH_TRUST_HOST=http://localhost:3000 # Needed if deployed behind a reverse proxy like vercel or cloudflare pages AUTH_SECRET=your-nextauth-secret # After installing dependencies, you can generate a secret with bunx auth secret # Cloudflare Turnstile for Bot Protection NEXT_PUBLIC_TURNSTILE_SITE_KEY=your-turnstile-site-key # Cloudflare Turnstile site key for bot protection -
Run the development server
# Using npm npm run dev # Using Bun bun dev
-
Access the application at
http://localhost:3000
frontend/
├── app/ # Next.js app directory (App Router)
│ ├── (application)/
│ │ ├── dashboard/ # Protected Dashboard pages
│ │ └── generate/ # CV generation pages
│ ├── (auth)/ # Auth-related pages
│ │ ├── signin/ # Sign in page
│ │ └── signup/ # Sign up page
│ ├── (marketing)/ # Public/marketing pages
│ ├── api/ # API route for NextAuth
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── auth/ # Authentication components
│ ├── editor-form/ # CV editor form components
│ ├── templates/
│ │ ├── cv/ # PDF CV templates
│ │ └── website/ # Website templates
│ └── ui/ # UI components from (shadcn/ui)
├── lib/ # Utilities and helpers
│ ├── api/ # API client functions
│ ├── schemas/ # Zod validation schemas
│ └── utils.ts # Utility functions
├── config/ # Static configuration like auth config, routes, templates, etc.
├── hooks/ # Custom React hooks
├── public/ # Static assets
├── styles/ # Global styles like fonts
├── auth.ts # NextAuth import
└── next.config.ts # Next.js configuration
The project uses ESLint and Prettier for code formatting and linting. Run linting with:
bun run lintbun run buildbun run startThe application is configured for deployment on Vercel. Connect your GitHub repository to Vercel for automatic deployments.
The frontend communicates with the AnyCV API backend. All API calls are centralized in the lib/api directory:
api.ts- Contains all the API endpoint functionsapi-client.ts- Configures the API client with authentication and error handlingserver-api.ts- Server-side API client for Next.js server components
- JWT-based authentication with refresh tokens
- Protected routes for authenticated users
- Email verification process
- Password reset functionality
- Enter your LinkedIn username to get your profile data
- Choose from multiple CV templates
- Edit and customize the CV content
- Preview the CV in real-time
- Export as PDF
- Publish under unique slug
- View and manage all created CVs
- Upload custom profile photos
- Update personal information
- Delete CVs or account
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT