Kleos
Voice-first PWA and web dashboard for NanoClaw. React 19 + Vite 7.
Kleos started as something else entirely — a standalone voice-first achievement logger backed by a local Ollama model. Epic 1 shipped: PWA shell, voice recording via WebSpeech API, auto-categorisation, IndexedDB persistence. It worked.
Then I realised the local Ollama was doing a weaker version of something NanoClaw already did better — with full knowledge base context, structured routing, and a year of accumulated memory. The voice capture and PWA infrastructure were good. The brain was wrong.
The pivot: strip the local AI, wire Kleos into NanoClaw as the official web client. Keep the voice. Keep the shell. Swap the backend. The same hold-to-speak interaction now sends the transcript to Lyra via SSE, and the response streams back with full markdown rendering.
Stack: React 19, Vite 7, TypeScript, TanStack Query 5, Zustand 5, Tailwind CSS 4 + shadcn/ui, Dexie.js (IndexedDB), WebSpeech API, Playwright + Vitest
Status: Epic 1 (foundation + voice capture) complete. Pivot epic scoped with full acceptance criteria. Blocked on the NanoClaw web API endpoint — nothing in the pivot moves without it.
Target state: Voice conversation with streaming chat, a sidebar KB dashboard (active tasks, current project, recent journal), and offline message queuing. Desktop and mobile Chrome as a PWA.