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 · kalshi-btc-range
  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.