# Project export: JUGAAD

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: UC Berkeley AI Hackathon 2026
- Tagline: JUGAAD — Just-in-time University Guidance and Actionable Discovery — gives every Berkeley student the insider hacks on food, housing, and financial aid that only connected students know.
- Devpost: https://devpost.com/software/jugaad-dpmqi7
- GitHub: https://github.com/nergisRahimzade/jugaad
- Demo: https://canva.link/jugaad
- Video: https://www.youtube.com/embed/18ggunYZ8iM?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Result: winner (Best Use of Arize)
- Team: 5 GitHub contributor(s) — jo-d-create (21 commits), Tanvi Badadare (16 commits), Cursor (14 commits), nergisRahimzade (11 commits), Claude Sonnet 4.6 (6 commits)

## Devpost submission (written by the team)

### Inspiration

At Berkeley, solutions to student crises actually exist. CalFresh can give a student $292/month for groceries. The BSC co-ops are 50% cheaper than dorms. The Special Circumstances Appeal can add thousands to your aid package. Let's Talk drop-in counseling has no waitlist and no appointment needed. But here's the problem: none of this information travels equally. It circulates through Greek life, legacy families, and established friend networks. First-gen students, transfer students, international students, and low-income students — the ones who need it most — are systematically excluded from this tribal knowledge. 39% of Berkeley undergrads experience food insecurity. 3,300+ students lack stable housing. FAFSA processing is literally paused right now. And the food pantry serving these students? It's one floor below the hackathon venue. The information asymmetry is the real inequity. JUGAAD stands for Just-in-time University Guidance and Actionable Discovery. We built it to make sure every student gets the hack — not just the connected ones. What It Does JUGAAD works in three steps: 1. Listen — Speak or type your problem. A Claude-powered intake agent asks 6–8 natural questions to understand your exact situation: SAI, citizenship status, meal plan, housing, current aid. This profile powers every personalized recommendation downstream. 2. Match — Five specialized Fetch.ai agents run in parallel, each searching their domain — food, financial aid, safety, wellness, and academics — drawing from a Redis knowledge graph and Browserbase web agents browsing Berkeley sites in real time. 3. Act — A personalized dashboard surfaces your specific "hack stack": not just what resources exist, but how to stack them, what exemptions you qualify for, and pre-filled applications ready to submit. Key features: Hack Stacks — For each domain, Claude assembles 3–6 complementary resources that compound together. Not just "here's the food pantry" but "here's how to stack CalFresh + pantry + Grab N Go + Market Match to eat well on near-zero budget." Apply Now — One click generates a pre-filled personal statement, appeal letter, or CalFresh intake summary using the student's actual profile. The emergency grant statement comes back in under 3 seconds. Deadline Alert Engine — Proactive alerts at 30 days, 7 days, and 48 hours before every relevant deadline tied to the student's matched resources. CalFresh Eligibility Checker — Walks through each student exemption. If SAI=0 and Pell Grant received, immediately surfaces the qualification without needing a full conversation. First 30 Days Checklist — Auto-generated chronological action plan of what to apply for and when. Lease Red-Flag Scanner — Paste a lease; Claude identifies predatory clauses, illegal security deposit terms, and waived habitability rights under California law. Berkeley Problem Map — Anonymized crowdsourced visualization of student struggles by neighborhood, time of day, and domain — a data tool for both individuals and advocacy. How We Built It AI / Claude Layer (Anthropic SDK) The intelligence core is a layered prompt architecture: A master orchestrator prompt defines JUGAAD's persona — a knowledgeable peer who gives you the specific hack, not a generic resource page link. It enforces four tone rules on every response: acknowledge the emotional reality first, normalize with a Berkeley-specific statistic, give the HACK, end with one concrete next action today. Six domain sub-prompts encode Berkeley-specific knowledge: CalFresh stacking strategies, BSC co-op details, the Special Circumstances Appeal process, Let's Talk drop-in locations, enrollment timing hacks. A Claude-as-judge evaluator runs automated quality scoring across 4 criteria (relevance, actionability, persona adherence, safety) and logs results to Arize. We ran 3 evaluation rounds during the hackathon and used the feedback to identify and fix prompt gaps — cross-domain crisis detection being the major improvement. AsyncAnthropic client with SSE streaming so chat responses appear progressively. Multi-Agent Architecture (Fetch.ai + Band) Five specialist agents registered on Agentverse with real addresses, coordinated by a JUGAAD Coordinator Agent via the Fetch.ai mailbox protocol. Band enables cross-domain intelligence: when the financial aid agent detects aid loss, the food agent proactively surfaces CalFresh hacks, and the wellness agent includes mental health resources for financial stress. Data Layer (Redis + Browserbase) Redis stores student session context, a vector-indexed knowledge graph of 30+ Berkeley-specific hacks, and a semantic cache for repeated queries. Browserbase agents browse Berkeley websites in real time — financial aid pages, food pantry hours, SHIP provider directories — ensuring results are never stale. Frontend + Voice (Next.js + Deepgram) Voice-first interface built with Next.js 14 and Tailwind. Deepgram STT captures voice input with live transcription; Deepgram TTS delivers responses back as natural speech. The full intake-to-dashboard flow works hands-free. A real-time agent activity feed shows which agents are running and what they're querying. Observability (Arize + Sentry) Every Claude call is instrumented through Arize with named traces — "intake", "domain_classify", "hack_stack_food", "apply_now_grant" — so we can see the full reasoning chain. Sentry is integrated from the first commit for error monitoring and crash reporting. Challenges We Ran Into FAFSA and financial aid chaos: The One Big Beautiful Bill Act paused FAFSA processing on April 21, 2026. We had to make sure JUGAAD's financial aid prompts accurately reflected the current broken state — not the idealized process — and gave students concrete bridge strategies (short-term emergency loans, special circumstances appeals) for a system that's actively failing them. Citizenship complexity: CalFresh eligibility changed April 1, 2026 for DACA and non-citizen groups. Getting the citizenship routing right — never leaving a student without an option, always pivoting to an alternative — required careful prompt engineering and testing. Cross-domain crisis detection: A student saying "I'm sleeping in my car" isn't asking a housing question — it's a crisis. We built cross-domain distress detection into the master prompt so housing instability, financial hopelessness, and dropout talk all trigger mental health resources alongside the practical hacks. Async streaming in FastAPI: Early implementation of SSE streaming was blocking the event loop. Switched to AsyncAnthropic client and async generator pattern to fix. Vague deadline data: Seed data with deadlines like "end of semester" are unparseable for urgency calculations. We systematically replaced all vague strings with real Fall 2026 dates so the deadline alert engine could actually fire. Accomplishments We're Proud Of The Apply Now personal statement generates in under 3 seconds and sounds like the student wrote it — not like a template. Judges can watch this happen live. Our LLM-as-judge evaluation pipeline caught real prompt failures during the hackathon. We ran 3 rounds and improved the average safety score from 4.5 to 5.0 for housing and financial crisis scenarios by fixing cross-domain crisis detection. The hack stacking logic doesn't just surface the top 3 resources — Claude selects for combination value. A $10 Market Match that doubles CalFresh spend is worth more than a $50 resource used alone. The CalFresh short-circuit identifies likely eligibility in one turn for SAI=0 + Pell Grant students without running a full conversation — because urgency matters. We built a platform that could genuinely help 17,000 food-insecure students, starting with the ones in the building where we built it. What We Learned Prompt engineering for emotional context is fundamentally different from prompt engineering for task completion. Getting JUGAAD to acknowledge the shame of food insecurity before pivoting to the hack required explicit tone rules, not just implicit examples. LLM-as-judge evaluation is a real engineering practice, not a demo trick. It caught failures we wouldn't have found through manual testing. The gap between "resource exists" and "student can access resource" is enormous — and almost entirely an information problem. Berkeley's systems aren't broken in the way most people think; the knowledge about how to navigate them is just hoarded.

