# Project export: C3

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2026
- Tagline: Turn 'I want to help with climate' into 'here's your job, go apply
- Devpost: https://devpost.com/software/c3
- GitHub: https://github.com/sahajpatel008/C3
- Team: 3 GitHub contributor(s) — Sahaj Patel (20 commits), Aditya Pandita (6 commits), Vhars430 (2 commits)

## Devpost submission (written by the team)

### Inspiration

Climate tech is a complex ecosystem of sectors, but career discovery within it is fragmented and unclear. Students and professionals want to work in climate but struggle to understand where their skills fit. We were inspired to bridge the gap between climate innovation and climate talent.

### What it does

C3 is an AI-powered Climate Career Explorer that connects structured climate taxonomy with real job listings. It parses resumes, extracts skills, and semantically matches users to categorized climate roles. Users receive personalized job recommendations with percentage-based compatibility scores.

### How we built it

We structured the Climate Tech Map dataset into a domain-specific skills and sector database. We scraped LinkedIn climate jobs using Bright Data and ingested them into Supabase. Using RAG, embeddings, GPT-4, and a Fetch.ai agent, we built a conversational job-matching system.

### Challenges we ran into

Normalizing messy climate skill data into a clean taxonomy was difficult. Resumes vary significantly, making structured extraction challenging. Ensuring accurate retrieval without hallucination required careful RAG grounding.

### Accomplishments we're proud of

We built an end-to-end climate-focused AI job intelligence pipeline. We successfully connected structured innovation data with real job listings. We implemented transparent resume-to-job percentage matching.

### What we learned

Structured domain data dramatically improves AI retrieval quality. Semantic matching is far more effective than keyword-based job searches. AI systems are most powerful when grounded in clean, explainable data models.

### What's next

for Untitled We plan to enable real-time job updates and skill gap recommendations. We aim to expand into employer dashboards and personalized learning pathways. Our long-term vision is a scalable AI engine for impact-driven career alignment.

## README (from the GitHub repository)

# Climate Tech Career Explorer 🌍

AI-powered platform connecting students to climate tech opportunities. Built for TreeHacks 2026.

## 🎯 Overview

A comprehensive job discovery and career coaching platform with 4 integrated components:

1. **Automated Aggregation** - Scrapes climate tech jobs using Browserbase/Stagehand
2. **Smart Categorization** - AI-powered job categorization using Perplexity Sonar
3. **Career Coach Chatbot** - Personalized guidance using Fetch.ai uAgents
4. **Resume Matcher** - PDF parsing and job matching with Modal

## 🏗️ Architecture

```
climate-tech-career-explorer/
├── frontend/              # Next.js + React + TypeScript
├── backend/               # FastAPI orchestration layer
├── agents/                # Fetch.ai career advisor agent
├── components/
│   ├── 1-scraper/        # Browserbase job scraper
│   ├── 2-categorizer/    # Perplexity categorization
│   └── 4-resume-parser/  # Modal PDF parser
├── database/              # Supabase schema
├── shared/                # Shared resources (taxonomy)
└── docs/                  # Documentation
```

## 🚀 Quick Start

### Prerequisites

- Node.js 18+
- Python 3.10+
- npm/yarn
- Git

### 1. Clone & Setup

```bash
# Clone repository
git clone <your-repo-url>
cd climate-tech-career-explorer

# Install root dependencies
npm install

# Install frontend & scraper dependencies
cd frontend && npm install
cd ../components/1-scraper && npm install
cd ../..
```

### 2. Setup Python Environments

```bash
# Backend
cd backend
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt
cd ..

# Agents
cd agents
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd ..

# Categorizer
cd components/2-categorizer
pip install -r requirements.txt
cd ../..

# Resume Parser
cd components/4-resume-parser
pip install -r requirements.txt
cd ../..
```

### 3. Configure Environment

```bash
# Copy environment template
cp .env.example .env

# Edit .env with your API keys
# Required:
# - Supabase credentials
# - Browserbase API key
# - Perplexity API key
# - Fetch.ai agent config
# - Modal credentials
```

### 4. Setup Database

1. Create Supabase project at https://supabase.com
2. Run the schema:

```bash
# Copy schema contents from database/schema.sql
# Run in Supabase SQL Editor
```

