Hackathon project — Agents Track

A school attendance agent that closes the loop with guardians.

School funding depends on accurate attendance. Tracking time outside class is often incomplete and follow-up is manual. Ava connects the teacher dashboard, hall-pass iPad, policy backend, and outbound voice agent into one working loop.

Attendance Hall passes Policy engine Voice agent

The Problem

Attendance and hall-pass tracking are often disconnected. Teachers record absences. Students disappear for restroom breaks. Guardians are never contacted unless someone manually follows up. Ava was built to close that gap.

Funding risk

School funding is tied to attendance accuracy

Incomplete records create funding gaps and compliance exposure. Most schools have no automated way to flag patterns before they become problems.

Manual follow-up

Guardian outreach is inconsistent

When a student misses class or spends 40 minutes on a restroom pass, no one calls the guardian automatically. Ava does — in English or Spanish.

System Architecture

Four components share a single FastAPI/Postgres backend. The teacher dashboard and hall-pass iPad both drive real database writes. The outbound voice agent closes the loop with guardians.

Teacher Dashboard Attendance recording

React/TypeScript app. Teachers view rosters, record present/absent/excused/unexcused, and see live pass status via WebSocket.

Hall Pass iPad Time-out tracking

Same frontend app at a student-facing route. Students check out and back in. Pass events flow into the shared event stream instantly.

Ava Core Policy + alerts

FastAPI + Postgres + pgvector. Ingests attendance and pass events, evaluates policy thresholds, raises alerts, and queues guardian calls.

Voice Agent Guardian outreach

Node.js + OpenAI Realtime API. Calls guardians bilingually, asks for a reason, confirms, and records the explanation back to the datastore.

Key Flows

Teacher

Records attendance

Opens the dashboard, views today's class, and marks each student. Changes hit the backend in real time. Dashboards on other devices update via WebSocket without a reload.

Student

Uses a hall pass

Selects a destination on the iPad app. Ava saves the reason, start time, and student context. If the student isn't back in 15 minutes, an alert fires.

Ava

Evaluates and alerts

The dispatcher loop runs every N seconds. It detects overdue passes, raises alerts, and posts to the parent-comms endpoint. No manual trigger required.

Voice agent

Calls the guardian

Starts with a bilingual identity check. Guardian can answer in English or Spanish. Ava summarizes, confirms, and saves the explanation. Full transcript captured.

Tech Stack

Backend Python / FastAPI

Python 3.12, FastAPI, SQLAlchemy 2 async, asyncpg, Alembic, PostgreSQL 16 + pgvector, Pydantic v2. Real-time events via Postgres LISTEN/NOTIFY and WebSocket fan-out.

Frontend React / Vite

React 18, TypeScript, Vite 5, React Router, Tailwind CSS, lucide-react. Calls the Ava backend over /api/* and subscribes to live events over WebSocket.

Voice OpenAI Realtime

Node.js 20 ESM server, browser WebRTC audio, gpt-realtime-2, gpt-4o-transcribe, semantic VAD turn detection, Realtime function calling for excuse submission.

Policy Engine

Ava's policy layer uses pgvector for semantic search across policy documents and a rule expression evaluator for threshold-based alerts. The 15-minute restroom rule is the demo case, but the architecture supports arbitrary policy rules.

RAG

Semantic policy search

Policy documents are chunked, embedded with OpenAI, and stored in pgvector. Ava can find the relevant policy for any attendance or behavior pattern.

Rules

Threshold evaluation

Policy rules are stored as expressions. The evaluator runs against student timelines and raises typed alerts when thresholds are crossed.

Team

Built at a hackathon in 2025 by a four-person team across product, engineering, and AI.

Source code

The full implementation is on GitHub.

Includes the FastAPI backend, React/Vite frontend, outbound voice agent, Alembic migrations, pgvector policy search, alert dispatcher, and a quickstart.sh that brings up the full demo in one command.

View on GitHub →