The download button stays inactive until both fields agree and meet
the minimum length, so users cannot start export with a mismatch.
Co-authored-by: Cursor <cursoragent@cursor.com>
ZIP .daagbok files use a compact manifest and binary KDAB blobs so large
photo, voice, and GPS payloads no longer inflate in a single JSON file.
Co-authored-by: Cursor <cursoragent@cursor.com>
Record short E2E-encrypted audio attachments from the live log, link them to events via __live:voice markers, and play them back in the stream and chronological event table.
Co-authored-by: Cursor <cursoragent@cursor.com>
Correct owner detection while the logbook loads, preserve AI summaries on
live-log saves, skip corrupt entry decrypts, and never regenerate keys for
shared logbooks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Users see localized feedback when OpenWeatherMap or travel-day summary
features are used without connectivity, instead of generic API errors.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>