Project Info
Inspiration
Learn and Grow was inspired by the long hours students spend preparing for math tests—often repeating problems without knowing exactly where their understanding breaks down. We wanted to create a more responsive way to practice, with feedback that focuses on both the final answer and the student’s reasoning process.
What it does
Learn and Grow creates personalized, adaptive quizzes from uploaded study materials or user-provided instructions. Users can configure the number of questions and starting difficulty, while the quiz automatically adjusts its difficulty based on their performance. Students can show their work using an embedded Excalidraw whiteboard or upload a photo of handwritten work. Our live AI tutor analyzes the work in progress and offers timely guidance through text or spoken feedback without immediately revealing the answer. After each session, users receive analytics covering accuracy, response time, difficulty progression, frequently missed concepts, common mistakes, strengths, and recommended next steps. Learn and Grow also includes a multiplayer mode that makes practicing more engaging and collaborative.
How we built it
Frontend: React, TypeScript, Vite, Zustand, and Excalidraw Backend: Python and FastAPI Database and authentication: Supabase AI services: Claude Sonnet 4.6 and Deepgram Claude powers source analysis, question generation, whiteboard feedback, and grading. Deepgram converts tutor feedback into natural spoken audio. Zustand manages the active quiz lifecycle, while Supabase stores authenticated users’ completed-session analytics.
Challenges we ran into
One of our biggest challenges was integrating multiple sponsor technologies into a single cohesive experience instead of treating them as disconnected features. We also worked to differentiate Learn and Grow from a standard AI quiz generator by focusing on adaptive difficulty, analysis of students’ reasoning, live tutoring, and multiplayer practice.##
Accomplishments we're proud of
We’re especially proud of our live AI tutor, which analyzes whiteboard work while the student is solving a problem and provides targeted guidance through text and speech. We’re also proud of building an adaptive quiz engine, detailed learning analytics, and a multiplayer mode within the hackathon timeframe.
What we learned
We learned how to collaborate effectively across frontend, backend, AI, and infrastructure responsibilities. We gained hands-on experience integrating AI APIs, building structured prompts and responses, managing shared application state, processing visual work, and embedding tools such as Excalidraw into a complete user experience.
What's next
Next, we want to expand support beyond STEM subjects, improve grading verification and handwriting interpretation, and develop more sophisticated personalization based on a student’s long-term learning history.
Learn and Grow
Adaptive quiz app with AI-generated questions, whiteboard work analysis, spoken hints, session analytics, and optional multiplayer.
Stack: React + Vite (frontend), FastAPI + Claude (backend), Supabase (auth + saved sessions).
Prerequisites
- Node.js 18+ and npm
- Python 3.10+
- API keys: Anthropic, Deepgram (text-to-speech)
- Optional: Supabase project (sign-in, analytics, competitions)
1. Clone and install frontend dependencies
git clone <repo-url>
cd quizcraft
npm install
2. Python virtual environment
Create and activate a venv in the project root. Always use this venv for the backend so dependencies match requirements.txt.
Windows (PowerShell)
python -m venv venv
.\venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
macOS / Linux
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
3. Environment variables
Copy the example file and fill in your keys:
cp .env.example .env
Edit .env in the project root. Vite loads VITE_* variables from this file during npm run dev.
Backend (required)
| Variable | Description |
|---|---|
ANTHROPIC_API_KEY | Claude API key |
ANTHROPIC_MODEL | Model id (default: claude-sonnet-4-6-20251001) |
DEEPGRAM_API_KEY | Deepgram key for /speak (spoken hints) |
DEEPGRAM_SPEAK_MODEL | Optional; default aura-2-asteria-en |
Frontend API routing (recommended for local dev)
With the Vite proxy, the app calls /api/... and Vite forwards to the backend on port 3001:
VITE_API_BASE=/api
VITE_API_PROXY_TARGET=http://127.0.0.1:3001
Alternatively, call the backend directly (no proxy):
VITE_API_BASE=http://127.0.0.1:3001
Supabase (optional — sign-in, analytics, competitions)
VITE_SUPABASE_URL=https://xxxxxxxxxxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...
After creating a Supabase project:
- Enable Email under Authentication → Providers.
- In the SQL Editor, run
supabase/schema.sqlfor a new project. - If tables already exist with open RLS, also run
supabase/auth_migration.sql.
4. Run the app
Use two terminals, both from the project root.
Terminal 1 — Backend (with venv activated)
Windows:
.\venv\Scripts\Activate.ps1
.\venv\Scripts\python -m uvicorn claude_api:app --host 127.0.0.1 --port 3001 --reload
macOS / Linux:
source venv/bin/activate
python -m uvicorn claude_api:app --host 127.0.0.1 --port 3001 --reload
Verify the backend:
curl http://127.0.0.1:3001/health
You should see "status": "ok". If deepgramConfigured is false, check DEEPGRAM_API_KEY in .env and restart the server.
Note:
npm run backendusespython3, which may not exist on Windows. Prefer the venv commands above.
Terminal 2 — Frontend
npm run dev
Open the URL Vite prints (usually http://localhost:5173).
5. Production build
npm run build
npm run preview
The backend must still be running separately for API routes unless you deploy it elsewhere and set VITE_API_BASE to that URL at build time.
Troubleshooting
| Issue | Fix |
|---|---|
ECONNREFUSED 127.0.0.1:3001 | Start the backend on port 3001 before using the app |
/speak returns 503 | Set DEEPGRAM_API_KEY in .env and restart uvicorn |
python3 not found (Windows) | Use .\venv\Scripts\python instead |
Module not found after pip install | Activate venv, then pip install -r requirements.txt |
| Analytics / login errors | Configure Supabase vars and run the SQL migrations |
| API calls fail in dev | Ensure VITE_API_BASE=/api and backend is on the proxy target port |
Project layout
| Path | Purpose |
|---|---|
src/ | React frontend |
claude_api.py | FastAPI backend (Claude, Deepgram, question queue) |
requirements.txt | Python dependencies |
.env | Secrets and config (not committed) |
.env.example | Template for required variables |
supabase/ | Database schema and migrations |
Analysis
View
Metric
- 18
- 11
- 10
- 9
- 4
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
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RedisIn code
- SQLIn code
- SupabaseIn code
- Tailwind CSSIn code
- TypeScriptIn code
12 of 12 appear in the indexed code.
AI coding agents
- Claude CodeCommits
- CursorCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
303 KB
Source files
61
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
HarshithaS2023/berkeley_aihackathon
77 files · 2.3 MB · @ 3ab00ad
Structure
Interface
26 files · 34%Screens, components and styles rendered to the user.
Application logic
28 files · 36%Domain rules, services and shared utilities.
+2 moreData & schema
6 files · 8%Schema definitions, migrations and data access.
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
- TypeScript63%
- CSS21%
- Python11%
- SQL3%
- Markdown1%
- JavaScript0%
- Other (1)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 22- @excalidraw/excalidraw
- @supabase/supabase-js
- @tailwindcss/vite
- react
- react-dom
- react-is
- react-router-dom
- recharts
- tailwindcss
- zustand
- +12 more
requirements.txt
pypi · 7- anthropic
- fastapi
- httpx
- pydantic
- python-dotenv
- redis
- uvicorn
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.