feat: add Gear page CTA linking to /jersey-public (#245) #248
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/westside-app!248
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "245-gear-jersey-public-link"
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?
Summary
Adds a prominent "Order Your Jersey" CTA on the Gear page linking to
/jersey-publicso players browsing the site can discover the jersey intake flow without needing Marcus to DM the URL. Part of T7 of the System B production rollout.Closes #245
Changes
src/routes/(public)/gear/+page.svelte— added an "Order CTA" section between the hero and the gear gallery. Uses existingbtn btn-primary btn-lgclasses (same as landing, about, staff, teams pages) for visual consistency. Plain<a href="/jersey-public">— no JS interception. Sits above the fold on mobile immediately under the Kings/Queens toggle, so it's the first actionable element after a user picks a program.Landing page CTA: intentionally omitted. The landing hero already has two primary CTAs (
Register Your Player+Learn More) and a bottomContact UsCTA. The Quick Links grid usesgrid grid-3with nogrid-4utility available, so adding a fourth card would require inventing layout. Adding a third hero button dilutes the existing "register" call-to-action, which is the higher-value top-of-funnel action. The user story explicitly names the Gear page as the discovery surface ("As a player visiting the Gear page"), and the ticket allows opting out of the landing CTA with justification. Gear page is the canonical discovery path; landing stays focused on registration.Test Plan
npm run check— 0 errors (pre-existing warnings unchanged)npm run build— cleangrep -n "jersey-public" src/routes/(public)/gear/+page.svelte→ 1 match (line 29)grep -n "jersey-public" src/routes/(public)/+page.svelte→ 0 matches (intentional, see above)@applyin gear pagegit diff main -- src/routes/(app)/→ empty (T1 untouched)/gear, confirm "Order Your Jersey" button renders under the Kings/Queens toggle/signinvia the existing(app)/+layout.svelteguardbtn-lgis well over 44px in the existing CSSReview Checklist
btn btn-primary btn-lgclasses — no visual invention<a href>— no JS interception, nogoto()src/routes/(app)/(T1 hands off)src/app.cssRelated Notes
westside-landing#243(T1/jersey-publicroute — already in main)WS-S31— admin public jersey intake linkarch-jersey-intakePR #248 Review
DOMAIN REVIEW
Stack: SvelteKit / TypeScript / pure CSS (no Tailwind per
feedback_no_tailwind).Diff: 1 file, +7/-0, purely additive. New
<section class="section">block inserted between the hero section (closing</section>at line 25) and the Gear Gallery comment at line 26 insrc/routes/(public)/gear/+page.svelte. No existing content touched.Link correctness: Plain
<a href="/jersey-public" class="btn btn-primary btn-lg">Order Your Jersey</a>. No JS interception, no SvelteKitgoto(), no preventDefault. The unauthenticated user will hit the(app)layout guard and bounce through/signinas designed.CSS class verification: Verified in
src/app.css:.btn— line 183.btn-primary— line 203.btn-lg— line 234.container— line 123.section— line 765All four classes referenced in the diff exist. No T1-style phantom-class mistake. No new CSS, no
@apply, no Tailwind utilities.Scope hygiene:
src/routes/(app)/jersey-public/*— untouched (T1 territory preserved)src/routes/(app)/+layout.svelte— untouched (auth guard preserved)src/app.css— untouchedAccessibility / mobile:
btn-lgis the same class used by hero CTAs on landing/about/staff/teams, so the 44px tap target is inherited from the existing design system. Centered via inlinestyle="text-align: center;"which is acceptable for a one-off CTA container (not worth inventing a utility class for a single usage).BLOCKERS
None.
NITS
style="text-align: center;"is pragmatic but slightly inconsistent with the pure-CSS-vars convention. Non-blocking under the hot-fix profile — a single declarative style on a container is not worth a round trip./gearrenders the CTA and the unauthenticated bounce works in prod.SOP COMPLIANCE
245-gear-jersey-public-link)Closes #245presentWS-S31, archarch-jersey-intake, board item #952, parallel T3 #948btn btn-primary btn-lgidiomPROCESS OBSERVATIONS
Textbook T7 hot-fix execution. Minimal diff, correct classes verified against the stylesheet (unlike the T1 phantom-class incident this PR explicitly guards against), and the PR body pre-answers the obvious "why no landing CTA" question with sound reasoning tied to the user story. Change failure risk: near-zero — 7 additive lines touching zero existing behavior. Deployment frequency: positive contribution, unblocks the T7 checkbox on System B rollout. No documentation gap.
VERDICT: APPROVED