3. Update `.env` with Supabase credentials

### 5. Run Development Servers

**Option A: Run all services concurrently**
```bash
npm run dev
```

**Option B: Run services individually**

```bash
# Terminal 1: Backend API
cd backend
source venv/bin/activate
uvicorn main:app --reload --port 8000

# Terminal 2: Frontend
cd frontend
npm run dev

# Terminal 3: Agents (HTTP Server)
cd agents
source venv/bin/activate
python http_server.py

# Terminal 4: Scraper (when ready)
cd components/1-scraper
npm run scrape

# Terminal 5: Categorizer (when ready)
cd components/2-categorizer
uvicorn main:app --reload --port 3002
```

## 📚 Documentation

### API Endpoints

**Backend API (Port 8000)**

- `GET /api/v1/jobs` - List jobs with filters
- `GET /api/v1/jobs/{id}` - Get job details
- `GET /api/v1/categories` - Get climate tech taxonomy
- `POST /api/v1/resume/upload` - Upload resume
- `POST /api/v1/chat/session` - Create chat session
- `POST /api/v1/chat/message` - Send message to bot

Full API docs: http://localhost:8000/docs

### Components

#### Component 1: Scraper

```bash
cd components/1-scraper
npm run scrape  # Run scraper
```

Scrapes jobs from ClimateBase and other sources, uploads to backend.

#### Component 2: Categorizer

```bash
cd components/2-categorizer
uvicorn main:app --reload --port 3002
```

Categorizes jobs using Perplexity Sonar API and shared taxonomy.

#### Component 3: Chatbot Agent

```bash
cd agents
source venv/bin/activate
python http_server.py
```

Fetch.ai agent HTTP server providing conversational career guidance.

#### Component 4: Resume Parser

```bash
cd components/4-resume-parser
modal deploy modal_app.py
```

Deploys Modal function for PDF parsing and job matching.

## 🗂️ Database Schema

**Tables:**
- `jobs` - Job listings with categories
- `resumes` - Uploaded resumes and parsed data
- `categories` - Climate tech taxonomy
- `chat_sessions` - Chat session tracking
- `chat_messages` - Conversation history

See `database/schema.sql` for complete schema.

## 🌐 Frontend Pages

- `/` - Landing page with stats
- `/jobs` - Browse jobs with filters
- `/chat` - Career coach chatbot
- `/upload` - Resume upload

## 🔧 Tech Stack

**Frontend:**
- Next.js 14 (App Router)
- React 18
- TypeScript
- Tailwind CSS
- Supabase Client

**Backend:**
- FastAPI
- Python 3.10+
- Supabase (PostgreSQL)
- httpx (async HTTP)

**AI/ML:**
- Fetch.ai uAgents
- Perplexity Sonar API
- OpenAI (optional)

**Infrastructure:**
- Browserbase (scraping)
- Modal (serverless functions)
- Supabase (database + storage)

## 👥 Team Workflow

### Branch Strategy

```bash
main                    # Production
├── dev                # Integration branch
├── feature/frontend   # Your work
├── feature/scraper    # Teammate 1
├── feature/categorizer # Teammate 2
└── feature/resume     # Teammate 3
```

### Development Workflow

1. Create feature branch from `dev`
2. Work on your component
3. Test locally
4. Push and create PR to `dev`
5. Team lead merges after review

### Testing Integration

```bash
# Test backend
curl http://localhost:8000/health

# Test frontend API client
cd frontend && npm run dev

# Test scraper -> backend flow
cd components/1-scraper && npm run scrape

# Test chatbot
cd agents && source venv/bin/activate && python http_server.py
```

## 📊 Climate Tech Taxonomy

8 main categories from Climate Tech Map:

1. **Energy** - Solar, Wind, Storage, Nuclear
2. **Mobility** - EVs, Public Transit, Aviation
3. **Built Environment** - Green Buildings, HVAC
4. **Food & Agriculture** - Alt Proteins, AgTech
5. **Carbon Management** - Capture, Credits, MRV
6. **Circular Economy** - Recycling, Materials
7. **Climate Finance** - Impact Investing, VC
8. **Nature-Based** - Forestry, Ocean, Restoration

See `shared/climate-tech-taxonomy.json` for full taxonomy with subcategories and keywords.

