Wir hatten das Platzproblem selbst.
Herkunft
Vor Lagery haben wir Küchenartikel und Ordnungssysteme über Amazon FBA verkauft.
Bei FBA liegt der verkaufsfertige Bestand bei Amazon. Der Nachschub steht beim Händler, und bei uns stand er in einer angemieteten Halle in Hilchenbach, 142,5 Quadratmeter. Gebraucht haben wir davon knapp die Hälfte; die Ware ging im nächsten Schritt ohnehin an Amazon weiter. Bezahlt haben wir jeden Monat die ganze Halle.
Etwas Kleineres zu finden, hat nicht funktioniert. Auf den üblichen Gewerbeportalen standen ganze Einheiten, Teilflächen so gut wie nie, und was von der Größe her gepasst hätte, lag zu weit weg, um es regelmäßig anzufahren. Wir haben gesucht und sind in der zu großen Halle geblieben.
Dabei steht genug leer: Garagen, Scheunen, der halbe Gewerbepark am Ortsrand. Das Zeug ist nur nirgends gelistet, und wer es hat, vermietet es nicht in Portionen. Dem Nachbarn, der seinen Wohnwagen über den Winter unterstellen will, geht es damit genauso wie uns mit der Ware. An dem Punkt haben wir aufgehört, eine Halle zu suchen, und angefangen, die Software zu schreiben, mit der man beides findet.
Was wir bauen
Ein Marktplatz für Lagerraum und Stellplätze: vom Kellerabteil über die Garage bis zur Hallenfläche, von privat bis gewerblich und tageweise buchbar.
lagery.de besuchenDas Handwerk
Wir haben Lagery selbst geschrieben, und wir betreiben es selbst.
- 194HTTP-Endpunkte
- 1.600+automatisierte Tests
- 30Datenbank-Migrationen
Anwendung
- Backend
- Python, FastAPI, SQLModel
- Frontend
- Next.js, React, TypeScript
- Datenbank
- PostgreSQL mit PostGIS
- Schema
- Alembic, jede Änderung wandert als Migration mit
Karte und Medien
- Karte
- MapLibre GL, im Browser gerendert
- Kartendaten
- PMTiles-Archiv auf eigenem Speicher
- Objektspeicher
- S3-kompatibel, Cloudflare R2
- Bild-Uploads
- serverseitig neu kodiert, Metadaten entfernt
Zahlung und Recht
- Zahlungen
- Stripe Connect
- Rechnungen
- eigene Nummernkreise, PDF serverseitig erzeugt
- Stornierung
- Fristen, Rückerstattung, Korrekturrechnung
- Rechtstexte
- versioniert, pro Buchung festgehalten
Konten und Betrieb
- Passwörter
- Argon2
- Rate Limits
- auf allen schreibenden Endpunkten
- Monitoring
- Prometheus, Grafana, OpenTelemetry, Sentry
- Deployment
- Docker, GitHub Actions
Vier Entscheidungen
Karten ohne Google
Die Karte rendert MapLibre im Browser, die Kartendaten liegen als PMTiles-Archiv auf unserem eigenen Objektspeicher. Wer bei uns sucht, holt sich keine Kachel von einem fremden Server. Über eine fremde Karten-API entscheidet jemand anders, was sie kostet, wie sie aussieht und ob sie morgen noch da ist. Und für eine eingebundene Karte muss man begründen, warum sie ohne Einwilligung lädt.
Das Geld läuft an uns vorbei
Zahlungen laufen über Stripe Connect. Der Mieter zahlt, der Betrag liegt beim Zahlungsdienstleister, der Anbieter bekommt ihn ausgezahlt. Auf ein Konto von uns kommt er nie. Das ist eine Aufsichtsfrage: Wer fremde Gelder verwahrt, braucht dafür eine Erlaubnis.
Jede Buchung weiß, welche AGB galten
AGB, Datenschutzerklärung und Widerrufsbelehrung sind versioniert. Zu jeder Buchung liegt fest, welche Fassung galt. Melden Backend und Frontend unterschiedliche Stände, bricht das Deployment ab. Ein eigener Schritt in der Pipeline vergleicht beide Seiten.
Nichts geht ungeprüft live
Jeder Push läuft durch dieselbe Pipeline: Schwachstellen-Audit der Abhängigkeiten auf beiden Seiten, Typprüfung, über 1.600 Tests, Browser-Smoketests — und ein Migrationslauf auf einer leeren SQLite- und einer echten PostGIS-Datenbank. Eine Migration, die nur auf dem eigenen Rechner durchläuft, kommt nicht durch.
Diese Seite
Für einen Prospekt reicht HTML.
Hier gibt es nichts anzumelden und nichts zu bezahlen, also läuft die Seite ohne Konto und ohne Sitzung. Kein Framework, kein Build-Schritt, keine Cookies und damit auch kein Einwilligungsdialog. Die Schriften liegen auf unserem Server, nicht bei Google. Beim Aufruf geht keine einzige Anfrage an einen fremden Host. Ohne JavaScript bleibt alles lesbar; das Skript bewegt nur das Logo.
Lagery ist der andere Fall: eine Anwendung mit Konten, Buchungen und Zahlungen. Sie kommt ohne Cookies nicht aus und holt deshalb eine Einwilligung ein, nach Kategorien getrennt und einzeln abwählbar. Die Rechtstexte dazu tragen Versionsnummern.
- 0 externe Anfragen
- 0 Cookies
- 0 Abhängigkeiten
- 46 Zeilen JavaScript
Eine Content-Security-Policy lässt ausschließlich Skripte von dieser Domain zu, HSTS erzwingt HTTPS, das Einbetten in fremde Rahmen ist gesperrt. Wo man Sicherheitslücken melden kann, steht in security.txt.
Der Beleg
Wer fremdes Geld bewegt, zeigt seine Papiere. Hier sind unsere.
- Firma
- BundS GmbH
Marburger Str. 17
57223 Kreuztal
Deutschland - Register
- Amtsgericht Siegen
HRB 14185
Eingetragen am 10.03.2025
USt-IdNr. DE453665538 - Vertretung
- Seckin Hikmet Alkas
Geschäftsführer
einzelvertretungsberechtigt