Skip to content

EPIC: UI overhaul — macro-tracking + social identity #63

Closed

Description

@TSVRN9

Why

UDine's product identity (owner decision, 2026-08-19) is a macro tracker + social layer connected to the real UMass menu — not a restyled port of the official dining app. The styling wave (#36–#41, #43) gave both consistency and a component system on web; this epic reshapes the information architecture and product feel around that identity, and brings mobile up to the same design language.

Design decisions (made, not open)

  • Today-first home (web + mobile). The first screen is your day: macros so far, quick-log entry, and what's on at the halls — not a bare list of four buildings. Halls/menu browse stays one tap away.
  • Social is a feed, not a settings page. Pings and favorited-food sightings become a single activity feed; "come eat with me" is a first-class action. Signed-out users see the feature with a sign-in value prop, never a dead end.
  • Ranking feeds the experience. Post-log comparison prompts and a "your top dishes" module — ranking data stays device-only per the residency table.
  • Anonymous-first stays sacred. Everything except friends/pings/push works with zero account, and the UI must make that legible (device-only data promise surfaced in onboarding, not buried in a footer).

Children (sequence)

Order: #64 first on web (it moves routes/specs others build on); #65 runs in parallel (different package); #66/#67 after #64; #68 last.

Ground rules for every child (repo standing policy)

Red-green TDD with pasted red evidence per spec; pr-reviewer pass before merge; mutation-testing for pre-existing behavior; data-residency table in CLAUDE.md is law; no new hex colors — tokens/components only; per-worktree Playwright ports (PORT env).

Activity

  1. TSVRN9 commented on Aug 19, 2026

    @TSVRN9
    OwnerAuthor

    Two small follow-ups from PR #69's review, to fold into remaining epic work: (1) nav link to / still reads 'Dining Halls' while the page is now 'Today' — deliberate (locator blast radius), needs a coordinated rename + spec-locator update as its own small change; (2) cosmetic inverted loading flash on /: pre-IndexedDB-resolve renders a zeroed stat card for a beat before the empty state (the loaded guard covers one direction only).

  2. TSVRN9 commented on Aug 19, 2026

    @TSVRN9
    OwnerAuthor

    Note from #72 (web: browse upcoming days' menus, done — see PR #76): web now has prev/today/next date navigation on /halls/[slug] (?date=YYYY-MM-DD). Mobile date nav was explicitly out of scope for #72, deferred until #65's restyle lands — but it isn't yet a tracked follow-up child here. Flagging so mobile doesn't quietly fall behind web on this once #65 ships; may need a small #65-follow-up ticket rather than folding it into #65 itself, since #65 is scoped as visual parity only (no new behavior).

  3. TSVRN9 commented on Aug 19, 2026

    @TSVRN9
    OwnerAuthor

    Epic complete — all five children merged and closed.

    Every child went through implement (red-green evidence) → independent review (mutation spot-checks, live drives) → fix rounds where needed → re-review → merge. Bonus landings along the way: upcoming-menus browsing (#72/PR #76), FAQ/staff cut (#50), mobile OAuth fixes (#44/#46), local-only CI (#55/#73).

    Open follow-ups spawned by the epic's reviews: #80 (hall-rank sync drift), #81 (untested pointer-events wrapper + one retired-form guard), #82 (narrow-viewport prompt occlusion). Remaining pre-epic backlog: #45, #54.

  4. TSVRN9 commented on Aug 19, 2026

    @TSVRN9
    OwnerAuthor

    Closing: all children shipped.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agentready-for-humanRequires human implementation

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions