feat(pwa): rebuild /account against DS primitives + tokens (#141) #167
No reviewers
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol!167
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "141-account-ds-rebuild"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #141.
Summary
/accountrebuilt against the in-tree primitives (Card,Button) and the Carol DS token aliases. No inline styles in the page; newaccount.module.csscarries the layout, icon-tile, and section rules ported from../carol-design/design_files/index.html.cax-*.Card. Local password row usesKeyRound; every OAuth row usesShieldCheck. Lucide v1.21 dropped its brand marks, so brand-free + sub-text identifying the provider is the trade-off; a self-hoster's OIDC instance wouldn't render with a misleading vendor mark either.Button variant="secondary" fullWidthwith a leading shield icon and label "Connect <provider>". Hidden entirely when no providers remain to connect (previously the section header rendered with an empty body).secondary fullWidthButton linking to/account/tokens.<form method="get">— the OAuth start route already accepts GET, intra-app nav to/account/tokensdoes too, and this keeps the primitive used as designed (a real<button>) without inline styles on an<a>or a polymorphicasprop on Button.Server flows untouched:
getServerSession, the OAuth start handler, andunlinkOAuthIdentityActionsee the same shape — only the rendering layer changed.Test plan
npm run lint/npx tsc --noEmit/npm testall clean.Connect GitHubform-GET → 302 togithub.com/login/oauth/authorize?...&state=...&code_challenge=...(OAuth start preserved end-to-end).Manage tokensform-GET → 200 from/account/tokens(intra-app nav preserved).style="color:transparent"on the sidebar<img>(Next.js Image default; not from this page).Light, linked GitHub

Dark, linked GitHub

Light, local-only ("Connect another" visible)

Dark, local-only

🤖 Generated with Claude Code
📊 Test coverage
Patch coverage: no testable lines changed.
Overall (
app/,lib/,db/, excluding UI per ADR-0019):Soft thresholds per ADR-0019. Coverage is informational and does not block merge.
Trivy (container image)
Threshold:
high· Total findings: 121 · At/above threshold: 16.27.0, 7.28.0, 8.5.0The DS prototype's `.cax-lede { margin-top: -10px; }` hugs the h1 too tight in the actual app — the title and lede read as one block. Swap to a positive 8px top margin on /account and /account/tokens. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>