Skip to content

Personal operating system, In daily use

Life OS

One database for a whole life: journal, goals, contacts and work, with a private app, a public site that only shows what has been published, and an AI assistant that can file things but never publish them.

Role
Product, design, build and infrastructure
Built with
Next.js, TypeScript, PostgreSQL, Supabase, MCP, GitHub Actions
Reading time
2 minutes

Why it exists

My day job is writing proposals for public-sector contracts in the United States: deadlines that do not move, documents that have to agree with each other, and a lot of people to keep track of. My own life was spread across as many places as my work — a journal in one app, goals in another, contacts in a third, the proposal pipeline in spreadsheets. Nothing could see anything else.

Life OS is the answer I built for myself: one place where a whole life sits as records, so that anything can be found, linked to anything else, and reused rather than rewritten.

One spine, two surfaces

Underneath is a single table of records. A journal entry, a goal, a contact, a role on my résumé, a case study, a training session and a proposal in the pipeline are all the same shape, with a kind and a body. That is the spine. Two surfaces read from it: a private app that only I sign in to, and the public website, which never touches the private database at all.

Publishing copies a record into a separate public store. The rule that only I can publish is not a promise written in the code; it is enforced by the database's own grants, so no script, agent or automation can write to the public store even by mistake. The old public site followed from that: nothing written in the page, every claim read from a published record.

Work Mode

The part I use every day is Work Mode, the proposal tracker. Each pursuit moves through pipeline stages and carries its own tasks, and its progress comes from the stage it has reached rather than from a checkbox someone remembered to tick. Only I can mark a task done. Anything else that works on a task can take it as far as waiting for my confirmation, and no further.

An assistant with limits

Life OS speaks MCP, the protocol AI assistants use to reach tools, so an assistant can use it as its memory and its rulebook. I run one that is always on, reachable from my phone. It can read everything, capture a thought, triage the inbox, plan tasks and write my weekly review.

The interesting design work was deciding what it must never be able to do. It cannot delete, cannot publish and cannot mark anything done, and those limits are not instructions it could talk itself out of: it signs in with its own database login, which the database always treats as an agent. Every change it makes is attributed to it and can be undone.

Free to run

There is no funding behind any of this, so it runs on free tiers. Backups are taken every day by a scheduled job; an email digest of what is waiting goes out on a schedule the database itself keeps. The small server the assistant lives on is the one recurring cost.

What it taught me

Mostly, discipline about truth. When a fact lives in one place, every screen that shows it agrees by construction. When it lives in two, one of them is already wrong. I learned to check what is actually running before believing what the documentation says about it — the documentation is usually the copy that drifted.

Worth a second look