Project Info
This project did not submit a demo video on Devpost.
Inspiration
Finding reliable contractors for home improvement projects is frustrating and time-consuming. We wanted to create an AI-powered platform that could understand natural language project descriptions and intelligently match customers with qualified professionals.
What it does
ReNOVA connects homeowners with verified contractors using multi-agent AI systems. Users describe their project in natural language, and our AI agents analyze requirements, find local contractors, and rank matches with transparent reasoning.
How we built it
Frontend: Next.js 14 with React 18 and Figma-designed UI Backend: Node.js with Express and Fetch.ai uAgents AI Pipeline: Python agents using uAgents SDK: CoordinatorAgent: Orchestrates the pipeline IntakeAgent: Analyzes project descriptions with Claude AI ScraperAgent: Finds contractors via Yelp API MatcherAgent: Ranks matches using vector similarity + AI reasoning Tech Stack: Anthropic Claude, ChromaDB, Redis, Docker
Challenges we ran into
When using anthropic the prompts didn't work as intended which caused more issues with debugging.
Accomplishments we're proud of
We have a functional product, and we're able to speak and understand our idea.
What we learned
We learned how different technologies learned.
What's next
Make greater functionality.
ReNOVA 2025 ποΈ
AI-powered contractor matching platform built for CalHacks 12.0
ReNOVA connects homeowners and businesses with verified building professionals using multi-agent AI systems powered by Fetch.ai, Anthropic Claude, Bright Data, and ChromaDB.
β¨ Features
- Multi-Agent AI Pipeline: Fetch.ai agents orchestrate the entire matching workflow
- Natural Language Understanding: Claude AI analyzes project requirements
- Real-Time Progress: Server-Sent Events provide live pipeline updates
- Smart Matching: Vector similarity search + AI reasoning for optimal contractor matches
- Beautiful UI: Figma-designed responsive interface with smooth animations
- Zero SQL: All data stored in ChromaDB vector database
- Usage-Based Billing: Lava Payments integration with automatic fallback to direct API
π― How It Works
- User submits project - Describe your need (e.g., "AC unit making noise, needs repair")
- IntakeAgent analyzes - Claude extracts trade, urgency, services, budget hints
- ScraperAgent finds pros - Bright Data searches for local licensed contractors
- IndexerAgent stores - Professionals indexed in ChromaDB with embeddings
- MatcherAgent ranks - Vector search + Claude reasoning generates top matches
- Results delivered - Real-time progress updates, detailed match explanations
π Quick Start
Prerequisites
- Docker Desktop installed and running
- Anthropic API key (required)
- At least 4GB RAM for Docker
One-Command Setup
# Clone the repository
git clone https://github.com/cjaeey/calhaks12.0.git
cd calhaks12.0
# Start everything with one command!
./start.sh
# That's it! Open http://localhost:3000
The start.sh script will:
- β
Create
.envfrom template - β Build Docker containers
- β Start all services (frontend, backend, Redis, ChromaDB)
- β Wait for health checks
- β Show you the URLs
Alternative: Using Make Commands
# Install dependencies locally
make install
# Start with Docker Compose
make up
# View logs
make logs
# Seed demo data
make seed
# Stop services
make down
π Detailed Docker guide: See DOCKER_SETUP.md
Local Development (without Docker)
Terminal 1 - Redis:
redis-server
Terminal 2 - Backend:
cd backend
npm install
npm run dev
Terminal 3 - Frontend:
cd "frontend/Landing Page AI"
npm install
npm run dev
π Project Structure
renova/
βββ backend/ # Node.js + Express backend
β βββ agents/ # Fetch.ai uAgents
β β βββ coordinatorAgent.js
β β βββ intakeAgent.js
β β βββ scraperAgent.js
β β βββ indexerAgent.js
β β βββ matcherAgent.js
β βββ services/
β β βββ claudeClient.js # Anthropic Claude integration
β β βββ brightDataClient.js # Web scraping
β β βββ matchingService.js # Vector search + business logic
β β βββ embeddingService.js
β βββ config/
β β βββ chromaClient.js # ChromaDB setup
β β βββ redisClient.js # Redis pub/sub
β βββ routes/
β β βββ jobs.js # Job API endpoints
β β βββ pros.js # Professional listings
β βββ server.js
β
βββ frontend/Landing Page AI/ # Next.js 14 frontend
β βββ src/
β β βββ app/
β β β βββ page.tsx # Landing page
β β β βββ jobs/[jobId]/ # Job results
β β β βββ layout.tsx
β β βββ components/
β β β βββ Hero.tsx
β β β βββ IntakeForm.tsx
β β β βββ PostProjectModal.tsx
β β β βββ ProgressTracker.tsx
β β β βββ MatchResults.tsx
β β β βββ ui/ # shadcn/ui components
β β βββ lib/
β β βββ api.ts # Backend API client
β β βββ useSSE.ts # SSE hook
β βββ package.json
β
βββ docker-compose.yml
βββ Makefile
βββ .env.example
βββ README.md
π§© Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, React 18, Tailwind CSS, Framer Motion, shadcn/ui |
| Backend | Node.js, Express, Fetch.ai uAgents |
| AI/ML | Anthropic Claude (Sonnet 4.5), ChromaDB (vector DB) |
| Data | Bright Data (web scraping), Redis (pub/sub) |
| Deployment | Vercel (frontend), Render/Railway (backend) |
π§ Configuration
Environment Variables
# Required
ANTHROPIC_API_KEY=sk-ant-...
# Optional (for live scraping)
BRIGHT_DATA_USERNAME=your_username
BRIGHT_DATA_PASSWORD=your_password
BRIGHT_DATA_ZONE=your_zone
BRIGHT_DATA_PROXY=brd.superproxy.io:22225
# Fetch.ai (optional)
UAGENTS_WALLET_MNEMONIC=your_mnemonic
UAGENTS_NETWORK=alpha
# Redis
REDIS_URL=redis://localhost:6379/0
# ChromaDB
CHROMA_PATH=./chroma_data
# App
NODE_ENV=development
PORT=3001
FRONTEND_URL=http://localhost:3000
π‘ API Endpoints
Jobs
# Create a new job
POST /api/jobs
{
"prompt": "Need HVAC repair for noisy AC",
"city": "San Francisco",
"state": "CA",
"zipCode": "94102"
}
# Get job status
GET /api/jobs/:id
# Stream progress (SSE)
GET /api/jobs/:id/events
# Get results
GET /api/jobs/:id/results
Professionals
# List all professionals
GET /api/pros?trade=HVAC&city=San Francisco&state=CA
# Get professional details
GET /api/pros/:id
π§ͺ Testing
# Seed demo professionals
make seed
# Run end-to-end demo
make demo
# Manual test flow
curl -X POST http://localhost:3001/api/jobs \
-H "Content-Type: application/json" \
-d '{
"prompt": "AC not cooling, needs urgent repair",
"city": "San Francisco",
"state": "CA"
}'
π Lava Payments Integration (Optional)
ReNOVA supports Lava Payments for AI usage tracking and billing:
# Quick setup
./setup-lava.sh
# Or manually set in .env
USE_LAVA=true
LAVA_FORWARD_TOKEN=your_token_here
Features:
- Real-time usage and cost tracking
- Automatic fallback to direct Anthropic API if credits exhausted
- Zero downtime - transparent switching
- Dashboard analytics at https://www.lavapayments.com/dashboard
How it works:
- Lava acts as a transparent proxy to Anthropic Claude API
- Tracks every API call with usage metrics
- If Lava credits run out, automatically falls back to your Anthropic credits
- Application continues working seamlessly
π Full documentation: See LAVA_INTEGRATION.md
π¨ UI Components
The frontend uses a Figma-designed component system:
- Hero: Animated landing section with 3D visualization
- HowItWorks: Step-by-step process explanation
- AIShowcase: Technology stack showcase
- IntakeForm: Project submission with validation
- ProgressTracker: Real-time SSE progress display
- MatchResults: AI-ranked contractor cards with reasoning
π’ Deployment
Frontend (Vercel)
cd "frontend/Landing Page AI"
vercel deploy
Backend (Render/Railway)
- Connect your repo to Render/Railway
- Set environment variables
- Deploy from
mainbranch - Ensure Redis add-on is enabled
π€ Contributing
This is a hackathon project built for CalHacks 12.0. Contributions welcome!
# Fork the repo
# Create a feature branch
git checkout -b feature/amazing-feature
# Commit changes
git commit -m "Add amazing feature"
# Push and create PR
git push origin feature/amazing-feature
π License
MIT License - see LICENSE file for details
π Acknowledgments
- Fetch.ai - Multi-agent orchestration
- Anthropic - Claude AI for natural language understanding
- Lava Payments - Usage-based AI billing with automatic fallback
- Bright Data - Web scraping infrastructure
- ChromaDB - Vector database for embeddings
- CalHacks 12.0 - Hackathon inspiration and community
π§ Contact
Built with β€οΈ by the ReNOVA Team for CalHacks 12.0
ReNOVA - Smarter hiring for your next project. ποΈ
Analysis
View
Metric
- 7
- 3
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- ExpressIn code
- FlaskIn code
- HTMLIn code
- JavaScriptIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- RedisIn code
- Tailwind CSSIn code
- TypeScriptIn code
- DockerClaimed
- Node.jsClaimed
12 of 14 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig Β· Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
615 KB
Source files
184
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
cjaeey/calhaks12.0
198 files Β· 957 KB Β· @ f23d7c5
Structure
Interface
124 files Β· 63%Screens, components and styles rendered to the user.
API & routing
2 files Β· 1%Request entry points: routes, handlers and controllers.
Application logic
36 files Β· 18%Domain rules, services and shared utilities.
+1 moreBackground jobs
1 file Β· 1%Work run outside a request: tasks, workers and schedules.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here β open the file browser to check anything the diagram implies.
Languages
- TypeScript65%
- JavaScript12%
- Markdown11%
- Python6%
- CSS2%
- Shell2%
- Other (2)2%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/Landing Page AI/package.json
npm Β· 22- @radix-ui/react-dialog
- @radix-ui/react-label
- @radix-ui/react-slot
- axios
- class-variance-authority
- clsx
- framer-motion
- lucide-react
- next
- react
- react-dom
- tailwind-merge
- tailwindcss-animate
- +9 more
backend/package.json
npm Β· 13- @anthropic-ai/sdk
- axios
- chromadb
- chromadb-default-embed
- cors
- dotenv
- express
- ioredis
- nanoid
- pino
- pino-pretty
- zod
- +1 more
agents_python/requirements.txt
pypi Β· 9- aiohttp
- anthropic
- chromadb
- flask
- flask-cors
- python-dotenv
- redis
- requests
- uagents
Declared in the repositoryβs manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This projectβs features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.