Self-hosted · PHP · SQLite
Wöchentliches Wiegen nach fester Regel, Wertung, Team-Rangliste und Aktivitätsminuten. Web-App auf PHP/SQLite – ohne Build-Pipeline, ohne Cloud, ohne Tracking. Läuft auf dem eigenen NAS.
Das Herzstück
Gewertet wird ein Wert pro Woche – deterministisch, nachvollziehbar, manipulationsarm. Der Algorithmus bildet aus rohen Messpunkten eine saubere Freitags-Zeitreihe. Interpolierte Werte werden im UI gestrichelt & grau markiert, damit nichts „verschwindet".
Absolute kg oder prozentualer Verlust – pro Season umschaltbar, damit Leicht- und Schwergewichte fair gegeneinander antreten.
Für Teilnehmer
Gewicht & Aktivitätsminuten in zwei Taps – direkt vom Dashboard oder Profil, mit dem letzten Wert als Vorschlag. Plausibilitätswarnung bei unrealistischen Sprüngen.
Beim Beitritt schlägt die App – passend zur Season-Dauer und zum Startgewicht – ein gesundes Ziel vor (antippbar, anpassbar, überspringbar). Ziel-Ring, Linien-Chart und Wochen-Balken zeigen den Fortschritt; interpolierte Werte sind klar markiert.
Ø-Tempo (kg/Woche), voraussichtliches Zieldatum und „Im Plan / hinter Plan".
Intensitätsminuten (mäßig ×1, intensiv ×2) gegen 150-Wochenziel. Der Apple-Watch-Ring schließt sich bei 100 % mit dezentem Glow.
Mess-Serie in Folge, zufällige Motivationssprüche – am Wochenende mit Wiege-Reminder.
Live-Standings (kg oder %). Sichtbar ist nur die Veränderung – nie das absolute Gewicht.
Eigenes Verlaufs-Dashboard mit Ziellinie. Foto hochladen – oder automatische Geschlechts-Silhouette (♂ / ♀ / divers), wenn kein Bild gesetzt ist.
Optional per Fingerabdruck, Face ID oder Windows Hello anmelden – zusätzlich zum Passwort, mit einem Tipp und ohne E-Mail-Eingabe. Die Biometrie verlässt das Gerät nie; gespeichert wird nur ein öffentlicher Schlüssel (WebAuthn/Passkey).
Ein Fortschrittsbalken zeigt, wie viel der ganze Club zusammen abgenommen hat – mit Ziel-Marke (von der Orga setzbar, sonst automatisch).
Der größte Drop der Woche wird gefeiert, und „Diese Woche im Club" sammelt geknackte Meilensteine und Streaks – alles live aus den Daten.
−kg-Marken, Aufholjäger (starke Woche), Frühaufsteher (Freitag vor 9 Uhr) und Eiserne Konstanz – erscheinen automatisch auf dem Dashboard.
7 Themes pro Nutzer – färben auch die Diagramme. Auswahl im Profil.
„Zum Homescreen", App-Icon, Offline-Fallback über einen Service Worker – kein App-Store nötig.
CSV-Export der Messwerte, JSON-Komplettexport, Konto-Selbstlöschung.
Für Admins
Anlegen, bearbeiten, archivieren – mit Überschneidungsschutz, sodass zu jeder Zeit genau eine Season läuft. Wertung pro Season: absolut oder prozentual.
Token-Links pro Season (regenerierbar), Teilnehmer per Klick zuordnen. Beitritt nach Login automatisch.
Pro Season festlegen, wie weit Nutzer rückwirkend ändern dürfen: nur laufende Woche, + Vorwoche oder alles. Gilt für Gewicht & Aktivität.
Admins bearbeiten/löschen jeden Wert (season-gefiltert) – jeder Eingriff landet revisionssicher im Änderungs-Protokoll.
Download als .sqlite für 1-Klick-Restore oder als menschenlesbares .sql. Import per Upload. Profilbilder liegen in der Datenbank und sind im Backup enthalten.
Start-Passwort als merkbare Passphrase (hafen-tiger-47), erzwungener Wechsel beim ersten Login, schlanker 3-Schritt-Assistent (Geschlecht, Farbe, erstes Gewicht). Das persönliche Ziel wird passend zur Season-Dauer erst beim Beitritt gesetzt.
Toleranz für unrealistische Gewichtssprünge global einstellbar (Grundtoleranz + Zuschlag pro Tag) – mit Live-Vorschau, gültig für alle Seasons.
Druckbare Zusammenfassung jeder Season – Podium, Team-Summe, Auszeichnungen und Endstand. Direkt als PDF speicherbar, erreichbar über das Archiv.
Unter der Haube
Kein Node, kein Bundler, kein Build-Schritt: 26 PHP-Dateien (~7.500 Zeilen Code), eine SQLite-Datei und zwei CDN-Skripte fürs Frontend. Deploy heißt Ordner kopieren; Schema-Migrationen laufen idempotent beim ersten Request.
# Kompletter Deploy: $ scp -r php-app/ nas:/web/dropclub $ ls php-app/ index.php profile.php admin.php einstellungen.php changelog.php admin_entries.php archiv.php media.php login.php onboarding.php join.php goal.php report.php db.php helpers.php layout.php webauthn.php passkey.php passkey.js manifest.webmanifest sw.js icons/ # Abhängigkeiten installieren: $ — keine — # Datenbank-Setup: $ läuft automatisch beim 1. Request ↳ Schema + idempotente Migrationen
Season-Zuordnung der Messwerte ergibt sich aus dem Datum – Single Source of Truth, keine redundanten Fremdschlüssel.
Account vom Admin holen, Einladungslink öffnen, Freitag wiegen. Der Rest ergibt sich.
Zur Anmeldung