### What's next

Expand to all 10 UC campuses — the same problem exists at UCLA, UC San Diego, UC Davis. The Berkeley knowledge graph becomes a template; local coordinators populate campus-specific hacks. Add persistent user memory so returning students never re-onboard. Build the Food Surplus Network into a real two-sided platform: student organizations with leftover catering post in real time; nearby students get notified. Partner with the Berkeley Basic Needs Center to keep the knowledge graph current and verified.

## README (from the GitHub repository)

# Jugaad 🛠️

> **When Berkeley's systems fail students, Jugaad gives them the workaround.**

Jugaad is a voice-powered AI platform that crowdsources and delivers the creative hacks, loopholes, and workarounds that Berkeley students use to survive broken systems — and makes them available to every student, not just the ones with the right connections.

Built at **UC Berkeley AI Hackathon 2026** by team **Jugaad** · Track: Ddoski's World (Social Impact) · $5,000 Grand Prize

---

## The Problem

Berkeley's institutional systems — financial aid, housing, mental health, enrollment, food access — are broken, overwhelmed, or inaccessible. Solutions DO exist: clever workarounds, stacking strategies, and loopholes that students discover through experience. But this "jugaad knowledge" only circulates inside privileged social networks: Greek life, legacy families, established friend groups.

First-gen students, transfer students, international students, and low-income students are systematically excluded from this tribal knowledge. **The information asymmetry is the real inequity.**

### The Berkeley Crisis: Real Data

**Food Insecurity**
- 39% of undergrads and 23% of grad students experience food insecurity
- Roughly 17,000 Berkeley students don't have reliable access to food
- CalFresh eligibility changed April 1, 2026 for non-citizen groups
- The Basic Needs Food Pantry is in the lower level of MLK Student Union — the hackathon venue

