Skip to content

simonua/cnsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

609 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Columbia Association Pool Assistant

GitHub Pages PWA Ready Nightly Browser Verification CodeQL License

A lightweight, mobile-first web app that helps Columbia Neighborhood Swim League (CNSL) swimmers, families, and fans quickly find information about pool openings, team practices, meets, and league resources.


Development

Run the PowerShell developer menu for the usual setup, build, server, lint, test, PWA, and performance workflows:

.\start.ps1

Setup

# Use Node.js 24 or newer from the checked-in baseline
nvm use

# Install dependencies
pnpm install

Building HTML

This project uses PostHTML for component-based HTML development. The source files are in the src/views directory and compiled to the /out directory.

# Build HTML files once
pnpm run build

# Build and watch for changes
pnpm start

Project Structure

  • src/views/*.html - Source HTML files with PostHTML syntax
  • src/views/layouts/*.html - Layout templates
  • src/views/components/*.html - Reusable components
  • src/css/ - Stylesheets
  • src/js/ - JavaScript files
  • src/assets/ - Images, data files, and other static assets
  • /out/ - Build output directory (generated files for deployment)

Annual Season Data

Pools, meets, and teams are stored beneath annual domain folders in src/assets/data/<YEAR>/<domain>/. The active published season is selected by YEAR in src/js/config/app-config.js.

The non-seasonal swim lesson provider directory is maintained in src/assets/data/lessons.json. It contains factual provider and contact details but intentionally excludes pricing and schedules.

See Annual Season Assets for the exact PDF, JSON, and schema layout and the checklist for preparing a new season such as 2027.

The scheduled seasonal-source GitHub Actions workflow has been retired, but deliberate source reviews remain required. Begin each review with pnpm run check:data-updates, reconcile its collected URLs with every official source defined by the active annual JSON and annual README, and directly request any uncovered source. Record every successfully completed review in the source check log, update the matching source-review timestamps, and refresh the accepted baseline with node scripts/season-data-agent.js --initialize. Structured JSON updates remain reviewed transcriptions of official material. Run pnpm run validate:data after annual-data changes as a separate integrity check; it does not prove that current online sources were reviewed. See Seasonal Data Source Review for the complete coverage and evidence requirements.

Verification

pnpm run lint
pnpm test
pnpm run test:coverage # Delivered JS coverage; excludes maintenance implementations in scripts/
pnpm run validate:data
pnpm run build
pnpm run verify:pwa

Playwright browser verification is deferred to the Nightly Browser Verification GitHub Actions workflow. Each day during May, June, and July, its scheduled check runs Chromium workflow and automated WCAG A/AA checks only when a push to main was recorded during the preceding 24 hours. It can also be run on demand through workflow dispatch. Browser results are reported separately and do not delay or block a GitHub Pages build. Use the Release Verification Checklist for the secure-origin installed-PWA and manual assistive-technology checks that automation cannot establish.

Design and maintenance decisions are recorded in the Visual Style Guide, Runtime And Stylesheet Ownership, Security And Privacy Decision, and retained Voice Assistant Question Scope.

GitHub Actions Workflow

This project uses GitHub Actions to automatically build and deploy the website to GitHub Pages when changes are pushed to the main branch. The workflow:

  1. Checks out the repository
  2. Sets up Node.js
  3. Installs dependencies
  4. Runs lint and unit-test checks
  5. Validates active annual data against its schemas and retained-source inventory
  6. Builds the project using PostHTML
  7. Verifies the generated PWA cache, offline, and publication metadata contract
  8. Uploads the built files as an artifact
  9. Deploys the artifact to GitHub Pages

Separately, the May-to-July daily browser-verification workflow runs Playwright after a push to main in the preceding 24 hours, or when manually dispatched.

Workflow configurations are located in .github/workflows/build-deploy.yml and .github/workflows/nightly-browser-verification.yml.

Repository Configuration

Repository automation and Copilot configuration is kept in .github/:

  • .github/agents/ contains discoverable GitHub Copilot custom agent profiles.
  • .github/automation/ contains retained automation notes and reviewed state for deliberate local workflows whose scheduled GitHub Actions definitions have been retired.
  • .github/instructions/, .github/skills/, and .github/copilot-instructions.md contain repository-specific Copilot guidance.
  • .github/workflows/ contains GitHub Actions definitions; .github/dependabot.yml configures dependency update checks.

Automation references:

  • Refactoring Audit retains design notes for the retired assessment driven by the refactoring-auditor custom agent.
  • Seasonal Data Source Review documents the required deliberate local review and retains its reviewed fingerprint baseline; no Actions workflow invokes it.

The separation of automation/ from agents/ keeps retained automation support files from being discovered as custom agent profiles.


Features

  • Mobile-friendly design with large, tappable buttons
  • Team profiles with coaches and practice schedules
  • Meet calendar with pool closures
  • FAQs and league documents from official CNSL sources
  • Installable Progressive Web App (PWA) with offline application-shell and seasonal directory caching
  • Keyboard-friendly navigation, status announcements, and reduced-motion support
  • Purpose-limited Google Analytics usage reporting on the deployed site, with advertising personalization disabled
  • Hosted via GitHub Pages with custom domain and HTTPS

Repo Structure

/CNSL
├── src/
│   ├── views/                 # Source HTML files
│   │   ├── components/        # Reusable HTML components
│   │   └── layouts/           # HTML layout templates
│   ├── css/
│   │   └── styles.css         # Site-wide responsive and accessible styles
│   ├── js/                    # Browser controllers, models, services, and types
│   └── assets/                # Images, annual data, and visitor resources
├── scripts/                   # Build, validation, and measurement tools
├── tests/                     # Unit and browser verification
├── docs/                      # Maintenance and product decision records
├── out/                       # Generated deployment output (gitignored)
├── manifest.webmanifest       # PWA configuration
├── service-worker.js          # Offline asset caching
├── robots.txt / sitemap.xml   # Published crawler metadata
└── README.md                  # Project overview and data sources

📚 Data Sources (Official CNSL)

All content is built on publicly available resources from the Columbia Neighborhood Swim League:


📦 Deployment

This site is hosted via GitHub Pages:

Custom domain configured with GitHub DNS and secured with HTTPS.


👤 Maintainer

Maintained by Simon Kurtz

Community-driven. Not affiliated with Columbia Association or CNSL.

About

Columbia Neighborhood Swim League

Resources

License

Stars

Watchers

Forks

Contributors