Atlas

Personal project

Atlas

A self-hosted "life OS" — tasks, calendar, habits, finances, notes, training, goals and more — on the desktop and an Android phone, with everything shipped through its own CI/CD pipeline, a Dockerized public demo and uptime monitoring.

The demo gives you a private account with sample data — no sign-up, reset daily.

Atlas's Home screen: habits, balance, tasks, upcoming bills and the latest journal entry
2platforms: Windows and Android
13modules in one app
50releases with changelog
185database migrations
5CI/CD jobs on every push

The pipeline

Every push to main runs on clean GitHub-hosted machines. Nothing reaches users unless every check passes.

CI/CD pipeline: a push runs four checks in parallel; when all pass the demo is deployed. git push main / PR Frontend build Linux · bundle size budget Server + unit tests one migration head · 112 tests End-to-end Playwright · real server + browser Docker image build · run · smoke test Deploy demo only if all green Render + UptimeRobot

Continuous integration

Four jobs in parallel on every push: the web app builds on Linux (which catches file-name case bugs Windows forgives) and stays within an 800 KB startup budget; the server installs from scratch, its migrations form a single line and 112 unit tests pass; Playwright starts the real server on an empty database and clicks through the app; the demo's Docker image is built, started and smoke-tested like a visitor would use it.

Continuous delivery

Only a green main redeploys the public demo, through the host's deploy hook kept as a repository secret. A version tag (v*) builds the Windows installer and the Android APK and publishes them as a GitHub Release, with that version's section of the changelog as its notes.

Infrastructure as code

The demo is a two-stage Docker image (Node builds the web app, Python runs the server) that runs as an unprivileged user with a health check. The hosting is described in render.yaml, so it can be recreated from scratch; UptimeRobot checks /health every five minutes.

Architecture

Server

Python, FastAPI and SQLAlchemy over an SQLCipher database (encrypted at rest, unlocked with a master password), 185 Alembic migrations, background jobs, and a live sync socket so every device updates at once.

Clients

One React + Vite app, packaged two ways: Electron on Windows and Capacitor on Android, where the phone can host the whole server and the computer connects to it.

Works offline

On the phone, what was seen is cached and changes made without a connection wait in a queue, sent in order once the server is back; local data can be encrypted with a PIN.

Contact

Nicolas Lozano · LinkedIn · lozanonicolas.e@gmail.com