Build log

How Vectrium gets built.

One person, in production, since May 2026. The decisions that shaped the system — what I chose, and what it cost.

May 2026
Decision

Cutting the fork loose

Six weeks in, I threw away the fork I started from.

I began from an existing chat app to move fast. The architecture kept telling me what it wanted to be: chat as one mode among several, not a chat app with extensions bolted on.

No fork of 100,000 lines of someone else’s assumptions was going to get there. Rebuilding around rooms and activities was the best call on this timeline — and I made it early enough to matter.

May 2026
Architecture

Rust on the backend, deliberately

Realtime collaboration is where dynamic languages let you ship a race condition.

Several writers hit shared state at once. I picked axum and sqlx so queries are checked against the live schema at compile time.

It made prototyping slower. It was still right: a wrong column name fails the build instead of surfacing as a corrupted row three weeks later.

May 2026
Incident

Deploys that prove themselves

A hand-run container swap left the database unwritable for seven minutes — with every health indicator green.

That was the last manual deploy. The pipeline now stops the old container gracefully, checkpoints the write-ahead log, and gates rollout on a check that takes a real write lock.

Green means the system accepts writes, not that a port answers. Deploy verification is the part of this project I hold to the highest standard, because it guards everything else.

May 2026
Process

CI/CD, because two agents can clobber each other

Manual deploys work alone and fall apart with several agents working at once.

One agent’s rsync --delete could wipe another’s half-finished build, and a stale clone could quietly undo merged work.

GitLab CI made origin/main the only place changes come together. If a new image fails health checks within 60 seconds the previous one returns automatically — and CI still reports the failure, so nobody thinks it worked.

June 2026
Feature

Drafts, mentions, and the mobile surface

The stretch of work that makes a surface usable every day rather than merely functional.

Mentions that survive a round trip as real references rather than text, a drafting pane for longer writing, per-person read tracking, push notifications.

I built the phone experience properly instead of shrinking the desktop one. The room shell, the action sheets, and both editors are built for a phone — that’s where I read things when I’m away from my desk.

July 2026
Migration

SQLite to Postgres

Right call for the first two months, wrong one by the third.

Several agents writing concurrently against a data directory on a network mount is not what SQLite is built for.

I moved the careful way: port the schema, write to both databases and diff them, then cut over. CI now rejects the two migration patterns known to be destructive, so that class of data-loss bug is unwritable.

August 2026
Feature

Context bands for very long sessions

What you want from a huge transcript is what was decided, not what was said.

Long conversations now group into chapters with summaries, plus a bar tracking your position and an outline on desktop.

A thousand-message working session stays something you navigate instead of an archive you scroll past.