## 🎯 Demo Checklist

- [ ] 50+ jobs scraped and in database
- [ ] Jobs categorized into taxonomy
- [ ] Resume upload working
- [ ] Resume matching functional
- [ ] Chatbot responding conversationally
- [ ] Frontend UI polished
- [ ] End-to-end flow tested

## 🐛 Troubleshooting

**Backend won't start:**
- Check `.env` has correct Supabase credentials
- Verify venv is activated
- Check port 8000 is available

**Frontend errors:**
- Ensure backend is running on port 8000
- Check `NEXT_PUBLIC_BACKEND_URL` in `.env.local`
- Clear `.next` folder and rebuild

**Database errors:**
- Verify schema.sql ran successfully
- Check Supabase project is active
- Confirm service key has correct permissions

**Agent not responding:**
- Check agent port 8001 is available
- Verify Fetch.ai dependencies installed
- Check agent logs for errors

## 📝 License

MIT License - Built for TreeHacks 2026

## 🙏 Acknowledgments

- TreeHacks 2026
- Climate Tech Map
- Sponsor APIs: Browserbase, Perplexity, Fetch.ai, Modal, Supabase

---

**Built with 💚 for climate action**


## Detected evidence (automated analysis)

Indexed codebase: 76 recognized source files, 742 KB.
- CSS (language) — detected in the code
- FastAPI (technology) — detected in the code
- JavaScript (language) — detected in the code
- LangChain (technology) — detected in the code
- Next.js (technology) — detected in the code
- OpenAI (technology) — detected in the code
- Python (language) — detected in the code
- React (technology) — detected in the code
- SQL (language) — detected in the code
- Streamlit (technology) — detected in the code
- Supabase (technology) — detected in the code
- Tailwind CSS (technology) — detected in the code
- TypeScript (language) — detected in the code
- AI coding agent: Claude Code — evidence: config files committed to the repository; commit authorship or trailers

## Codebase structure (from repository index)

### Files (120 of 136)

