- JavaScript 51.5%
- CSS 26.7%
- HTML 17.8%
- Dockerfile 2.1%
- Shell 1.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .gitignore | ||
| app.js | ||
| compose.hot.yaml | ||
| deploy.sh | ||
| Dockerfile | ||
| icon.png | ||
| index.html | ||
| manifest.webmanifest | ||
| nginx.conf | ||
| README.md | ||
| snorlax.png | ||
| styles.css | ||
sandra.tctcl.de
Eine kleine Grußseite für Sandra: Petrol, ein Snorlax-Wachdienst und eine Shell, die nur antwortet. Statisches HTML/CSS/JS, ausgeliefert von nginx in einem Container, gebaut und betrieben über Coolify.
Inhalt
| Datei | Zweck |
|---|---|
index.html |
Aufbau und Text |
styles.css |
Alle Tokens (Farben, Typografie) in :root; darunter keine Rohwerte |
app.js |
Snorlax-Bühne (Canvas), Shell, Tagesgruß, Hell/Dunkel, Ton |
snorlax.png |
Snorlax-Grafik (432 px breit, für 2x-Displays; lokal ausgeliefert, kein Hotlink) |
icon.png |
Favicon / Homescreen-Icon |
nginx.conf |
Auslieferung, Sicherheits-Header, /healthz |
Dockerfile |
nginx:alpine + Dateien |
Wie die Seite läuft (Hot-Reload)
Die Instanz ist ein Coolify-Service (sandra-static), der nginx:1.27-alpine startet
und zwei Host-Verzeichnisse einbindet:
| Host | Container |
|---|---|
/srv/www/sandra.tctcl.de |
/usr/share/nginx/html (read-only) |
/srv/conf |
/etc/nginx/conf.d (read-only) |
Dadurch gibt es keinen Build pro Änderung: Datei ändern, ./deploy.sh, fertig (~1,5 s).
Ein Redeploy des Service ist nur nötig, wenn compose.hot.yaml selbst geändert wird.
./deploy.sh # rsync -> /srv/www, nginx.conf -> /srv/conf
Die Konfiguration liegt als Verzeichnis-Mount im Container, nicht als einzelne Datei:
ein Datei-Bind-Mount hängt am Inode, und scp/rsync ersetzen die Datei — der Container
würde für immer die alte Fassung sehen.
Alternativ: eigenständiges Image
Dockerfile baut die Seite weiterhin in ein eigenes Image (für den Fall, dass sie mal
woanders laufen soll, ohne Host-Verzeichnisse):
docker build -t sandra-gruss . && docker run --rm -p 8080:80 sandra-gruss
Verhalten
- Tagesgruß richtet sich nach der Uhrzeit des Besuchers (Gerät, nicht Server).
- Licht schaltet zwischen
tagundabend; Startwert nach Uhrzeit, eigene Wahl wird inlocalStoragegemerkt. - Wachdienst: Tippen erzeugt einen schlafenden Snorlax an dieser Stelle (Wachstums-Animation, Atmen, aufsteigende „z“). Tippen auf einen Snorlax weckt ihn für gut zwei Sekunden: er wackelt, sagt „hmpf.“ und schläft weiter. Höchstens 10 gleichzeitig, danach verschwindet der älteste.
- Konsole: reine Browser-Shell.
help,ls,cat brief.txt,whoami,uptime,ps,snorlax,ping luke,sudo …,coffee,date,clear,exit. Pfeil hoch/runter blättert durch die Historie, Tabulator vervollständigt. Es gibt kein Backend: alle Antworten stehen inapp.js. - Ton ist standardmäßig aus; eingeschaltet gibt es pro Snorlax einen kurzen Ton (Web Audio, keine Audiodatei).
prefers-reduced-motionschaltet Animationen ab (Snorlax stehen dann still).
Kein Tracking
Keine Cookies, keine externen Requests, keine Fremdschriften, keine Analyse. Die Grafik liegt im Image, nicht auf einem fremden Server.
Hinweis zur Grafik
snorlax.png ist offizielles Pokémon-Artwork (Nintendo/The Pokémon Company) und
liegt hier für eine private Seite. Für eine öffentliche oder kommerzielle
Nutzung müsste die Grafik ersetzt werden.