Skip to main content

Installation

This guide covers the complete installation process for PIPELINE, including system requirements, database setup, environment configuration, and verification steps.
Looking for a faster setup? Check out the Quickstart guide for a streamlined 5-10 minute installation.

System Requirements

Required

  • Node.js ≥ 18.0.0 (or Bun ≥ 1.0.0)
  • Git for version control
  • PostgreSQL database (via Supabase)
  • Modern browser (Chrome, Firefox, Safari, Edge)
  • Bun runtime for optimal performance
  • Supabase CLI for database migrations
  • VS Code with TypeScript extensions
# Install Bun
curl -fsSL https://bun.sh/install | bash

# Install Supabase CLI
brew install supabase/tap/supabase

# Verify installations
bun --version
supabase --version

Project Setup

1. Clone the Repository

# Clone via HTTPS
git clone https://github.com/yourusername/pipeline.git

# Or via SSH
git clone [email protected]:yourusername/pipeline.git

# Navigate to project directory
cd pipeline

2. Install Dependencies

bun install
PIPELINE uses Bun for optimal performance. While npm/yarn/pnpm should work, Bun is the officially supported runtime.

3. Verify Installation

# Check installed packages
bun pm ls

# Verify TypeScript compilation
bun run typecheck

Database Setup

PIPELINE uses Supabase (managed PostgreSQL) for data storage with Row-Level Security (RLS) policies.

1. Create Supabase Project

1

Sign up for Supabase

  1. Go to supabase.com
  2. Click Start your project
  3. Sign in with GitHub, GitLab, or email
2

Create a new project

  1. Click New Project
  2. Choose your organization (or create one)
  3. Fill in project details:
    • Name: pipeline-jobs (or your preferred name)
    • Database Password: Generate a strong password
    • Region: Choose closest to your location
    • Pricing Plan: Free tier works for development
  4. Click Create new project
Save your database password! You’ll need it for direct database access and cannot retrieve it later.
3

Wait for provisioning

Project creation takes 1-2 minutes. You’ll see a progress indicator.

2. Get API Credentials

1

Navigate to API settings

In your Supabase project dashboard:
  1. Click Settings (gear icon) in the sidebar
  2. Click API under Project Settings
2

Copy credentials

You’ll need three values:Project URL:
https://YOUR_PROJECT_REF.supabase.co
anon public key:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
service_role key:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Keep your service_role key secret! It bypasses Row-Level Security and should never be exposed in client-side code.

3. Apply Database Migrations

PIPELINE includes 14 migrations that create:
  • 6 tables (jobs, events, insights, scraper_runs, audit_log, audit_alerts)
  • 5 enums (job_status, job_source, event_type, insight_type, scraper_status)
  • 20+ indexes for query performance
  • RLS policies for data security
  • Triggers for automation
  • Audit logging for change tracking
  • Full-text search with weighting

4. Verify Database Setup

1

Check tables exist

In Supabase Dashboard → Table Editor, verify these tables:
  • jobs - Job applications
  • events - Activity timeline
  • insights - AI-generated insights
  • scraper_runs - Scraper telemetry
  • audit_log - Change history
  • audit_alerts - Security alerts
2

Verify RLS policies

Click on any table → Policies tab. You should see policies like:
  • Users can view own jobs
  • Users can insert own jobs
  • Users can update own jobs
  • Users can delete own jobs
3

Test database connection (optional)

# Run validation script (if you have devDependencies installed)
bun run contracts:validate

# Or test with SQL
supabase db diff

Environment Configuration

1. Create Environment File

cp .env.example .env.local
Never commit .env.local to version control! It’s already in .gitignore but double-check before pushing.

2. Configure Required Variables

Open .env.local and fill in your Supabase credentials:
.env.local
# =============================================================================
# PIPELINE — Environment Variables
# =============================================================================

# ─── Supabase (REQUIRED) ─────────────────────────────────────────────────────
# Get these from: https://supabase.com/dashboard/project/YOUR_PROJECT/settings/api

