A self-hosted personal OKR system with built-in time tracking, data integrations such as Fitbit, and a programmable analytics engine — write JavaScript or let AI write it for you.
What Makes RUOK Different
Most productivity tools give you a checklist. RUOK gives you a programmable system.
Plan at every level. Set yearly objectives, break them into monthly key results, plan weekly initiatives, and track daily tasks with a built-in time tracker. Everything rolls up — completing today's work moves the needle on this year's goals.
Query anything. Write JavaScript against your own life data — tasks, metrics, sleep patterns, activity levels, objective scores — in a sandboxed code editor. Render results as markdown, tables, or interactive charts. Use queries to power dashboard widgets and automatically score key results.
Let AI write the code. Don't know where to start? Describe what you want to see in plain English, and the AI assistant generates the query for you. Supports Claude, GPT, Gemini, local models via Ollama, and any OpenRouter provider.
Own your data. SQLite on your own hardware. No cloud accounts, no subscriptions, no telemetry. Export everything as JSON anytime.
Features
Multi-Level Planning
Set yearly objectives, break them into monthly key results, plan weekly initiatives, and track daily tasks with a built-in time tracker. Everything rolls up — objectives are scored automatically based on their key results, measured by manual sliders, checklists, or custom JavaScript queries that compute progress from your actual data.
AI-Powered Analysis
Query your own life data — daily records, tasks, time logs, objective scores, and more — in a sandboxed JavaScript editor with full autocomplete and interactive Plotly charts. Don't want to write code? Describe what you want in plain English and let AI write it for you. Save queries as dashboard widgets or use them to automatically score your key results.
Generate Custom Dashboard Widgets
Widget.mp4
Generate Queries for Key Result Scoring
2026-03-01.21-04-26.mp4
Play Around a Query in Query Builder
QueryBuilder2-small.mp4
Built in Time Tracker
Track time spent on any task, compare estimates against actuals, and query it all later in the analytics engine.
2026-03-01.18-01-47.mp4
Custom Metrics
Define what you track each day — numbers, times, booleans, or text you log manually, computed formulas derived from other metrics, and external data pulled automatically from plugins like Fitbit. Metrics are versioned, so you can change your tracking template anytime without losing historical data.

Plugins & Integrations
Connect external data sources via an extensible plugin system. Currently supported: Fitbit (sleep duration, bed/wake times, steps, resting heart rate, cardio load, readiness score), syncing automatically every hour via OAuth2. The Plugin Development Guide covers everything needed to add a new integration — it also doubles as an AI coding skill for Claude Code or Cursor.
Multi-User & Friends
Run a single instance for your family and friends. Each person gets a private workspace. Add friends to view each other's dashboards — see progress without exposing task details. Great for accountability partners or families sharing a home server.
Admin Tools
User management, query execution logs, security monitoring, and system configuration — all from the browser.
Desktop + Mobile
RUOK is a progressive web app — install it on your phone's home screen for a native-like experience, or use it in any desktop browser. One codebase, no app store, always in sync.
Quick Start (Development)
cd okr-app export ADMIN_USERNAME=admin # You still need to create this user export DATA_DIR=data npm install npm run db:push npm run dev
Opens on http://localhost:5180/.
Environment Variables
| Variable | Default | Description |
|---|---|---|
DATABASE_PATH |
/app/data/okr.db |
Path to SQLite database inside the container |
ADMIN_USERNAME |
(none) | Username that gets admin privileges on login |
Note that you still need to create the admin user.
Deployment
RUOK runs on modest hardware. A Raspberry Pi 4 with 2GB RAM is plenty.
| Guide | What it covers |
|---|---|
| Setup Guide | Raspberry Pi deployment with Docker, Caddy, HTTPS, DNS, backups |
| Maintenance Playbook | Reverse proxy configs, monitoring, troubleshooting |
| Query API Reference | Complete JavaScript query sandbox API |
Tech Stack
| Layer | Technology |
|---|---|
| Framework | SvelteKit 5 with Svelte 5 runes |
| Database | SQLite + Drizzle ORM |
| Query Sandbox | QuickJS (WebAssembly) |
| AI Providers | Anthropic, OpenAI, Gemini, OpenRouter, Ollama |
| Charts | Plotly.js |
| Code Editor | Monaco Editor |
| Auth | Session cookies + bcrypt |
| Deployment | Docker, systemd, or bare Node.js |
License
AGPL-3.0
