Skip to content

web UI: style dining halls list + menu browse + log flow #36

Closed

Description

@TSVRN9

What to build

Style the core vertical slice — the flow CLAUDE.md calls the foundation everything else builds on: home page (src/routes/+page.svelte, the dining halls list) and the hall menu view (src/routes/halls/[slug]/+page.svelte, browse dishes + log a serving). Reuse the design tokens and shared layout from #35 — don't invent new colors/spacing.

Menu items need real visual hierarchy (dish name, nutrition info, log button/quantity control) — currently a flat unstyled list. Favorite-star toggles (already functional, currently a bare unicode star in a plain button) need a real visual treatment.

Acceptance criteria

Blocked by

#35 (Tailwind + design tokens + shared layout)

Activity

  1. TSVRN9 commented on Aug 19, 2026

    @TSVRN9
    OwnerAuthor

    PR #48 salvaged: rebased off the superseded ux/shell-components base onto current main (git rebase --onto origin/main 86e5af0 ux/halls-menu, dropping only the old shell commit — this PR's own commit came through with zero conflicts), retargeted main → main, and re-verified live against a running dev server rather than trusting the pre-rebase description. Also added web/e2e/halls-menu.spec.ts (new file, not an edit to any existing spec — kept clear of #49's parallel rebase touching today/+page.svelte and e2e/shell.spec.ts).

    Component-class audit: merged #53's web/src/app.css still defines every class this PR uses (.card, .btn/.btn-primary/.btn-secondary, .badge, .empty-state, .page-title, .label-rule, .section-title, .field-label, .input) and the same maroon/gold/ink/paper/cream color tokens and font-display/font-mono type tokens — no drift to reconcile between the version this PR was written against and what actually landed.

    Per acceptance criterion:

    • Dining halls list and hall menu view fully restyled using web UI: install Tailwind CSS + design tokens + styled shared layout #35's tokens — confirmed live: both routes render exclusively via the shared token/component classes above (checked in code and by rendering the pages), no ad-hoc colors introduced.
    • Logging a dish (quantity input + log action) has clear visual affordance — confirmed live: Servings field has a visible label (not just a placeholder) defaulting to 1, paired with a .btn-primary "Log" button; a fixed bottom toast confirms the log. Also drove the NaN-input edge case live (clear the field, click Log) — falls back to 1 serving ("Logged 1 × …"), not a NaN entry.
    • npx playwright test passes unchanged — the flow's original coverage (vertical-slice.spec.ts) passes unmodified, plus the rest of the suite: 17/17 total, including 3 other pre-existing specs from post-rebase main (favorites, filters, rank, shell) that didn't exist when this PR was first written.
    • pnpm --filter web check clean, CI passes — svelte-check: 0 errors/warnings across 396 files. pnpm --filter web build also succeeds (added to the verification lane since it's cheap and catches what check doesn't).

    Additional UX claims from the PR description, verified live via a throwaway Playwright script against the real dev server (not just read from source), each also confirmed to fail against a one-line mutation of the underlying logic:

    • Favorite star aria-pressed state on both the halls list and a dish row (existing specs only read the glyph text).
    • "Everything is filtered out" empty state when a dietary filter hides every dish on the menu (distinct from the partial-hide case filters.spec.ts already covered).
    • "No menu posted for today" empty state with a "Try another hall" link out.
    • Full macro line (cal/protein/carbs/fat), serving size, diet-tag badges, and Contains <allergen> badges on a dish row.

    PR: #48 (open, based on main, not merged).

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 agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions