A scan of today's error log turned up two steady sources of 404 warnings. Both are now fixed.
EmulatorJS minified bundle. public/assets/emulatorjs/loader.js tries emulator.min.js + emulator.min.css first and falls back to loading eight individual source files when the minified pair is missing. The minified files had never been installed locally, so every emulator page hit produced two 404 warnings and an extra seven script requests on top. Installed v4.2.3 from cdn.emulatorjs.org into public/assets/emulatorjs/. Emulator pages now load the single bundle as intended.
Root-level favicon + apple-touch-icon. Browsers, iOS add-to-home, and RSS readers request /favicon.ico and /apple-touch-icon.png at fixed paths regardless of the <link rel="icon"> tag pointing at the branding asset. Those requests were 404ing all day. Added App\Helpers\FaviconHelper which derives a multi-resolution .ico (16/32/48) and a 180×180 PNG from the configured site_icon using Imagick. AdminBrandingController::updateBranding now calls it whenever the icon is uploaded, so /admin/branding stays the single source of truth.
Not a bug, FYI. The CSRF token validation failed warnings on /api/draft/save and /api/draft/delete are expected when a form is submitted from a tab that was open before a login or logout elsewhere — classic stale cross-tab token. The UI already catches this and surfaces a "Session expired — refresh to save drafts" toast. Logging stays at WARNING because the underlying event is a real security check firing.
. __ ____ ___ ____ _ _
/ /_| ___| / _ \___ \(_)___| |__
| '_ \___ \| | | |__) | / __| '_ \
| (_) |__) | |_| / __/| \__ \ | | |
\___/____/ \___/_____|_|___/_| |_|
D2sk - Sysop