Zum Inhalt springen
~/jeremy-thelen
Live im Einsatz Community-Projekt · Bibliothèque Frenchie de Cologne

FrenchyBook

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.

Oberflächen
Web-App (PWA)Turbo · Stimulus · Service Worker
VerwaltungMitglieder · Einladungscode · Status
BenachrichtigungenE-Mail · Web-Push
Anwendung · Symfony 7.4
  • Bücher & Cover
  • Barcode-Scan
  • Ausleihen
  • Anfragen
  • Warteliste
  • Erinnerungen
  • Mitglieder & Bezirke
  • Deutsch / Français
Daten & Hintergrund
SQLite / MySQLDoctrine ORM · Migrations
Cover-SpeicherWebP · LiipImagine
CronjobErinnerungen täglich
Externe Dienste
Open LibraryBuchdaten & Cover zur ISBN
Cloudflare R2Nächtliche Backups

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.

Zurück zu den Projekten