Weekly Progress Surface — Treatments

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 backlog
9:41●●● 🔌
Your Journal
This Week
Today
It actually went better than I thought…
9:12 am
Yesterday
A little wired but okay. The walk helped.
7:48 pm
Monday
Long day. I keep thinking about the call.
10:02 pm
Last Week
Sunday
Quiet morning. Coffee on the porch.
8:31 am
Home
Journal
Stats
0 · Baseline (today)
Current state. No mid-week signal of progress toward the next recap.
9:41●●● 🔌
Your Journal
3 of 7 days this week
This Week
Today
It actually went better than I thought…
9:12 am
Yesterday
A little wired but okay. The walk helped.
7:48 pm
Monday
Long day. I keep thinking about the call.
10:02 pm
Last Week
Sunday
Quiet morning. Coffee on the porch.
8:31 am
Home
Journal
Stats
A · Hairline wayfinding
3pt sunrise hairline + caption "3 of 7 days this week". Lowest visual weight; reads as metadata, not a CTA.
Pros — almost invisible until you look. No color competition with mood. Easily ignored.
Cons — may be too quiet to actually drive completion behavior. "7 days" sets a higher bar than the recap eligibility threshold (3 days) — could feel like a perfect-attendance ask.
9:41●●● 🔌
Your Journal
This Week
Today
It actually went better than I thought…
9:12 am
Yesterday
A little wired but okay. The walk helped.
7:48 pm
Monday
Long day. I keep thinking about the call.
10:02 pm
Last Week
Sunday
Quiet morning. Coffee on the porch.
8:31 am
Home
Journal
Stats
B · Inline mini-strip
7 tiny cells inline with the "This Week" section header. Reuses the Recap mood-strip visual language at a fraction of the size.
Pros — highest info density (which days + which moods). Visual continuity with the Recap detail strip — feels like the same vocabulary, just smaller.
Cons — more visual weight than A. Mood data on the header risks duplicating what the entry-row dots already show. Reads more "dashboard."
9:41●●● 🔌
Your Journal
3
This Week
Today
It actually went better than I thought…
9:12 am
Yesterday
A little wired but okay. The walk helped.
7:48 pm
Monday
Long day. I keep thinking about the call.
10:02 pm
Last Week
Sunday
Quiet morning. Coffee on the porch.
8:31 am
Home
Journal
Stats
C · Radial pip in the topBar
Small ring (Apple Fitness-style) opposite the "Your Journal" title. Numeric center shows count.
Pros — most ambient. Doesn't push the entry list down. Tappable surface to expand into a detail view later. Highest "iOS native" feel.
Cons — rings are the most strongly associated with streaks-as-game (Fitness, Strava). The shape carries baggage even if the implementation is gentle. Hardest to defuse the "gamified" read.

Decision criteria

The 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.

Open question — what does "complete" mean?

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.

Recommendation

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.

Variant B — two ways to place the strip

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.

9:41●●● 🔌
Your Journal
This week
M
T
W
T
F
S
S
Today
9:12 am
It actually went better than I thought…
Yesterday
7:48 pm
A little wired but okay. The walk helped.
May 25
10:02 pm
Long day. I keep thinking about the call.
Home
Journal
Stats
B1 · Standalone strip card
A small linen week-card sits between the "Your Journal" title and the first day section. The existing day grouping (Today / Yesterday / date) is untouched below it.
Pros — zero change to the shipped day-grouped list. The strip owns its own altitude (whole-week glance) so it never duplicates the per-row mood dot. Cheapest, lowest-risk build. Trivial to A/B or remove.
Cons — adds one more stacked element at the top of the tab. Reads as a distinct "widget," slightly less integrated than living inside the list structure.
9:41●●● 🔌
Your Journal
This Week
M
T
W
T
F
S
S
Today
It actually went better than I thought…
9:12 am
Yesterday
A little wired but okay. The walk helped.
7:48 pm
Monday
Long day. I keep thinking about the call.
10:02 pm
Last Week
Sunday
Quiet morning. Coffee on the porch.
8:31 am
Home
Journal
Stats
B2 · Week-grouped list
Replaces the day grouping with week grouping ("This Week" / "Last Week"). The strip becomes the "This Week" section's header visual; entries lose their per-day "Today / Yesterday" headers and show the date inline instead.
Pros — the strip is fully integrated — it is the section header, not a bolted-on widget. Strongest "this is one coherent screen" read.
Cons — rewrites the shipped grouping logic (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.

Recommendation

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.

No tally, by 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.

Week definition

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).

Variant B — refined (flat cells)

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.

9:41●●● 🔌
Your Journal
This week
Today
9:12 am
It actually went better than I thought…
Yesterday
7:48 pm
A little wired but okay. The walk helped.
May 25
10:02 pm
Long day. I keep thinking about the call.
Home
Journal
Stats
R1 · Floating strip (genuinely no restructure)
A small "This week" caption + 7 flat cells float under the title as metadata — not a serif section header. The shipped day grouping (Today / Yesterday / date) is fully intact below. Note: this departs from the screenshot — a serif "This Week" header that sits above the list owns the entries below it, which forces week-grouping (= B2). You can't keep day-grouping AND have the serif header; this is the honest day-grouping version.
Pros — lightest weight; truly zero change to the shipped grouping or the "what did I write yesterday" scan. Pure wayfinding, nothing to tap.
Cons — loses the serif "This Week" header look from the screenshot. Bare cells can read slightly orphaned from the list they summarize.
9:41●●● 🔌
Your Journal
This Week
Today
9:12 am
It actually went better than I thought…
Yesterday
7:48 pm
A little wired but okay. The walk helped.
May 25
10:02 pm
Long day. I keep thinking about the call.
Home
Journal
Stats
R2 · Card
Same flat strip, but in a soft white card with "This Week" on the left and cells on the right — matching the entry cards' surface treatment.
Pros — a natural tap target if the strip ever expands into a week view. Consistent with the card language already on the screen. Visually "anchored."
Cons — a card is a heavier promise than wayfinding warrants — it implies "tap me / I do something." More weight than R1, which is the opposite of what you asked for. Risks reading like the ProfileScreen surface you called too busy.

Recommendation — pick the fork first

This is now a taste-vs-scope call, and it's yours:

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.

Flat cells vs. the shipped WeekMoodStrip

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.