**Housing Insecurity**
- 3,300+ students lack stable housing
- 2,400 face both food and housing insecurity simultaneously
- Berkeley has the highest student housing costs of any UC campus

**Mental Health**
- 61% of undergrads say depression and stress is an obstacle to academic success
- Tang Center / CAPS has weeks-long wait times for counseling appointments

**Financial Aid Chaos**
- FAFSA processing paused after April 21, 2026 due to One Big Beautiful Bill Act system updates
- Grad PLUS loans eliminated effective July 1, 2026
- Parent PLUS loans capped at $20K/year, $65K aggregate

**Academic Crisis**
- 35.3% of CS 10 students received F's in Spring 2026 (up from under 10% historically)
- EECS graduating class dropping from 1,029 to ~350
- Student Advisory Council explicitly listed "challenging to find campus resources" as a top issue

---

## What It Does

Jugaad works in three steps:

1. **Listen** — Speak or type your problem. Deepgram captures your voice, Claude understands the context, and a Coordinator Agent routes your request to the right specialists.
2. **Match** — Five specialized agents run in parallel, each searching their domain — food, safety, financial aid, wellness, and academics — drawing from a live Redis knowledge graph and Browserbase web agents browsing Berkeley sites in real time.
3. **Act** — A personalized dashboard surfaces your specific "hack stack": not just what resources exist, but how to stack them, what exemptions you qualify for, and pre-filled applications ready to submit.

**The key differentiator:** Jugaad doesn't just INFORM ("here's the food pantry"). It SOLVES ("here's how to stack CalFresh + food pantry + event food + Market Match to eat well on near-zero budget, and here's your auto-filled CalFresh application").

---

## Features

### Feature 1 — Intake Interview Agent
*Owner: Person 1 (AI / Claude Lead)*

A Claude-powered conversational agent that replaces a cold form. It asks 6–8 natural questions — delivered via voice through Deepgram — to build a complete student profile in under 5 minutes. This profile powers every personalized recommendation downstream.

**Collects:**
- UC campus and enrollment status (full-time, part-time, grad, undergrad)
- EFC / SAI from financial aid letter
- Housing situation — on-campus, off-campus, or unstably housed
- Meal plan status — active, expired, or none
- Citizenship/residency status — determines CalFresh, DACA, and undocumented-specific eligibility
- Current aid received (Pell, Cal Grant, loans)
- Number of dependents

**How it works:**
```
User speaks or types → Deepgram STT transcribes → Claude asks follow-up questions
→ Profile JSON built → Saved to Redis (session) + Supabase (persistent)
→ Profile broadcast to all agents via Coordinator
```

**Tech:** Claude claude-sonnet-4-6, Deepgram STT, FastAPI, Redis, Supabase

---

### Feature 2 — Personalized Resource Dashboard
*Owner: Person 4 (Frontend Lead) + Person 2 (Fetch.ai Lead)*

After intake, the dashboard shows only the resources this specific student qualifies for — not a generic directory. Powered by five specialist agents running in parallel, with results drawn from the Redis knowledge graph and live Browserbase web searches. Ranked by deadline urgency, match confidence, and dollar value.

**Each resource card includes:**
- Resource name and organization
- One-sentence match explanation (why this student qualifies)
- Dollar value or benefit description
- Deadline badge — red if under 7 days, amber if under 30
- Effort level — "5 min online form" vs "appointment required"
- "Apply Now" CTA that generates pre-filled content from the student's profile

**Categories covered:**

| Category | Resources |
|---|---|
| 🍎 Food | CalFresh stacking strategy, campus food pantries, emergency meal swipes, free food calendar, food surplus matching |
| 🏠 Housing | Co-op housing (BSC), emergency bridge housing, lease red-flag scanner, rent control rights |
| 💰 Financial Aid | Special circumstances appeal, emergency micro-grants, fee payment plan, scholarship matches |
| 🛡️ Safety | Real-time walking buddy matching, safe route recommendations, SafeWalk on-demand |
| 🧠 Mental Health | Let's Talk drop-ins, SHIP therapist bypass, urgent CAPS appointments, 24/7 counseling line |
| 📚 Academic | Enrollment strategies, BerkeleyTime pattern analysis, study group matching, prerequisite guidance |

**How it works:**
```
Profile broadcast to Coordinator Agent
→ Coordinator routes to 5 specialist agents
→ Agents query Redis knowledge graph + Browserbase live search
→ Results merged, ranked, and rendered as personalized "hack stacks"
```

**Tech:** Next.js, Tailwind CSS, FastAPI, Redis, Browserbase, Fetch.ai uAgents

---

### Feature 3 — Jugaad Hack Stacks
*Owner: Person 1 (AI / Claude Lead)*

The core value proposition. For each problem domain, Claude doesn't return a single resource — it returns a complete stacking strategy of 3–6 complementary resources that compound together. These hacks are drawn from the crowdsourced knowledge graph and personalized to the student's exact situation.

