The portal

I taught AI to run my life.

Axiom is my second brain, built as a private operating system. It keeps my journal and my plans, remembers what I tell it, reconciles every dollar — and trades my accounts while I sleep.

Named for the ship in WALL·E — the one that runs itself so well its passengers stop steering. Auto and Eve live aboard.

n8@axiom
$ systemctl status axiom.service
● axiom.service, personal operating system
  Active: active (running) · restarts: 0
  Agents: journal-insight · routines-dispatch · equities-orb · sleeve-gate
  Feeds:  journal · calendar · health · brokerages · prediction markets
$ tail -f /var/log/axiom.log
[ok] digest sent · routines dispatched · risk gates green · edge required, none found, standing by

01The domains

Four things it watches.

The second brain

A journal that remembers, a planner that reschedules instead of scolding, habits and life metrics measured with honest denominators. This half is the point; everything else reports into it.

Life

Travel, health, collections, study. These sat on the same footing as the trading systems from the start — a design rule, and in hindsight the tell for what the whole thing actually was.

Money & markets

Brokerages, banks, retirement and crypto pulled into one nightly ledger — and trading engines gated so that no measured edge means no trade. The whole trading layer is Eve.

Eve→

The brain

One agentic surface over all of it: a live map of every dataset the system can see, and a command bar that turns a sentence into a view. That is Auto.

Auto→

02The stack

How it is built

What runs it
Next.js on the App Router, deployed to AWS with SST. Server components by default, streaming responses on the slow paths, and a PWA shell so it installs to a phone home screen.
Where the state lives
One PostgreSQL database on Supabase. Schema, migrations, row-level security and stored procedures are all versioned in the repo, and nothing reaches production without a migration.
What wakes the agents
Scheduled Lambdas on EventBridge, plus a webhook-to-queue-to-worker path for anything a third party pushes. Row-level locking guarantees exactly-once processing across concurrent invocations.
How it reports
Web push to a phone, Slack for the trade tape, and a morning digest. The design target is that I never have to open the portal to know whether it had a good night.

03The boundary

It holds real money, so it fails closed.

  • The portal is invite-only and gated on an owner allowlist. Every mutating route fails closed on an unknown user, and non-owner sessions are rejected even when signed in.
  • The database is reached with a service-role client that bypasses row-level security, so the code path is the boundary, not the policy. That is the reason Auto can never issue raw SQL.
  • Cron endpoints authenticate on a shared secret compared in constant time, and a route that serves both cron and browser traffic picks its check per branch rather than trusting one for both.

04The invitation

Build something
that runs without you.

Type it here — it lands on my dashboard and pages my phone.