Thursday, May 21, 2026

Make the registrations CSV export faster for large events

Volleyball Elite Academy development update
Volleyball Elite Academy
Make the registrations CSV export faster for large events

Make the registrations CSV export faster for large events

Volleyball Elite Academy — Development Update • May 21, 2026

--- title: Make the registrations CSV export faster for large events ---

Make the registrations CSV export faster for large events

## What & Why (server/routes/coaches ~line 104) currently enriches each row by calling , (athlete) and (parent) one-at-a-time inside a . For an export of N registrations that's ~3N round-trips to the database. On a busy season this is the difference between a snapshot that downloads in a second vs. one that times out.

## Done looks like - The CSV route batch-loads events and people (e.g. one query for all distinct event IDs and one for all distinct person IDs) instead of looping per row - The new automated test in still passes - Manual export of a large event (hundreds of registrations) returns noticeably faster

## Relevant files - (CSV route ~line 104) - (, , )

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Verify per-court swimlanes in Day and Week views with an automated test

Volleyball Elite Academy development update
Volleyball Elite Academy
Verify per-court swimlanes in Day and Week views with an automated test

Verify per-court swimlanes in Day and Week views with an automated test

Volleyball Elite Academy — Development Update • May 21, 2026

--- title: Verify per-court swimlanes in Day and Week views with an automated test ---

Verify per-court swimlanes in Day and Week views with an automated test

## What & Why The Season Calendar now renders multi-court rentals as per-court swimlanes in both Day view (Task #1064) and Week view (Task #1077). There is no automated test that locks in this behaviour, so future refactors of could silently regress the layout — collapsing rentals back to a single column or hiding the "Free" / "Unassigned" indicators.

## Done looks like - An e2e test seeds a multi-court rental with at least one assigned-court session and one unassigned-court session that fall within both a Day view date and the same week - The test asserts the Day view renders , an unassigned row, and the "Free" placeholder for empty courts - The test asserts the Week view renders swimlanes inside the correct column, plus an unassigned row when applicable - A single-court rental and a non-rental event still render as a single block in Week view (no swimlane wrapper)

## Relevant files - (WeekView, DayView, RentalSwimlane, buildDayRenderItems) - (gymRentalId / rentalCourtCount payload)

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Search and pick a person by name when force-linking pending Corsizio rows

Volleyball Elite Academy development update
Volleyball Elite Academy
Search and pick a person by name when force-linking pending Corsizio rows

Search and pick a person by name when force-linking pending Corsizio rows

Volleyball Elite Academy — Development Update • May 21, 2026

--- title: Search and pick a person by name when force-linking pending Corsizio rows ---

Search and pick a person by name when force-linking pending Corsizio rows

## What & Why The Pending Corsizio panel added in Task #1061 currently asks the admin to type an EV person ID to force-link a staged registration. That's clunky — admins don't memorize numeric IDs. A type-ahead person picker (by name/email) would make the action usable.

## Done looks like - The "Force-link" button opens a person picker that searches academy_people by name/email and shows top matches. - Selecting a result calls POST with that person's id. - Existing manual-link endpoint is unchanged.

## Relevant files - (PendingCorsizioPanel) - (existing person search endpoints)

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Cover the new reconciliation screen with end-to-end tests

Volleyball Elite Academy development update
Volleyball Elite Academy
Cover the new reconciliation screen with end-to-end tests

Cover the new reconciliation screen with end-to-end tests

Volleyball Elite Academy — Development Update • May 21, 2026

--- title: Cover the new reconciliation screen with end-to-end tests ---

Cover the new reconciliation screen with end-to-end tests

## What & Why The Corsizio reconciliation screen ships with no e2e coverage — the existing System Overview entry for Corsizio still has (see replit "Coverage gaps"). Adding a Playwright spec that exercises the diff view + Pull flow would close the gap and prevent regressions.

## Done looks like - New e2e spec under that loads the reconciliation screen for a seeded linked event, asserts the match summary, clicks "Pull" on a differing field, and verifies the field flips to "matches" plus a new log row appears. - The Corsizio entry in lists the new testIds.

## Relevant files - (new spec) - - (testIds already present)

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Fix invalid robots.txt for Lighthouse SEO

Volleyball Elite Academy development update
Volleyball Elite Academy
Fix invalid robots.txt for Lighthouse SEO

Fix invalid robots.txt for Lighthouse SEO

Volleyball Elite Academy — Development Update • May 21, 2026

Fix invalid robots.txt for Lighthouse SEO

What & Why

Lighthouse's SEO audit flags the live site's as invalid. The current file has one bad line:

