feat: travel schedule page (v1) + nav updates (#77) #10
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "77-schedule-page-v2"
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
Add a v1 travel schedule page for Westside Kings & Queens with per-team tournament sections, and update navigation across all pages to include the new Schedule link.
Changes
westside-scheduleentry point (no other changes)Test Plan
npm run buildpasses with no errors/westside/schedule.html— shows hero, travel teams section (3 cards), local teams section (2 cards), CTA, footerReview Checklist
Related
Review -- PR #10
Scope check
baseuntouched) -- constraint from issue #77 satisfiedCode quality
Nav consistency
onclick={closeMenu})Entry point
Build
npm run buildpasses, output includeswestside/schedule.htmland scoped CSS bundleNits
None.
VERDICT: APPROVE
PR #10 Review
DOMAIN REVIEW
Tech stack: SvelteKit (Svelte 5 runes mode), Vite MPA, vanilla CSS with design tokens. This is a playground repo -- static HTML/CSS/Svelte prototypes, no production backend, no test framework.
Files changed (7):
vite.config.js,westside/Nav.svelte,westside/Schedule.svelte(new),westside/schedule.html(new),westside/staff.html,westside/sponsors.html,westside/success.html. All changes are additions (+300/-0). Clean scope.Scope creep check (critical -- PR #8 was NOT APPROVED for this): No base path changes anywhere. No
baseconfig invite.config.js. The diff touches exactly the files described in the PR body -- schedule page + nav link additions to all hardcoded-nav HTML pages. Clean.Component architecture:
Schedule.sveltecorrectly importsNav.svelteandFooter.svelte, matching the pattern established byApp.svelte. The Svelte component usesmount()in the HTML entry point, matching theindex.htmlpattern exactly.CSS quality:
--space-*). Good.--color-*). Good.font-size: 0.75remon.team-badge(line 179) is a hardcoded value rather thanvar(--font-size-sm)(0.875rem). This is a deliberate choice since there is no--font-size-xstoken. Acceptable -- the badge intentionally needs a smaller size than the smallest token.min-width: 100px/120pxon.schedule-event-dateare magic numbers, but reasonable for date column width. No token exists for this. Acceptable.gap: 0on.schedule-eventsis explicit and intentional (events separated by border-top, not gap). Fine.640pxmatches the global stylesheet's tablet breakpoint. Good.1024pxneeded since the schedule layout is single-column by design.Accessibility:
schedule.htmlhaslang="en". Good.aria-label="Main navigation",aria-expanded,aria-controls. Good.ulfor event lists, proper heading hierarchy (h1 > h2 > h3). Good.<ul>/<li>which is correct semantics.SEO / Meta:
schedule.htmlincludes Open Graph and Twitter Card meta tags matching the pattern of other pages. Good.og:urlis missing fromschedule.html, but it is also missing from all other entry HTML files in this repo, so this is a pre-existing pattern, not a regression.Nav consistency: The Schedule link is inserted between Sponsors and FAQ in all four locations:
Nav.svelte(Svelte component used by index + schedule pages) -- line 35staff.html(hardcoded nav) -- line 45sponsors.html(hardcoded nav) -- line 45success.html(hardcoded nav) -- line 45All four match. Nav link order is consistent: Home, About, Staff, Sponsors, Schedule, FAQ. Good.
DRY observation (nit, not blocker): The three travel teams share identical event arrays (same 5 Power 32 sessions with same dates). This is data, not logic -- they genuinely are the same circuit events. Extracting
power32Eventsas a shared constant and referencing it from each team object would reduce duplication, but this is a v1 prototype with placeholder data. Acceptable for playground.Hardcoded nav duplication (pre-existing):
staff.html,sponsors.html, andsuccess.htmlall have hardcoded nav HTML + inline JS for the hamburger menu, whileindex.htmlandschedule.htmluse the SvelteNav.sveltecomponent. This means nav changes require touching 4+ files. This is a pre-existing architectural debt, not introduced by this PR. The PR correctly updates all instances.BLOCKERS
None.
This is a playground repo with no test framework configured (
package.jsonhas no test script, no vitest/playwright dependency). Per project conventions, playground repos are prototype gates -- test coverage requirements apply at the production repo stage, not here. The "new functionality with zero test coverage" blocker does not apply to playground prototypes.No unvalidated user input (static content, no forms, no dynamic data). No secrets or credentials. No DRY violations in auth/security paths (no auth exists in this repo).
NITS
DRY -- shared event data: The
power32Eventsarray is duplicated 3x acrosstravelTeams. Consider extracting to aconst power32Events = [...]and referencing it:events: power32Events. Low priority for a playground prototype with placeholder data.Missing
--font-size-xstoken: The.team-badgeuses0.75remdirectly. If this pattern recurs, consider adding--font-size-xs: 0.75remto the design tokens instyle.css.Queens not represented in schedule data: The hero says "Westside Kings" (not "Kings & Queens"), and all team entries are "Kings" only. The page title in
schedule.htmlsays "Westside Kings & Queens." If Queens teams will be added, this is fine for v1. If not, the page title/meta should align with the content.SOP COMPLIANCE
77-schedule-page-v2references issue #77Closes forgejo_admin/westside-app#77PROCESS OBSERVATIONS
westside-appbut the work is insvelte-playground. This follows the playground-first convention correctly.VERDICT: APPROVED
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.