```
.claude/settings.local.json
.env.example
.gitignore
agents/agents/career_advisor_agent.py
agents/config.py
agents/http_server.py
agents/main.py
agents/requirements.txt
backend/config.py
backend/data/taxonomy_complete.json
backend/database.py
backend/lancedb_store/climate_innovations.lance/_transactions/0-5b9b33a2-5125-4de0-9bbb-c11afb333e87.txn
backend/lancedb_store/climate_innovations.lance/_versions/18446744073709551614.manifest
backend/lancedb_store/climate_innovations.lance/data/111110001010110110111110560ccc4b4f88d3dc8a809587a2.lance
backend/main.py
backend/PLAN.md
backend/QUICK_START.md
backend/requirements.txt
backend/RESUME_INTEGRATION.md
backend/services/categorizer_client.py
backend/services/chatbot_client.py
backend/services/chatbot_service.py
backend/services/job_tagger.py
backend/services/resume_parser_client.py
backend/services/resume_parser_service.py
backend/services/scraper_client.py
backend/test_resume_upload.py
ClimateCompass/PLAN.md
components/1-scraper/.env.example
components/1-scraper/AI_JOB_SCRAPER.md
components/1-scraper/Ingest/ingest_jobs.py
components/1-scraper/Ingest/output/esg_analyst.json
components/1-scraper/Ingest/output/jobs_poc.json
components/1-scraper/Ingest/output/solar_energy_engineer.json
components/1-scraper/Ingest/output/sustainability_analyst.json
components/1-scraper/Ingest/output/wind_energy_engineer.json
components/1-scraper/job_ingest.py
components/1-scraper/output/esg_analyst.json
components/1-scraper/output/jobs_poc.json
components/1-scraper/output/rows/_summary.json
components/1-scraper/output/rows/02_industrialized_construction.json
components/1-scraper/output/rows/03_distributed_storage.json
components/1-scraper/output/rows/04_grid_reliability_and_resilience.json
components/1-scraper/output/rows/05_24_7_clean_power_generation.json
components/1-scraper/output/rows/06_cell_cultivation.json
components/1-scraper/output/rows/07_natural_emissions_control.json
components/1-scraper/output/rows/09_enteric_emissions_elimination.json
components/1-scraper/output/rows/10_yield_maximization.json
components/1-scraper/output/rows/15_low_clinker_concrete.json
components/1-scraper/output/rows/22_advanced_ev_charging.json
components/1-scraper/output/solar_energy_engineer.json
components/1-scraper/output/sustainability_analyst.json
components/1-scraper/output/wind_energy_engineer.json
components/1-scraper/package.json
components/1-scraper/poc.py
components/1-scraper/requirements.txt
components/1-scraper/scrape_all_rows.py
components/1-scraper/scrape_jobs.py
components/1-scraper/src/index.ts
components/1-scraper/tsconfig.json
components/2-categorizer/app.py
components/2-categorizer/career_coach.py
components/2-categorizer/job_search_queries.json
components/2-categorizer/lancedb_store/climate_taxonomy.lance/_transactions/0-eb686e53-6486-45d6-868f-15d8cbc62184.txn
components/2-categorizer/lancedb_store/climate_taxonomy.lance/_versions/18446744073709551614.manifest
components/2-categorizer/lancedb_store/climate_taxonomy.lance/data/100000111111000100101111ef15a54a98bf71300b4dc5939f.lance
components/2-categorizer/main.py
components/2-categorizer/parse_changelog.py
components/2-categorizer/QUICKSTART.md
components/2-categorizer/rag_career_coach.py
components/2-categorizer/requirements.txt
components/2-categorizer/resume_matcher.py
components/2-categorizer/skills_index.json
components/2-categorizer/taxonomy_complete.json
components/4-resume-parser/.env
components/4-resume-parser/modal_app.py
components/4-resume-parser/requirements.txt
components/4-resume-parser/resources/climate_01_solar_engineer.txt
components/4-resume-parser/resources/climate_02_battery_engineer.txt
components/4-resume-parser/resources/climate_03_climate_data_scientist.txt
components/4-resume-parser/resources/climate_04_agtech_engineer.txt
components/4-resume-parser/resources/climate_05_green_building_engineer.txt
components/4-resume-parser/resources/climate_06_circular_economy_engineer.txt
components/4-resume-parser/resources/climate_07_water_systems_engineer.txt
components/4-resume-parser/resources/climate_08_carbon_capture_engineer.txt
components/4-resume-parser/resources/climate_09_esg_analyst.txt
components/4-resume-parser/resources/climate_10_product_manager.txt
database/00_truncate.sql
database/01_skills.sql
database/02_sectors_and_oa.sql
database/03_innovations_part1.sql
database/03_innovations_part2.sql
database/04_tech_categories.sql
database/05_innovation_skills_part1.sql
database/05_innovation_skills_part2.sql
database/05_innovation_skills_part3.sql
database/06_innovation_tech_categories.sql
database/dataSeeding.sql
database/innovation_skills.json
database/innovations.json
database/migrations/add_search_rpc.sql
database/schema.sql
docs/CHATBOT_IMPLEMENTATION.md
docs/FRONTEND_CHAT_UI.md
docs/REQUIREMENTS_UPDATED.md
docs/SETUP_COMPLETE.md
frontend/next-env.d.ts
frontend/next.config.js
frontend/package.json
frontend/PLAN.md
frontend/postcss.config.js
frontend/src/app/chat/page.tsx
frontend/src/app/globals.css
frontend/src/app/layout.tsx
frontend/src/app/page.tsx
frontend/src/components/ChatInterface.tsx
frontend/src/components/JobCard.tsx
frontend/src/components/ui/DropZone.tsx
frontend/src/components/ui/FollowUpPill.tsx
frontend/src/components/ui/InputBar.tsx
[16 more files omitted for size]
```

### Dependencies

- agents/requirements.txt: fastapi@==0.125.0, httpx@>=0.24.0, openai@==2.21.0, pydantic@==1.10.26, python-dotenv@==1.0.1, uagents@==0.12.0, uvicorn@==0.20.0, websockets@==10.4
- backend/requirements.txt: email-validator@==2.1.0, fastapi@==0.109.0, gotrue@==2.12.4, httpx@==0.28.1, lancedb@>=0.4.0, langchain@>=0.3.0, langchain-community@>=0.3.0, langchain-core@>=0.3.0, langchain-openai@>=0.2.0, openai@>=2.21.0, pdfplumber@==0.11.0, postgrest@==2.28.0, pydantic@==2.12.5, pydantic-settings@==2.1.0, python-docx@==1.1.0, python-dotenv@==1.0.1, python-multipart@==0.0.6, realtime@==2.28.0, requests@==2.31.0, sentence-transformers@>=2.2.0, storage3@==2.28.0, supabase@==2.28.0, tabulate@==0.9.0, uvicorn[standard]@==0.27.0, websockets@==15.0.1
- components/1-scraper/package.json: @browserbasehq/stagehand@^1.5.0, @types/node@^20.11.5, axios@^1.6.5, dotenv@^16.3.1, tsx@^4.7.0, typescript@^5.3.3
- components/1-scraper/requirements.txt: certifi@==2026.1.4, charset-normalizer@==3.4.4, idna@==3.11, python-dotenv@==1.2.1, requests@==2.32.5, supabase@==2.28.0, urllib3@==2.6.3
- components/2-categorizer/requirements.txt: beautifulsoup4@>=4.12.0, lancedb@>=0.4.0, langchain@>=0.3.0, langchain-community@>=0.3.0, langchain-openai@>=0.2.0, openai@>=1.0.0, openpyxl@>=3.1.0, pdfplumber@>=0.10.0, plotly@>=5.18.0, PyPDF2@>=3.0.0, python-docx@>=1.0.0, python-jobspy@>=1.1.0, requests@>=2.31.0, sentence-transformers@>=2.2.0, streamlit@>=1.30.0
- components/4-resume-parser/requirements.txt: pdfplumber@==0.11.4, python-docx@==1.1.2, python-dotenv@==1.0.1, requests@==2.32.3, striprtf@==0.0.29, supabase@==2.11.0, tabulate@==0.9.0
- frontend/package.json: @supabase/supabase-js@^2.39.3, @types/node@^20.11.5, @types/react@^18.2.48, @types/react-dom@^18.2.18, autoprefixer@^10.4.17, axios@^1.6.5, eslint@^8.56.0, eslint-config-next@^14.1.0, next@^14.1.0, postcss@^8.4.33, react@^18.2.0, react-dom@^18.2.0, tailwindcss@^3.4.1, typescript@^5.3.3
- package.json: concurrently@^8.2.2

### Recent commits (newest first)

- refactor: remove innovation confidence display from JobMatchCard component
- Merge pull request #10 from sahajpatel008/feat/integrate-resume-parser
- Merge branch 'main' into feat/integrate-resume-parser
- Merge branch 'path-to-rag' into feat/integrate-resume-parser
- feat: implement RAG-based auto-tagging for job matches and enhance frontend display
- feat: implement Job Tagger service for RAG + LLM innovation tagging
- feat: Add job categorization and loading steps to resume matching process
- Merge pull request #9 from sahajpatel008/feat/integrate-resume-parser
- feat: Integrate resume parser job matching
- Merge pull request #8 from sahajpatel008/aditya
- Merge branch 'main' into aditya
- Enhance job ingestion and resume parsing: add job validation, dynamic skill mapping, and increase match threshold
- Merge pull request #7 from sahajpatel008/feat/chatbot-to-jobs-connection
- file scraper
- feat: add smart search endpoint for job matching and enhance chatbot service with LLM-driven SQL generation
- Merge pull request #6 from sahajpatel008/feat/frontend-enhance
- refactor: deprecate ChatInterface and JobCard components; introduce new UI components for job matching and messaging
- Merge pull request #5 from sahajpatel008/feature/ingest-data
- data ingestion
- job ingestions

## Key source files (fetched from GitHub, selected and truncated for size)

### QUICK_START.md

```markdown
# Quick Start Guide 🚀

## 30-Second Overview

Your Climate Tech Career Explorer is **fully set up** and ready to run!

## What You Have

✅ Complete monorepo structure
✅ Backend API with 15+ endpoints
✅ Next.js frontend with TypeScript
✅ Fetch.ai agent skeleton
✅ Component scaffolding for 4 teammates
✅ Database schema (ready to run)
✅ Git repository initialized

## Immediate Next Steps

### 1. Get API Keys (15 minutes)

Sign up and get keys from:
- **Supabase**: https://supabase.com (database)
- **Browserbase**: https://browserbase.com (scraping)
- **Perplexity**: https://perplexity.ai/settings/api (categorization)
- **Modal**: https://modal.com (resume parsing)
- **Fetch.ai**: https://fetch.ai (agent framework)

### 2. Configure Environment (5 minutes)

```bash
# Copy template
cp .env.example .env

