FrenchyBook
- Symfony
- Doctrine
- Turbo
- Stimulus
- AssetMapper
- SQLite
- Web Push
Ausgangslage
Eine Kölner Lesegruppe teilt ihre Bücher untereinander. Ohne zentrale Übersicht verliert man schnell den Überblick: Wem gehört welches Buch, wer hat es gerade – und seit wann?
Lösung
Gemeinsame Bibliothek als Mobile-first-Web-App: Bücher per Barcode-Scan mit der Handykamera erfassen (Daten von Open Library), Ausleihen anfragen und verlängern, Warteliste, Erinnerungen per E-Mail und Web-Push – komplett zweisprachig auf Deutsch und Französisch.
Architektur
So greifen die Teile ineinander – vom Handy bis zu den externen Diensten.
- Bücher & Cover
- Barcode-Scan
- Ausleihen
- Anfragen
- Warteliste
- Erinnerungen
- Mitglieder & Bezirke
- Deutsch / Français
Vorgehen
Die App sollte sich anfühlen wie eine echte Handy-App – ohne App-Store und ohne aufwendigen Frontend-Build – und für Menschen funktionieren, die keine Technik-Profis sind.
- Bücher per Handykamera erfassen: Der Barcode-Scanner (ZXing) liest die ISBN direkt im Browser, Titel, Autor und Cover kommen automatisch von Open Library. Eigene Fotos werden verkleinert, richtig gedreht und als WebP gespeichert.
- Ausleihen mit klaren Regeln: Anfragen stellen, annehmen oder ablehnen, Übergabe bestätigen, Rückgabe eintragen. Verlängern geht selbst um 14 Tage, höchstens zweimal und nur, solange niemand auf der Warteliste steht.
- Erinnerungen, die nicht nerven: zwei Tage vor dem Rückgabetermin und bei Überfälligkeit höchstens einmal pro Woche – per E-Mail und Web-Push, gesteuert von einem täglichen Cronjob.
- Wie eine App: als Progressive Web App auf dem Handy installierbar, Seitenwechsel ohne Neuladen dank Turbo, Dark Mode automatisch.
- Zweisprachig bis ins Detail: Jede Person wählt ihre Sprache, E-Mails kommen in der Sprache des Empfängers, und sogar Genres, Formate und Datumsangaben werden übersetzt.
- Geschlossene Gruppe: Registrierung nur mit Einladungscode, den die Verwaltung jederzeit erneuern kann.
- Betrieb ohne Sorgen: Deployment mit einem Befehl inklusive Backup und Rücksprung, nächtliche Sicherung von Datenbank und Covern (auch extern in Cloudflare R2), eine Statusseite „Läuft alles?“ in der Verwaltung und wöchentliche Paket-Updates per Dependabot.
Ergebnis
FrenchyBook ist bei der Bibliothèque Frenchie de Cologne im Alltag im Einsatz: Die Mitglieder stellen bis zu 20 Bücher pro Person ein, sehen auf einen Blick, wem ein Buch gehört, wer es gerade hat und in welchem Kölner Stadtbezirk es abzuholen ist – und leihen es sich mit ein paar Klicks.
- Mobile-first-Web-App, auf dem Handy installierbar wie eine App
- Bücher in Sekunden per Barcode-Scan erfasst
- Erinnerungen per E-Mail und Push statt Nachfragen in der Gruppe
- Komplett zweisprachig für eine deutsch-französische Community
Der Quellcode ist öffentlich auf GitHub.
Im Produktivbetrieb
FrenchyBook wird von einer echten Gruppe täglich genutzt – entsprechend ist der Betrieb aufgestellt:
- Eigener Server unter frenchybook.com, nur per SSH-Schlüssel erreichbar; fail2ban sperrt Passwort-Rater.
- Deployment mit einem Befehl: Vorher wird gesichert, dann laufen Composer, Migrationen und Asset-Build, anschließend prüft das Skript, ob die Seite antwortet. Ein Rücksprung auf jede frühere Version ist ebenfalls ein einziger Befehl.
- Nächtliche Backups von Datenbank und Buchcovern: 7 Tage auf dem Server, 30 Tage extern in Cloudflare R2.
- Statusseite „Läuft alles?“ in der Verwaltung mit dem Ergebnis des letzten Backups und einem Fehlerprotokoll.
- Täglicher Cronjob für die Erinnerungen; E-Mails über einen SMTP-Anbieter, Push-Nachrichten per Web Push.
- Wöchentliche Paket-Updates: Dependabot schlägt Composer-Updates vor, die vor dem Ausrollen geprüft werden.