# ⚡ TECHNO-TODO 90s-Terminal/Cyberpunk-Style Todo-App. Bewusst als **Proof-of-Concept** gebaut, um den kompletten Selbsthosting-Workflow zu testen: **Gitea (Git) → Dokploy (PaaS) → Docker Swarm → Traefik → Live im LAN** ## Tech-Stack - **Runtime:** Node.js 22 (Alpine) - **Framework:** Express 4 - **Datenbank:** SQLite via `better-sqlite3` (bewusst statt PostgreSQL — siehe unten) - **Templating:** EJS - **Style:** 90s CRT/Neon-Look (grüne Scanlines, pinker Glow, monospace) ## Warum SQLite statt PostgreSQL? Die erste Version nutzte PostgreSQL über Dokploy's Datenbank-Provisioning. Dabei traten zwei Probleme auf: 1. **DB-Service wurde nie gestartet** — der `techno-db` Docker-Service existierte nicht, die App crashte mit `ECONNREFUSED` / `ENOTFOUND`. 2. Der Dokploy-Deploy-Worker hatte zusätzlich einen **abgelaufenen API-Key** und die Services waren **out-of-sync** (manuell umbenannt). Für den POC wurde daher auf SQLite umgestellt — **keine externe DB nötig**, die App ist in sich abgeschlossen. Für eine Produktiv-App mit echter Datenbank siehe [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md). ## Schnellstart (lokal) ```bash npm install npm start # → http://localhost:3000 ``` ## Schnellstart (Docker) ```bash docker build -t techno-todo . docker run -p 3000:3000 techno-todo ``` ## Dokumentation | Datei | Inhalt | |-------|--------| | [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md) | **Komplette Dokploy-Deployment-Anleitung** — nativer Weg (UI/API) + was tatsächlich gemacht wurde | | [`docs/AUTODEPLOY.md`](docs/AUTODEPLOY.md) | **Auto-Deploy-Pipeline** — Gitea-Push → automatischer Build + Deploy | | [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) | Alle Fehler, die beim POC aufgetreten sind, und ihre Lösungen | | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Netzwerk-Topologie und Infrastruktur-Übersicht | ## Live-URL ``` http://techno-todo.192.168.0.184.sslip.io/ ``` (Erreichbar aus dem Heimnetz `192.168.0.x`. Die öffentliche IP `152.53.197.186` routet aktuell nicht zu Dokploy — siehe `docs/ARCHITECTURE.md`.)