Arete requires API keys from two services: Supabase (database & storage) and Anthropic (Claude AI).
| Service | Purpose | Cost | Sign Up Link |
|---|---|---|---|
| Supabase | Database + File Storage + Auth | Free tier available | supabase.com |
| Anthropic | Claude AI API | Pay-as-you-go (~$0.01-0.05/resume) | console.anthropic.com |
Supabase provides the PostgreSQL database and file storage for Arete.
- Go to supabase.com
- Click "Start your project" (top right)
- Sign up with GitHub, or use email/password
- Verify your email if required
- Once logged in, you'll see the Dashboard
- Click "New Project" button
- Fill in the project details:
- Name:
arete(or any name you prefer) - Database Password: Create a strong password (save this!)
- Region: Choose the closest to your location
- Pricing Plan: Free tier is sufficient
- Name:
- Click "Create new project"
- Wait ~2 minutes for the project to provision
Once your project is ready:
- In the left sidebar, click ⚙️ Project Settings (gear icon at bottom)
- Click API in the settings menu
- You'll see the API Settings page with your keys:
| Key Name | Location | Environment Variable | Usage |
|---|---|---|---|
| Project URL | Under "Project URL" | SUPABASE_URL |
Database connection |
| anon public | Under "Project API keys" | SUPABASE_KEY |
Client-side access |
| service_role | Under "Project API keys" (click "Reveal") | SUPABASE_SERVICE_KEY |
Backend operations |
- The
service_rolekey is hidden by default - click "Reveal" to see it - Never expose
service_rolekey in frontend code or public repositories - The
anonkey is safe for client-side use
Example values (yours will be different):
SUPABASE_URL=https://abcdefghijklmnop.supabase.co
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFiY2RlZmdoaWprbG1ub3AiLCJyb2xlIjoiYW5vbiIsImlhdCI6MTY...
SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFiY2RlZmdoaWprbG1ub3AiLCJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNj...Anthropic provides the Claude AI that powers resume parsing, job analysis, and optimization.
- Go to console.anthropic.com
- Click "Sign Up"
- Sign up with Google, or use email/password
- Complete email verification if required
- You may need to provide payment information (pay-as-you-go pricing)
- Once logged in, you'll see the Anthropic Console
- Click "API Keys" in the left sidebar (or go to console.anthropic.com/settings/keys)
- Click "Create Key" button
- Give your key a name:
arete-dev(or any name) - Click "Create Key"
- Copy the key immediately - it won't be shown again!
| Key Name | Environment Variable | Format |
|---|---|---|
| API Key | CLAUDE_API_KEY |
sk-ant-api03-... |
Example value (yours will be different):
CLAUDE_API_KEY=sk-ant-api03-abcdefghijklmnopqrstuvwxyz123456789...- Copy the key immediately after creation - you can't view it again
- If you lose it, you'll need to create a new key
- Keep your API key secret - don't commit it to git
- Claude API uses pay-as-you-go pricing
- Typical usage for Arete: ~$0.01-0.05 per resume optimization
- Current pricing: anthropic.com/pricing
- Model used: Claude 3.5 Sonnet
Estimated Costs:
- Resume parsing: ~$0.005-0.01
- Job analysis: ~$0.002-0.005
- AI optimization: ~$0.01-0.03
- Cover letter generation: ~$0.003-0.008
Total per application: $0.02-0.05
From the Arete project root:
cp .env.example .envOpen .env in your text editor and add your keys:
# Supabase Configuration
SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_KEY=your-anon-public-key
SUPABASE_SERVICE_KEY=your-service-role-key
# Anthropic Claude API
CLAUDE_API_KEY=sk-ant-api03-your-api-keyRun the validation script:
python scripts/setup/validate_env.pyYou should see:
✅ All environment variables configured correctly
-
Never commit .env to git
- The
.gitignorefile already excludes.env - Double-check before committing
- The
-
Use different keys for development vs. production
- Create separate Supabase projects
- Use separate Anthropic API keys
-
Rotate keys periodically
- Generate new keys every 3-6 months
- Immediately rotate if compromised
-
Limit key permissions
- Use
anonkey for frontend (read-only operations) - Use
service_roleonly in backend (full access)
- Use
Supabase:
- Go to Project Settings → API
- Click "Rotate JWT Secret" (invalidates all keys)
- Update your
.envwith new keys
Anthropic:
- Go to API Keys in console
- Delete the exposed key
- Create a new key
- Update your
.env
Error: "Invalid Supabase URL or Key"
Solutions:
- Verify URL format:
https://[project-ref].supabase.co - Check for extra spaces in
.envfile - Ensure project is fully provisioned (wait 2-3 minutes after creation)
- Test connection:
python scripts/setup/validate_env.py
Error: "Authentication failed"
Solutions:
- Verify key starts with
sk-ant-api03- - Check for extra spaces or line breaks
- Ensure you copied the complete key
- Verify billing is set up in Anthropic console
- Check API key hasn't been deleted or expired
Error: Variables are None or empty
Solutions:
- Verify
.envfile exists in project root - Check file is named exactly
.env(not.env.txt) - Restart Docker containers:
docker-compose down && docker-compose up - Ensure
.envusesKEY=valueformat (no spaces around=)
Anthropic Console:
- View usage: console.anthropic.com/settings/usage
- Set up billing alerts
- Review monthly costs
Supabase Dashboard:
- Monitor database usage
- Check storage consumption
- Free tier limits: 500MB database, 1GB storage
- Use caching - Store parsed resume data to avoid re-parsing
- Batch operations - Process multiple optimizations together
- Limit retries - Don't retry failed API calls infinitely
- Monitor quotas - Set up alerts before hitting limits
After configuring your API keys:
- Run Setup Script:
./scripts/setup/setup.shorsetup.bat - Start Application:
docker-compose up --build - Test Connection: Upload a sample resume at http://localhost:3000
For additional help, see TROUBLESHOOTING.md