CV

Global Life Tracker

PersonalJun 2026 – ongoingSolo

A personal real-time dashboard built on an append-only event log, self-hosted and reachable only through a Cloudflare tunnel.

Context & objective

One dashboard to track my day-to-day life, reachable from anywhere, without opening a single port on my network.

What I built

  • A Vue 3 front end talking to a Node.js WebSocket back end in Docker.
  • An append-only event log in PostgreSQL: nothing is overwritten, and a pure JavaScript engine derives the live state from the events on demand.
  • Layered Compose files: one base stack plus dev, prod and proxy overlays.
  • A dedicated Caddy + cloudflared pair, so the app is only reachable through the Cloudflare tunnel, behind Cloudflare Access.
  • Documentation treated as part of the code: contract docs are the source of truth, with an index and a rule against stale Markdown.

Challenges

  • Hardening without breaking anything: no host ports, all Linux capabilities dropped, read-only root filesystem, non-root production image.
  • Checking the Cloudflare Access token at the WebSocket upgrade, not only on normal HTTP requests.
  • Local access: keeping it reachable from home through the tunnel despite my DNS wildcard rewrite.

What I learned

TODO(content): in your own words. Raw material: event sourcing, container hardening, Zero Trust access, keeping docs honest.