The cold-start "Keep coming back" card only fires before the user's first ever recap. After that, low-eligibility weeks (≤2 journaling days) leave the user with no signal that they're falling short of their next recap. This explores what a persistent week-progress surface could look like on the Journal tab — review context, not action context — at three different intensity levels.
Internal mock · 2026-05-23 / 2026-05-29 · Prototype-first per backlogThe hypothesis is that a persistent surface earns its keep when low-eligibility weeks (1-2 journaling days) start happening. Until we have post-launch data on how common those weeks are, the surface is solving a hypothetical problem.
If we build one, the niche-king positioning constraint (competitive-strategy/index.html §05) rules out:
What's permitted: purely passive visualization of state the user can derive themselves by looking at their entry list. The surface should make existing information faster to see, not introduce new pressure.
The recap eligibility threshold is 3 distinct journaling days. The surface options above all show 7 days as the full bar / ring / strip. That's a mismatch:
The hybrid is probably the right answer if this ships, but it adds visual complexity that fights the "ambient wayfinding" goal.
If this gets built, I'd start with Variant A (hairline) — it's the lowest-risk treatment for the gamification concern and the cheapest to remove if it doesn't move retention. Skip Variant C (radial ring) entirely — the iconography is too loaded. Variant B is worth holding for a possible "Week view" Stats screen card instead of the Journal-tab header.
"Make existing information faster to see, not introduce new pressure" is the test every treatment should pass.
Decision locked (2026-05-29): Variant B (7-cell mood canvas), no "X of N" tally — it shows your week, it doesn't grade it. The open question the original mock didn't answer: B's mini-strip was drawn on a "This Week" section header that doesn't exist in the shipped Journal tab (the real screen groups by individual day — Today / Yesterday / May 27). So B needs a home. Two candidates below.
HistoryScreen.swift groups by startOfDay). Breaks the "what did I write yesterday" scan that day headers give. Bigger, riskier change; "Today / Yesterday" affordance moves into each row. Higher blast radius for a surface we haven't validated against data yet.Go with B1 (standalone strip card). It delivers the entire benefit of B — the at-a-glance week canvas — with none of B2's risk. The shipped day-grouped list is a working mental model ("what did I say yesterday"); week-grouping trades that away to integrate a surface we still haven't proven against post-launch data. B2's only real win is feeling slightly more "built in," which isn't worth rewriting HistoryScreen's grouping for an idea-stage element.
If B1 proves itself post-launch and the strip starts feeling like a bolted-on widget, B2 is the natural follow-up — but that's an earned migration, not a launch decision.
Neither mock shows "3 of 7 days." The strip is a 7-cell mood canvas — filled = a day you journaled, colored by that day's dominant mood; empty = a dashed sand outline. There's no target and no denominator to fall short of, which is exactly what keeps it on the right side of "visualize, don't pressure." The 3-distinct-days recap threshold stays invisible here; it lives in the recap eligibility logic, not on this surface.
The strip reuses the cold-start card's existing week definition (MainScreen.swift — current device-locale weekOfYear) so the two surfaces never disagree. Data feeds from user_daily_stats (per-day mood counts → dominant mood per cell), bucketed into that same interval. The recap generator's Mon–Sun UTC week stays separate for now — unifying it is a documented, shelved follow-up (it answers a different question: "last complete week" retrospective vs. "this week so far" nudge).
Per the screenshot: drop the variable-height mood bars (too busy — they encode entry count, which is dashboard data this surface doesn't need) and go back to flat cells. Each cell = one day; filled + colored = journaled (dominant mood), pale = no entry. No tally, no bar heights.
The catch (raised 2026-05-30): the screenshot puts a serif "This Week" header above the entry list — but a header like that owns the rows beneath it, and today the Journal groups rows under per-day headers (Today / Yesterday / date). So the screenshot look is really week-grouping = a restructure (B2), not a "floating" addition. You get a genuine fork: keep day-grouping and make the strip a separate element above it (R1 floating / R2 card — both lose the serif header), or embrace week-grouping to get the screenshot aesthetic (B2). The two mocks below are the keep-day-grouping options; compare against B2 on the previous tab.
This is now a taste-vs-scope call, and it's yours:
groupedEntries to week-buckets + month-group older entries), but the day name stays in each row so the scan survives, and week-grouping is a legitimate journal pattern — not a UX regression.R2 (card) is the middle: keeps day-grouping AND a "This Week" label, at the cost of a container that promises interaction the strip doesn't yet deliver. Hold it for if/when the strip becomes a tappable week view.
My lean: you've flagged "don't restructure" twice, which tells me the working day-view is precious to you — so R1, and accept the plainer look. But if seeing R1 makes the surface feel not-worth-it, that's a real signal the aesthetic is the point, and then B2 is the honest choice rather than a watered-down floating strip.
Note this intentionally diverges from RecapDetailScreen's WeekMoodStrip (variable-height bars). That's fine: the recap detail is a destination you opened on purpose, so richer encoding earns its place. The Journal strip is ambient — it should say less. Two strips, two altitudes.