← All projects
internalInternal Toollaunched Jan 2026

Admin Portal

One screen for the whole VPS

Internal control panel for every Docker app on the VPS — container status, logs, SSL certs, secrets vault, project links — sitting behind email + 2FA. The piece of infrastructure that makes the rest of the portfolio cheap to run.

problem

`ssh` and `docker compose` are fine until you have a dozen apps. After that, repetitive operations belong in a UI: restart a container, rotate a key, check who is paged when an SSL is expiring.

solution

Flask app that talks to the Docker socket, Traefik dashboard, and a small credential vault. Email-based login with PIN-based 2FA, full audit log, and one-click restart per service.

architecture

containersrouters/SSLauditDocker socketTraefikFlask adminSQLiteWeb UI

external → compute → store → ui

outcome

Restart, redeploy, view logs, rotate secrets — all from one tab, with the same auth wall in front of every action.

stack

PythonFlaskDocker APITraefikDocker

capabilities

  • Container status, logs, restart
  • SSL certificate monitoring
  • Credential vault with audit log
  • Email + PIN 2FA
  • Project quick-links (tutorials, repos, dashboards)

lessons learned

  • 01The internal admin tool justifies itself the first time you avoid SSH at 11pm.
  • 022FA at the app level is enough — making it the only path means there is no "easy" backdoor to forget about.
  • 03The credential vault is the single most-used feature, by a wide margin. Worth investing in.
← All projects