feat: commerce page spec header, shared CSS/JS, DB schema gaps #51
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "50-commerce-spec-refactor"
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
Rewrites commerce.html with a full @-comment spec header, moves inline styles and scripts to shared files, and fixes DB schema gaps across all three commerce tabs (jerseys, subscriptions, contracts).
Changes
<style>and<script>blocks. Added Shipped jersey rows, Past Due/Canceled subscription split, Monthly Fee column, Signed Date/Signed By contract columns..tab-barpresence check.Test Plan
Review Checklist
<style>blocks in commerce.html<script>blocks (only external app.js reference)Related Notes
None.
Related
Closes #50
PR #51 Review
DOMAIN REVIEW
Tech stack: Static HTML/CSS/JS playground prototype. No framework, no backend, no build step.
HTML structure: Well-organized with clear section comments. Three tabbed panels (jerseys, subscriptions, contracts) each with summary stats, filter buttons, and data tables. The
data-labelattributes on all<td>elements correctly support the mobile CSS::beforestacking pattern.CSS quality: New styles appended to
shared/style.cssuse design tokens consistently (--space-*,--font-size-*,--color-*,--radius,--transition-fast). New badge classes (badge-shipped,badge-past-due,badge-canceled) follow the existing badge pattern. Mobile responsive stacking at 600px breakpoint is solid.JS quality: Tab switching and per-panel filtering logic is clean. Guarded by
.tab-barpresence check so it only initializes on the commerce page. Thebtn.closest('.filter-tabs')scoping ensures filter clicks only affect their own panel. No global state leaks.PII concern: The prototype contains what appear to be real player names, parent names, and phone numbers (e.g.,
385-558-1043,801-633-2851,760-885-5818). This is a playground repo served on a Tailscale funnel, so exposure is limited, but real PII in committed source code is a risk vector. If these are real contact numbers, they should be replaced with synthetic data. If they are already synthetic, disregard.BLOCKERS
None -- with the caveat below on PII.
This is a static HTML playground prototype. The BLOCKER criteria (test coverage, unvalidated user input, secrets, DRY auth violations) do not apply to a read-only prototype with no backend, no user input processing, and no auth logic. The "test plan" is manual visual verification, which is appropriate for this domain.
Conditional BLOCKER -- PII: If the phone numbers and parent names in the HTML are real personal data, they must be replaced with synthetic values before merge. Real PII in source control is a data handling violation. If they are already fabricated, this is not a blocker.
NITS
Semantic badge mismatch in Contracts tab: Signed contracts use
class="badge badge-paid"(e.g.,<span class="badge badge-paid">Signed</span>). This reuses the jersey payment badge for contract signing status. Abadge-signedclass would be semantically clearer and prevent confusion when these patterns promote to SvelteKit components.Missing ARIA attributes on tabs: Tab buttons lack
role="tab",aria-selected, andaria-controls. Tab panels lackrole="tabpanel"andaria-labelledby. Filter buttons similarly lack ARIA semantics. Acceptable for a prototype but should be addressed before promotion to westside-app.Hardcoded 2px in mobile responsive:
padding: 2px var(--space-sm);in the@media (max-width: 600px)block uses a magic number instead of a design token.CSS token existence unverified: The new badge classes reference
--color-blue-bg,--color-blue-border,--color-yellow-bg,--color-yellow-border,--color-danger-bg,--color-danger-border. I cannot verify these exist in the CSS variable definitions without a local checkout of the repo. If any are undefined, the badges will render without background/border colors.Opt-Out player marked as "Paid": Ayvah Apaisa has
Option: Opt-OutbutStatus: Paid. This may be intentionally reflecting the data (opt-out fee was paid), but it reads ambiguously in the UI. Worth confirming the data model intent.SOP COMPLIANCE
50-commerce-spec-refactor)Closes #50)PROCESS OBSERVATIONS
@gapssection correctly documents missing features.VERDICT: APPROVED
Approved with the conditional PII check: confirm the phone numbers and parent names are synthetic before merging. If real, replace with fabricated data first. All nits are non-blocking and appropriate to address during SvelteKit promotion.