hilo
AI meeting assistant: uploads a recording, transcribes it with speaker diarization, and turns it into a structured summary, decisions, and action items — delivered to each teammate over WhatsApp.
The problem
Meetings produce a lot of talk and very little structured follow-up. Someone has to relisten, write the summary, figure out who owns what, and chase people afterward — and that someone is usually whoever cared enough to do it, not whoever should have. I wanted meeting output to become structured, queryable data automatically: who committed to what, by when, without anyone taking notes.
Decisions
Hexagonal architecture, not a script — hilo talks to four external services (transcription, LLM extraction, storage, messaging), each likely to change or need mocking eventually. Domain and pipeline logic don’t know these providers exist; every integration sits behind a port with a real adapter and an in-memory fake, so the whole pipeline runs and tests without touching a single external API.
AssemblyAI for transcription, webhook-driven — speaker diarization out of the box, and processing happens async via webhook instead of polling, so long recordings don’t block the request.
Gemini for extraction — summary, decisions, and action items come out of a single structured extraction pass. Each task is framed as a commitment: an owner, a due date, a status — not just a bullet point.
Orchestrator-tracked pipeline state — processing is a sequence of independent steps (transcribe → extract → persist → notify) coordinated by an orchestrator that tracks each meeting’s lifecycle state, laying the groundwork for idempotency and recovery from a failed step without re-running the whole pipeline.
WhatsApp for delivery, not a dashboard — the recap needs to reach people where they already are, personalized to what concerns them specifically, not a shared doc nobody opens. Postgres holds the structured record; WhatsApp Cloud API handles delivery per teammate.
Tradeoffs
No public repo — built with product intent, not as a portfolio exercise.
The architecture is scoped ahead of the current feature set: cross-meeting memory via vector embeddings (pgvector) and commitment tracking over time are designed for, not yet built.