Account deletion, key enrollment, and credential management use a separate 30/15min limiter so they are not left at 300/min while login and sync routes stay independent.
Co-authored-by: Cursor <cursoragent@cursor.com>
Forward X-Forwarded-For through frontend nginx, use TRUST_PROXY=1 for the Docker hop, and limit auth rate limiting to login flows only.
Co-authored-by: Cursor <cursoragent@cursor.com>
EventTimeInput24h switches to input type=time on touch devices while keeping dual selects on desktop for reliable 24h entry.
Co-authored-by: Cursor <cursoragent@cursor.com>
Global theme-aware scrollbar styling replaces the thin 6px event-table bar so long forms are easier to scroll on mobile.
Co-authored-by: Cursor <cursoragent@cursor.com>
Cache plaintext list metadata on entry save so the journal list avoids
full decrypt per row, and batch sync pull writes with main-thread yields.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extend dashboard search with ship name and crew name parts from local data.
When leaving a dirty travel day, offer save, discard, or stay instead of only leave/cancel.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevents failed app bootstrap from being marked as successful so the boot watchdog can continue recovery attempts instead of suppressing them.
Co-authored-by: Cursor <cursoragent@cursor.com>
Die Slider-Styles galten nur unter .tank-liter-input; MetricRangeInput nutzt dieselbe Klasse, lag aber in einem anderen Container.
Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a production boot watchdog to self-heal white/black-screen startup stalls without clearing IndexedDB data offline, reducing failure loops after frequent deploys. Also records watchdog recovery paths in Plausible and documents the new events/properties for monitoring stability.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ergänzt visibility in Editor und Live-Log inkl. OWM-Übernahme, CSV-Export
und touch-taugliche Slider für Luftdruck, Seegang, Sichtweite und Krängung.
Co-authored-by: Cursor <cursoragent@cursor.com>
Benutzerweiter Vessel-Pool (E2E, Sync, Migration von Legacy-Yachts) mit
LogbookVesselSelection und LogbookVesselPicker. Profil mit Accordion
(Flotte & Crew); Demo und Onboarding-Tour inkl. profile_vessel_pool.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prefer canonical skipper id and stop overwriting activeSkipperId during
legacy crew migration and read-only share conversion.
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy Prisma schema before npm ci in the builder image and skip
postinstall in the production stage since the client is copied from builder.
Co-authored-by: Cursor <cursoragent@cursor.com>
Match dashboard card DOM so entry tiles get correct height, remove nested
form-card chrome, and open today’s entry instead of creating a second one.
Co-authored-by: Cursor <cursoragent@cursor.com>
Harden geolocation with watchdog timeouts and permission checks so
desktop browsers without GPS no longer hang Live-Log. Show a hint to
log a position when none exists for the day.
Return 503 when crew-pool Prisma models are missing instead of crashing.
Co-authored-by: Cursor <cursoragent@cursor.com>