v1.0.5 — Bugfix wave (manual job form, branding, GDPR-EN)
What's new
Collected release after feedback from the test installation. Seven independent issues — from a form breaker to translation gaps to log hygiene. No critical hotfix like v1.0.4, but "enter job manually" had been broken since v1.0.3 — if you use it actively, you should install this.
Changes
fix(jobs): manual job entry works again
The form (admin and driver view) broke the HTML attribute as soon as a customer name contained a " — @json($allObjects) inside an x-data="..." attribute emits raw JSON whose quotes terminate the attribute. Visible as raw Alpine code in the browser; result: Alpine didn't initialize and the "Create" button did nothing.
Switched to {{ json_encode(...) }} — Blade's HTML escaping (") survives the attribute cleanly, and the browser unescapes on parse. Both manual-job forms fixed.
feat(i18n): :app_name is substituted globally and automatically
A new BrandedTranslator (extending Laravel's Translator) injects :app_name as a replacement variable into every __() call — bound via app->extend('translator', …), because Laravel's TranslationServiceProvider is deferred and a plain singleton() override would be overwritten.
Help texts, update strings, and mail templates now render Schneespur / Wintertrace correctly everywhere instead of raw :app_name. Code no longer has to set ['app_name' => brand()] explicitly.
feat(gdpr): EN default template for Wintertrace installs
A new dsgvo/default-template-en.blade.php with UK/EU GDPR wording — Art. 6(1)(f), ICO note, full subject-rights enumeration (Art. 15–22). Both GDPR controllers now load locale-aware (dsgvo.default-template-{locale} with a German fallback).
Placeholder replacement ([Firmenname eintragen], [Company name], …) knows both languages via a new helper dsgvo_apply_company_placeholders() — with de-duplication along the way.
Existing EN installs with an already-saved (German) template must regenerate it manually in the GDPR admin UI (or delete the dsgvo_template_markdown setting).
ui(settings): icons for all settings cards
Previously only the module card had an icon; the others were text-only. All 8 cards now have matching Heroicons (branding, email, log, company, retention, weather, update, modules). The Blade was rebuilt around an array-driven loop.
chore(modules): example module removed from the release
The example module was meant as a demo, but it shipped with every customer install and loaded automatically — with a nav entry, dashboard widget, and settings page, and no way to disable it.
Three layers of defense:
build.shexcludesmodules/example/from the release ZIPExampleServiceProvider::boot()is self-gated viaenv('EXAMPLE_MODULE_ENABLED', false)ModuleManager::boot()skips theexampleslug by default (also covers an oldexample/folder left over from 1.0.4)
Devs can still enable it locally with EXAMPLE_MODULE_ENABLED=true in .env.
chore(logging): less log spam + daily rotation
ModuleManager wrote a Log::info for every "discovered" and "booted" on every request — with several modules that quickly became several MB per day in laravel.log. Dropped to Log::debug (filtered out in production with LOG_LEVEL=warning).
New defaults in config/logging.php and .env.example:
LOG_STACK=daily(file rotation, old files auto-deleted)LOG_LEVEL=warning(no more spam in production)LOG_DAILY_DAYS=14(two-week retention)
Important for existing installs: the existing .env still has LOG_STACK=single and LOG_LEVEL=debug set explicitly — the new default only applies when the variable is absent. Adjust .env manually for immediate effect.
fix(install): hardcoded German error message
InstallerController::processPreflight() threw a hardcoded German withErrors() message instead of a __() call. Switched to __('install.preflight_has_failures') — the EN installer now shows correct English.
Upgrading from v1.0.4 (auto-update works)
- In the admin, "Check for updates" → v1.0.5 is offered
- Click, done — no DB migration needed
- Optional: adjust
.envfor the new log defaults (see above)
Upgrading from v1.0.3 or older
Manual upload recommended — the self-updater in v1.0.2 and v1.0.3 had bugs (see the v1.0.4 release notes).
- Download the ZIP, extract locally
- Copy the contents over the existing installation via FTP
- Do not overwrite
.envandstorage/app/installed.lock - Optionally on the server:
php artisan view:clear && php artisan config:clear
Requirements
- PHP 8.3+ with
ext-sodium,ext-pdo_mysql - MySQL/MariaDB 10.6+ or PostgreSQL 13+
- Web hosting with write access to
storage/andbootstrap/cache/