**Example hack stacks by domain:**

**Food Insecurity Hack Stack:**
- CalFresh ($292/month) + food pantry (weekly, MLK lower level) + Grab N Go recovered meals (free, daily) + club events with free catering (several/week) + Berkeley Student Food Collective (sliding-scale) + Market Match at Saturday farmers market (doubles first $10 CalFresh spend)
- Most students know 1–2 of these. Jugaad gives you all 6 and helps you access each one.

**Housing Hack Stack:**
- BSC co-op (30–50% cheaper than dorms, rolling admissions, most students never hear about it) + summer sublet conversion strategy + rent control rights (apartments pre-1980 have annual caps) + lease red-flag scanner (upload lease, AI flags predatory clauses)

**Financial Aid Hack Stack:**
- Special Circumstances Appeal (recalculates aid based on current income — can add thousands) + emergency short-term loan bridge (covers FAFSA delay) + micro-scholarship scan (hundreds of $500–$2,000 awards with few applicants) + fee payment plan (spreads tuition across semester)

**Mental Health Hack Stack:**
- Let's Talk drop-in (no appointment, no paperwork, multiple campus locations) + SHIP therapist bypass (off-campus providers with same-week availability, no referral) + urgent appointment pathway at CAPS (same-day if you communicate urgency) + 24/7 counseling line: 855-817-5667

