Skip to content
All work

Life Dashboard OS

Recommendations over dashboards, running only on your machine.

Personal software · Local-firstE2 complete · E3 nextPublic repositoryUpdated 20 Aug 2026
View source

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.
Next.jsFastAPIPostgreSQL 16pgvectorRedisLangGraphDocker

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

  1. FastAPI
    app.main — the API surface
    exported from FastAPI
  2. openapi.json
    packages/contracts
    types generated from it
  3. Generated TS types
    committed, drift-checked in CI
  4. Next.js
    typed client + read-only RSC reads
The only place the Python and TypeScript worlds meet. CI regenerates both artifacts and fails the build when the committed output has drifted from the live API surface.

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, and next build in 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.json and 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.