Project lead, built end to end
Experiences: a voice agent students talk to
Students start a short voice session to log a campus visit or a college fair. The agent stays on goal, wraps up on time and saves structured notes to their profile.
The problem
Voice sessions lived inside counselor assigned conversations. A session a student starts on their own could not leak into chat lists, reminders or counselor dashboards, and speakerphone made the agent hear itself.
What I built
- Its own session type. A purpose field picks the prompt and the extraction schema, and sessions live in their own table, so experiences stay out of reminder sweeps and conversation lists.
- Paced by design. The agent wraps up at 5 minutes and stops at 10, and prompts can be edited without a deploy.
- Feeds matching for free. Notes reach college matching as text on the student's card, so the matching engine needed no change.
- Real WebRTC. As owner of browser voice, I moved it from a WebSocket relay to a real peer connection so echo cancellation works.
Result
Speakerphone calls went from the agent answering itself to clean turns, verified on a real iPhone, and the WebRTC move removed about 345 backend lines.
Built with OpenAI Realtime API, WebRTC, Next.js, FastAPI, Postgres
Student's browser or phone
Microphone with echo cancellation on
WebRTC peer connection, audio both waysOpenAI Realtime
Wraps up at 5 minutes, stops at 10
Tool callAddie API
- Guarded tool calls
- Extraction scoped to the session's purpose
Structured notesNotes on the student's profile
Feeds Addie's context in later conversations