**How it works:**
```
User describes problem
→ Claude classifies domain + urgency
→ Redis vector s

[README truncated for size]

## Detected evidence (automated analysis)

Indexed codebase: 146 recognized source files, 569 KB.
- Anthropic (technology) — detected in the code
- CSS (language) — detected in the code
- FastAPI (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
- Redis (technology) — detected in the code
- Tailwind CSS (technology) — detected in the code
- TypeScript (language) — detected in the code
- Supabase (technology) — claimed on Devpost, not found in the code
- Vercel (technology) — claimed on Devpost, not found in the code
- AI coding agent: Claude Code — evidence: commit authorship or trailers
- AI coding agent: Cursor — evidence: commit authorship or trailers

## Codebase structure (from repository index)

### Files (120 of 160)

```
.gitignore
backend/.env.example
backend/.gitignore
backend/agents/__init__.py
backend/agents/config.py
backend/agents/hosted/academic/agent.py
backend/agents/hosted/academic/messages.py
backend/agents/hosted/coordinator/addresses.py
backend/agents/hosted/coordinator/agent.py
backend/agents/hosted/coordinator/messages.py
backend/agents/hosted/coordinator/routing.py
backend/agents/hosted/financial_aid/agent.py
backend/agents/hosted/financial_aid/messages.py
backend/agents/hosted/food/agent.py
backend/agents/hosted/food/messages.py
backend/agents/hosted/housing/agent.py
backend/agents/hosted/housing/messages.py
backend/agents/hosted/lib/messages.py
backend/agents/hosted/README.md
backend/agents/hosted/safety/agent.py
backend/agents/hosted/safety/messages.py
backend/agents/hosted/scholarship/agent.py
backend/agents/hosted/scholarship/messages.py
backend/agents/hosted/wellness/agent.py
backend/agents/hosted/wellness/messages.py
backend/agents/knowledge.py
backend/agents/README.md
backend/agents/response_builder.py
backend/agents/routing.py
backend/agents/services/__init__.py
backend/agents/services/agentverse_client.py
backend/agents/services/agentverse_relay.py
backend/agents/services/asi_one.py
backend/agents/services/band_room.py
backend/agents/services/browserbase_search.py
backend/agents/services/browserbase/__init__.py
backend/agents/services/browserbase/_schema.py
backend/agents/services/browserbase/financial_aid_finder.py
backend/agents/services/browserbase/food_finder.py
backend/agents/services/browserbase/housing_finder.py
backend/agents/services/browserbase/session.py
backend/agents/services/redis_cache.py
backend/agents/services/redis_memory.py
backend/agents/services/redis_schema.py
backend/agents/services/redis_seed.py
backend/agents/services/redis_store.py
backend/core/__init__.py
backend/core/arize_logger.py
backend/core/claude_client.py
backend/core/config.py
backend/core/evaluator.py
backend/core/instrumentation.py
backend/data/__init__.py
backend/data/calfresh_thresholds.json
backend/data/loader.py
backend/data/seed_hacks.json
backend/main.py
backend/models/__init__.py
backend/models/resources.py
backend/models/student.py
backend/private_keys.json
backend/prompts/__init__.py
backend/prompts/apply_now.py
backend/prompts/calfresh.py
backend/prompts/checklist.py
backend/prompts/domains/__init__.py
backend/prompts/domains/academic.py
backend/prompts/domains/financial_aid.py
backend/prompts/domains/food.py
backend/prompts/domains/housing.py
backend/prompts/domains/safety.py
backend/prompts/domains/wellness.py
backend/prompts/intake.py
backend/prompts/jugaad_format.py
backend/prompts/master.py
backend/prompts/peer_navigator.py
backend/requirements.txt
backend/routers/__init__.py
backend/routers/apply_now.py
backend/routers/calfresh.py
backend/routers/chat.py
backend/routers/checklist.py
backend/routers/contribute.py
backend/routers/deadlines.py
backend/routers/demo.py
backend/routers/evaluate.py
backend/routers/intake.py
backend/routers/recommend.py
backend/routers/speech.py
backend/routers/web_search.py
backend/scripts/verify_seeds.py
backend/services/__init__.py
backend/services/apply_service.py
backend/services/calfresh_service.py
backend/services/coordinator_service.py
backend/services/data_layer_service.py
backend/services/deadline_service.py
backend/services/demo_seed_service.py
backend/services/intake_service.py
backend/services/jugaad_format_service.py
backend/services/profile_service.py
backend/services/recommend_service.py
backend/services/speech_service.py
backend/services/tts_service.py
backend/smoke_test.py
docker-compose.yml
frontend/.eslintrc.json
frontend/.gitignore
frontend/next.config.mjs
frontend/package.json
frontend/postcss.config.mjs
frontend/public/models/README.md
frontend/README.md
frontend/src/app/agent/[id]/page.tsx
frontend/src/app/agents/page.tsx
frontend/src/app/chat/page.tsx
frontend/src/app/contribute/page.tsx
frontend/src/app/dashboard/page.tsx
frontend/src/app/demo/page.tsx
frontend/src/app/globals.css
[40 more files omitted for size]
```

### Dependencies

- backend/requirements.txt: anthropic@>=0.84.0, arize@>=7.21.0, browserbase@>=1.0.0, fastapi@==0.115.0, httpx@>=0.28.1, langcache@>=0.1.0, openai@>=1.0.0, openinference-instrumentation-anthropic@>=0.1.0, playwright@>=1.45.0, pydantic@>=2.9.2, pydantic-settings@==2.5.2, python-dotenv@>=1.0.0, python-multipart@==0.0.12, redis@>=5.2, redis-agent-memory, redisvl[langcache]@>=0.16, sentence-transformers@>=2.7.0, sse-starlette@==2.1.3, uagents@>=0.23.0, uagents-core@>=0.4.0, uvicorn[standard]@==0.30.6
- frontend/package.json: @react-three/drei@^9.117.3, @react-three/fiber@^8.17.10, @react-three/postprocessing@^2.19.1, @types/node@^20, @types/react@^18, @types/react-dom@^18, @types/three@^0.184.1, eslint@^8, eslint-config-next@14.2.35, framer-motion@^12.40.0, lucide-react@^1.21.0, next@14.2.35, postcss@^8, react@^18, react-dom@^18, tailwindcss@^3.4.1, three@^0.184.0, typescript@^5
- package.json: stripe@^22.2.2

### Recent commits (newest first)

- Add History/Resources UI, shorter responses, and presentation guide.
- Enforce Jugaad 1, Jugaad 2 format on every chat response.
- Add seeded judge demo responses and real per-agent specialist execution.
- Wire data layer, Agent Memory intake, and local Redis for hackathon demo.
- Merge pull request #2 from nergisRahimzade/joanne-claude
- Made text-to-speech and speech-to-textwork.
- Wire real Agentverse addresses into orchestration UI
- Added text-to-speech for the program.
- Add Deepgram voice input to chat and fix mic stop flow
- Fix hydration errors and restore horizontal top nav
- Merge origin/ayo-data-web into fetch-ai-multi-agent
- Add student profile UI and backend-aware chat personalization.
- redis and basebrowser integrated: focused on the big3
- Sync chat with live agent orchestration and simplify demo UI.
- Improve prompts based on eval feedback: cross-domain crisis detection
- Fix deadline alerts: real dates in seed data, show 30-day upcoming items
- Merge origin/joanne-claude with speech and evaluate routers combined.
- Merge remote Deepgram speech-to-text with local deadlines and Arize instrumentation.
- Added speech-to-text implementation using Deepgram.
- Add Arize LLM-as-judge evaluator for response quality scoring

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

### PRESENTATION.md

```markdown
# Jugaad — Presentation & Sponsor Guide

**UC Berkeley AI Hackathon 2026** · Team Jugaad · Track: **Ddoski's World** (Social Impact)

> When Berkeley's systems fail students, Jugaad gives them the workaround.

**Live demo:** http://localhost:3001 (local) · **API:** http://localhost:8001  
**Repo:** https://github.com/nergisRahimzade/jugaad

---

## Table of Contents

1. [30-Second Elevator Pitch](#30-second-elevator-pitch)
2. [4-Minute Judge Pitch (Table + Stage)](#4-minute-judge-pitch-table--stage)
3. [What Is Jugaad? (10 Seconds)](#what-is-jugaad-10-seconds)
4. [Live Demo Script — Step by Step](#live-demo-script--step-by-step)
5. [8 Judge Demo Queries (Copy-Paste)](#8-judge-demo-queries-copy-paste)
6. [Grand Track & Berkeley Prizes](#grand-track--berkeley-prizes)
7. [Sponsor Booth Scripts (30 sec each)](#sponsor-booth-scripts-30-sec-each)
8. [Sponsor Deep-Dive (4 min each)](#sponsor-deep-dive-4-min-each)
9. [Architecture Cheat Sheet](#architecture-cheat-sheet)
10. [What to Show on Screen per Sponsor](#what-to-show-on-screen-per-sponsor)
11. [Honest Integration Status](#honest-integration-status)
12. [Anticipated Judge Q&A](#anticipated-judge-qa)
13. [Devpost "Built With" List](#devpost-built-with-list)

---

## 30-Second Elevator Pitch

> **39% of Berkeley undergrads are food insecure — that's 17,000 students.** The hacks to survive exist: CalFresh stacking, co-op housing, Let's Talk drop-ins, Special Circumstances appeals. But they only travel through word of mouth. If you have the right friends, you know them. If you don't, you don't.
>
> **Jugaad** — a Hindi word for the creative hack when the system fails you — is a voice-first AI platform that democratizes that tribal knowledge. You speak your problem. A **Coordinator Agent** routes to **7 specialist agents** running in parallel. Each searches a **Redis knowledge graph** and **live Berkeley websites**. You get back **Jugaad 1, Jugaad 2, Jugaad 3** — specific dollar amounts, phone numbers, and what to say — not a link to a resource page.
>
> The food pantry that serves these students? **It's one floor below us in MLK.**

---

## 4-Minute Judge Pitch (Table + Stage)

Use this at your table (1–3 PM Sunday). For top-10 stage, cut to **3 minutes** — drop Demo 3 and shorten the close.

### Opening — 30 sec

*"39% of Berkeley undergrads experience food insecurity. 3,300 lack stable housing. FAFSA processing is literally paused right now. And the food pantry that serves these students is one floor below us in this building.*
*
*Resources exist — but the hacks that actually work only travel through privileged social networks. First-gen and transfer students never hear about BSC co-ops, Let's Talk drop-ins, or Special Circumstances appeals.*
*
*We built **Jugaad** — named after the Hindi word for the creative hack when formal systems fail you. In India, when the power grid didn't exist, a potter built a refrigerator from clay. At Berkeley, when systems fail students, Jugaad makes sure **every studen
[truncated — 18969 more characters]
```

### package.json

```
{
  "dependencies": {
    "stripe": "^22.2.2"
  }
}

```

### docker-compose.yml

```yaml
# Local Redis Stack for Jugaad vector search (RedisVL needs RediSearch).
# Start:  docker compose up -d
# Stop:   docker compose down
# Logs:   docker compose logs -f redis

services:
  redis:
    image: redis/redis-stack-server:latest
    container_name: jugaad-redis
    ports:
      - "6379:6379"
    volumes:
      - jugaad_redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  jugaad_redis_data:

```

### frontend/package.json

```
{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "@react-three/drei": "^9.117.3",
    "@react-three/fiber": "^8.17.10",
    "@react-three/postprocessing": "^2.19.1",
    "@types/three": "^0.184.1",
    "framer-motion": "^12.40.0",
    "lucide-react": "^1.21.0",
    "next": "14.2.35",
    "react": "^18",
    "react-dom": "^18",
    "three": "^0.184.0"
  },
  "devDependencies": {
    "@types/node": "^20",
    "@types/react": "^18",
    "@types/react-dom": "^18",
    "eslint": "^8",
    "eslint-config-next": "14.2.35",
    "postcss": "^8",
    "tailwindcss": "^3.4.1",
    "typescript": "^5"
  }
}

```

### backend/requirements.txt

```
# Fetch.ai multi-agent
uagents>=0.23.0
uagents-core>=0.4.0
openai>=1.0.0

# Claude intelligence layer (FastAPI)
fastapi==0.115.0
uvicorn[standard]==0.30.6
anthropic>=0.84.0
pydantic>=2.9.2                   # langcache / agent-memory-client need >=2.11
pydantic-settings==2.5.2
sse-starlette==2.1.3
arize>=7.21.0
openinference-instrumentation-anthropic>=0.1.0
python-multipart==0.0.12
# Person 3 — Data + Web Agents (food, housing, financial aid)
redis>=5.2
redisvl[langcache]>=0.16          # local vector index over the hack knowledge graph
sentence-transformers>=2.7.0      # HFTextVectorizer (all-MiniLM-L6-v2, offline embeddings)
langcache>=0.1.0                  # managed semantic cache SDK
redis-agent-memory                # managed Redis Cloud Agent Memory SDK (needs store_id)
browserbase>=1.0.0                # Browserbase SDK for live web sessions
playwright>=1.45.0

# Shared
python-dotenv>=1.0.0
httpx>=0.28.1                     # required by langcache / agent-memory-client

```

### backend/main.py

```python
from core.instrumentation import setup as _setup_arize

_setup_arize()

import logging

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from agents.services import redis_cache, redis_memory
from agents.services.redis_seed import seed_if_needed
from agents.services.redis_store import index_stats
from core.config import settings
from routers import (
    apply_now,
    calfresh,
    chat,
    checklist,
    contribute,
    deadlines,
    demo,
    evaluate,
    intake,
    recommend,
    speech,
    web_search,
)

logger = logging.getLogger("jugaad.main")

app = FastAPI(title="Jugaad API", version="1.0.0")

app.add_middleware(
    CORSMiddleware,
    allow_origins=[
        "http://localhost:3000",
        "http://localhost:3001",
        "http://127.0.0.1:3000",
        "http://127.0.0.1:3001",
    ],
    allow_origin_regex=r"https://.*\.vercel\.app",
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(intake.router, prefix="/intake", tags=["intake"])
app.include_router(recommend.router, tags=["recommend"])
app.include_router(apply_now.router, tags=["apply"])
app.include_router(chat.router, tags=["chat"])
app.include_router(calfresh.router, tags=["calfresh"])
app.include_router(checklist.router, tags=["checklist"])
app.include_router(demo.router, prefix="/demo", tags=["demo"])
app.include_router(deadlines.router, tags=["deadlines"])
app.include_router(speech.router, prefix="/speech", tags=["speech"])
app.include_router(evaluate.router, tags=["evaluate"])
app.include_router(contribute.router, tags=["data"])
app.include_router(web_search.router, tags=["data"])


@app.on_event("startup")
def _startup_seed() -> None:
    """Idempotent RedisVL seed on every boot — only writes when index is empty."""
    try:
        result = seed_if_needed()
        logger.info("Redis seed result: %s", result)
    except Exception as exc:
        logger.warning("Redis seed at startup failed: %s", exc)


@app.get("/health")
def health():
    return {
        "status": "ok",
        "model": settings.model_name,
        "data_layer": {
            "redis_vector_index": index_stats(),
            "langcache": redis_cache.stats(),
            "agent_memory": redis_memory.stats(),
        },
    }


if __name__ == "__main__":
    import uvicorn

    uvicorn.run("main:app", host="0.0.0.0", port=8001, reload=True)

```

### frontend/src/app/layout.tsx

```typescript
import type { Metadata } from "next";
import { Navbar } from "@/components/Navbar";
import { MainContent } from "@/components/MainContent";
import { AppStateProvider } from "@/context/AppStateContext";
import "./globals.css";

export const metadata: Metadata = {
  title: "Jugaad — Student Resources for UC Berkeley",
  description:
    "Find food, housing, financial aid, mental health, and safety resources matched to your situation — free, fast, and private.",
  keywords: ["Berkeley", "student resources", "food insecurity", "financial aid", "housing"],
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <body className="min-h-screen antialiased">
        {/* Ambient background layer */}
        <div className="fixed inset-0 pointer-events-none" aria-hidden>
          <div className="grid-bg noise absolute inset-0 opacity-60" />
          {/* Warm ambient glows */}
          <div className="absolute top-[-10%] left-1/2 -translate-x-1/2 w-[800px] h-[500px] rounded-full"
            style={{ background: "radial-gradient(ellipse, rgba(107,70,193,0.07) 0%, transparent 70%)" }} />
          <div className="absolute bottom-0 right-0 w-[500px] h-[400px] rounded-full"
            style={{ background: "radial-gradient(ellipse, rgba(253,181,21,0.05) 0%, transparent 70%)" }} />
          <div className="absolute top-1/2 left-0 w-[400px] h-[400px] rounded-full"
            style={{ background: "radial-gradient(ellipse, rgba(52,211,153,0.04) 0%, transparent 70%)" }} />
        </div>
        <AppStateProvider>
          <Navbar />
          <MainContent>{children}</MainContent>
        </AppStateProvider>
      </body>
    </html>
  );
}

```

### frontend/src/app/page.tsx

```typescript
"use client";

import { FormEvent, useState } from "react";
import { useRouter } from "next/navigation";
import { motion } from "framer-motion";
import { Send } from "lucide-react";
import Berkeley3DGlobe from "@/components/Berkeley3DGlobe";

export default function HomePage() {
  const router = useRouter();
  const [query, setQuery] = useState("");

  function handleSubmit(e: FormEvent) {
    e.preventDefault();
    const text = query.trim();
    if (!text) return;
    sessionStorage.setItem("jugaad_home_prompt", text);
    router.push("/chat");
  }

  return (
    <>
      {/* UC-style institutional header */}
      <header className="border-b border-white/[0.06]">
        <div className="h-1 bg-[#fdb515]" aria-hidden />
        <div
          className="border-b border-white/[0.04]"
          style={{ background: "linear-gradient(180deg, rgba(0,50,98,0.35) 0%, transparent 100%)" }}
        >
          <div className="mx-auto max-w-3xl px-4 sm:px-6 py-6 sm:py-8 text-center">
            <p className="text-[10px] sm:text-[11px] font-mono uppercase tracking-[0.22em] text-[#fdb515]">
              University of California, Berkeley
            </p>
            <h1 className="mt-3 text-2xl sm:text-3xl font-semibold text-white tracking-tight">
              Jugaad
            </h1>
            <p className="mt-2 text-xs sm:text-sm text-white/45 max-w-xl mx-auto leading-relaxed">
              Just-in-time University Guidance And Actionable Discovery
            </p>
          </div>
        </div>
      </header>

      {/* Search → opens chat page */}
      <section className="mx-auto max-w-2xl px-4 sm:px-6 pt-8 pb-4">
        <motion.form
          initial={{ opacity: 0, y: 12 }}
          animate={{ opacity: 1, y: 0 }}
          transition={{ duration: 0.4 }}
          onSubmit={handleSubmit}
        >
          <div
            className="flex items-end gap-2 rounded-xl p-2 sm:p-2.5 transition-all focus-within:border-[#003262]/60"
            style={{
              background: "rgba(15,14,24,0.6)",
              border: "1px solid rgba(255,255,255,0.08)",
            }}
          >
            <textarea
              value={query}
              onChange={(e) => setQuery(e.target.value)}
              onKeyDown={(e) => {
                if (e.key === "Enter" && !e.shiftKey) {
                  e.preventDefault();
                  handleSubmit(e);
                }
              }}
              rows={1}
              placeholder="Describe what you need..."
              className="flex-1 resize-none bg-transparent px-3 py-2.5 text-sm sm:text-base text-white placeholder-white/35 outline-none min-h-[44px] max-h-32"
            />
            <button
              type="submit"
              disabled={!query.trim()}
              className="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg transition-all disabled:opacity-25 hover:opacity-90"
              style={{ background: "#003262", color: "#fdb515" }}
              aria-label="Send"
            >
              <Send className="h-4 w-4" />
            </button>
          </div>
        </motion.form>
      </section>

      <p className="text-center text-xs uppercase tracking-widest text-white/30 py-2">
        or
      </p>

      {/* Agent carousel */}
      <section className="mx-auto max-w-[1600px] px-3 pb-16 sm:px-6">
        <p className="mb-4 text-center text-sm text-white/45">
          Use the specific agent you want
        </p>
        <motion.div
          initial={{ opacity: 0, y: 16 }}
          animate={{ opacity: 1, y: 0 }}
          transition={{ duration: 0.45, delay: 0.1 }}
        >
          <Berkeley3DGlobe />
        </motion.div>
      </section>

      <footer
        style={{ borderTop: "1px solid rgba(255,255,255,0.05)" }}
        className="py-8"
      >
        <div
          className="mx-auto max-w-7xl px-4 sm:px-6 flex flex-col sm:flex-row items-center justify-between gap-4 text-sm"
          style={{ color: "#9299ae" }}
        >
          <span className="font-semibold text-white">Jugaad</span>
          <span>UC Berkeley AI Hackathon 2026 · Free for all students</span>
        </div>
      </footer>
    </>
  );
}

```

### frontend/src/app/agents/page.tsx

```typescript
import { FetchAIDemoSection } from "@/components/FetchAIDemoSection";

export const metadata = {
  title: "How It Works — Jugaad",
  description: "Live multi-agent orchestration: coordinator + 7 specialists with cross-domain routing",
};

export default function AgentsPage() {
  return (
    <div className="mx-auto max-w-7xl px-4 sm:px-6 py-10 sm:py-14">
      <FetchAIDemoSection />
    </div>
  );
}

```

### frontend/src/app/globe/page.tsx

```typescript
import Berkeley3DGlobe from "@/components/Berkeley3DGlobe";

export const metadata = {
  title: "Issue Agents — Jugaad",
  description: "Rotating flashcard carousel of UC Berkeley issue agents",
};

export default function GlobePage() {
  return (
    <div className="mx-auto max-w-[1600px] px-3 py-6 sm:px-6 sm:py-8">
      <div className="mb-6 px-1">
        <p className="text-xs font-mono uppercase tracking-widest text-[#fdb515]">Campus Agents</p>
        <h1 className="mt-1 font-serif text-2xl text-white sm:text-3xl">
          Explore Berkeley by issue agent
        </h1>
        <p className="mt-2 max-w-2xl text-sm text-white/50">
          Flashcards rotate in a circle — pick an agent on the left to bring its card to the front
          and highlight it.
        </p>
      </div>
      <Berkeley3DGlobe />
    </div>
  );
}

```

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