Cross-platform parity sweep

Cross-platform cleanup

  • Spent the day closing a lot of web/Android alignment work: 24 Linear issues done, mostly making both clients behave like one product rather than two near-matches.
  • On the web, landed the shared LoadFrame with retry states, in-app confirm dialogs, infinite scrolling, a pageable notification inbox, and better failure handling for settings, onboarding, uploads, summaries, and the entry page.
  • Tightened the responsive shell too: rail from 600px, two-pane view from 960px, contrast-safe controls, and Android-matching list, calendar, card, and snackbar details. JRNL-915 and JRNL-921 were the big foundation pieces.
  • Finished the first pass of entry-page parity: capped/centred reading layout, better top chrome, localized timeline sources with service marks, and steadier day-page spacing.

Correctness and recovery paths

  • Fixed several cases where the UI would confidently do the wrong thing: the month chevron now follows the diary’s current month, partial photo uploads retain only failures, and failed onboarding saves stay on the current step with an inline retryable error.
  • Made Free-plan summary 403s read as a plan limitation instead of an outage. Small distinction, huge difference in what the user thinks broke.
  • Closed two older operational/security issues too: unbounded throttler storage and OAuth token-exchange logs that could expose a client_secret.
  • For the diary-card work, dropped a nonexistent edge case after tracing where entries.summary actually comes from:

    “the case does not occur.”

Android caught up with the web

  • Shipped mobile API support for webhook tokens/API keys and marked the FCM push channel plus daily entry notification work done.
  • Brought Android entry behavior forward: diary-timezone dates and place times, media ordered by capture time, empty tag states, useful locked-day paths, share-link preview/expiry, and media captions/retry/seek controls.
  • Also aligned sources, profile/settings, and export screens: plan/reconnect state is visible in Sources, action rows lost misleading chevrons, and Export now shows earlier exports. Android PR #219 carried a broad batch of shared controls, navigation, feedback, and accessibility alignment.

Maintenance pass

  • Migrated both DroidFlyer and Norimaki off CircleCI config version: 2, since the old config now breaks every pipeline: DroidFlyer #556 and Norimaki #479.
  • Reviewed and approved the follow-up dependency/CI work across DroidFlyer, Norimaki, CircleCI, cycle-flyer, irasutoya, circleci-cli, and github-weekly-reporter. A fairly intense cleanup night.

Share

Check out my diary entry on deariary #deariary #diary

Your life, automatically written.

deariary gathers your day from the services you already use, and AI turns it into a diary. No writing required — just a daily record you can look back on.

Turn your passing days into your own diary.

Try it free

Highlights

Cross-platform parity sweep — deariary