Project Info
Inspiration
Students are expected to manage classes, assignments, goals, notes, and AI chats across disconnected tools. Most assistants also forget who the learner is between sessions. Zipity is built around a simpler idea: one personal learning companion that grows with a student from the beginning of school through graduation.
What it does
Zipity is a local-first desktop learning companion that: creates a personalized learner profile during first-run onboarding organizes multiple subjects, assignments, and learning goals in one place remembers relevant learner context while keeping it scoped to the device owner streams clear, structured answers with headings, lists, tables, quotes, and code blocks supports fast voice conversations with ElevenLabs wakes hands-free when the student double-claps, then listens for a request uses the name Zipity throughout the product for a consistent companion experience The current demo profile is prefilled with realistic Grade 10 subjects and tasks so judges can explore the full workflow immediately.
How we built it
The desktop client uses Tauri 2, Rust, React 19, TypeScript, and Vite. A Rust/CPAL audio pipeline performs continuous low-overhead microphone analysis with an adaptive noise floor and double-clap detection. The backend uses FastAPI, PostgreSQL, and Redis, with typed contracts shared across the workspace. For the live assistant, Zipity uses Baseten to serve the GPT-OSS 120B model and ElevenLabs for speech. Responses stream into a safe structured renderer, while speech output receives a clean text-only version for natural delivery. How Codex and GPT-5.6 accelerated the build Codex with GPT-5.6 acted as the engineering partner across the build: it mapped the monorepo, traced the desktop-to-API request path, implemented the personalized onboarding and owner-scoped memory flow, hardened the Rust wake detector, redesigned the companion interface, generated the Zipity icon pipeline, and repeatedly ran the application to diagnose real microphone and desktop-runtime failures. The most important architectural decisions were made through those Codex sessions: keep identity and learning context explicitly owner-scoped instead of relying on one global chat history run clap detection natively in Rust for lower latency and more reliable Windows audio access separate display formatting from speech formatting so rich answers remain readable without making TTS sound robotic use frame-batched streaming updates to keep long answers smooth validate changes with API, UI, Rust, and production-build checks instead of stopping at generated code Codex also shortened the debug loop by inspecting logs, reproducing failures, editing across Rust/Python/TypeScript boundaries, and verifying each fix in the running desktop app.
Challenges we ran into
Reliable hands-free wake-up was the hardest problem. Real microphones have changing ambient noise, device contention, and very different clap signatures. We built adaptive thresholds, timing windows, diagnostics, and recovery paths rather than treating a clap as a fixed-volume spike. We also had to balance rich, structured assistant responses with low-latency streaming and natural speech. That led to a two-path renderer: safe Markdown-like presentation for the screen and stripped, speakable text for voice.
Accomplishments we're proud of
a working native desktop companion rather than a chat mockup personalized, owner-scoped context across many school subjects adaptive double-clap wake detection responsive streaming with structured, safely escaped answers an end-to-end voice loop using ElevenLabs broad automated coverage across the FastAPI service, React interface, and Rust desktop layer a cohesive, minimal visual identity built around Zipity's brain-and-lightning mark
What we learned
A believable AI companion is not only a model call. It needs identity boundaries, reliable input, useful long-term context, graceful failure states, and an interface that makes complex answers easy to scan. Native audio and streaming UI work also benefit enormously from tight observe-edit-test loops—the kind of workflow Codex enabled throughout this project.
What's next
Next we plan to add opt-in encrypted sync, a longitudinal learning graph, curriculum and calendar integrations, richer teacher/guardian controls, packaged installers, and a hosted backend so students can carry their context safely across devices.
Zipity
A fast, personal AI learning companion that remembers what matters and wakes with a double clap.
Zipity is a native desktop companion designed to grow with a learner from their first school years through graduation. It brings subjects, assignments, goals, context, voice, and an AI tutor into one focused workspace—without treating every conversation as a blank slate.
![]()
What Zipity can do
- Know the learner — first-run onboarding creates a personal profile; relevant context stays scoped to that device owner.
- Keep school organized — manage many subjects, assignments, and learning goals in one desktop app.
- Explain clearly — the assistant streams structured answers with headings, lists, tables, quotes, and code blocks.
- Talk naturally — optional ElevenLabs speech provides a fast voice loop.
- Wake hands-free — double-clap to activate Zipity, then speak a request.
- Stay responsive — native Rust audio handling and frame-batched answer rendering keep the experience smooth.
How it is built
| Layer | Technology |
|---|---|
| Desktop app | Tauri 2, Rust, React 19, TypeScript, Vite |
| Voice wake-up | Rust, CPAL, adaptive double-clap detector |
| API | FastAPI, Python 3.12 |
| Data | PostgreSQL + pgvector, Neo4j, Valkey/Redis |
| AI | Baseten-hosted GPT-OSS 120B |
| Speech | ElevenLabs (optional) |
Quick start
These instructions run Zipity locally on a developer machine. The desktop app is currently Windows-first; macOS and Linux contributors also need the normal Tauri system dependencies for their platform.
1. Install prerequisites
Install the following before cloning the repository:
- Node.js 22.13.1 and npm 10
- Python 3.12.9
- uv
- Rust 1.88
- Docker Desktop and start it
- On Windows: Microsoft C++ Build Tools / Windows SDK, as required by Tauri
Confirm the versions used by this project:
node --version
python --version
uv --version
cargo --version
docker --version
The repository pins its expected versions in
.nvmrc,.python-version, andrust-toolchain.toml.
2. Clone and install
git clone https://github.com/Subhradeep246/Fastlearner.git
cd Fastlearner
npm ci
uv sync --project services/api --locked
3. Configure local environment variables
Create your private environment file:
Copy-Item .env.example .env
Open .env and replace every value written as <...>. At minimum, set:
| Variable | What to provide |
|---|---|
POSTGRES_PASSWORD | Any strong local database password |
DATABASE_URL | Use the same PostgreSQL password in this URL |
NEO4J_PASSWORD | Any strong local Neo4j password |
AI_API_KEY | Your Baseten API key |
APP_ENCRYPTION_KEY | A long random secret used to protect local application data |
SESSION_SIGNING_SECRET | A separate long random secret |
For voice features, also set:
| Variable | What to provide |
|---|---|
ELEVENLABS_API_KEY | Your ElevenLabs API key |
ELEVENLABS_VOICE_ID | An ElevenLabs voice ID (a sensible default is included) |
ELEVENLABS_API_KEY is optional: the app still runs without speech synthesis. Keep all keys in .env; never commit that file or put secrets in a VITE_* variable.
4. Check the machine, then start Zipity
npm run local:check
npm run dev:local
The supervisor starts PostgreSQL/pgvector, Neo4j, and Valkey in Docker; applies migrations; seeds the demo data; starts the worker and FastAPI service; then opens the Tauri desktop app.
On first launch, complete onboarding or use the included demo learner profile to explore the full experience.
Using the companion
- Create or choose a learner profile during onboarding.
- Add subjects, assignments, and goals.
- Ask Zipity for explanations, plans, revision help, or a breakdown of an assignment.
- For hands-free mode, make two clear claps in sequence, wait for the wake confirmation, then speak your request.
Double-clap troubleshooting
The detector adapts to background noise, but physical audio devices vary. If it does not wake:
- grant microphone permission to the desktop app;
- select the intended microphone as the default Windows input;
- make two sharp claps about half a second apart;
- close other apps that may be holding the microphone exclusively;
- reopen Zipity after changing an audio device.
The app remains fully usable with keyboard input if the microphone is unavailable.
Useful commands
| Command | Purpose |
|---|---|
npm run dev:local | Start databases, services, migrations, seed data, and the Tauri desktop app |
npm run dev:services | Start only the backend services for headless development |
npm run local:check | Validate configuration and local tooling without starting services |
npm run api:dev | Run the FastAPI service directly for API debugging |
npm run db:migrate | Apply database migrations |
npm run db:seed | Seed the local demo data |
npm run ci | Run formatting, contracts, linting, types, tests, builds, and Rust checks |
npm run dev:reset -- --confirm delete-local-data | Delete all local Zipity Docker data and start fresh |
dev:resetis destructive: it removes the local PostgreSQL, Neo4j, and Valkey volumes. Only use it when you intentionally want to erase local development data.
Project layout
apps/
desktop/ Tauri + React desktop experience
web-dashboard/ Browser dashboard surface
crates/
wake-detector/ Native Rust audio capture and double-clap detection
services/
api/ FastAPI API, persistence, AI and speech integrations
packages/
contracts/ Generated API contracts
ui/ Shared UI components and onboarding flow
content/ Shared learning content utilities
infra/
docker-compose.yml Local PostgreSQL, Neo4j, and Valkey services
docs/
local-development.md Detailed local development notes
Privacy and local data
Zipity is designed around personal context. Profile and learning context are owner-scoped, and API keys remain server-side in the local environment. Running locally still sends prompts to the AI and speech providers you configure (Baseten and optionally ElevenLabs), so use only credentials and data you are comfortable sharing with those providers.
Contributing
Before opening a pull request, run:
npm run ci
For focused work, each workspace package also exposes its own build, typecheck, and test scripts. See docs/local-development.md for service lifecycle and recovery guidance.
Built with Codex, GPT-5.6, Tauri, FastAPI, Baseten, and ElevenLabs.
Analysis
View
Metric
- 7
- 6
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
- CSSIn code
- FastAPIIn code
- HTMLIn code
- PythonIn code
- ReactIn code
- RustIn code
- TypeScriptIn code
- DockerClaimed
- PostgreSQLClaimed
- RedisClaimed
7 of 10 appear in the indexed code. 3 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
1.0 MB
Source files
153
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Subhradeep246/Fastlearner
244 files · 3.4 MB · @ 3808062
Structure
Interface
8 files · 3%Screens, components and styles rendered to the user.
API & routing
70 files · 29%Request entry points: routes, handlers and controllers.
Application logic
33 files · 14%Domain rules, services and shared utilities.
Background jobs
7 files · 3%Work run outside a request: tasks, workers and schedules.
Data & schema
13 files · 5%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
- Python72%
- TypeScript10%
- Rust10%
- Markdown5%
- CSS3%
- YAML0%
- Other (2)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
apps/desktop/package.json
npm · 9- @fastlearner/ui
- @tauri-apps/api
- react
- react-dom
- +5 more
apps/web-dashboard/package.json
npm · 8- @fastlearner/contracts
- @fastlearner/ui
- react
- react-dom
- +4 more
services/api/pyproject.toml
pypi · 8- alembic
- fastapi
- httpx
- pgvector
- psycopg[binary]
- pydantic-settings
- sqlalchemy
- uvicorn[standard]
package.json
npm · 77 development-only dependencies.
apps/desktop/src-tauri/Cargo.toml
cargo · 5- serde
- tauri
- wake-detector
- +2 more
packages/ui/package.json
npm · 44 development-only dependencies.
crates/wake-detector/Cargo.toml
cargo · 1- cpal
packages/contracts/package.json
npm · 11 development-only dependencies.
tests/conformance/package.json
npm · 11 development-only dependencies.
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.