Skip to content

davidculemann/easycv

Repository files navigation

EasyCV

An AI-powered CV and cover letter generation platform built with Remix, Vite, shadcn/ui, Vercel's AI sdk and Supabase.

About

EasyCV helps users create professional, ATS-friendly CVs and cover letters in minutes. The platform leverages AI to analyze user experience and suggest the best way to present skills and qualifications.

This project is based on remix-shadcn-boilerplate.

What's inside?

  • A full-featured AI CV and cover letter generation platform
  • Complete authentication flow with Supabase
    • Signup with email, Google, Github
    • Login with email, Google, Github
    • Forgot password flow
    • Logout
  • Protected routes
  • Professional dashboard layout for CV management
  • Beautiful landing page explaining the platform's features
  • Interactive CV profile builder with completion tracking
  • CV export and formatting options

Setup

  • Clone the repo:
git clone git@github.com:yourusername/easycv.git
  • Install dependencies:
pnpm install

Stripe

In order to use Stripe Subscriptions and seed the database, you'll need to create a Stripe Account and get the secret key from the Stripe Dashboard.

  1. Create a Stripe Account or use an existing one.
  2. Visit API Keys section and copy the Secret key.
  3. Paste your secret key into .env file as STRIPE_SECRET_KEY.

Stripe Webhook

  1. In order to start receiving Stripe Events to our Webhook Endpoint, you need to install the Stripe CLI. Once installed run the following command in your console. (Make sure you're in the root of your project):
stripe login
stripe listen --forward-to localhost:3000/api/webhook

This should give you a Webhook Secret Key. Copy and paste it into your .env file as STRIPE_WEBHOOK_ENDPOINT.

Important

This command should be running in your console while developing, especially when testing or handling Stripe Events.

  1. Then, you can run the seed command to populate your stripe store with products and prices (skip this if you want to seed Supabase as well - this is covered in the next section below).
pnpm run seed

Supabase

  • Create a new project on Supabase

  • enter your Supabase secrets in .env, the service role key is found in the API settings of your Supabase project

SUPABASE_URL=https://<your_supabase_url>.supabase.co
SUPABASE_ANON_KEY=<your_supabase_anon_key>
SUPABASE_SERVICE_ROLE_KEY=<your_supabase_service_role_key>
  • connect to the supabase project and run the initialisation migrations:
pnpm supabase link   
pnpm supabase db push
  • seed the database:
pnpm run seed
  • generate typescript types for your Supabase tables:
supabase gen types typescript --project-id <your_supabase_project_id> > db_types.ts

Email

  • Supabase aggressively rate limits your email sending on the free plan, so you'll need to use a third-party email service. I recommend Resend for this. Add the supabase integration here: https://resend.com/settings/integrations.

  • The auth flow currently works with OTP emailed to the user. To configure this, you'll need to go to /auth/templates in your supabase dashboard and add the following templates:

  1. Confirm signup:
<h2>Confirm Your Signup</h2>

<p>Your verification code is: <strong>{{ .Token }}</strong></p>
<p>This code will expire in 5 minutes. Please use it to complete your signup process.</p>
  1. Reset Password:
<h2>Reset Password</h2>
<p>Follow this link to reset the password for your user:</p>
<p><a href="{{ .RedirectTo }}/api/auth/confirm?token_hash={{ .TokenHash }}&type=email&email={{ .Email }}">Reset Password</a></p>

Development

  1. Seed the database:
pnpm run seed
  1. Run the Vite dev server:
npm run dev

Stack

Tooling

Credits

Releases

No releases published

Packages

No packages published