# Edit .env and add your API keys
nano .env  # or use your preferred editor
```

### 3. Setup Database (10 minutes)

1. Go to https://supabase.com/dashboard
2. Create new project
3. Go to SQL Editor
4. Copy contents of `database/schema.sql`
5. Run the SQL
6. Get API keys from Settings → API
7. Update `.env` with Supabase credentials

### 4. Install Dependencies (5 minutes)

```bash
# Install Node dependencies
npm install
cd frontend && npm install
cd ../components/1-scraper && npm install
cd ../..

# Install Python dependencies
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd ..

cd agents
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd ..
```

### 5. Start Development (2 minutes)

```bash
# Terminal 1: Backend
cd backend
source venv/bin/activate
uvicorn main:app --reload

# Terminal 2: Frontend
cd frontend
npm run dev

# Terminal 3: Agents (HTTP Server for Fetch.ai Agent)
cd agents
source venv/bin/activate
python http_server.py
```

Visit http://localhost:3000 to see your app!

## File Locations Cheat Sheet

```
Need to...                          → Open this file
────────────────────────────────────────────────────────────
Add backend endpoint                → backend/main.py
Add database query                  → backend/database.py
Create frontend page                → frontend/src/app/
Add API client function             → frontend/src/lib/api.ts
Modify agent logic                  → agents/agents/career_advisor_agent.py
Check database schema               → database/schema.sql
View climate categories             → shared/climate-tech-taxonomy.json
Configure environment               → .env
```

## Testing Your Setup

### Backend
```bash
curl http://localhost:8000/health
# Should return: {"status": "healthy"}
```

### Frontend
Visit http://localhost:3000
- Should see landing page with stats

### Database
1. Open Supabase dashboard
2. Go to Table Editor
3. You should see 5 tables: jobs, resumes, categories, chat_sessions, chat_messages

## Team Workflow

**You** (Orchestrator):
- Backend API integration
- Frontend development
- Agent development

**Teammate 1** → `component
[truncated — 1104 more characters]
```

### SETUP_STATUS.md

```markdown
# Setup Status - Climate Tech Career Explorer

**Status:** ✅ Backend Running Successfully
**Date:** February 13, 2026

---

## ✅ Completed Setup

### 1. Database (Supabase)
- ✅ Project created
- ✅ Schema executed successfully
- ✅ 5 tables created: `jobs`, `resumes`, `categories`, `chat_sessions`, `chat_messages`
- ✅ 43 climate categories seeded (8 main + 35 subcategories)
- ✅ API keys configured

### 2. Backend (FastAPI)
- ✅ Python virtual environment created
- ✅ All dependencies installed (supabase 2.28.0, fastapi, uvicorn, etc.)
- ✅ Environment variables configured
- ✅ Server running on http://localhost:8000
- ✅ Supabase connection verified
- ✅ All 15+ API endpoints ready

**Test Commands:**
```bash
# Health check
curl http://localhost:8000/health

# Get categories
curl http://localhost:8000/api/v1/categories

# View API docs
open http://localhost:8000/docs
```

### 3. Environment Files
- ✅ `.env` in root directory (main config)
- ✅ `backend/.env` (backend config)
- ✅ `agents/.env` (agent config)
- ✅ `frontend/.env.local` (frontend config)

---

## 🚀 Next Steps

### Start Frontend (Next.js)

```bash
# In a new terminal
cd frontend
npm install
npm run dev

# Visit: http://localhost:3000
```

### Start Agents (Fetch.ai HTTP Server)

```bash
# In a new terminal
cd agents
source venv/bin/activate
pip install -r requirements.txt
python http_server.py

# Agent HTTP Server will run on: http://localhost:8001
```

### Run Scraper (Component 1)

```bash
# In a new terminal
cd components/1-scraper
npm install
npm run scrape

# Jobs will be posted to: http://localhost:8000/scraper/jobs/bulk
```

