Skip to content

UI pass part B: /me on the design kit (#96) - #100

Merged
JOY (JOY) merged 5 commits into
devfrom
claude/96b-me-ui
Nov 4, 2026
Merged

JOY (JOY) merged 5 commits into
devfrom
claude/96b-me-ui

Conversation

@JOY

@JOY JOY (JOY) commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Refs #96

Part B of #96: every /me screen on the design kit from #95, except /me/pledges/[code] (part A).

What changes

  • Shell. The four /me lists (Chiến dịch của tôi, Ủng hộ của tôi, Thông báo, Tài khoản nhận tiền) share kit tabs (TabNav), so a phone can move between them without the header menu. Inner pages (editor, fulfillment, disbursements, unmatched, statements, batch) get a PageHeader with a back link instead.
  • Lists. Campaigns (with cover thumbnails and the type/status badges), contributions and pledges (kit Badge tones per status, the pay button is primary only when a payment is due), notices (unread rows marked by a green rule and a "Mới" badge).
  • Campaign editor (give + back). Each block is a Panel card with an anchor; on wide screens a sticky "Trên trang này" list jumps between them. Content fields are grouped (Người thụ hưởng, Mục tiêu và thời gian, Hiển thị trên trang công khai). Status notices, account warnings and swap states use Callout. Receiving accounts show as bank rows. Reward tiers, the account section, the account swap request and the status block (submit, cancel, delete draft) are restyled in place.
  • Callouts. Status notices, warnings and failed reads use the kit Callout (from part A).
  • Fulfillment, disbursements, unmatched, receiving accounts, statements, batch. Same kit: cards, callouts, badges, kit buttons, tables with a keyboard-scrollable region on phones.
  • Empty, loading and error states. EmptyState everywhere a list can be empty. The three lists that the person opens most (campaigns, contributions, notices) stream inside <Suspense> after requireSession, with skeleton rows. Each /me section has an error.tsx with a retry and a way back.
  • Touch and type. Buttons and links that act keep the 44px target; body copy is 16px; checkboxes and radios are 20px with a 44px row.

Not changed

No data call, server action, form field, field name, confirm text or redirect changes. components/forms.tsx and SelectAll.tsx are untouched; the other shared and kit changes are listed under "Merged with parts A and C".

Route loading.tsx files are deliberately not added: a streamed response starts with 200, so the sign-in redirect and notFound() would become client-side fallbacks (Next 16 docs, loading.js "Status codes"). Suspense below the auth and ownership checks keeps 307 and 404.

New kit files (apps/web/src/components/ui)

  • PageHeader.tsx: back link, eyebrow badges, h1, actions, lead.
  • Skeleton.tsx: Skeleton and SkeletonList (with an sr-only status label).

/me-only helpers live in apps/web/src/app/me/_components (MePage/MeDetail shells, Panel, badge tone maps, MeError).

Evidence

Screenshots from a production build (next build + next start) at b28fdf0 on a seeded local Supabase stack (DOS.Me dev migrations): 3 give and 3 back campaigns, a draft, a changes_requested back campaign with tiers, a succeeded back campaign with paid pledges (some shipped), matched, unmatched and outgoing money (one explained), notices, statement batches with ambiguous rows, an organizer with verified, pending and unbound accounts, and an admin user. Images live on the assets/pr-100-screenshots branch.

Page Desktop 1440 Phone 375
Chiến dịch của tôi full page full page
Editor, give, live (money panel, updates, account swap) full page full page
Editor, give, draft (account picker, submit blocked) full page full page
Editor, back, changes requested (tiers editable) full page full page
Editor, back, succeeded (fulfillment link, tiers read-only) full page full page
Giao quà full page full page
Giải trình khoản chi full page full page
Giao dịch chưa khớp (/me) full page full page
Ủng hộ của tôi full page full page
Thông báo full page full page
Tài khoản nhận tiền full page full page
Tải sao kê full page full page
Sao kê lần #N (ambiguous rows) full page full page
Empty: no campaigns full page full page
Empty: no notices full page full page
Empty: no organizer profile full page full page
/admin (Notice → Callout) full page full page
/admin/unmatched (shared reconciliation cards) full page full page
/admin/statements (Notice → Callout) full page full page
/admin/accounts (Notice → Callout) full page full page
  • Lighthouse accessibility (v12, headless Chrome, signed in): 100 on all 34 runs, mobile and desktop, for the 13 /me pages above and 4 admin pages (review, unmatched, statements, accounts).
  • No horizontal scroll at 375 px on any of the 40 screenshots (checked as scrollWidth - innerWidth).
  • Status codes kept: signed out, /me/campaigns still answers 307 to sign-in; notFound and the redirect stay above every Suspense boundary.
  • Checks: pnpm format:check, lint, typecheck, 926 unit tests and next build pass locally; CI Lint and Build all apps pass.
  • Independent review (fresh-context subagent, design and a11y, given only the diff and the rules): no behaviour-change violations. One must-fix (the cover panel's id clashed with the cover file input, unbinding its label) and nine smaller items, all fixed in 0d1f483.

Merged with parts A and C

Follow-ups

  • components/SelectAll.tsx (shared, fulfillment page) still has small text and a bare checkbox.
  • /me/campaigns now shows cover thumbnails (one lazy, authenticated /media/private image per campaign, no new data read).

🤖 Generated with Claude Code

#96 part B)

Moves every /me screen except /me/pledges/[code] onto the #95 kit: page
headers with back links, tabs between the /me lists, cards and callouts
instead of ad hoc tints, kit badges for statuses, 44px touch targets,
16px body text and phone layouts. The campaign editor gets a sticky list
of its sections on wide screens.

Lists stream inside Suspense after the auth check, so a slow read shows
skeleton rows while the redirect and notFound keep their status codes
(a route loading.tsx would answer 200). Each /me section gets an error
boundary with a retry.

New kit files: Callout, PageHeader, Skeleton. No data call, server
action, form field or name changes.

Refs #96

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6982024d-1b15-4bd7-a4d0-29d4c2bdc54f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

dos[bot]
dos Bot approved these changes Nov 4, 2026

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏱️ Code Review completed (24 eligible files · 194,317 chars · 1 model call(s) · 7 PR unit(s))

Whole diff with bounded context at base 31f0313 / head 42f83b0.

✅ CLEAN_PASS: Complete diff reviewed

- Editor: the cover panel anchor is cover-image, so the Chọn ảnh label
  binds to the file input again (the section shared its id).
- Story textarea keeps the 16px field size (no iOS zoom on focus).
- Tier disclosures show a rotating chevron instead of the lost marker.
- 44px targets: editor section links, batch links, fulfillment row
  checkboxes (wrapped in a label hit area).
- Scrollable tables get their own region names; provider ids are 14px.
- The /me error page has an h1; cover upload and tier save are
  secondary so each panel keeps one primary action.
- Pending swap text breaks long account numbers; copy and a no-op
  class cleaned up.

Refs #96

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dos[bot]
dos Bot approved these changes Nov 4, 2026

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏱️ Code Review completed (24 eligible files · 195,091 chars · 1 model call(s) · 7 PR unit(s))

Whole diff with bounded context at base 31f0313 / head 0d1f483.

✅ CLEAN_PASS: Complete diff reviewed

Takes part A's Callout (icon, role status|alert) in place of part B's
add of the same file and adapts the /me callers; contributions reuse
part A's PledgeStatusBadge instead of a local tone map.

Refs #96

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dos[bot]
dos Bot approved these changes Nov 4, 2026

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏱️ Code Review completed (23 eligible files · 193,606 chars · 1 model call(s) · 7 PR unit(s))

Whole diff with bounded context at base c06d49b / head 9ce327a.

✅ CLEAN_PASS: Complete diff reviewed

JOY (JOY) and others added 2 commits November 4, 2026 12:53
Part A's Callout and part C's Notice were the same tinted message box.
The admin pages now use Callout (same tones and title; it adds the
tone's icon) and Notice.tsx is removed, as the PO asked.

The shared reconciliation pieces that /me and /admin both render move
onto the kit: PaidBreakdownCard, ManualMatchList, InboundExplanationList
and UnmatchedTransactionCard (kit labels and figures, EmptyState, a
Callout for the bounced-transfer warning, a 44px disclosure with a
chevron). Forms, names, confirms and actions are unchanged.

Refs #96

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dos

dos Bot commented Nov 4, 2026

Copy link
Copy Markdown

⏸️ DOS Review: Automatic Review Limit Reached

DOS Code Review already reviewed 3 commits of this pull request automatically, the limit for one pull request, so this commit was not reviewed automatically and nothing was charged. Please step back before pushing another fix: a pull request that needs this many review rounds usually needs a rethink of its approach or a smaller scope, not one more patch. When you are ready, a maintainer can comment /review to review the current commit.

@JOY

Copy link
Copy Markdown
Contributor Author

PO acceptance (part B of #96, last part): merge at b28fdf0. Lint + Build green; 926 tests and build locally; Lighthouse a11y 100 on 34 runs (13 /me + 4 admin, mobile and desktop); independent design/a11y review, must-fix and small items fixed; Notice folded into Callout. DOS Code Review approved the first 3 commits, then hit its cap. Follow-up: SelectAll.tsx styling.

@JOY
JOY (JOY) merged commit d02b0a8 into dev Nov 4, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant