feat(pwa): rebuild /experience with subnav + view/edit toggle (#144) #172
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!172
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "144-experience-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 #144.
Summary
/experiencenow opens read-only with a page-levelEdit(secondary, pencil-led). Header flips to ghostCancel+ primaryDonein edit mode.Tabsprimitive yet —role="tablist",role="tab",aria-selected,aria-controls,tabIndexper active state. Sub-nav stays interactive whether or not edit mode is on (acceptance criterion).Badge+ focus + mono start–end dates + description.Add entry(primary, leadingPlus) in the section head; per-cardPencil+Trash2IconButtonpair. Creating or editing replaces the affected card with a dashed"Editing X…"placeholder while the form sits above the list.Field+Input+Select+Textareaprimitives; start/end dates share aformRowflex.Hammericon tile,{tab} — coming soontitle, body copy from #146's en.json, and a mono "Tracked in epic #4" label.page.tsxthat prefetches["educations"]and anexperience-client.tsxshell that owns tab + edit state. The Education subsection moved toeducation-section.tsx(replacing the oldeducation-client.tsx) so the shell can passeditingdown without lifting TanStack state.experience.module.cssportscax-subnav/cax-exp/cax-edu/cax-plannedonto the Carol DS aliases. No inline styles.experience.tabs.aria,experience.comingSoon.title.experience.education.addEntryvalue dropped its leading "+" since the button supplies aPlusleadingIcon.Test plan
npm run lint/npx tsc --noEmit/npm testall clean (440 passed).Add entrybutton visible, pencil/trash IconButtons per card.Add entry→ inline form (Institution / Type / Focus / Start date / End date / Description) above the list.style="color:transparent"on the sidebar<img>(Next.js Image default).🤖 Generated with Claude Code
The Experience page now opens read-only with a page-level Edit button (secondary, pencil-led) and a segmented sub-nav for Education / Jobs / Contracts (Education default). Sub-nav is keyboard-accessible with role="tab" + role="tablist" + aria-selected + aria-controls, and stays interactive whether or not edit mode is on (per the ticket's acceptance criterion). Education tab — view mode renders the entry cards from the design: institution + type Badge + focus + mono start-end dates + description. Edit mode reveals an "Add entry" Button (primary, leading Plus icon) in the section head and a pencil + trash IconButton pair on each card. Creating or editing an entry replaces the corresponding card with a dashed placeholder while the form sits above the list. Cancel and Done are no-op exits — every entry mutation persists eagerly via the existing PUT / PATCH / DELETE. Jobs / Contracts tabs — centred planned-note card with a Hammer icon tile, "{tab} — coming soon" title, body copy from #146's en.json, and a "Tracked in epic #4" mono ticket label. Split the route into a server page.tsx that prefetches ["educations"] and an experience-client.tsx shell. The Education subsection moved into education-section.tsx (replacing the old education-client.tsx) so the page shell can pass `editing` down without sharing TanStack state. Carol DS token aliases throughout; no inline styles. New experience.module.css ports cax-subnav / cax-exp / cax-edu / cax-planned from the design package. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Trivy (container image)
Threshold:
high· Total findings: 121 · At/above threshold: 16.27.0, 7.28.0, 8.5.0📊 Test coverage
Patch coverage: 0.0% (0/301 added lines) ⚠️ (soft target ≥ 80%)
Overall (
app/,lib/,db/, excluding UI per ADR-0019):Changed files in this PR (source only — tests excluded):
app/(app)/experience/education-section.tsxSoft thresholds per ADR-0019. Coverage is informational and does not block merge.