---

## 📋 Available API Endpoints

### Jobs
- `GET /api/v1/jobs` - List jobs (with filters)
- `GET /api/v1/jobs/{id}` - Get job details
- `GET /api/v1/jobs/search/{query}` - Search jobs
- `GET /api/v1/jobs/stats` - Job statistics

### Categories
- `GET /api/v1/categories` - Get all climate categories

### Resume
- `POST /api/v1/resume/upload` - Upload resume
- `GET /api/v1/resume/{id}` - Get resume details
- `POST /api/v1/resume/{id}/match` - Match resume to jobs

### Chat
- `POST /api/v1/chat/session` - Create chat session
- `GET /api/v1/chat/session/{id}/messages` - Get messages
- `POST /api/v1/chat/message` - Send message to bot

### Internal (Component APIs)
- `POST /scraper/jobs/bulk` - Bulk insert jobs
- `POST /categorizer/categorize` - Categorize jobs

---

## 📊 Database Stats

**Tables Created:** 5
- jobs (0 rows)
- resumes (0 rows)
- categories (43 rows) ✅
- chat_sessions (0 rows)
- chat_messages (0 rows)

**Categories Breakdown:**
- Energy (6 subcategories: Solar, Wind, Hydro, Storage, Nuclear, Geothermal)
- Mobility & Transportation (5 subcategories: EVs, Transit, Micromobility, Aviation, Shipping)
- Built Environment (4 subcategories: Green Buildings, HVAC, Smart Homes, Construction)
- Food & Agriculture (4 subcategories: Regen Ag, Alt Proteins, Food Waste, AgTech)
- Carbon Management (4 subcategories: Capture, Credits, Offsets, Verification)
- Circu
[truncated — 1642 more characters]
```

### package.json

```
{
  "name": "climate-tech-career-explorer",
  "version": "1.0.0",
  "description": "AI-powered Climate Tech Career Explorer for TreeHacks 2026",
  "private": true,
  "workspaces": [
    "frontend",
    "components/1-scraper"
  ],
  "scripts": {
    "dev:frontend": "cd frontend && npm run dev",
    "dev:backend": "cd backend && source venv/bin/activate && uvicorn main:app --reload",
    "dev:agents": "cd agents && source venv/bin/activate && python http_server.py",
    "dev:scraper": "cd components/1-scraper && npm run dev",
    "dev:categorizer": "cd components/2-categorizer && uvicorn main:app --reload --port 3002",
    "dev": "concurrently -n \"frontend,backend,agents\" -c \"cyan,yellow,green\" \"npm run dev:frontend\" \"npm run dev:backend\" \"npm run dev:agents\"",
    "setup": "npm install && cd frontend && npm install && cd ../components/1-scraper && npm install",
    "setup:python": "cd backend && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && cd ../agents && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && cd ../components/2-categorizer && pip install -r requirements.txt && cd ../components/4-resume-parser && pip install -r requirements.txt"
  },
  "devDependencies": {
    "concurrently": "^8.2.2"
  },
  "keywords": [
    "climate-tech",
    "career",
    "ai",
    "jobs",
    "hackathon",
    "treehacks"
  ],
  "author": "TreeHacks 2026 Team",
  "license": "MIT"
}

```

### agents/requirements.txt

```
# Fetch.ai uAgents Dependencies
# Climate Tech Career Coach Agent
# UPDATED: 2026-02-14 - Compatible versions for uAgents

# Fetch.ai framework
uagents==0.12.0

# Web framework for HTTP server
fastapi==0.125.0
uvicorn==0.20.0

# HTTP client for calling backend API
httpx>=0.24.0

# Environment and configuration
python-dotenv==1.0.1

# OpenAI for enhanced conversational responses
openai==2.21.0

# Data validation (compatible with uagents - requires <2.0)
pydantic==1.10.26

# WebSockets (compatible with uagents - requires <11.0)
websockets==10.4

# Note: Supabase dependencies removed to avoid conflicts with uagents
# The agent uses HTTP to communicate with backend, which handles database

