Life Dashboard OS
Recommendations over dashboards, running only on your machine.
A personal operating system that answers one question: what should I focus on today. Single-user and local-first by design, with a typed contracts bridge as the only place its Python and TypeScript halves are allowed to meet.
- Problem
- Recommend what one person should focus on today across a local personal system.
- Constraint
- Local mode has no login and must never be deployed as though it were safe for multiple users.
- Decision
- Bind services to loopback, refuse production in local mode, and keep Python and TypeScript integration behind generated contracts.
- Evidence
- CI fails on OpenAPI-to-TypeScript contract drift and tests migrations plus idempotent event upserts against pgvector.
What it is
Recommendations over dashboards. Rather than rendering every metric it can reach and leaving the synthesis to you, it is built to answer the single question you actually opened it for.
A Next.js front end with Tailwind and shadcn/ui, a FastAPI backend and worker managed with uv, PostgreSQL 16 with pgvector, Redis for jobs, and LangGraph agents. The whole stack comes up under Docker Compose with no accounts, no sign-up, and no .env file needed.
The contracts bridge
- FastAPI
app.main— the API surfaceexported from FastAPI openapi.jsonpackages/contractstypes generated from it- Generated TS typescommitted, drift-checked in CI
- Next.jstyped client + read-only RSC reads
Local-first, and it enforces it
AUTH_MODE=local is the default and means there is no login. The API and web ports bind to 127.0.0.1 only, and local mode refuses to run with ENV=production — the app will not let itself be deployed in the configuration that assumes a single trusted user.
The full hosted path is not missing, it is dormant: the Clerk sign-in wall, owner-email allowlist, and JWT verification are built and tested, and setting the keys turns them on if the app ever moves to the web.
Quality gates
Schema changes go through Alembic and are never made by hand. CI runs on every push and pull request:
- web
- eslint,
tsc --noEmit, vitest, andnext buildin both auth modes. - api
- ruff check, ruff format --check,
mypy --strict, and pytest — including migration-cycle and upsert-idempotency tests against a pgvector service container. - contracts
- regenerate
openapi.jsonand the TS types, then fail on drift.
Where it stands
E2, the data foundation and contracts epic, is complete: schema v1 under Alembic with an idempotency constraint on events, automatic migration when the API container starts, the OpenAPI-to-TypeScript bridge with its CI drift check, and the server-component read path rendering seeded data.
Next is E3, the calendar connector, which needs Google Cloud setup, or E4, manual tasks, which has no external dependencies.