Frontend sweep — journals, auth, and UI polish

by Deariary Official

Journals & navigation

  • Added a proper sidebar for /journals/* with a collapsible year→month tree and tag list to make browsing entries easier. Desktop gets a sticky 13rem sidebar; mobile stacks it above content. (see commit: https://github.com/deariary/frontend/commit/35715b3efd7bc29810f446d8463011fda15c2a0f)
  • Added a tag-filtered page /journals/tag/[tag] with cursor pagination and updated JournalCard/tag links so tags route to that page. Wrote thorough tests for the tag page.
  • Implemented Markdown rendering pipeline and a useMarkdown hook so journal detail pages render markdown reliably; also improved loading states and card previews.

Auth, integrations, and API alignment

  • Fixed a bunch of auth flow issues: added authenticate() to the AuthProvider, removed the Suspense race in the callback/register flow, added a 401 interceptor with automatic refresh and sign-out on expired/failed refresh.
  • Implemented OAuth callback page and aligned many API paths/types to match the backend (source config naming, OAuth start/disconnect paths, etc.). This was necessary to make the integrations pages stable.
  • Built a GitHub integration settings page: sync status, repo selection, source transparency, force-resync/disconnect actions. Also changed the integrations list to show a Details link instead of an immediate disconnect:

    "replace disconnect button with details link on integrations list" That felt safer — move destructive actions to the detail/settings page. (see GitHub settings commit: https://github.com/deariary/frontend/commit/cd26663415bce42a65fc179e7e41e250d7746595)

UI polish: header, footer, theme, accessibility

  • Redesigned header (bigger logo, avatar dropdown with Settings/theme/sign out), moved theme toggle around, and unified page widths with a shared .page-container.
  • Built a new app footer (4-column layout + bottom bar), aligned footer borders to the content width, adjusted logo/icon sizing and right-aligned columns for cleaner visuals.
  • Added dark mode provider (system detection + localStorage) and moved theme toggle into the header/nav.
  • Fixed missing disabled styles for btn-secondary, btn-ghost, and btn-danger so disabled buttons give proper feedback (important for flows like "regenerate while pending").

Reliability, generation flow, tests, and CI

  • Reworked the regenerate journal flow to match backend: POST now goes to /users/me/journals/generate with { date }, the response includes a triggerId, and the frontend polls pipeline status based on that trigger (3s interval, 2min max). Removed fragile setTimeout hacks. (see polling commit: https://github.com/deariary/frontend/commit/513087bb4361e3dbd2f1c3e306ed1c894fa73ecf)
  • Added a Codecov integration and V8 coverage reporting via @vitest/coverage-v8. CI now uploads coverage; requires a CODECOV_TOKEN secret.
  • A lot of small type/path fixes to align frontend types with backend (OAuthStartResponse field rename, ConnectionConfig → GitHubSourceConfig, etc.) — these reduce friction for the integrations work.

Notes / small wins

  • Settings page got a full refactor: sidebar nav, card layout, time/timezone inputs improved, and visual consistency fixes.
  • Footer/header alignment and a shared .page-container make the whole app feel tighter and pixel-aligned.
  • Overall: big frontend sweep — navigation + integrations + auth + polish. Tests and CI were extended so the changes should be safer to land.

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