```

### frontend/package.json

```
{
  "name": "climate-tech-career-explorer-frontend",
  "version": "1.0.0",
  "description": "Frontend for Climate Tech Career Explorer",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "next": "^14.1.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "@supabase/supabase-js": "^2.39.3",
    "axios": "^1.6.5"
  },
  "devDependencies": {
    "@types/node": "^20.11.5",
    "@types/react": "^18.2.48",
    "@types/react-dom": "^18.2.18",
    "autoprefixer": "^10.4.17",
    "eslint": "^8.56.0",
    "eslint-config-next": "^14.1.0",
    "postcss": "^8.4.33",
    "tailwindcss": "^3.4.1",
    "typescript": "^5.3.3"
  }
}

```

### backend/requirements.txt

```
# Backend Dependencies
# Climate Tech Career Explorer
# UPDATED: 2026-02-14 - All versions tested and working

# FastAPI and server
fastapi==0.109.0
uvicorn[standard]==0.27.0
python-multipart==0.0.6

# Database - Supabase (CRITICAL: Updated to v2.28.0 for compatibility)
supabase==2.28.0
gotrue==2.12.4
postgrest==2.28.0
realtime==2.28.0
storage3==2.28.0

# HTTP client (CRITICAL: Updated to v0.28.1 for httpx proxy compatibility)
httpx==0.28.1

# WebSockets (CRITICAL: Updated to v15.0.1 for realtime compatibility)
websockets==15.0.1

# Data validation
pydantic==2.12.5
pydantic-settings==2.1.0

# Environment and configuration
python-dotenv==1.0.1

# Optional: Email validation
email-validator==2.1.0

# OpenAI for LLM-driven search (>=2.21.0 required for httpx 0.28 compat)
openai>=2.21.0

# Resume parsing dependencies
pdfplumber==0.11.0
python-docx==1.1.0
tabulate==0.9.0
requests==2.31.0

# RAG pipeline (for job tagger - innovation categorization)
langchain>=0.3.0
langchain-core>=0.3.0
langchain-community>=0.3.0
langchain-openai>=0.2.0
lancedb>=0.4.0
sentence-transformers>=2.2.0

```

### components/1-scraper/requirements.txt

```
certifi==2026.1.4
charset-normalizer==3.4.4
idna==3.11
python-dotenv==1.2.1
requests==2.32.5
urllib3==2.6.3
supabase==2.28.0


```

### components/4-resume-parser/requirements.txt

```
# Component 4: Resume Parser & Job Matcher
# UPDATED: 2026-02-14 — lightweight, no C compilation needed

# PDF text extraction
pdfplumber==0.11.4

# DOCX parsing
python-docx==1.1.2

# RTF parsing (optional — for .rtf files)
striprtf==0.0.29

# Supabase client
supabase==2.11.0

# HTTP requests for AI APIs
requests==2.32.3

# Table formatting for CLI output
tabulate==0.9.0

# Environment variable management
python-dotenv==1.0.1
```

### components/1-scraper/package.json

```
{
  "name": "climate-jobs-scraper",
  "version": "1.0.0",
  "description": "Job scraper using Browserbase and Stagehand",
  "main": "src/index.ts",
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "start": "tsx src/index.ts",
    "scrape": "tsx src/index.ts"
  },
  "dependencies": {
    "@browserbasehq/stagehand": "^1.5.0",
    "axios": "^1.6.5",
    "dotenv": "^16.3.1"
  },
  "devDependencies": {
    "@types/node": "^20.11.5",
    "tsx": "^4.7.0",
    "typescript": "^5.3.3"
  }
}

```

### components/2-categorizer/requirements.txt

```
# Core
streamlit>=1.30.0
openpyxl>=3.1.0
plotly>=5.18.0

# Resume parsing
PyPDF2>=3.0.0
python-docx>=1.0.0
pdfplumber>=0.10.0

# RAG pipeline
langchain>=0.3.0
langchain-openai>=0.2.0
langchain-community>=0.3.0
lancedb>=0.4.0
sentence-transformers>=2.2.0

# LLM (optional — RAG works in retrieval-only mode without this)
openai>=1.0.0

# Job scraping (optional)
python-jobspy>=1.1.0
beautifulsoup4>=4.12.0
requests>=2.31.0

#pip install langchain langchain-core langchain-openai langchain-community lancedb sentence-transformers

```

[72 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]