NEXT_PUBLIC_SUPABASE_URL=https://YOUR_PROJECT_REF.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key_here
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key_here

# ─── Application (REQUIRED for production) ───────────────────────────────────

NEXT_PUBLIC_APP_URL=http://localhost:3000

# Debug mode — set to 'true' for verbose logging
# DEBUG=false
Only Supabase variables are required to get started. AI services, Discord, and other integrations are optional.

3. Optional: Configure AI Services

For AI match scoring and insights (coming in Phase 2):
.env.local
# ─── AI Services (OPTIONAL — Module 4) ───────────────────────────────────────
# Required for: Job scoring, insights generation, daily digests

# Anthropic (Claude)
# Get from: https://console.anthropic.com/account/keys
ANTHROPIC_API_KEY=sk-ant-...

# Google AI (Gemini)
# Get from: https://makersuite.google.com/app/apikey
GOOGLE_AI_API_KEY=...

4. Optional: Configure Integrations

.env.local
# ─── Discord Integration (OPTIONAL — Module 5) ───────────────────────────────
DISCORD_BOT_TOKEN=...
DISCORD_WEBHOOK_ALERTS=https://discord.com/api/webhooks/...
DISCORD_WEBHOOK_DIGEST=https://discord.com/api/webhooks/...

# ─── Google / Gmail Integration (OPTIONAL — Module 5) ────────────────────────
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REFRESH_TOKEN=...

# ─── Scraper Service (OPTIONAL — Module 2) ───────────────────────────────────
SCRAPER_URL=https://your-scraper.fly.dev
SCRAPER_API_KEY=your-secret-key

Development Server

Start the Server

bun run dev
The application will be available at:
The dev server includes:
  • ⚡ Fast Refresh for instant updates
  • 🔍 TypeScript type checking
  • 🎨 Tailwind CSS hot reload
  • 🐛 Detailed error overlay

Verify Installation

1

Check server started

You should see:
✓ Ready in 2.3s
○ Local:    http://localhost:3000
○ Network:  http://192.168.1.100:3000
2

Open in browser

Navigate to http://localhost:3000You should see the PIPELINE landing page with:
  • Hero section with “Treat job hunting like DevOps”
  • Sign Up / Log In buttons
  • Terminal aesthetic
3

Test authentication

  1. Click Sign Up
  2. Enter email and password
  3. Submit form
  4. Check for success message or email confirmation prompt

Post-Installation Setup

1. Configure Email Confirmations (Development)

By default, Supabase requires email confirmation for new users:
For local development, you can disable email confirmation:
  1. Go to Supabase Dashboard → AuthenticationSettings
  2. Scroll to User Signups
  3. Toggle Enable email confirmations to OFF
  4. Click Save
Re-enable email confirmations for production!

2. Generate TypeScript Types (Optional)

Generate TypeScript types from your database schema:
# Generate types
supabase gen types typescript --linked > src/lib/types/database.types.ts

# Verify types
bun run typecheck
Types are already included in the repository and match migration 014. You only need to regenerate if you modify the schema.

3. Run Tests (Optional)

Verify everything is working:
# Run all tests
bun test

# Run with coverage
bun run test:coverage

# Watch mode
bun test --watch

4. Enable RLS Testing (Optional)

Test Row-Level Security policies:
# Install test dependencies (if not already installed)
bun add -d @types/pg pg dotenv

# Run RLS tests
bun run test:rls

Building for Production

Create Production Build

# Create optimized production build
bun run build

# Test production build locally
bun run start
The build process:
  1. Type-checks all TypeScript files
  2. Compiles Next.js pages and API routes
  3. Optimizes images and assets
  4. Generates static pages where possible
  5. Creates production-ready bundles
For deployment instructions, see the Deployment Guide.

Project Structure

