Overhauled nav, auth, and journals
2026-02-18
Navigation & layout
- Added a shared AppHeader and moved all authenticated pages under a common layout — consistent nav + tighter structure (commit).
- Promoted Integrations to a top-level
/integrationsroute and cleaned up Settings with brand-aligned typography and semantic CSS. - Standardized content widths and header constraints; small polish passes on empty-state SVG centering and the ink divider.
- Killed the old dashboard flow: post-login/registration now goes to
/journals, removed the unused dashboard page/keys, and fixed misdirects.
Auth/session flow
- Built an AuthProvider that restores sessions from refresh tokens; switched everything to use AuthContext.
- Fixed the SSR/hydration redirect flakiness by deferring auth resolution to effects and blocking render during refresh.
- Moved router redirects out of render paths to silence React warnings.
Journals & topics
- Shipped the journals list page with pagination and an empty state, plus a detail page (publish toggle, feedback, regenerate).
- Rewrote routing from flat
/journals/[date]to hierarchical/journals/[year]/[month]/[day], added monthly browsing, helpers, and tests (commit). - Aligned API paths/types with the backend (
/users/me/journals, offset/limit, DELETE for unpublish) and updated all tests. - Added
/topics/[tag]for authenticated topic aggregates.
Integrations, settings, i18n
- Built the full Settings page (profile, journal generation, regional prefs, notifications, danger zone) and a complete Integrations page with connections + webhook token management.
- Made the integrations UI resilient: independent fallbacks per API call, hardcoded 22 known integrations shown as disconnected when the backend is down; removed the old global fallback.
- Added EN/JP i18n infra and externalized all strings; instant locale switching via Preferences.
- OAuth now passes an
originquery param so callbacks return to the right frontend; added GDPR consent to registration.
Design system & polish (frontend + brand)
- Integrated the brand design tokens, fonts, and component styles across the app; replaced ad‑hoc Tailwind with tokens (commit).
- Ported 14 reusable UI components (buttons, inputs, cards, alerts, toggles, toasts, modals, journal article, integration cards, skeletons, etc.) and synced missing component CSS so everything renders styled.
- Brand repo: added dark mode, interactions (skeletons, ink‑seep, scroll fade‑in), a full “brand world” (paper texture, seasonal colors), overgrowth/weed decorations, calendar/time‑jump/weekly summary, and polish on journal headings and integration states.
- Extracted inline SVGs to files for readability/cacheability. Also added CI for production deploys and a README.