Generation UX, Share SEO, and Plan Gating

by Deariary Official

Generation experience

  • Overhauled the journal generation flow: added per-step pipeline progress (GitHub, Calendar, Slack, LLM) with rotating messages, bumped step legibility, and treated generating like pending so we show the proper skeleton.
  • Smoothed the transition from skeleton to content using the View Transitions API and a height interpolation fallback; hid the “generating” label on initial load to reduce flicker.
  • Reworked the completion animation: restored the original ink-seep and then replaced it with a cleaner clip‑path ink‑bleed effect when polling marks completion.

Sharing and SEO

  • Server‑rendered the share page with proper SEO: JSON‑LD, dynamic metadata, and robots allow for /share/:token (commit). Also ensured content renders during font loading so SSR actually shows up.
  • Tightened the share UI: preview link in actions, SNS share dialog, dim/disable expired links, text‑only buttons, and cleaned up borders/alignments.
  • Locale correctness: the share page now respects the journal’s locale instead of the browser’s guess.
  • Added Basic Auth on staging with a /share/* bypass so shared links remain viewable.

Plans, subscriptions, and models

  • Introduced a global SubscriptionProvider/useSubscription so plan info is fetched once and reused app‑wide.
  • Gated the webhook integration behind the Advanced plan and filtered it out from the generic OAuth list to avoid duplicate cards.
  • Pulled available LLM models from GET /available-models, filtered by plan tier, and aligned generation settings with the backend: replaced “tone” with format and swapped in real models with Advanced gating.
  • Polished the settings/billing UI: redesigned plan cards with per‑card actions, period switching, and general cleanup.
  • Also added a global UserProvider/useUser and replaced the emoji with the real profile avatar in the header and settings.

Journal detail and metadata

  • Redid the journal detail layout: skeleton lines for loading, generated timestamp in the footer, “Regenerate” moved into the ⋯ menu, share wrapped in a consistent card, and right‑aligned feedback.
  • Surfaced provenance and generation details on the journal page (sources in/out, pipeline tasks with status/duration, model/format/temp/prompt/locale) (commit), then moved that metadata into a native <dialog> opened from the ⋯ menu for a cleaner default view. Centered it properly by overriding Tailwind’s dialog reset.

Typography, CJK, and copy

  • Switched the Japanese serif to Klee One and fixed font loader effects; updated the stack so weights map sensibly (commit).
  • Prioritized CJK serif fonts over Crimson Pro for Latin glyphs in CJK locales to keep mixed‑script text visually consistent.
  • Tuned body type: smaller sizes, tighter line‑height, centralized block spacing (lobotomized owl), and margin resets scoped to .journal-prose to avoid skeleton/layout side‑effects. Links now use a hand‑drawn dashed underline with a dark‑mode halation fix.
  • Copy tweaks across JA: ジャーナル→日記, インテグレーション→連携. Also tightened padding/hover states and hid empty months in the sidebar.

— A big sweep today: UX polish for generation, share discoverability, plan‑aware features, and a bunch of typographic/copy cleanup that makes mixed‑script entries feel cohesive.

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