Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/tech-dipesh/yeti-Jobs/llms.txt

Use this file to discover all available pages before exploring further.

This guide walks you through cloning, configuring, and running Yeti Jobs on your local machine. By the end you will have a live PostgreSQL database, a running Express API, and the React dev server all communicating with each other. The entire process takes under 10 minutes on a standard development machine.
A fully deployed live demo is available at yeti-jobs.vercel.app — no local setup required if you just want to explore the platform.
1

Install Prerequisites

Before cloning the repository, make sure the following tools and accounts are available in your environment.Required software:
  • Node.js (LTS recommended) — runs the Express server and Vite dev server
  • PostgreSQL 15+ — local database instance for development, or a remote Supabase database
Required accounts and API keys:
  • Supabase account — provides the PostgreSQL connection string (URL_SUPABASE_CONNECT) and anonymous key (ANON_KEY_SUPABASE) for file storage. Create a project at supabase.com.
  • Nodemailer credentials — an email address and app password for sending verification and password-reset emails. Gmail works well: enable “App Passwords” under your Google account security settings and use smtp.gmail.com as the host.
  • Groq API key (GROK_API) — used for AI-powered ATS résumé scoring. Obtain one from console.groq.com.
If you only need to run the core job portal without ATS scoring, you can leave GROK_API blank for now and add it later. The API will start without it; only the ATS scoring endpoint will be unavailable.
2

Clone the Repository

Clone the monorepo and navigate into it. The backend/ and frontend/ directories are independent Node.js projects.
git clone https://github.com/tech-dipesh/yeti-Jobs.git
cd yeti-Jobs
3

Configure and Start the Backend

The backend is an Express 5 application that connects to PostgreSQL, Supabase, Nodemailer, and Groq. All configuration is supplied through environment variables.3a — Copy the example env file and fill in your values:
cd backend
cp .env.example .env
Open .env in your editor and set every variable:
# PostgreSQL connection password
DATABASE_PASSWORD=your_postgres_password

# Supabase — Settings → Database → Connection string (pooler)
URL_SUPABASE_CONNECT=https://your-project-id.supabase.co
ANON_KEY_SUPABASE=your_supabase_anon_key

# Nodemailer — SMTP credentials for sending email
NODEMAILER_MY_EMAIL=you@example.com
NODEMAILER_MY_PASSWORD=your_app_password
NODEMAILER_MY_HOST=smtp.gmail.com

# JWT signing secret — any long random string
JSON_SECRET_KEY=super_secret_jwt_key_change_me

# The URL of the React dev server (used for CORS)
CLIENT_BASE_URL=http://localhost:5173

# Port the Express server listens on
PORT=3000

# JWT cookie max-age in seconds (e.g. 86400 = 1 day)
MAXAGE=86400

# Groq API key for ATS résumé scoring
GROK_API=your_groq_api_key
CLIENT_BASE_URL must exactly match the origin your React app runs on. If Express receives a request from a different origin it will be rejected by the CORS policy. For local development the default is http://localhost:5173.
3b — Install dependencies:
npm install
3c — Run database migrations:The migration script creates all tables, enums, indexes, and triggers in your PostgreSQL database.
npm run migrate
3d — Start the development server:
npm run dev
The server starts on http://localhost:PORT (default http://localhost:3000). You should see:
App is listening on the Server: http://localhost:3000
4

Configure and Start the Frontend

The React frontend is built with Vite. It needs only one environment variable — the backend URL — to function.4a — Copy the example env file and set the backend URL:
cd ../frontend
cp .env.example .env
Open .env and set:
# Full URL of your running Express server
VITE_SERVER_URL=http://localhost:3000
4b — Install dependencies:
npm install
4c — Start the Vite dev server:
npm run dev
Vite will start on http://localhost:5173. Open that URL in your browser to load the Yeti Jobs UI.
5

Verify the Stack is Running

With both servers running, confirm the backend health endpoint responds correctly:
curl http://localhost:3000/api/v1/health
Expected response:
{"message":"Ok"}
You can also open the interactive Swagger UI to explore all available API endpoints:
http://localhost:3000/api/v1/swagger
If the health check returns a connection error, verify that your DATABASE_PASSWORD and Supabase credentials in backend/.env are correct, and that your PostgreSQL instance is reachable. For Supabase-hosted databases, make sure the connection pooler URL is used, not the direct connection string.

Docker Compose (Alternative)

If you prefer a fully containerised setup, the repository includes a compose.yml that orchestrates PostgreSQL, the Express backend, and the React frontend in a single network.
# From the repo root — build and start all three services
docker compose up --build
The Compose file maps the same environment variables from a root-level .env file into each service. Create that file with all the variables listed in Step 3 plus VITE_SERVER_URL before running the command.
ServiceContainerPort
PostgreSQLyeti-postgres5432
Express APIyeti-backend3000
React (Vite)yeti-frontend5173
The Docker setup currently containerises the Node.js backend and the React frontend. A local PostgreSQL container is included in compose.yml for convenience, but production deployments use Supabase-hosted PostgreSQL.

Build docs developers (and LLMs) love