Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
ae3b380
feat(dev/ds): live DS consolidation audit page
0xkkonrad Jun 26, 2026
6dcd896
fix(dev): make /dev tooling routes public on non-prod deploys
0xkkonrad Jul 1, 2026
db4885b
chore: prettier-format ds/audit page + data
0xkkonrad Jul 1, 2026
cc32451
feat(ds): app-divergence + big-components audits, nav overhaul, real-…
0xkkonrad Jul 1, 2026
ea99e97
fix(ds): make Playground tier work — real index + repoint to live har…
0xkkonrad Jul 1, 2026
a93ca8f
ds: lint count baselines script + day-1 baseline (TASK-21446)
kushagrasarathe Aug 17, 2026
466d800
fix(ds): make Playground tier work — real index + repoint to live har…
0xkkonrad Jul 1, 2026
88efec1
feat(ds): /dev/ds is the one showcase — merge /dev/components extras,…
kushagrasarathe Aug 17, 2026
04450df
Merge remote-tracking branch 'origin/feat/ds-audit-inventory' into ds…
kushagrasarathe Aug 17, 2026
71845c2
fix: keep /dev auth-gated on deployed builds
kushagrasarathe Aug 17, 2026
3575d2e
ds: tailwind 4 migration — config dies, tokens move to css @theme (TA…
kushagrasarathe Aug 17, 2026
4b8d01e
mechanical: prettier-plugin-tailwindcss v0.6 class re-sort
kushagrasarathe Aug 17, 2026
b94544d
ds: harden lint-count ratchet mechanics (code-review findings)
kushagrasarathe Aug 17, 2026
aa0b536
fix: font theme vars self-referenced the next/font css variables
kushagrasarathe Aug 17, 2026
d145c98
review: drop production badges from playground harnesses; restore e2e…
kushagrasarathe Aug 17, 2026
dc4b449
fix: move next/font variable classes from body to html
kushagrasarathe Aug 17, 2026
4e20585
fix: restore v3 space-x/y selector semantics
kushagrasarathe Aug 17, 2026
f6eb021
fix: remove border classes that never existed in v3
kushagrasarathe Aug 17, 2026
7dfbaf0
mechanical: re-run prettier tailwind sort after space-y/font utility …
kushagrasarathe Aug 17, 2026
8617eac
fix: code-review findings — v4-removed opacity utilities, theme names…
kushagrasarathe Aug 17, 2026
0dcb1e3
tokens: complete the set from vlad's token board (17292:3144)
kushagrasarathe Aug 18, 2026
bfe7321
review: sweep tier index routes too and fail the e2e on non-2xx respo…
kushagrasarathe Aug 18, 2026
88a4817
lint: audit-page anchors to next/link
kushagrasarathe Aug 18, 2026
f34a08b
Merge pull request #2703 from peanutprotocol/ds/02-lint-baselines
kushagrasarathe Aug 18, 2026
80daed5
Merge pull request #2706 from peanutprotocol/ds/05-tailwind-4-tokens
kushagrasarathe Aug 18, 2026
5cb8e70
Merge pull request #2704 from peanutprotocol/ds/04-audit-inventory
kushagrasarathe Aug 18, 2026
0220bc5
Merge remote-tracking branch 'origin/feat/design-system' into feat/ds…
kushagrasarathe Aug 18, 2026
1c39b4c
mechanical: prettier tailwind re-sort on audit pages (DS 04 files und…
kushagrasarathe Aug 18, 2026
1e1260a
button: restyle to figma board 17802:61527 — pill, board sizes l48/m4…
kushagrasarathe Aug 18, 2026
7530a9f
Merge pull request #2705 from peanutprotocol/feat/ds-showcase-merge
kushagrasarathe Aug 18, 2026
0bc755a
card: restyle to figma board 17802:61536 — border-default token, boar…
kushagrasarathe Aug 18, 2026
27e1991
list item: new ListItem primitive per figma board 17802:61530 — leadi…
kushagrasarathe Aug 18, 2026
478768f
ds(12): generate ds token data from the @theme source
kushagrasarathe Aug 18, 2026
5cb49d2
navigation: NavHeader to board 17802:61534 — 40px circle buttons w/ 4…
kushagrasarathe Aug 18, 2026
d2a94f2
ds(12): render /dev/ds foundations from generated tokens
kushagrasarathe Aug 18, 2026
e429177
loaders: fold PeanutLoading into Loading (variant=mascot) — one loade…
kushagrasarathe Aug 18, 2026
1fd26c3
ds(12): split font-weight out of the font namespace
kushagrasarathe Aug 18, 2026
af2e949
ds(12): rename generated ColorToken -> ThemeToken
kushagrasarathe Aug 18, 2026
6e7723f
chore: prettier on two files inherited unformatted from the ds/04 mer…
kushagrasarathe Aug 18, 2026
99724f8
modal: restyle ActionModal to board 17800:57216 — heading-xs/body-s t…
kushagrasarathe Aug 18, 2026
7b2772a
chore: prettier (loading ds page + inherited ds/04 files)
kushagrasarathe Aug 18, 2026
a4e7937
modals: migrate 10 stragglers to ActionModal — guest-login, no-more-j…
kushagrasarathe Aug 18, 2026
c1f6c49
input+toggle: restyle .input to board 17802:61538 (subtle/active/focu…
kushagrasarathe Aug 18, 2026
c3819a3
badge+avatar: StatusBadge to board 17802:61533 token colors; avatar p…
kushagrasarathe Aug 18, 2026
172e6c0
review fixes: flow-mode md layout, ListItem keyboard access (role/tab…
kushagrasarathe Aug 18, 2026
75c22b0
ds(12): apply code-review findings
kushagrasarathe Aug 18, 2026
c2ba2f3
cards: ActionListCard delegates to ListItem; InfoCard variants to not…
kushagrasarathe Aug 18, 2026
6124e55
review fixes: focus-visible ring on .input was dead under v4 outline-…
kushagrasarathe Aug 18, 2026
241e54c
review fixes: discriminated LoadingProps union, variant-aware jest mo…
kushagrasarathe Aug 18, 2026
38c2bfb
review fixes: mascot paint order + seamless panel on invite/no-jail m…
kushagrasarathe Aug 18, 2026
bd9d00e
ListItem: truncate plain-string title/body only; node content renders…
kushagrasarathe Aug 18, 2026
5f188a2
merge ds/06-primitives (ListItem string/node rendering fix)
kushagrasarathe Aug 18, 2026
749bfe5
review fixes: ActionListCard keeps wrapping body + grey-fill disabled…
kushagrasarathe Aug 18, 2026
4e752d1
ActionListCard: chevron passthrough (retires the hidden-div suppressi…
kushagrasarathe Aug 18, 2026
bada243
coderabbit: Card keyboard defaults for clickable instances, NavHeader…
kushagrasarathe Aug 18, 2026
470dd57
coderabbit: caption inside full-screen overlay, single live region + …
kushagrasarathe Aug 18, 2026
104ad77
coderabbit: self-contained toggle usage example
kushagrasarathe Aug 18, 2026
a4a72a2
coderabbit: block LockCardModal dismissal mid-operation, hide dead cl…
kushagrasarathe Aug 18, 2026
5c1027d
coderabbit: forward disabled to ListItem for aria-disabled, keep lega…
kushagrasarathe Aug 18, 2026
29353b0
Merge pull request #2715 from peanutprotocol/ds/12-token-foundations
kushagrasarathe Aug 18, 2026
bb3d6f7
Merge remote-tracking branch 'origin/feat/design-system' into ds/06-p…
kushagrasarathe Aug 18, 2026
2398d13
Merge pull request #2716 from peanutprotocol/ds/06-primitives
kushagrasarathe Aug 18, 2026
8db7947
Merge pull request #2717 from peanutprotocol/ds/06-loaders
kushagrasarathe Aug 18, 2026
3890af8
Merge pull request #2718 from peanutprotocol/ds/06-inputs
kushagrasarathe Aug 18, 2026
57209bf
Merge pull request #2719 from peanutprotocol/ds/06-modals
kushagrasarathe Aug 18, 2026
2dbd932
Merge pull request #2720 from peanutprotocol/ds/06-cards
kushagrasarathe Aug 18, 2026
b29714a
Merge remote-tracking branch 'origin/feat/design-system' into ds/06-p…
kushagrasarathe Aug 18, 2026
3d1bed8
Merge pull request #2723 from peanutprotocol/ds/06-primitives
kushagrasarathe Aug 18, 2026
53aeb46
ds 07: rebuild home page into src/features/home per figma board 17830…
kushagrasarathe Aug 18, 2026
4af9c72
ds 07: bordered user-icon avatar fallback for usernameless users
kushagrasarathe Aug 18, 2026
40aa790
ds 07: test the balance-visibility external store
kushagrasarathe Aug 18, 2026
6c7a924
ds 07: address CodeRabbit round 1
kushagrasarathe Aug 18, 2026
5696b29
ds 07: address /code-review findings
kushagrasarathe Aug 18, 2026
25ca7c4
ds 07: avatar fallback matches the figma avatar treatment
kushagrasarathe Aug 18, 2026
1e95576
ds 13: one AppShell, figma bottom nav, desktop sidebar removed
kushagrasarathe Aug 18, 2026
17a24a4
feat(ds): DS 19-22 — notification, link button, accordion + slider re…
kushagrasarathe Aug 18, 2026
d4a032e
ds 09: receipts rebuilt on the list-row recipe + semantic tokens
kushagrasarathe Aug 18, 2026
0fa28da
fix(ds): use next/link for the inline-link demo (eslint no-html-link-…
kushagrasarathe Aug 18, 2026
5d0a5e9
fix(ds): CodeRabbit r1 — thumb aria-label, CTA wrap, decorative flag …
kushagrasarathe Aug 18, 2026
fc7b538
fix(ds): code-review r1 — twMerge font-size strip, dead slider focus …
kushagrasarathe Aug 18, 2026
90015d2
ds 13: semantic bg-background-page in the shell (legacy bg-background)
kushagrasarathe Aug 18, 2026
1ccf8c1
ds 09: address CodeRabbit — keyboard semantics on ReceiptRow, keep to…
kushagrasarathe Aug 18, 2026
89a60ed
ci: make the eslint job blocking now that errors are at zero (TASK-21…
jjramirezn Aug 18, 2026
a19f8e7
ci: list eslint in the ci-success failure diagnostics
jjramirezn Aug 18, 2026
6071dd0
ci: update stale comment — eslint job is blocking now (CodeRabbit)
jjramirezn Aug 18, 2026
428b893
Merge pull request #2742 from peanutprotocol/ds/10-eslint-zero
jjramirezn Aug 18, 2026
f2ed06b
ci: run the ds-lint debt ratchet on every PR (TASK-21450)
jjramirezn Aug 18, 2026
5b1882c
ci: ban useSearchParams + hand-built query-string pushes (DS 10 ratch…
jjramirezn Aug 18, 2026
1378824
ci: don't persist checkout credentials in the ds-lint job (CodeRabbit)
jjramirezn Aug 18, 2026
d8c6bbb
refactor: route all peanut-api calls through apiFetch (TASK-21450)
jjramirezn Aug 18, 2026
f38a2a5
ci: plain checkout for ds-lint — no submodules, no token (code review)
jjramirezn Aug 18, 2026
6a4ffda
chore(lint): scope PublicProfile's exemption to its two justified sel…
jjramirezn Aug 18, 2026
f3eb227
fix: demo-aware card auth headers + harden the apiFetch gate (CodeRab…
jjramirezn Aug 18, 2026
581f7c8
fix: demo-route correctness after apiFetch migration + widen the gate…
jjramirezn Aug 18, 2026
226b20f
fix: demo-api edge behavior + whitespace-tolerant gate matcher (TASK-…
jjramirezn Aug 18, 2026
89e28f4
Merge pull request #2744 from peanutprotocol/ds/10-counts-ratchet
jjramirezn Aug 18, 2026
836474c
Merge pull request #2745 from peanutprotocol/ds/10-nuqs-rule
jjramirezn Aug 18, 2026
e98a78c
Merge pull request #2746 from peanutprotocol/ds/10-apifetch-migration
jjramirezn Aug 18, 2026
1c14258
ds 09: receipt views redone to the TX Details board composition
kushagrasarathe Aug 19, 2026
b6c2c2f
ds 09: keyboard semantics on the clickable receipt-head avatar (CodeR…
kushagrasarathe Aug 19, 2026
7dc39c1
ds 14: activity surfaces — states board rules, list restyle, ?tx= dra…
kushagrasarathe Aug 19, 2026
7aec3d0
ds 14: drop orphaned test mock var (lint)
kushagrasarathe Aug 19, 2026
7d7bdea
ds 14: address code-review — failed-refund strike carve-out, shared s…
kushagrasarathe Aug 19, 2026
e7d86c8
ds 14: write the drawer-mount ref in an effect, not during render (Co…
kushagrasarathe Aug 19, 2026
e79d7d0
Merge pull request #2727 from peanutprotocol/ds/07-home-rebuild
kushagrasarathe Aug 19, 2026
92ce286
Merge pull request #2748 from peanutprotocol/ds/14-activity-surfaces
kushagrasarathe Aug 19, 2026
8f5b75e
Merge pull request #2733 from peanutprotocol/ds/19-remaining-components
kushagrasarathe Aug 19, 2026
1b71ed7
Merge origin/dev into feat/design-system
kushagrasarathe Aug 19, 2026
5dc0240
chore: regen ds tokens after safe-area spacing tokens landed in @theme
kushagrasarathe Aug 19, 2026
9c35e30
fix: post-merge alignment — one fetch path, capacitor mocks, prettier
kushagrasarathe Aug 19, 2026
6587178
fix: eslint merge intersections — catalog aria-label, allowlist dev's…
kushagrasarathe Aug 19, 2026
06976e0
fix: /code-review findings on the merge resolution
kushagrasarathe Aug 19, 2026
3d611a3
Merge pull request #2751 from peanutprotocol/merge/dev-into-design-sy…
Hugo0 Aug 19, 2026
9dafa4d
ds apply: add-money + add/withdraw shared views on semantic tokens
kushagrasarathe Aug 20, 2026
94894e8
ds apply: withdraw, profile, settings, notifications on semantic tokens
kushagrasarathe Aug 20, 2026
e62ef65
ds apply: rewards, invites, points, card surfaces on semantic tokens
kushagrasarathe Aug 20, 2026
516a6a4
ds apply: limits, claim, request, qr-claim, recover-funds on semantic…
kushagrasarathe Aug 20, 2026
8cefc63
ds apply: shared flow components on semantic tokens
kushagrasarathe Aug 20, 2026
3213d9e
ds apply: setup views class-level token pass
kushagrasarathe Aug 20, 2026
9e1ae04
ds apply: last stock-palette stragglers in qr claim + semantic reques…
kushagrasarathe Aug 20, 2026
11c0e9a
ds ratchet: lower the lint baseline to the post-apply counts
kushagrasarathe Aug 20, 2026
b96393a
ds apply: keep AmountInput digits on the repo's 3rem text-6xl
kushagrasarathe Aug 20, 2026
a6204a3
ds ratchet: baseline includes the deliberate text-6xl keep in AmountI…
kushagrasarathe Aug 20, 2026
7dcc562
ds apply: review fixes — keep DS text tokens out of twMerge
kushagrasarathe Aug 20, 2026
b54f12d
ds apply: drop twMerge imports orphaned by the review fixes
kushagrasarathe Aug 20, 2026
e251d40
ds apply: settings page shell, recover-funds blank fix, ExchangeRateW…
kushagrasarathe Aug 20, 2026
e866228
ds apply: settings root needs w-full — AppShell inner centers flex items
kushagrasarathe Aug 20, 2026
b356819
ds decisions: ErrorAlert -> Notification (38 files, component deleted…
kushagrasarathe Aug 20, 2026
c8799e1
ds decisions: InfoCard -> Notification (component deleted)
kushagrasarathe Aug 20, 2026
c8c1c5e
ds decisions: one SlideToConfirm (board 17785:11764, both old impls d…
kushagrasarathe Aug 20, 2026
df3e57f
ds decisions: marquee banners out of the app shell — maintenance/conn…
kushagrasarathe Aug 20, 2026
93e3a03
ds decisions: PaymentInfoRow kept as the label/value/copy wrapper, to…
kushagrasarathe Aug 20, 2026
61bfacd
ds decisions: ActionListCard deleted - consumers render ListItem dire…
kushagrasarathe Aug 20, 2026
c4118c2
ds decisions: standalone app links render LinkButton
kushagrasarathe Aug 20, 2026
ebe5285
ds decisions: orphan sweep — beta banner i18n keys removed, SearchInp…
kushagrasarathe Aug 20, 2026
161c344
ds fix: /dev/ds/patterns/amount-input crashed (react 130) - only patt…
kushagrasarathe Aug 20, 2026
c993030
setup: invite step - Next becomes the full-width primary cta under th…
kushagrasarathe Aug 20, 2026
c299364
dev: /dev/devices viewport harness, reachable on preview builds
kushagrasarathe Aug 21, 2026
dda130b
qa: delete dead RouteExpiryTimer, one ProgressBar primitive (0_Bruddl…
kushagrasarathe Aug 21, 2026
78439bd
qa: SegmentedControl primitive, board pressed states, sliding bottom-…
kushagrasarathe Aug 21, 2026
45301c8
qa: filled-icon knockout fix, icon-size sweep, pill logout buttons, b…
kushagrasarathe Aug 21, 2026
b314776
qa: per-page maintenance banner targeting, badge/kyc drawer heads on …
kushagrasarathe Aug 21, 2026
aac0709
home IA: add/send bottom drawers + destination page alignment (figma …
kushagrasarathe Aug 21, 2026
827b69e
qa: spacing sweep to board 17291:2772 anatomy
kushagrasarathe Aug 21, 2026
6a7bf69
Merge remote-tracking branch 'origin/ds/apply-remaining-pages' into d…
kushagrasarathe Aug 21, 2026
4b3fb2b
lint: Mercado Pago brand title via const (copy-props-from-catalog wan…
kushagrasarathe Aug 21, 2026
ad7e134
review: coderabbit round 1
kushagrasarathe Aug 21, 2026
8848583
review: /code-review round — geo-race gate, claim-flow isolation, dra…
kushagrasarathe Aug 21, 2026
7d66de0
review: single navigation on the send-link cta (coderabbit out-of-dif…
kushagrasarathe Aug 21, 2026
3222e62
fix: submenu pressed state uses action-primary (button board 17308:13…
kushagrasarathe Aug 21, 2026
2625444
qa: home top-left avatar one size down (48 -> 32) per Vlad follow-up;…
kushagrasarathe Aug 21, 2026
a448b65
Merge pull request #2758 from peanutprotocol/ds/apply-remaining-pages
kushagrasarathe Aug 21, 2026
3694056
Merge pull request #2780 from peanutprotocol/ds/home-ia-add-send
kushagrasarathe Aug 21, 2026
a67c04a
Merge origin/dev into feat/design-system
kushagrasarathe Aug 21, 2026
6869205
prettier: DS-branch tailwind class order on merged dev files
kushagrasarathe Aug 21, 2026
deecb3b
ds-lint: rebase baseline after dev back-merge
kushagrasarathe Aug 21, 2026
d8f14a5
home IA: add drawer is bank transfer + crypto only (product ruling)
kushagrasarathe Aug 21, 2026
abc5bd4
bottom nav: drag the active pill along the bar to switch tabs
kushagrasarathe Aug 21, 2026
b256dae
Merge remote-tracking branch 'origin/feat/design-system' into merge/d…
kushagrasarathe Aug 21, 2026
f336997
Merge pull request #2781 from peanutprotocol/merge/dev-into-design-sy…
kushagrasarathe Aug 21, 2026
96b3178
fix(ds-qa): notification list layout, profile-edit form rhythm, icon …
kushagrasarathe Aug 24, 2026
8976309
fix(ds-qa): bank-form labels, language flags, unified profile chips, …
kushagrasarathe Aug 24, 2026
caf8b88
fix(ds-qa): bottom-nav slide starts from rest; exchange-rate contrast…
kushagrasarathe Aug 24, 2026
7e9188f
fix(ds-qa): Notification items actually renders
kushagrasarathe Aug 24, 2026
d15b66b
fix(ds-qa): Save sticks to the viewport; region locales get the globe
kushagrasarathe Aug 24, 2026
5213f4b
chore(ds-qa): drop Icon imports orphaned by the Notification items mi…
kushagrasarathe Aug 24, 2026
c4746e4
fix(ds-qa): restore accessible names, stop empty banners, keep /shhhh…
kushagrasarathe Aug 24, 2026
c1c6af4
fix(ds-qa): don't wipe typed input on auth hydration; items=[] suppre…
kushagrasarathe Aug 24, 2026
a28f658
fix(ds-qa): checklist notifications drop the (i) and go back to prod …
kushagrasarathe Aug 24, 2026
37cef2c
fix(ds-qa): the nav pill knows where it is going before it starts
kushagrasarathe Aug 24, 2026
405836a
fix(ds-qa): swap the send drawer person icons
kushagrasarathe Aug 24, 2026
1c561f2
fix(ds-qa): the es-419 row flies the Spain flag
kushagrasarathe Aug 24, 2026
cc96b4a
fix(ds-qa): profile Save goes back inline, under the last field
kushagrasarathe Aug 24, 2026
04978e0
fix(ds-qa): the /shhhhh back button overlays the pink fold
kushagrasarathe Aug 24, 2026
f3834f9
fix(ds-qa): the profile row is called "Regions and verification"
kushagrasarathe Aug 24, 2026
8037d6f
docs(ds-qa): the nav block comment stops claiming a repro it never had
kushagrasarathe Aug 24, 2026
20a34fa
fix(ds-qa): the profile dirty check compares against what the form lo…
kushagrasarathe Aug 24, 2026
355932e
fix(ds): twMerge was deleting the DS type tokens it did not recognise
kushagrasarathe Aug 24, 2026
fad1c17
fix(ds): anatomy divergences the class list could not show
kushagrasarathe Aug 25, 2026
97b40c0
fix(ds): NavHeader title reads Heading/S from the token, not by coinc…
kushagrasarathe Aug 25, 2026
173979f
fix(ds): Avatar initials take their type from the board, not from stock
kushagrasarathe Aug 25, 2026
60ed3a9
fix(ds): a bare font-weight class cannot lose to a caller's type token
kushagrasarathe Aug 25, 2026
c5c2644
fix(ds): DrawerTitle stopped overriding the heading its callers ask for
kushagrasarathe Aug 25, 2026
cb9aefb
chore: drop the scratch anatomy spec notes that should never have bee…
kushagrasarathe Aug 25, 2026
1adb59b
Merge pull request #2799 from peanutprotocol/ds/qa-round-3-fixes
kushagrasarathe Aug 25, 2026
039f320
fix(tw): camelCase type tokens and extraBlack weight escaped the twMe…
kushagrasarathe Aug 25, 2026
3b70b31
fix(ds): safe-area vars, 44px touch targets, localized dismiss label
kushagrasarathe Aug 25, 2026
c968e73
Merge origin/dev into feat/design-system (release PR #2813 conflict r…
kushagrasarathe Aug 25, 2026
a9cf038
fix(ds): ListItem disabled tokens, NavHeader title overrides, carouse…
kushagrasarathe Aug 25, 2026
62f5592
fix(tw): register the remaining custom-token families in twMerge
kushagrasarathe Aug 25, 2026
7ae1380
fix(ds): NavHeader long titles stop colliding with the side buttons
kushagrasarathe Aug 25, 2026
eb2cc7f
fix(ds): recover-funds shows the ds empty state when nothing is recov…
kushagrasarathe Aug 25, 2026
9519e6c
fix(ds): bottom-nav strip goes transparent — pill and qr button float
kushagrasarathe Aug 25, 2026
48cf4d4
ds 04: regenerate the audit inventory against today's branch
kushagrasarathe Aug 25, 2026
c495665
ds(phase-2): add the missing composition recipes — PageStack, Section…
kushagrasarathe Aug 25, 2026
bb46926
ds(phase-2): tier-2 legacy color-class sweep — semantic tokens in, de…
kushagrasarathe Aug 25, 2026
851b8d3
ds(phase-2): ratchet the phase-2 finish lines — legacyColorClasses + …
kushagrasarathe Aug 25, 2026
2ebbc84
ds(phase-2): tier-3 batch 1 — card triple, settings, backup, qr succe…
kushagrasarathe Aug 25, 2026
d3ea438
ds(phase-2): tier-3 batch 2 — page shells and list positions compose …
kushagrasarathe Aug 25, 2026
943226c
ds(phase-2): comment hygiene on the migrated pages — narration out, c…
kushagrasarathe Aug 25, 2026
4d9b5f3
ds(phase-2): tier-3 batch 3 — centered-content blocks compose PageSta…
kushagrasarathe Aug 25, 2026
6010426
ds(phase-2): legacy metric excludes the shadow-primary/secondary offs…
kushagrasarathe Aug 25, 2026
b6d38f0
ds(phase-2): smell pass — CardEligibilityCheckScreen adopts PageStack…
kushagrasarathe Aug 25, 2026
e309987
ds(phase-2): /code-review fixes — alert-modal icon bubbles, ratchet h…
kushagrasarathe Aug 25, 2026
d6bf44a
ds(phase-2): legacy kill complete — figma primitive ramp in, colors +…
kushagrasarathe Aug 25, 2026
f859685
ds(phase-2): second /code-review round — repair the sweep's collatera…
kushagrasarathe Aug 25, 2026
37faf6f
ds(phase-2): the last app-surface stock-text stragglers move to the t…
kushagrasarathe Aug 25, 2026
843df91
Merge pull request #2818 from peanutprotocol/ds/phase-2-styling-cleanup
kushagrasarathe Aug 25, 2026
2dcdb2d
Merge remote-tracking branch 'origin/feat/design-system' into ds/04-a…
kushagrasarathe Aug 25, 2026
a9a56b3
ds 04: carry the audit counts across the phase-2 base
kushagrasarathe Aug 25, 2026
00081d4
fix(ds): settings pinned footer, invites empty states, limits retry t…
kushagrasarathe Aug 25, 2026
537c2a4
chore: delete the /notifications page
kushagrasarathe Aug 25, 2026
09d46d5
fix(ds): restore desktop headers, stop history-wide re-renders, recei…
kushagrasarathe Aug 25, 2026
8af1978
Merge pull request #2814 from peanutprotocol/ds/04-audit-data-refresh
kushagrasarathe Aug 25, 2026
7fcbea9
audit-data: drop deleted notifications page path from ad-hoc text-lin…
kushagrasarathe Aug 25, 2026
bc084ae
chore: delete the orphaned /settings root page
kushagrasarathe Aug 25, 2026
8d8e438
bottom nav: links not draggable so native link-drag doesn't fight the…
kushagrasarathe Aug 26, 2026
d7839a7
Merge branch 'feat/design-system' of https://github.com/peanutprotoco…
kushagrasarathe Aug 26, 2026
c4d0313
setup: skip button reads foreground-over-color-secondary (sits on col…
kushagrasarathe Aug 26, 2026
4a8f150
Merge remote-tracking branch 'origin/dev' into ds-final-2813
kushagrasarathe Aug 26, 2026
3336068
Merge origin/dev into feat/design-system (status page)
kushagrasarathe Aug 26, 2026
a417f70
fix(slide-to-confirm): money control commits only at 100%, resets aft…
kushagrasarathe Aug 27, 2026
70239db
fix(ds): restore styling the token sweep silently deleted
kushagrasarathe Aug 27, 2026
998a9a5
fix(input): component-owned states per the input board — black rest b…
kushagrasarathe Aug 27, 2026
09e6da5
fix(ds): figma-1:1 pass on board components — radii, modal close, gly…
kushagrasarathe Aug 27, 2026
b483e5d
fix(ds): token graveyard cleared + the machinery that keeps it clear
kushagrasarathe Aug 27, 2026
8e7c090
fix(ds): consistency round — one network list, home drawer parity, AP…
kushagrasarathe Aug 27, 2026
eaf18c5
test(ds): the checks that guard behavior instead of green paint
kushagrasarathe Aug 27, 2026
93d21c1
dev/ds: root section counts derive from nav-config — the third hand l…
kushagrasarathe Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 29 additions & 5 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
# Prettier formatting + content-link validation. Fast, no node_modules
# needed beyond what setup-node cache restores.
# (Renamed from "lint" — the job never actually ran a linter; ESLint now
# lives in its own advisory job below.)
# lives in its own blocking job below.)
format:
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -60,9 +60,32 @@ jobs:
- name: Validate sitemap, footer, and blog links
run: pnpm validate-links

# Blocking ESLint pass. In ci-success.needs, so a red eslint job blocks the
# PR. `pnpm lint` fails on errors only — the remaining warnings do not gate.
# Ratchet to a warn floor (`--max-warnings`) once that count is down.
# DS debt ratchet (DS 10, TASK-21450). Runs scripts/ds-lint-counts.mjs
# --check against the committed baseline: debt counts (raw hex, inline
# styles, stock text sizes, non-DS classes in views, useSearchParams files)
# may only go down. A PR that lowers a count should also tighten the
# baseline (--write-baseline) so the gain locks in. Pure-node script — no
# pnpm install needed.
ds-lint:
runs-on: ubuntu-latest
steps:
# no submodules/token: the count script only reads src/**/*.ts(x)
# and the only submodule (src/content) holds none. no git ops after
# checkout either, so don't persist credentials.
- uses: actions/checkout@v4
with:
persist-credentials: false

- uses: actions/setup-node@v4
with:
node-version: '20'

- name: DS lint-count ratchet
run: node scripts/ds-lint-counts.mjs --check

# Blocking ESLint pass (DS 10, TASK-21450). Errors reached zero on
# feat/design-system, so this gates the PR via ci-success.needs. Warnings
# do not fail the job; add a warn floor only if the team decides one.
eslint:
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -510,7 +533,7 @@ jobs:
ci-success:
name: ci-success
if: always()
needs: [format, eslint, typecheck, unit, e2e, report, human-authors]
needs: [format, ds-lint, eslint, typecheck, unit, e2e, report, human-authors]
runs-on: ubuntu-latest
steps:
- name: Verify all required jobs passed
Expand All @@ -519,6 +542,7 @@ jobs:
echo "::error::One or more required jobs failed or were cancelled"
echo "Job results:"
echo " format: ${{ needs.format.result }}"
echo " ds-lint: ${{ needs['ds-lint'].result }}"
echo " eslint: ${{ needs.eslint.result }}"
echo " typecheck: ${{ needs.typecheck.result }}"
echo " unit: ${{ needs.unit.result }}"
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ next-env.d.ts

# local files
playground/
# ...except the design-system doc-site Playground route, which is a real tracked route
!src/app/(mobile-ui)/dev/ds/playground/

# yarn and npm lockfiles
package-lock.json
Expand Down
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,9 @@ src/components/TransactionDetails/__tests__/fixtures/render-baseline.json
src/types/api.openapi.json
src/types/api.generated.ts

# generated from globals.css @theme via `pnpm gen:ds-tokens` — stable
# JSON.stringify formatting so a prettier bump can't flip the drift gate.
src/app/(mobile-ui)/dev/ds/foundations/tokens.generated.ts

# static single-file quiz (hand-tuned inline CSS/JS; not prettier-formatted)
public/onboarding-quiz/
64 changes: 46 additions & 18 deletions e2e/flows/dev-showcase.spec.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,72 @@
/**
* Dev routes — design system showcase + component gallery.
* Dev routes — the /dev/ds design-system showcase.
*
* These are the CRITICAL snapshots for M2. When we kill MUI, flow contexts,
* or Redux, the design system showcase should still render identically.
*
* The dev showcase renders every Bruddle primitive + Global component with
* every variant — the canonical regression target.
* The /dev/ds doc-site pages render every Bruddle primitive + Global
* component with every variant — the canonical regression target. The sweep
* below walks every doc page from the showcase's own nav config, so new
* pages join the regression net automatically.
*/

import { test } from '@playwright/test'
import { captureStep, collectConsoleLogs } from '../utils/capture'
import { expect, test } from '@playwright/test'
import { captureStep, collectConsoleLogs, getConsoleErrors } from '../utils/capture'
import { dismissModals } from '../utils/dismiss-modals'
// type-only IconName import inside nav-config is erased at runtime, so this is safe to import here
import { SIDEBAR_CONFIG, TIERS } from '../../src/app/(mobile-ui)/dev/ds/_components/nav-config'

test.describe('Dev showcase (design system)', () => {
test('/dev/components landing', async ({ page }, testInfo) => {
const c = collectConsoleLogs(page)
await page.goto('/dev/components', { waitUntil: 'domcontentloaded' })
await dismissModals(page)
await captureStep(page, testInfo, { name: '01-dev-components' })
await page.waitForTimeout(2000)
await captureStep(page, testInfo, { name: '02-dev-components-settled' })
c.flush(testInfo, 'dev-components')
})
// tier indexes + every doc page; playground sub-items live under /dev (standalone harnesses), not /dev/ds
const DS_DOC_ROUTES = [...TIERS, ...Object.values(SIDEBAR_CONFIG).flat()]
.map((item) => item.href)
.filter((href) => href.startsWith('/dev/ds'))

// known sandbox noise the showcase cannot control (F-28: the sweep used to
// collect console errors and assert nothing — a page could throw on every
// render and stay green). Everything else that logs console.error fails.
const SANDBOX_ERROR_ALLOW = [
/429/, // public RPC rate limits in the sandbox
/ERR_NETWORK|Failed to fetch|NetworkError|net::ERR/i, // providers absent in sandbox
/favicon/i,
]
const assertNoConsoleErrors = (entries: Array<{ type: string; text: string }>, where: string) => {
const errors = getConsoleErrors(entries).filter((e) => !SANDBOX_ERROR_ALLOW.some((p) => p.test(e.text)))
expect(errors, `${where}: unexpected console errors\n${errors.map((e) => e.text).join('\n')}`).toEqual([])
}

test.describe('Dev showcase (design system)', () => {
test('/dev — root dev page', async ({ page }, testInfo) => {
const c = collectConsoleLogs(page)
await page.goto('/dev', { waitUntil: 'domcontentloaded' })
const res = await page.goto('/dev', { waitUntil: 'domcontentloaded' })
expect(res?.ok(), '/dev responded non-2xx').toBeTruthy()
await dismissModals(page)
await captureStep(page, testInfo, { name: '01-dev-root' })
c.flush(testInfo, 'dev-root')
assertNoConsoleErrors(c.entries, '/dev')
})

test('/dev/ds — design system root', async ({ page }, testInfo) => {
const c = collectConsoleLogs(page)
const res = await page.goto('/dev/ds', { waitUntil: 'domcontentloaded' }).catch(() => null)
if (!res) return // not all repos have this route
const res = await page.goto('/dev/ds', { waitUntil: 'domcontentloaded' })
expect(res?.ok(), '/dev/ds responded non-2xx').toBeTruthy()
await dismissModals(page)
await captureStep(page, testInfo, { name: '01-ds-root' })
await page.waitForTimeout(1500)
await captureStep(page, testInfo, { name: '02-ds-root-settled' })
c.flush(testInfo, 'ds-root')
assertNoConsoleErrors(c.entries, '/dev/ds')
})

test('/dev/ds doc pages — full component sweep', async ({ page }, testInfo) => {
const c = collectConsoleLogs(page)
for (const route of DS_DOC_ROUTES) {
const res = await page.goto(route, { waitUntil: 'domcontentloaded' })
expect(res?.ok(), `${route} responded non-2xx`).toBeTruthy()
await dismissModals(page)
await page.waitForTimeout(800)
await captureStep(page, testInfo, { name: route.replace('/dev/ds', 'ds').replaceAll('/', '-') })
}
c.flush(testInfo, 'ds-doc-sweep')
assertNoConsoleErrors(c.entries, 'ds doc sweep')
})
})
Loading