Inspiration
In a world filled with digital distractions, we wanted to build something minimal, focused, and intentional. Productivity tools today feel bloated, overstimulated, or too tied to screens.
We wanted something that is not overwhelming yet fun to build like a companion called navo (derived from Latin “navare” - to do best)
The inspiration came from three ideas:
- Reduce friction: productivity tools shouldn’t slow you down.
- Voice-first interaction: talking to a device is sometimes the fastest form of input.
- Simple and ambient: a tool that quietly supports you in the background, without screens fighting for your time.
(note: Although Navo is meant to be a mostly screen-free device, our prototype uses a desktop display due to time and budget constraints during development. In future iterations, we plan to replace with a compact integrated display such as an LED or e-ink panel to keep the experience minimal and self-contained.)
What it does
🎙 - Speak naturally and convert your voice to text using Whisper 🧠 - Get intelligent responses using local LLMs through Ollama 📝 - Create and manage notes with simple spoken commands ⏱ - Run Pomodoro sessions with real-time updates 🔊 - Hear replies instantly through ultra-fast Piper text-to-speech ⚡- See everything update live with WebSockets powering the UI 🖥 - Interact through a clean Svelte frontend running on the laptop
How we built it
We split the system into three tightly connected layers:
Backend (Go on Raspberry Pi)
- Built a Go server to handle all logic
- Integrated Whisper for speech-to-text
- Used Ollama for local LLM reasoning
- Added Piper for fast TTS output
- Implemented Notes + Pomodoro modules
- Created WebSocket endpoints for real-time communication
Frontend (Svelte on Mac)
- Built a clean, modern Svelte UI
- Displays timers, notes, activity, and status
- Receives live updates via WebSockets
- Uses MacBook's mic + speakers during development
Communication Layer
- WebSockets allow the UI and Pi backend to sync instantly
- Audio is streamed → Speech-to-Text → LLM → — - Text-to-Speech → output in milliseconds
- All interactions feel fast and connected
Together, these pieces form a full end-to-end productivity assistant.
Challenges we ran into
- Running AI efficiently on a Raspberry Pi: Whisper and LLMs can be heavy, so optimizing latency was a major challenge.
- Real-time UI syncing: Ensuring Pomodoro timers, notes, and assistant responses remained perfectly live required careful WebSocket design.
- Cross-device audio routing: Using the MacBook mic/speaker while the Pi ran the backend introduced networking and timing complexity.
- Coordinating three different AI engines: Whisper (STT), Ollama (LLM), and Piper (TTS) each have different response flows, so building a smooth pipeline took time.
Accomplishments that we're proud of
- Built a fully functioning voice assistant powered by local AI
- Achieved real-time communication between Pi backend and Svelte UI
- Integrated Whisper, Piper, and Ollama into one seamless pipeline
- Designed a minimal, intuitive productivity interface
- Implemented voice-controlled notes and Pomodoro flows from scratch
- Made everything run smoothly on low-resource hardware (Raspberry Pi)
What we learned
- How to build concurrent systems using Go
- Real-time communication patterns using WebSockets
- Optimizing AI inference pipelines on edge devices
- Using Svelte for lightweight, reactive UIs
- How hardware constraints force creative architecture decisions
The project combined hardware, AI, back-end systems, and front-end design into one cohesive experience.
What's next for Navo
We want to take Navo beyond a simple productivity assistant and turn it into a personalized, adaptive device powered by an MCP (Model Context Protocol) server. This would allow every user to have a version of Navo that learns their routines, remembers preferences, and adapts to their style of working.
Built With
- go
- html/css
- javascript
- linux
- ollama
- piper
- raspberry-pi
- rest
- svelte
- tts
- typescript
- websockets
- whisper
Log in or sign up for Devpost to join the conversation.