Skip to content

Feature: Journaling #79

Description

@manucompiles

What we're building

Journaling as its own top-level section (route /journal, sidebar nav link like Time). Structured journal templates whose entries are stored as data and rendered as markdown notes. Three templates ship in v3.0: daily (derived from the user's proven claude.ai journaling practice), gratitude (short list + optional prose), and affirmations (daily list, revisited at the evening close to celebrate wins). Timestamped mood check-ins (own words, energy, optional Map of Consciousness level) modeled like TimeEntries - multiple per day; mood shift derived from first vs last. Task-linked Today's Plan (combobox over existing task text search + explicit '+ Create task' row; created tasks default due-today/no-project) with a derived 'Unplanned, got done' bucket from completed-but-unplanned tasks. Markdown export as download (single day .md / zip of all). This is the spine of the v3 journaling program.

Scope

In scope:

  • JournalTemplate (JSON section definitions as TEXT, seeded in code - no template editor UI) + JournalEntry (one per template per date, JSON content as TEXT) + MoodCheckin tables, controllers following existing conventions
  • Markdown generation as a pure static helper in Services/ (RecurrenceRule pattern); no Markdig
  • /journal page: center = sections in a structured editor (styled auto-grow textareas per section kind - no rich-text library), right sidebar = calendar date picker (reuse DueDatePicker patterns, default today) + mood widgets; edit/preview toggle (react-markdown, new dependency - approved)
  • Daily template sections (judged against a full scan of 10 real notes): morning mood check-in, What's Going On, Mind Dump, Projects Today, Today's Plan (Non-Negotiable / If Energy Allows / Easy Wins + derived Unplanned), Front of Mind, Back of Mind, Daily Review, Evening Review (all sub-fields kept), Journal (optional). Thought Check + Chaos to Control cut (dead in real usage)
  • Mobile + desktop both required
  • Export: download endpoints/UI (day .md, zip all)

Out of scope (later versions of the v3 program):

  • Minimal single-user auth (v3.1, before journal content flows through MCP)
  • MCP journaling tools; auto-seeded Daily Review; mood/MoC trends; weekly note generation; Obsidian one-way folder sync; internal Agent SDK AI
  • Area/spin-off notes (idea-notes, logs) - a general notes system, stays in Obsidian
  • Dream journal / wishlist (added to backlog)
  • No import of old Drive/Obsidian notes - fresh start

Key decisions:

  • Structured storage, markdown is a render (never parse markdown back)
  • JSON stored as plain TEXT + System.Text.Json (first JSON-content columns in the codebase; deliberately NOT EF ToJson) - queryable values (mood, energy) get real columns on MoodCheckin
  • MoodCheckin mirrors TimeEntry (timestamped, multi/day), not CheckIn (one/day)
  • Local-time date conventions follow CheckIns precedent; inherits open TZ caveat GCP deploy: set TZ so computed dueStatus uses a correct local day #62 on the GCP demo only
  • One entry per template per date enforced by API
  • GCP demo seed DB will need regeneration at ship time (journal tables otherwise empty there)

Plan

docs/plans/P79-journaling.md

Outcome

What was built: Journaling as its own section (/journal + header nav tabs): three code-seeded templates (Daily/Gratitude/Affirmations), structured entries rendered to Obsidian-compatible markdown by a single backend renderer, timestamped mood check-ins via a full 3-ring feelings wheel with derived (never self-tagged) Map of Consciousness scores + mood arc chart, task-linked plan with explicit create + derived Unplanned bucket, transient Front/Back-of-Mind with next-day rollover, calendar with entry dots, edit/preview toggle, day .md + zip-all export, journal-scoped fog/plum/serif identity with dark mode, mobile widget drawer + header quick actions. New: JournalTemplates/JournalEntries/MoodCheckins tables, completedOn task filter, react-markdown dependency.

Verified: 334 backend + 27 new frontend tests green; production build clean; full API + UI flow driven end to end on desktop and phone (LAN); review fixes (1 Block + 10 Warns + design findings) applied and re-verified; test data wiped for fresh start.

Issues raised during this work: #80 (a11y), #81 (hardening), #82 (polish), #83 (pre-existing TaskCard tests), #84 (Doppel persona + draggable).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions