Case study · 01 / 06
LogPup
An internal engineering operations platform for Alta Vision — app portfolio, team capacity with burnout thresholds, kanban sprints, and AI meeting intelligence that understands both English and Sinhala.
- Running daily for Alta Vision teams in Colombo
- In production
- Bilingual meeting transcription via Gemini
- EN + සිංහල
- Amber and red-overflow burnout thresholds
- 80 / 100%
- Meetings reduced to structured notes only
- 0 audio stored

Context
Small engineering studios juggle project status, team allocation, sprint progress, and meeting follow-ups across disconnected tools, and overload tends to surface only after someone is already burnt out. Meetings at Alta Vision happen in a mix of English and Sinhala, which mainstream transcription tools handle poorly. LogPup consolidates all of it into one operational hub built around an "Engineers First. Zero Spyware" stance — daily outcome logging instead of keystroke tracking.
I designed and built LogPup end to end: the data model, the Server Actions write layer with role-gated authorization, the capacity and burnout visualization, the Gemini-powered bilingual meeting pipeline, and the "watchdog calm" design system. It runs in production for Alta Vision's teams in Colombo.
01
No REST layer — Server Components read, Server Actions write
Every read happens in React Server Components querying Neon Postgres through Drizzle, and every mutation is a Server Action returning a typed result. Role checks (admin vs member) are enforced server-side on every mutation, so the kanban board's drag-and-drop permissions aren't just UI hints. Optimistic updates keep the boards feeling instant while the action round-trips.
02
Capacity that goes amber before anyone burns out
Team members get allocation percentages per application, and the capacity bars shift from pine green to ember amber at 80% and to red overflow above 100%. The point is to make overload visible to the whole team before it becomes a resignation letter — paired with per-person contribution graphs and a Sri Lanka-aware calendar that knows Poya days and Mercantile holidays.
03
Bilingual meeting intelligence without storing audio
Meetings are recorded in-browser (mic or screen + mic) and transcribed by Google Gemini in mixed English and Sinhala. The pipeline extracts per-person notes, action items with deadlines, a software terminology glossary, and follow-up questions that resurface at the next meeting. Audio is never stored — only the structured output.
04
BYO Gemini keys, encrypted and pooled
Rather than a shared paid API key, each user registers up to five personal free-tier Gemini keys, stored with AES-256-GCM encryption under a dedicated secret. The system rotates requests across active keys when rate limits hit — engineering the pooling fairly was its own small scheduling problem.
Stack & architecture
- Next.js 16 App Router with React 19; Server Components for reads, Server Actions for all writes — no REST layer
- Neon Postgres via Drizzle ORM; nightly encrypted database backups on a cron
- Auth.js v5 with Google, Notion, and password sign-in, gated by allowed email domains
- Google Gemini for bilingual EN/Sinhala transcription and structured note extraction
- AES-256-GCM encryption for user-supplied Gemini API keys, up to 5 pooled per account
- Spotlight-style ⌘K command center with universal search and g+key navigation shortcuts
- One-way sprint export to Notion; role-gated drag-and-drop kanban with optimistic updates
- Tailwind v4 + shadcn UI; Vitest and Playwright for testing; deployed on Vercel
- Next.js 16
- React 19
- Drizzle ORM
- Neon Postgres
- Auth.js v5
- Google Gemini
- Tailwind v4