Skip to content
All work

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
Screenshot of LogPup

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

Where it stands

Commits
922
Started
Aug 2026
Last push
Aug 2026
Status
In active development