Understanding the codebase:
pipeline/
├── app/                      # Next.js App Router
│   ├── (app)/                # Authenticated pages
│   │   ├── tracker/          # Kanban board + list view
│   │   ├── dashboard/        # Analytics dashboard
│   │   ├── intel/            # Market insights
│   │   ├── settings/         # User settings
│   │   └── help/             # Documentation
│   ├── (auth)/               # Auth pages (login, signup)
│   ├── api/                  # API routes
│   │   ├── auth/             # Authentication endpoints
│   │   ├── jobs/             # Jobs CRUD
│   │   ├── analytics/        # Dashboard data
│   │   └── ai/               # AI services
│   └── page.tsx              # Landing page
├── src/
│   ├── components/           # React components
│   │   ├── ui/               # shadcn/ui primitives
│   │   ├── layout/           # Sidebar, topbar, etc.
│   │   ├── jobs/             # Job-related components
│   │   └── tracker/          # Board and list views
│   ├── hooks/                # Custom React hooks
│   ├── lib/                  # Utilities and config
│   │   ├── supabase/         # Supabase clients
│   │   ├── stores/           # Zustand state stores
│   │   ├── types/            # TypeScript types
│   │   └── validations/      # Zod schemas
│   └── views/                # Page-level components
├── supabase/
│   ├── migrations/           # Database migrations
│   └── config.toml           # Supabase configuration
├── docs/                     # Documentation
├── scripts/                  # Automation scripts
├── tests/                    # Test suites
└── .env.local                # Environment variables (create this)

Troubleshooting

Common Installation Issues

macOS/Linux:
# Try with sudo
curl -fsSL https://bun.sh/install | bash

# Add to PATH manually
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
Windows:
  • Ensure PowerShell execution policy allows scripts
  • Run PowerShell as Administrator
  • Try WSL2 if issues persist
# Clear package manager cache
bun pm cache rm

# Or for npm
npm cache clean --force

# Delete lockfile and node_modules
rm -rf node_modules bun.lock

# Reinstall
bun install
# Ensure all dependencies are installed
bun install

# Clear Next.js cache
rm -rf .next

# Regenerate types
bun run typecheck
macOS/Linux:
# Install via Homebrew
brew install supabase/tap/supabase

# Or download binary
# https://github.com/supabase/cli/releases
Windows:
# Install via Scoop
scoop install supabase
Check connection:
supabase db remote status
Re-link project:
supabase unlink
supabase link --project-ref YOUR_PROJECT_REF
Apply migrations with debug:
supabase db push --debug
Reset and retry (destructive):
supabase db reset
Check file name:
  • Must be .env.local (not .env or .env.development)
Restart dev server:
# Stop server (Ctrl+C)
# Start again
bun run dev
Verify values:
# In dev tools console
console.log(process.env.NEXT_PUBLIC_SUPABASE_URL)
Find and kill process:
# macOS/Linux
lsof -ti:3000 | xargs kill -9

# Windows
netstat -ano | findstr :3000
taskkill /PID <PID> /F
Or use different port:
bun run dev -- --port 3001

Getting Help

If you’re still having issues:
  1. Check existing issues: GitHub Issues
  2. Review documentation: See docs/
  3. Join Discord: Get help from the community
  4. Open an issue: Provide details about your environment and error messages

Next Steps

Configuration

Configure AI services, integrations, and feature flags.

Architecture

Learn about PIPELINE’s architecture and design decisions.

API Reference

Explore API endpoints and data models.

Deployment

Deploy PIPELINE to production (Vercel, Netlify, self-hosted).

Development Workflow

  1. VS Code Extensions:
    • ESLint
    • Prettier
    • Tailwind CSS IntelliSense
    • TypeScript and JavaScript Language Features
  2. Git Hooks:
    # Enable pre-commit type checking
    chmod +x scripts/hooks/pre-commit-types.sh
    cp scripts/hooks/pre-commit-types.sh .git/hooks/pre-commit
    
  3. Database Backups:
    # Backup database before major changes
    supabase db dump -f backup.sql
    
You’re all set! Head to the Quickstart to track your first job.

Build docs developers (and LLMs) love