- bootstrap/app.php: restore default Laravel exception logging. The diagnostic reportable() callback no longer returns false unconditionally it only suppresses default reporting when a reporter actually handled the exception, so storage/logs/laravel.log shows errors again on fresh installs. - Customer object creation: fix 500 when notify_recipients is empty (NOT NULL violation). Reconcile drift across migration/validation/form/lang: the field is now treated consistently as an enum (customer|object|both) matching the notification consumers; form uses a <select> instead of free-text input; validation tightened via in: rule; coercion in prepareForValidation keeps the DB invariant intact when the field is empty or missing. - config/app.php: version is now read from the VERSION file at runtime. The previously hardcoded '1.0.0' caused footer, settings, and dashboard to show a stale version after every release. VERSION is now the single source of truth for display. - Module catalog UI: fix render crash (htmlspecialchars on i18n category dict) and disappearing modules on 304 Not Modified responses. SchneespurModuleClient now has a normalizeModule() adapter that bridges server-side field naming (current_version, image_url, i18n category dict) to the internal shape used by controller and views. The catalog body is cached in state, so 304 responses replay the cached catalog instead of falling back to the semantically wrong "installed" list. - Module installer: strip common top-level prefix from module ZIPs to prevent modules/<slug>/<slug>/ double-nesting. The installer now detects whether all ZIP entries share one wrapper folder and strips it during extraction; flat ZIPs continue to work unchanged. Path-traversal validation runs on the original entry names before the strip, so the security guarantee is intact. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| schneespur | ||
| .gitignore | ||
| INSTALL.de.md | ||
| INSTALL.en.md | ||
| LICENSE | ||
| README.md | ||
Schneespur
Quelloffene, selbst gehostete Winterdienst-Dokumentation.
GPS-Tracks · Wetterdaten · Fotos · rechtsfester Einsatznachweis
schneespur.de · wintertrace.com
English · Installation (DE) · Installation (EN) · Download
Was ist Schneespur?
Schneespur dokumentiert Räum- und Streueinsätze für kleine Winterdienst-Betriebe — vollständig, automatisch und rechtssicher. Die Software läuft auf jedem günstigen Shared-Webhosting (Strato, IONOS, All-Inkl, ...) und braucht weder SSH noch Docker.
Kernversprechen: Wenn ein Passant auf einer gestreuten Fläche ausrutscht und der Betreiber nachweisen muss, dass er seiner Verkehrssicherungspflicht nachgekommen ist, liefert Schneespur den Beleg — mit GPS-Track, Wetterlage, Fotos und Zeitstempeln.
Funktionen
- GPS-Tracking via OwnTracks-App (iOS/Android) — kein eigener Tracking-Client nötig
- Automatische Wetterdokumentation — Temperatur, Niederschlag, Wind, Schneelage zum Einsatzzeitpunkt (Open-Meteo, BrightSky, Met.no)
- Foto-Dokumentation — Bilder direkt aus der Fahrer-App hochladen
- PDF-Einsatznachweise — einzeln oder als Sammelreport pro Kunde und Zeitraum
- Kundenportal — Kunden können ihre Einsätze selbst einsehen
- Fahrer-App (PWA) — funktioniert offline, synchronisiert automatisch bei Verbindung
- Kunden- und Objektverwaltung — mehrere Objekte pro Kunde, Zuordnung zu Einsätzen
- Fahrzeugverwaltung — Fuhrpark mit Kennzeichen und Fahrzeugtyp
- DSGVO-konform — Fahrer-Anonymisierung, Datenexport, konfigurierbare Aufbewahrungsfristen
- Automatische Updates — kryptographisch signiert (Ed25519), ein Klick im Admin-Panel
- Modulsystem — erweiterbar über Module aus dem Schneespur-Modulkatalog
Systemanforderungen
| Komponente | Minimum |
|---|---|
| PHP | 8.2 |
| MySQL | 5.7 / MariaDB 10.3 |
| Webserver | Apache mit mod_rewrite |
| PHP-Extensions | pdo_mysql, mbstring, openssl, gd, sodium, fileinfo |
| Speicherplatz | ca. 50 MB + Fotos |
Schnellstart
- Download der aktuellen Version (ZIP)
- ZIP entpacken und per FTP auf den Webserver laden
- Document Root auf den
public/-Ordner setzen - Im Browser die Domain aufrufen — der Installations-Assistent führt durch die Einrichtung
Detaillierte Anleitung: INSTALL.de.md
Tech-Stack
| Bereich | Technologie |
|---|---|
| Backend | PHP 8.2+ / Laravel 12 |
| Frontend | Blade + Alpine.js + Tailwind CSS v4 |
| Karten | Leaflet + OpenStreetMap |
| DomPDF (rein PHP, kein Chrome/Puppeteer) | |
| PWA | Workbox via vite-plugin-pwa |
| Wetter | Open-Meteo / BrightSky / Met.no |
Lizenz
Schneespur ist lizenziert unter der GNU Affero General Public License v3.0.
English
The international edition of this software is called Wintertrace. The branding is set during installation based on the chosen language.
What is Schneespur?
Schneespur (German) / Wintertrace (international) is an open-source, self-hosted winter service documentation platform for small snow removal and gritting operators. It runs on any standard shared web hosting (no SSH or Docker required).
Core promise: When a pedestrian slips on a cleared surface and the operator needs to prove they fulfilled their duty of care, Schneespur provides the evidence — GPS track, weather conditions, photos, and timestamps.
Features
- GPS tracking via OwnTracks app (iOS/Android) — no custom tracking client needed
- Automatic weather documentation — temperature, precipitation, wind, snow depth at the time of service (Open-Meteo, BrightSky, Met.no)
- Photo documentation — upload images directly from the driver app
- PDF proof-of-service reports — individual or batch reports per customer and time period
- Customer portal — customers can review their service records
- Driver app (PWA) — works offline, syncs automatically when connected
- Customer & site management — multiple sites per customer, assigned to jobs
- Vehicle management — fleet with license plates and vehicle types
- GDPR-compliant — driver anonymization, data export, configurable retention periods
- Automatic updates — cryptographically signed (Ed25519), one click in the admin panel
- Module system — extensible via modules from the Schneespur module catalog
System Requirements
| Component | Minimum |
|---|---|
| PHP | 8.2 |
| MySQL | 5.7 / MariaDB 10.3 |
| Web server | Apache with mod_rewrite |
| PHP extensions | pdo_mysql, mbstring, openssl, gd, sodium, fileinfo |
| Disk space | approx. 50 MB + photos |
Quick Start
- Download the latest release (ZIP)
- Extract and upload via FTP to your web server
- Set the document root to the
public/directory - Open the domain in your browser — the installation wizard guides you through setup
Detailed guide: INSTALL.en.md
Tech Stack
| Area | Technology |
|---|---|
| Backend | PHP 8.2+ / Laravel 12 |
| Frontend | Blade + Alpine.js + Tailwind CSS v4 |
| Maps | Leaflet + OpenStreetMap |
| DomPDF (pure PHP, no Chrome/Puppeteer) | |
| PWA | Workbox via vite-plugin-pwa |
| Weather | Open-Meteo / BrightSky / Met.no |
License
Schneespur is licensed under the GNU Affero General Public License v3.0.