TRANSMISSION 013 · 16 JUL 2026 ARCHIVE: ZONE 1 — WEB APPS · CASE STUDY

TRAUTOK STATION: my personal dashboard running on Python stdlib and SQLite

The Weaver — build log
The TRAUTOK STATION dashboard: motivational panel, finances, weekly planning, journal
Fig. 1 — TRAUTOK STATION, the full command deck.

There's one screen I keep open more than any other. It isn't a product, it has no users, and it doesn't need to please anyone but me. It's the cockpit I check my day from — and like every tool I actually use, I built it to hold up: two files, no dependency I couldn't lose without going under. The construct calls it a station. I call it the place where I work out where I stand.

What a personal "command deck" is

The TRAUTOK STATION is a personal dashboard: a single page where everything that would otherwise be scattered across ten different apps comes together — a quote to start with, the things to do, my finances, the week, the journal, the map of the people who matter. I didn't build it to sell it: I built it because I needed one place to look at, and because I wanted that place to be mine in the most literal sense — code I understand, data sitting in a file I can open with my own hands.

It's a Zone 1 project in its most honest form: a tool born from a real problem, mine first of all. This is the build log of what's inside.

How it's built: two files and nothing else

The whole dashboard lives in two pieces, and the split is clean:

The seven panels

The interface is a CSS grid of seven panels, each self-contained:

Motivational transmission panel with a quote typed out in a typewriter effect
Fig. 2 — the Motivation panel: signal of the hour, a quote typed out like a typewriter.

The relationship map

The panel I'm proudest of is Family, and it's a real node map. In the middle sits the ME node; the people are arranged on a circle around it, joined by lines. The lines aren't decoration: the line style encodes the type of bond — solid for blood, dashed for in-laws, dotted for everyone else. On top of these there are free-form links from person to person, each with its own style.

Personal and family node map: ME at the center, people joined by lines of different styles
Fig. 3 — the relationship map. People's names are blurred for privacy: in the original, every node carries a name and a role.

The data flow (offline-first)

This is the part that really matters. The source of truth is SQLite[2], not the browser. The page's JavaScript never writes straight to localStorage: there's a single write point, persist(store, value), which first saves a lossless local backup and then, if the server is online, sends a PUT /api/<store>. Every save function goes through it.

On load, a GET /api/all fills all the stores (tasks, budget, journal, family) in one shot. If that call fails — say I opened the file via file://, with no server — the dashboard slips into offline mode: it shows a banner, lights up the DB offline badge and reads from the local backup. localStorage isn't the archive: it's the lifeboat. And if the DB is empty but a backup exists, the page re-imports it on its own, once.

root@survival:~$ arch --project trautok-station
> ui: 1 html file (css + js inline) · only external dep: google fonts
> server: python http.server + sqlite3 (stdlib) · localhost:8765
> truth: sqlite → data/trautok.db · localStorage = offline backup only
> api: GET /api/all · PUT /api/<store> (atomic replace)
> calendar: google, import lazy · missing → the rest lives

Why stdlib and no framework

The obvious question: why hurt yourself with http.server when there are frameworks that give you everything in three lines? The answer is the same one that runs through everything I publish here. A personal tool I use every day has to pass one specific test: if the third-party service disappeared, does the project live? With two files of pure standard library and one SQLite file, the answer is yes. Google Calendar can detach tomorrow and I lose a panel, not the station.

It's the principle behind the return to self-hosting applied on a small scale, and the same pact I made with myself when I started writing code with an agent: use the tools of the present, but stay able to survive their absence. A dashboard that depends on half the Internet isn't a cockpit, it's one more thing that can break.

Frequently asked questions

What stack does this dashboard use?

Two files: a trautok-dashboard.html with inline CSS and JavaScript (the only external dependency is Google Fonts) and a launcher.py that is an HTTP server built on nothing but the Python standard library (http.server + sqlite3). No framework, no bundler, no build step.

Where is the data stored?

In a local SQLite database, the file data/trautok.db. The browser's localStorage is used only as an emergency backup when the server can't be reached, not as the main archive.

Does it work without a connection?

Yes, in two senses. Everything runs locally, so you don't need the Internet to use it. And if I open the page without the server running, it goes into offline mode: warning banner, "DB offline" badge and reading from the local backup. The only piece that needs the network is the optional Google Calendar integration.

Zone note Zone 1 case study: a real tool, used every day, shown with the sensitive data blurred but without any mythology about the architecture.

I close the laptop and the station stays there, in its file of a few megabytes. No cloud to thank, no subscription that expires. May your cockpit survive the apocalypse — and above all, survive you forgetting about it.

Notes

  1. stdlib (standard library) — the set of modules that ship with Python without installing anything. Here the two pillars are http.server (a basic HTTP server) and sqlite3 (the interface to the SQLite database). Fewer external dependencies = fewer things that break over time. ↑ back to text
  2. SQLite — a relational database that lives in a single file on disk, with no separate server. The server opens one connection per request in WAL mode, which works with the multi-threaded server. ↑ back to text

// FROM THE SAME ZONE

TRANSMISSION 033 22 SEP 2026
ZONE 1 — WEB APPS · GUIDE

A channel that asks for nothing in return

Survival Apps has no newsletter. It has an RSS feed: no account, no tracking, no email list. Here's how it works and why.

TRANSMISSION 027 23 AUG 2026
ZONE 1 — WEB APPS · REFLECTION

What keeps a workshop standing.

Code only carries a project so far. Written by someone who recently sat down at the Officina bench.

TRANSMISSION 026 19 AUG 2026
ZONE 1 — WEB APPS · REFLECTION

The Law Always Comes Later

From seat belts to speed limits to today's AI Act: why the law meant to protect you from a technology always arrives years too late.