Personal projectAI assistant

Nina

A personal AI assistant that lives in WhatsApp. She remembers what matters, runs routines on a schedule and takes calls, all on a private server.

Nina product mockup
RoleProduct Owner and builder
TimelineOngoing
PlatformWhatsApp, voice and web dashboard
StatusRunning

At a glance

What I owned

  • The product: what Nina is, who she serves, and what she is allowed to do
  • The dashboard build specification, written to direct an AI coding assistant, and its second revision
  • The API contract between the dashboard and her server, including the async pattern
  • Acceptance criteria and failure handling for every screen

Three decisions that shaped it

  1. Every slow operation returns an id at onceA full agent turn takes 10 to 60 seconds, so the interface sends, receives a ticket and polls. Nothing blocks on a long request.
  2. Memory is a session, not a feature of the pageWithout a stable session id, every message is a new conversation. The spec makes sending it a hard requirement.
  3. The browser never talks to her server directlyRequests pass through the dashboard's own server, over a private network. No public endpoint, no CORS, no keys in the browser.

What Nina does

  • Nina answers on WhatsApp by text, voice note and call, and remembers across conversations.
  • She runs scheduled jobs on her own and delivers the results to WhatsApp.
  • Her owner can read and rewrite her memory, change her tone and voice, and pause any job.
  • The whole system is observable: services, load, tokens and tool calls on one screen.

Why it mattered

Most assistants live in someone else's app, on someone else's server, with no way to see or correct what they remember. I wanted one that lives where I already talk, runs on a server I control, can speak and call, and can be inspected and corrected by a person who is not a developer. That meant designing for slow agent turns, private networking, editable memory and clear failure, not just a chat box.

Tech stack

The technologies and services behind Nina.

Dashboard

  • Next.js 15App Router
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • React MarkdownMemory view

Agent and server

  • Hermes agentGateway and voice services
  • Google GeminiModel and voices
  • LinuxPrivate server
  • Node.js 20+Dashboard runtime

Network

  • TailscalePrivate network

Channels and services

  • WhatsAppText, voice notes, calls
  • GmailInbox and digest
  • SpotifyWeb API

Film

  • RemotionVideo from code
  • React

How Nina works

The product, the architecture, the contract and the build spec behind a personal AI assistant. Written from the dashboard source, the specifications and the running system.

What Nina is

Nina is a personal AI assistant that lives in WhatsApp. You text her, send a voice note, or call her. She remembers what matters, runs routines on a schedule, summarises every call, and can place a real WhatsApp call. She runs privately on her owner's own Linux server, and a web dashboard gives her owner control without needing to be a developer.

Channels
WhatsApp text, voice notes and calls
Agent
Hermes agent framework, behind a gateway service
Server
Private Linux host, reached over Tailscale
Interface
Next.js dashboard over a 22-endpoint JSON API
Her overview screenStatus, voice, activity, automations, memory and services at a glance.
3Services supervised: gateway, WhatsApp voice, dashboard API
14Selectable voices, with a preview for each
4Scheduled jobs on cron expressions
2Memory documents with hard character limits

Counts read from the running instance. No conversation, contact or call content is reproduced.

Where she shows up

WhatsApp

The primary surface. Text, voice notes and calls reach the agent through the Hermes gateway and a dedicated WhatsApp voice service.

Dashboard

The control panel: chat, voice and tone, memory, contacts, calls with transcripts, jobs, music and system health.

Standby and wake

The dashboard dims when idle and wakes on movement, or on a double clap if the owner turns that on.

Meet Nina

A one-minute film I made myself with Remotion to introduce her.

Made by me with Remotion, which builds video from code.

Notice

Nina is a personal project. Names and logos of third-party services and technologies, including WhatsApp, Google Gemini, Gmail, Spotify, Tailscale, Remotion, Next.js and React, are trademarks of their respective owners. They appear only to identify the technologies used, and no endorsement is implied.

Dashboard screens are blurred where they contained personal content.

Oxford Management Consultancy

View case study