Skip to main content

Quickstart Guide

This guide will walk you through setting up Vitaes locally and creating your first resume. You’ll be up and running in under 5 minutes.

Prerequisites

Before you begin, make sure you have the following installed:
While Vitaes is optimized for Bun, it also works with npm and pnpm. Commands are provided for all package managers.

Installation

1

Clone the repository

First, clone the Vitaes repository to your local machine:
git clone https://github.com/diegopluna/vitaes.git
cd vitaes
2

Install dependencies

Install all project dependencies using your preferred package manager:
bun install
The installation process may take a minute or two as it downloads all required packages for the monorepo.
3

Configure environment variables

Set up your environment variables for the server. Copy the example file and fill in your values:
cp apps/server/.env.example apps/server/.env
Open apps/server/.env and configure the following required variables:
.env
# Database connection string
DATABASE_URL=postgresql://user:password@localhost:5432/vitaes

# Authentication (generate a random secret)
BETTER_AUTH_SECRET=your-secret-key-here
BETTER_AUTH_URL=http://localhost:3000

# CORS configuration
CORS_ORIGIN=http://localhost:3001

# OAuth providers (optional - for Google/GitHub login)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=

# MinIO storage (optional - for resume thumbnails)
MINIO_ENDPOINT=
MINIO_PUBLIC_ENDPOINT=
MINIO_ACCESS_KEY=
MINIO_SECRET_KEY=
MINIO_BUCKET=
Make sure your PostgreSQL database is running and the DATABASE_URL is correct before proceeding.
4

Set up the database

Apply the database schema to your PostgreSQL database:
bun db:push
This will create all necessary tables in your database, including:
  • resume - Stores resume data, metadata, and public sharing settings
  • user - User accounts and authentication
  • session - User sessions
Want to explore your database? Run bun db:studio to open Drizzle Studio, a visual database explorer.
5

Start the development server

Start both the frontend and backend in development mode:
bun dev
This command starts:
The dev server includes hot module reloading, so your changes will be reflected immediately.

Creating Your First Resume

Now that Vitaes is running, let’s create your first resume:
1

Sign up for an account

  1. Open http://localhost:3001 in your browser
  2. Click Sign In in the top navigation
  3. Create a new account using email or OAuth (Google/GitHub)
After signing in, you’ll be redirected to your dashboard.
2

Create a new resume

On your dashboard, you’ll see:
  • Total resumes - Number of resumes you’ve created
  • Public resumes - How many are publicly shared
  • Total views - Views across all public resumes
  • Total downloads - Download count for public resumes
Click the Create Resume button to start:
  1. Enter a name for your resume (e.g., “Software Engineer Resume”)
  2. Choose your preferred template:
    • Awesome - Clean and modern with color accents
    • Modern - Contemporary design with bold typography
    • Professional - Classic and traditional layout
    • Bold - Eye-catching design for creative fields
  3. Select your language (EN, ES, FR, DE, JA, PT, ZH)
  4. Click Create
Vitaes automatically populates your new resume with example data in your selected language, making it easy to see the structure and customize it with your own information.
3

Edit your resume

You’ll be taken to the resume builder, which consists of two main panels:Left Panel - Editor
  • Personal Information - Name, position, contact details, social profiles
  • Sections - Work experience, education, skills, certificates, custom sections
  • Theme - Colors, fonts, header alignment, section highlighting
Right Panel - Live Preview
  • Real-time preview of your resume
  • Updates instantly as you make changes
  • WYSIWYG - What you see is what you’ll export
Start by updating the Personal Information section:
// Example personal info structure
{
  firstName: 'Kendall',
  lastName: 'Roy',
  position: 'Co-CEO',
  address: 'New York, NY',
  quote: "Success is not given, it's earned.",
  socials: [
    { platform: 'mobile', value: '123-456-7890' },
    { platform: 'email', value: '[email protected]' },
    { platform: 'linkedin', value: 'kendallroy' },
  ]
}
4

Add and organize sections

Vitaes supports multiple section types:Timeline Sections (for work experience, education, certificates)
{
  type: 'timeline',
  entries: [
    {
      position: 'Senior Software Engineer',
      title: 'Tech Company',
      location: 'San Francisco, CA',
      date: '2020-01-01 — present',
      items: [
        'Led development of core platform features',
        'Mentored junior developers',
      ]
    }
  ]
}
List Sections (for skills, awards, projects)
{
  type: 'list',
  structure: {
    type: 'grouped',
    subsections: [
      {
        title: 'Programming Languages',
        items: [
          { title: 'TypeScript' },
          { title: 'Python' },
        ]
      }
    ]
  }
}
Text Sections (for summary, objective)
{
  type: 'text',
  content: 'Experienced software engineer with a passion for building scalable applications...'
}
Drag and drop sections to reorder them in your resume.
5

Customize the theme

Switch to the Theme tab to customize:
  • Template - Switch between awesome, modern, professional, bold
  • Theme Color - Choose from preset color schemes
  • Header Alignment - Left, center, or right
  • Section Highlighting - Enable/disable colored section headers
  • Font Size - Adjust for readability
  • Page Size - A4 or Letter
  • Footer - Add page numbers or custom text
6

Export and share

Once you’re happy with your resume:Export as PDF
  • Click the download button in the preview panel
  • Your resume will be generated as a professional PDF
Share publicly
  • Go back to your dashboard
  • Toggle the resume to Public
  • Click Share to get your public URL: http://localhost:3001/view/your-custom-slug
  • Anyone with the link can view and download your resume
  • Track views and downloads from your dashboard
Public resumes have a custom slug based on your email and resume name. Views and downloads are automatically tracked for public resumes.

What’s Next?

Explore Templates

Learn about the four professional templates and when to use each one

Customization Guide

Deep dive into theme customization and advanced options

Database Schema

Understand the database structure and relationships

API Documentation

Explore the type-safe API endpoints

Additional Commands

Here are some useful commands for development:
# Start only the web app
bun dev:web

# Start only the API server
bun dev:server

# Check TypeScript types across all packages
bun check-types

# Open Drizzle Studio (visual database explorer)
bun db:studio

# Generate database migration files
bun db:generate

# Build for production
bun build
If you encounter database connection errors, make sure PostgreSQL is running and your DATABASE_URL in .env is correct.

Troubleshooting

Ensure PostgreSQL is running and the DATABASE_URL in apps/server/.env is correct:
# Check if PostgreSQL is running
psql -U postgres -c "SELECT version();"

# Correct format:
DATABASE_URL=postgresql://username:password@localhost:5432/database_name
If you haven’t configured OAuth providers (Google/GitHub), you can still use email authentication. OAuth setup is optional for local development.To enable OAuth:
  1. Create OAuth apps in Google Cloud Console and/or GitHub Developer Settings
  2. Add the client ID and secret to apps/server/.env
  3. Restart the server
If ports 3000 or 3001 are already in use, you can change them in the respective app configurations:
  • Web: apps/web/vite.config.ts
  • Server: apps/server/src/index.ts
Thumbnail storage via MinIO is optional. If you see errors related to thumbnails, you can:
  • Set up a local MinIO instance
  • Use a cloud S3-compatible service
  • Or simply ignore thumbnail features during development

Need Help?

If you run into any issues:

Build docs developers (and LLMs) love