Per the [sitemaps.org spec](https://www.sitemaps.org/protocol.html#submit_robots), the directive must be an absolute URL (scheme + host + path), not a relative path. That single line is what breaks the audit. As a bonus problem, there is no actually being served, so the directive points at a 404 even once the URL is made absolute.

Done looks like

  • Running Lighthouse against the deployed site no longer reports "robots.txt is not valid".
  • returns a file whose line is an absolute URL pointing at a real, reachable .
  • returns a valid XML sitemap (HTTP 200, ) listing the site's public, non-authenticated routes (home, alumni landing, events listing, store, etc. — whatever is actually public).
  • The file works the same in dev (vite) and prod (Express static serving) — no env-specific drift.

Out of scope

  • Adding meta tags, Open Graph, or per-page titles (separate SEO work).
  • Auto-generating a sitemap from the database (e.g. per-event pages). A small static list of top-level public routes is enough for this pass.
  • Submitting the sitemap to Google Search Console.

Steps

1. Make the Sitemap directive absolute — Update so the line uses the deployed absolute URL. Derive the host at request time (via the existing / helpers) by serving from an Express route instead of letting Vite serve the static file, so the same code works on and any preview deployment domain without hard-coding the host. 2. Add a minimal sitemap.xml route — Add an Express route at that returns a valid XML sitemap (matching ) listing the small set of public, crawlable URLs. Use the same base-URL helper so it matches whatever host the request came in on. Set . 3. Verify — Hit and in both dev and a fresh deploy, then re-run Lighthouse SEO and confirm the "robots.txt is not valid" warning is gone.

Relevant files

- - - - -

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Wednesday, May 20, 2026

Make the registrations CSV export honor the search box

Volleyball Elite Academy development update
Volleyball Elite Academy
Make the registrations CSV export honor the search box

Make the registrations CSV export honor the search box

Volleyball Elite Academy — Development Update • May 20, 2026

--- title: Make the registrations CSV export honor the search box ---

Make the registrations CSV export honor the search box

What & Why

Task #1057 moved the Registrations search to the server so a single query searches across every page. The CSV export was explicitly left out of scope, so right now an admin who searches "alexis rein" and clicks "Export CSV" still gets either the unfiltered list or just the on-screen page — not the matching set. This task closes that gap so what admins see is what they export.

Done looks like

  • The CSV export endpoint accepts the same query param as the list endpoint and applies the same join-against-academy_people filter.
  • The Export button on the Registrations tab forwards the active debounced search term (plus the existing status / payment / event / event-type filters) to the export.
  • Exporting with a search term returns only the matching rows; exporting with no search returns all rows.

Relevant files

  • (CSV export route — search params)
  • ( already supports — reuse it)
  • (Export button)

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training

Clean up Launch Readiness confusion

Volleyball Elite Academy development update
Volleyball Elite Academy
Clean up Launch Readiness confusion

Clean up Launch Readiness confusion

Volleyball Elite Academy — Development Update • May 20, 2026

Clean up Launch Readiness confusion

What & Why

The sidebar entry labelled "Launch Readiness" in the SuperAdmin nav is misleading. It points to , which renders the member onboarding checklist (Welcome to Elite Volleyball Academy — complete your profile, meet Penny, register for events, etc.) — content aimed at athletes and parents, not at admins setting up the academy. SuperAdmins clicking it land on either the member checklist or a confusing "Please complete your registration first" prompt.

Separately, there is a completely orphaned page (a pre-game readiness checker for league coordinators) and a backing API endpoint that nothing in the app routes to or calls. This is dead code that should be removed so the codebase stops carrying two unrelated "launch readiness" concepts.

Done looks like

  • The misleading "Launch Readiness" sidebar entry no longer appears in the SuperAdmin nav (or is renamed so its label honestly reflects the page it links to).
  • The orphaned league-readiness page, its API endpoint, and its now-unused shared types are removed.
  • No remaining UI link reaches the deleted page; no remaining server code references the deleted endpoint or types.
  • The actual page (member onboarding) continues to work exactly as it does today for athletes and parents who reach it from the dashboard banner — that flow is not changed.

Out of scope

  • Any change to the member-facing Getting Started onboarding checklist itself ( and its endpoints) — that page stays as-is.
  • Building a real admin-facing "launch readiness" or academy-setup dashboard. If one is wanted later, it should be planned as a separate task.
  • Changes to the Coach Getting Started page.

Steps

1. Remove the misleading sidebar entry — Delete the nav-registry row that links "Launch Readiness" to for SuperAdmins. Confirm nothing else in the sidebar, tests, or System Overview registry depends on that .

2. Delete the orphaned league readiness page — Remove the page file. Confirm there is no route registered for it in and no other import.

3. Delete the orphaned server endpoint and shared types — Remove the handler in and the / interfaces in . Make sure no other server or client code still imports those types.

4. Sanity check for stragglers — Search the repo for , , and "Launch Readiness" and clean up any leftover comments, test IDs, or doc references. Update the stale comment in that refers to "the Launch Readiness checklist" so it talks about the Getting Started checklist instead.

5. Verify — Load the SuperAdmin sidebar and confirm the "Launch Readiness" item is gone. Load directly as an athlete/parent and confirm the onboarding checklist still renders normally. Run typecheck.

Relevant files

- - - - - - -

Volleyball Elite Academy

Reply to this email — we read every reply.

You received this because you have an account with Volleyball Elite Academy.

elitevolleyball.training