Tuesday, March 31, 2026

Fix League Active Status on Athlete Profiles

Fix League Active Status on Athlete Profiles

Canadian Elite Volleyball Academy — Development Update • March 31, 2026

Fix League Active Status on Athlete Profiles

What & Why

League-type events (like "Spring League 2026 Registration") have their own / which represent the registration window — not the league season. Once registration closes, the event shows as "past" on family dashboards and athlete profiles, even though the linked league is still actively running (status ACTIVE, with sessions spanning weeks/months).

The system needs to use the linked league's actual season span (first session date → last session date) when determining whether a LEAGUE-type event is "active" or "past."

Done looks like

  • On the family dashboard, a LEAGUE-type event whose linked league is still ACTIVE (and has future sessions) shows under "Upcoming Events" — not "Past Events"
  • On the community profile "My Leagues" card, ACTIVE leagues display with the "Active" badge (this already works correctly since it checks league.status)
  • On the admin experience preview (), LEAGUE events with an active linked league show as current
  • The flag for LEAGUE events is derived from the linked league's last session date (or league status), not the event's own dates

Out of scope

  • Changing the event's actual / in the database
  • Modifying the coordinator or schedule pages (these already work correctly using league status)
  • Adding new league date columns (the dates already exist via )

Relevant files

- - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Monday, March 30, 2026

Fix Empty Schedule — Generate Button for Existing Sessions

Fix Empty Schedule — Generate Button for Existing Sessions

Canadian Elite Volleyball Academy — Development Update • March 30, 2026

Fix Empty Schedule — Generate Button for Existing Sessions

What & Why

When a league's sessions are created via the manage-days date setup flow, session records are created with dates and types but no player assignments are generated. The "Generate Day 1" button only appears when Day 1 doesn't exist yet — so once sessions are pre-created through date management, the coordinator has no way to trigger schedule generation. This results in completely empty schedules (game/court/side grid renders but no players assigned).

The Spring League 2026 is in this state right now — 60 registered players, 10 sessions, 0 assignments on any day.

Done looks like

  • When a session exists but has zero assignments, a "Generate Schedule" button appears on the schedule page for that session
  • Clicking it runs the sorting-algorithm schedule generator (generateDay1Schedule) and populates player assignments
  • The button works for PLAY and SORTING session types (both use the same age-balanced rotation algorithm)
  • For REGULAR sessions, it shows a different message or button that runs the tiered algorithm (only if prior days are locked)
  • After generation, the schedule grid shows players in their assigned positions
  • The existing "Generate Day 1" button logic still works for the case when no sessions exist yet
  • Production fix: the coordinator on elitevolleyball.training can generate the Day 1 schedule for Spring League 2026

Out of scope

  • Auto-generating schedules when manage-days creates sessions (that's a separate improvement)
  • Changing the manage-days endpoint behavior
  • Lock/unlock flow changes

Relevant files

- - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Fix Corsizio API Import

Fix Corsizio API Import

Canadian Elite Volleyball Academy — Development Update • March 30, 2026

Fix Corsizio API Import

What & Why

The Corsizio import tool shows "No events found" because the code uses incorrect field names for the Corsizio API v1 response. The API returns events under but the code checks and , so it always gets an empty array. Additionally, several event field names are wrong ( vs , vs , vs , etc.).

Done looks like

  • Clicking "Import from Corsizio" in Events Management shows the actual list of Corsizio events from the academy's account
  • Selecting an event shows its details and registrants correctly
  • Importing an event creates the academy event with correct data (dates, prices, descriptions)

Out of scope

  • New Corsizio features or UI changes beyond fixing the field mapping

Relevant files

- - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Fix Athlete Dashboard Links

Fix Athlete Dashboard Links

Canadian Elite Volleyball Academy — Development Update • March 30, 2026

Fix Athlete Dashboard Links

What & Why

The Development section on the athlete dashboard/community profile has broken links. The URLs in AcademyTab don't match the actual routes defined in App:
  • "Development Profile" links to but route is (no param), and there's a separate route
  • "Skill Evaluations" links to — same mismatch
  • "Penny Coach" links to but route is (not )
  • "Volleyball Resume" links to — need to verify the tab name matches

Done looks like

  • All five Development section links navigate to the correct pages
  • Development Profile opens the development profile page for the athlete
  • Skill Evaluations opens the correct evaluations view
  • Penny Coach opens the Penny Coach page
  • Volleyball Resume opens the volleyball resume/journey view
  • Browse & Register for Events opens the events listing

Out of scope

  • Changing the pages themselves — just fixing the link URLs

Relevant files

- -

Canadian Elite Volleyball Academy
elitevolleyball.training

Financial Reconciliation Dashboard

Financial Reconciliation Dashboard

Canadian Elite Volleyball Academy — Development Update • March 30, 2026

Financial Reconciliation Dashboard

What & Why

Extend the existing Bookkeeper Portal with revenue-by-event-type analytics, outstanding balance tracking, Stripe-to-ledger reconciliation, and exportable financial reports. The academy is replacing external tools and needs a single dashboard where the bookkeeper can see the full financial picture, catch discrepancies between Stripe and the local ledger, track overdue payment plans, and export data for accounting.

Done looks like

  • Bookkeeper Portal gains a "Revenue by Event Type" breakdown card showing income grouped by event type (Private Lesson, Camp, Training Team, etc.) with date-range filtering
  • An "Outstanding Balances" section listing families with unpaid or overdue payment plan installments, sortable by amount and due date, with the ability to mark installments as paid or send a payment reminder
  • A "Stripe Reconciliation" view that compares Stripe checkout sessions against local ledger entries, flagging any mismatches (paid in Stripe but not recorded locally, or vice versa)
  • CSV export buttons for: full ledger, revenue-by-event-type summary, outstanding balances, and payroll summary — each respecting the current date-range filter
  • All amounts display with Saskatchewan tax breakdown (GST 5% + PST 6%) where applicable

Out of scope

  • Invoicing/receipt generation (future work)
  • Automated dunning/collections beyond reminders
  • Multi-currency support
  • Changes to the Stripe checkout flow itself

Relevant files

- - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Sunday, March 29, 2026

Communication Hub Foundation

Communication Hub Foundation

Canadian Elite Volleyball Academy — Development Update • March 29, 2026

Communication Hub Foundation

## What & Why The academy currently has communication scattered across multiple areas — Newsroom (announcements/newsletters), Profile Messages (admin notes, coach-parent, feedback), Bulk Email (Resend), Notifications (bell icon), Blog Publisher (Blogger), and event-specific communications. This task consolidates everything under a unified Communication Hub accessible from the sidebar, with a dedicated Email History log, a centralized announcement system, event communication timelines, automated communication playbooks, and AI-powered smart nudges. This becomes the single place admins go for all outbound and internal communication — and the engine that sends the right message at the right time automatically.

## Done looks like

### Communication Hub Page () - A new top-level page with a tabbed interface containing these sections: - Announcements — Create and view academy-wide announcements (banner-style messages visible to everyone or targeted by role). Shows history of past announcements with sent date, audience, and delivery channel (in-app, email, or both). New announcements can be pushed as in-app notifications and/or emailed via Resend - Email Log — Historical record of all emails sent through the platform (bulk emails, event notifications, role approvals, weekly digests, blog posts to Blogger, etc.). Each entry shows: date, subject, recipient(s) or audience, email type/category, delivery status. Filterable by date range, email type, and recipient - Newsroom — Existing newsroom functionality (newsletters, guides, FAQs, coaching tips) relocated here from Command Center. No functional changes - Messages — Existing profile message moderation (admin notes, coach-parent, feedback channels) relocated here from Command Center. No functional changes - Blog Posts — Dev Blog Publisher moved here. Enhanced with "Published" vs "Draft Plans" view showing which task plans have been posted and which are still available - Playbooks — Automated communication sequences triggered by lifecycle events (new athlete onboarding, coach onboarding, re-engagement, post-event follow-up). Each playbook defines a series of timed messages relative to a trigger event. Admins can activate/deactivate playbooks, preview the sequence, and customize individual messages - Templates — Library of reusable message templates (event reminder, welcome message, registration confirmation, transition announcement, etc.) with copy-to-clipboard. Initially populated with the existing Corsizio transition message and common templates. Templates are also used by Playbooks and Event Timelines

### Email Log Database - New table tracking every email sent through the system: timestamp, from address, to address(es), subject, email type (from the catalog), status (sent/failed), Resend message ID, and optional link to the related entity (event, person, newsroom post) - All email-sending functions in automatically log to this table after sending - The log is queryable by SuperAdmins from the Email Log tab

### Sidebar Navigation Update - New "Communication Hub" link in the sidebar for SuperAdmins pointing to - Existing Command Center Newsroom and Messages tabs remain functional but show a note pointing to the new Communication Hub - Dev Blog Publisher card removed from Command Center Tools tab (moved to Communication Hub)

### Announcement System - New table storing academy-wide announcements with: title, body, audience (everyone or specific roles), priority (normal, important, urgent), channels (in-app, email, both), created by, active from/until dates - Active announcements appear as a banner at the top of the main dashboard/welcome page for targeted users - Announcement history is visible in the Communication Hub

### Event Communication Timeline Builder - When creating or editing an event, a "Communication Plan" section shows a timeline of automated messages that will be sent relative to the event date - Default timeline auto-populates based on event type (camp, clinic, league, private lesson): - Registration: Confirmation email + next steps - 7 days before: Preparation guide (what to bring, facility info) - 1 day before: Final reminder with facility map and emergency contacts - After event: Thank you message + feedback survey + next program recommendation - Admins can toggle individual messages on/off, customize content, and add additional timeline entries - Timeline entries use templates from the Templates library - A table stores the configured timeline per event, and a scheduler processes pending messages based on event dates

### Communication Playbooks - Reusable automated sequences triggered by lifecycle events. Each playbook defines a series of timed messages relative to a trigger: - New Athlete Onboarding: Day 0 welcome → Day 1 how the academy works → Day 3 meet the coaches → Day 7 upcoming events recommendation → Day 14 training resources - Coach Onboarding: Immediate welcome → Day 2 portal walkthrough → Day 5 certification checklist → Day 10 first staffing opportunity - Re-engagement: Triggered when a family hasn't registered for anything in 90 days → friendly check-in with program suggestions matching their athlete's development stage - Post-Event Follow-up: Day 0 thank you → Day 1 feedback survey → Day 7 next program recommendation - New and tables define the sequences - A table tracks which people are currently progressing through which playbooks - Playbooks can be activated/deactivated globally, and individual enrollments can be paused or skipped

### Smart Nudges (AI-Adaptive Messaging) - Penny-powered intelligent communication triggers based on data patterns the system already tracks: - Parent hasn't registered for anything in 90+ days → suggest programs matching their athlete's age/level - Athlete attendance has dropped significantly → flag for coach check-in - Event is 80% full → notify waitlisted families or send marketing push - Family has multiple children → suggest sibling registration for upcoming events - Coach certification is expiring within 30 days → escalating reminder sequence - Athlete completes a milestone (e.g., 10th clinic, first tournament) → celebration message - Smart nudges appear in the Communication Hub as a "Suggested Actions" card showing pending nudges with one-click send or dismiss - Nudges that are sent are logged in the Email Log - Nudge rules are configurable by SuperAdmins (enable/disable individual rules, adjust thresholds)

## Out of scope - SMS messaging (future — Twilio integration) - Per-person communication timeline/inbox (separate task — Task #13) - Real-time chat or WebSocket-based messaging - Changing how existing profile message channels work - External integrations beyond Resend (no Twilio, no Slack) - AI Practice Planner (separate future feature for Penny Coach)

## Tasks 1. Create the email_log table and logging middleware — Add the email_log schema and wrap all email-sending functions to automatically log every send with timestamp, recipients, subject, type, status, and Resend message ID.

2. Create the announcements table and API — Add the announcements schema and build CRUD endpoints for creating, listing, and deactivating announcements. Include audience targeting and channel selection (in-app notification push and/or bulk email).

3. Build the Communication Hub page — Create the /communication page with tabbed layout (Announcements, Email Log, Newsroom, Messages, Blog Posts, Playbooks, Templates). Relocate existing Newsroom and Messages components, move the Dev Blog Publisher, and build the new Email Log viewer and Announcements management UI.

4. Add announcement banner to dashboards — Display active announcements as dismissible banners on the Welcome Hub, Athlete Dashboard, and Family Dashboard, filtered by user role.

5. Update sidebar navigation — Add the Communication Hub link under a Communication group in the sidebar for SuperAdmins.

6. Build the Templates library — Create a templates section with pre-written message templates with copy-to-clipboard. Migrate the existing Corsizio transition message card from Tools. Templates are reusable by Playbooks and Event Timelines.

7. Build the Event Communication Timeline Builder — Add event_communication_plans schema. In the event creation/edit flow, show a Communication Plan section with a default timeline based on event type. Allow toggling, customizing, and adding messages. Build the background scheduler that processes pending timeline messages based on event dates.

8. Build the Communication Playbooks system — Add playbooks, playbook_steps, and playbook_enrollments schemas. Build the Playbooks tab UI for creating/managing sequences. Implement the enrollment engine that triggers playbook entry on lifecycle events (new athlete, new coach, inactivity) and processes timed steps. Pre-populate with New Athlete Onboarding, Coach Onboarding, Re-engagement, and Post-Event Follow-up playbooks.

9. Build Smart Nudges — Create a nudge rules engine that periodically scans academy data for actionable patterns (inactivity, attendance drops, event capacity, certification expiry, milestones). Surface suggested nudges in the Communication Hub as a card with one-click send/dismiss. Integrate with Penny for personalized message generation. Log sent nudges to the email_log.

## Relevant files - - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Coach Team Tools Polish

Coach Team Tools Polish

Canadian Elite Volleyball Academy — Development Update • March 29, 2026

Coach Team Tools Polish

What & Why

Task #32 delivered the core School/Club Coach Team Tools, but several non-blocking review items were deferred. This task addresses all of them in one pass to bring the feature to full polish.

Done looks like

  • TeamRosterSection on community profile shows jersey numbers, connection status badges (Connected/Pending/Invited/Not Invited), roster count, and a "Manage Team" link to
  • CSV import accepts both "First Name"/"Last Name" columns AND a single "Name" column (auto-splits on space)
  • index route exists — coaches with multiple teams see a team selector; coaches with one team redirect straight to it
  • Event type labels in the event log display human-friendly names (e.g. "Tournament" instead of "TOURNAMENT", "Practice" instead of "PRACTICE")
  • Connected athlete summary cards clearly label "Current Programs" with program names
  • Community profile coaching tab shows roster count per team and a "Manage Team" link next to each coaching role

Out of scope

  • New connection flow changes (the PENDING→CONNECTED lifecycle is already correct)
  • Coach resume layout changes (already delivered in Task #32)
  • Team announcement or invite email changes

Relevant files

- - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Cleanup, Performance & Profile Polish

Cleanup, Performance & Profile Polish

Canadian Elite Volleyball Academy — Development Update • March 29, 2026

Cleanup, Performance & Profile Polish

What & Why

Several cleanup and improvement items identified from production usage:
  • An orphaned page file () exists but is imported nowhere
  • The endpoint crashes in production with "column username does not exist" because it queries a table column that doesn't exist in Replit auth
  • Athletes need stronger encouragement to upload profile photos — coaches rely on photos to identify athletes
  • Need to verify dev/production parity and trim any unnecessary loading

Done looks like

  • is deleted (confirmed unused)
  • The endpoint no longer references the non-existent column; uses names instead
  • The athlete community profile shows a more prominent photo upload prompt when no photo exists — visible to the athlete themselves and to coaches viewing the profile (e.g. "Photo helps coaches identify you")
  • The athlete dashboard's existing photo prompt is enhanced to be more visible/encouraging
  • No dev-only features are hidden from production (confirmed: the app uses standard NODE_ENV checks only for Vite/error stacks/cookies — no feature gating)
  • Lazy-loaded pages use proper React.lazy/Suspense patterns for faster initial load

Out of scope

  • Major refactors or restructuring of existing pages
  • Removing pages that have valid routes (my-team, skill-evaluation, volleyball-resume, etc. all have routes)
  • Adding new features

Relevant files

- - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Blog Posted Status & Auto-Scheduler

Blog Posted Status & Auto-Scheduler

Canadian Elite Volleyball Academy — Development Update • March 29, 2026

Blog Posted Status & Auto-Scheduler

What & Why

Two improvements to the Dev Blog Publisher: 1. Show a "Posted" badge on each plan file in the source dropdown/list so it's immediately clear which entries have already been published and which haven't. 2. Add a fully automatic daily scheduler that publishes one unposted plan file per day without any admin involvement.

Done looks like

  • In the Dev Blog Publisher, each plan file in the source list shows a clear "Posted" or "Not Posted" status indicator (e.g., a badge or icon).
  • Files that have already been published are visually distinguished (grayed out, badge, checkmark, etc.) from unpublished ones.
  • Once per day (server-side), the system automatically picks the next unposted plan file in order and publishes it to Blogger using the same email-to-post flow already in place.
  • No admin action is required for the automatic daily post — it runs silently in the background.
  • If there are no unposted entries available on a given day, nothing happens.
  • An indicator or note in the Blog UI shows when the next auto-post is scheduled, or confirms "all entries have been posted."

Out of scope

  • Choosing which specific day a particular entry posts (order is sequential).
  • Push notifications or emails to the admin when an auto-post occurs.
  • Pausing or configuring the schedule from the UI (always daily).

Relevant files

- - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Saturday, March 28, 2026

Automated Post-Event Flow

Automated Post-Event Flow

Canadian Elite Volleyball Academy — Development Update • March 28, 2026

Automated Post-Event Flow

What & Why

Currently, post-event follow-ups (feedback requests, thank-you emails) are entirely manual — an admin must remember to trigger them. Events also don't automatically transition from ACTIVE to EVALUATING to COMPLETED based on their dates. Automating this flow ensures every event gets proper follow-up, parents receive timely results summaries, and coaches are prompted to complete evaluations — without relying on admin memory.

Done looks like

  • Events automatically transition to EVALUATING status when their last date passes (via the existing daily scheduler)
  • When an event moves to EVALUATING, feedback request emails are auto-sent to all registered athletes/parents with a link to the feedback form
  • A post-event summary email is sent to parents with key highlights: attendance summary, coach notes (if available), and a feedback link
  • For league events, when a session is locked, individual session feedback requests are auto-sent
  • The events management page shows which events are awaiting evaluations and which have had follow-ups sent
  • Admins can still manually trigger follow-ups if needed (existing behavior preserved)

Out of scope

  • Generating PDF certificates (separate future task)
  • Changing the feedback form itself (already works well)
  • Auto-completing events (admin should confirm evaluations are done before marking COMPLETED)

Relevant files

- - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Automated Communication Flows

Automated Communication Flows

Canadian Elite Volleyball Academy — Development Update • March 28, 2026

Automated Communication Flows

What & Why

Strengthen the lifecycle email automation to close the remaining gaps in replacing Mailchimp. The platform already has registration confirmations, event reminders, post-event follow-ups, staff reminders, weekly digests, welcome emails, and absence milestones. This task adds the three missing automated flows: payment reminders for overdue installments, post-event evaluation summaries sent to parents, and seasonal re-enrollment nudges.

Done looks like

  • Payment reminders: When a payment plan installment becomes overdue, the system automatically sends a friendly reminder email to the parent with the amount owed, event name, and a direct link to pay. A second reminder follows 7 days later if still unpaid. Admins can see which reminders were sent in the Communication Hub.
  • Post-event evaluation summaries: When a coach completes evaluations for an event, parents of evaluated athletes automatically receive an email summarizing their child's ratings, coach notes (athlete-visible only), strengths, and areas for improvement, with links to the full athlete summary and Penny Coach.
  • Seasonal re-enrollment nudges: Configurable time-based nudge emails sent to families who participated in the previous season but haven't registered for the upcoming one. Playbook-driven with admin-configurable timing (e.g., 30 days before season start, 14 days, 7 days).
  • All three email types are logged via sendAndLog, appear in the Communication Hub's email log, and create corresponding in-app notifications.

Out of scope

  • SMS/text message notifications
  • Redesigning existing email templates
  • Changes to the existing registration confirmation or event reminder flows
  • Batch marketing email campaigns (handled by existing manual broadcast)

Relevant files

- - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Athlete Development Portfolio

Athlete Development Portfolio

Canadian Elite Volleyball Academy — Development Update • March 28, 2026

Athlete Development Portfolio

What & Why

Unify the existing evaluation data, skill progression, private lesson feedback, and development profile into a polished, parent-facing athlete development report — the "volleyball resume" fully realized. The pieces already exist (athlete summary, volleyball resume page, skill evaluation history, development profile with LTAD, radar charts), but they aren't tied together into a cohesive portfolio that parents can review and share.

Done looks like

  • A new "Development Report" view accessible from the athlete summary page (and parent family dashboard) that consolidates:
- Current skill levels with radar chart visualization - Evaluation trend over time (chart showing progression across recent evaluations) - Coach feedback highlights — latest 3 evaluations with coach notes, strengths, and areas for improvement - Private lesson summary — goals set, focus areas worked on, and coach observations from private lesson registrations - LTAD stage indicator with age-appropriate development context - Recommended focus areas and next steps (drawn from most recent evaluation data)
  • A "Share Report" button that generates a shareable, read-only link (no auth required) with an expiration date (30 days), suitable for sending to club coaches or recruiters
  • A "Download PDF" button that generates a print-optimized version of the development report
  • The existing volleyball resume page is enhanced with a section linking to the latest development report data (recent evaluations, skill progression)
  • Parents see a "View Development Report" button on each child's card in the family dashboard

Out of scope

  • Video highlights integration
  • AI-generated development narratives (Penny can already discuss evaluations)
  • College recruiting platform integrations
  • Coach-authored written reports (evaluations serve this purpose)

Relevant files

- - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Academy Experience Hub

Academy Experience Hub

Canadian Elite Volleyball Academy — Development Update • March 28, 2026

Academy Experience Hub

What & Why

The academy's revenue-generating content (events, sessions, camps, leagues) and development tools (journals, evaluations, skill development, Penny Coach) are currently buried or scattered across the parent/athlete community profile. "View Experience" is an admin-only preview that doesn't serve parents or athletes directly. This task reorganizes the community profile to put the academy experience front-and-center, making it obvious and accessible to parents and athletes while keeping school/club/team info as secondary context.

Done looks like

  • A new prominent "Academy" tab on the community profile replaces the current "Training & Events" tab and absorbs the relevant "View Experience" data
  • The Academy tab has clear sections:
- Active Programs — Current academy registrations (leagues, sessions, camps) with status, schedule, standings where applicable - Upcoming Events — Academy events the athlete is registered for or eligible for, with quick registration links - Past Programs — History of completed academy events/sessions/camps with dates and outcomes - Development — Quick-access cards linking to Penny Coach (journal), Development Profile (self-assessment), Skill Evaluations (coach feedback), and any e-learning resources
  • The existing "Volleyball" tab's content (measurements, journey, teams, achievements) remains but is clearly positioned as the athlete's broader volleyball story — school teams, club teams, and other organized sports
  • Parents see the Academy tab for each child in their Family view with a summary of that child's active academy participation
  • The "View Experience" admin preview functionality is preserved but its data is now surfaced directly to the athlete/parent in the Academy tab

Out of scope

  • Building new e-learning or biomechanics features (those don't exist yet — this task surfaces what exists today)
  • Changing the events marketplace/registration flow (events-listing page stays as-is)
  • Modifying the athlete dashboard (/athlete page) — this focuses on the community profile
  • Adding new API endpoints for data not currently available — we use existing endpoints

Relevant files

- - - - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Friday, March 27, 2026

Athlete Attendance RSVP & Tracking System

Athlete Attendance RSVP & Tracking System

Canadian Elite Volleyball Academy — Development Update • March 27, 2026

Athlete Attendance RSVP & Tracking System

What & Why

Build a comprehensive attendance commitment system where parents/athletes can declare whether they'll attend each league session in advance (and why not), coordinators can see who contacted us about absences, and automated emails escalate at milestone absence counts (3, 5, 10, 20). This replaces ad-hoc text/email absence reporting with a structured, trackable system.

The system has three faces: 1. Parent/Athlete side — RSVP for upcoming sessions with optional absence reason 2. Coordinator side — Dashboard showing who's confirmed, who's absent, and why 3. Athlete record — Permanent attendance history across all enrolled events

Done looks like

  • On the league schedule page (league-hub), each session row has an RSVP status indicator and a way to mark "Attending" or "Not Attending" with a reason
  • Parents can RSVP on behalf of their children from the family dashboard, including a reason dropdown (sick/contagious, injury, family commitment, school conflict, travel, other) and optional notes
  • Athletes can RSVP from their own athlete dashboard (existing RSVP section enhanced with reasons)
  • A new "Attendance" tab or section in the Coordinator page shows a per-session grid: all enrolled athletes with their RSVP status, absence reason, and whether they actually showed up
  • Each athlete's community profile (or a linked view) shows an attendance record table: event name, date, RSVP status, actual attendance, absence reason
  • Automated emails are sent when an athlete reaches 3, 5, 10, and 20 absences in a league, with messaging about team commitment, health awareness (don't come if contagious), and the impact on the team
  • The absence reason is stored on the session_rsvps record and visible to coordinators

Out of scope

  • Changing how coordinators mark actual game-day attendance (the existing check-in system stays)
  • Penalties or automatic roster changes based on absences
  • Cross-league absence aggregation (each league tracks independently)

Relevant files

- - - - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Athlete Login Access UX Overhaul

Athlete Login Access UX Overhaul

Canadian Elite Volleyball Academy — Development Update • March 27, 2026

Athlete Login Access UX Overhaul

What & Why

Parents are confused about how to give their athletes access to log in. The current flow has several pain points:

1. "Can manage profile" toggle is misleading — parents think this is how athletes get access, but it actually controls whether the parent can edit on behalf of the child. The label doesn't explain what it does. 2. Login creation is hidden — the small "Login" button at the bottom of the athlete card is easy to miss and doesn't convey its purpose. 3. Username/password are parent-chosen — parents have to invent a username and temporary password, then verbally tell it to their child. This is error-prone and confusing. 4. Athlete login page URL is obscure — parents must know to tell athletes to go to , which is a different URL from the main site login. Athletes arriving at the main login see Replit Auth and get confused. 5. Parents lose visibility once athlete changes password — once the athlete changes their temporary password, the parent can no longer see it and may feel they've lost control.

The goal is to make the athlete access flow self-explanatory so parents can set it up without external guidance, while keeping parents in control and making athletes responsible for their own journey.

Done looks like

  • The athlete card on the Family tab clearly separates "Athlete Login Access" from the parent permission toggle
  • The parent permission toggle ("Can manage profile") is relabeled with a clear explanation of what it actually controls (parent editing on behalf of child)
  • When a parent enables athlete login, the system auto-generates a username (based on athlete's name, e.g. ) and a random temporary password — no parent input needed
  • After creation, the credentials are displayed clearly with copy buttons, and optionally the parent can email the credentials directly to the athlete's email (if one exists) or to themselves
  • The athlete card prominently shows whether the athlete has a login, and if so, includes a visible reminder of how the athlete logs in (the URL and username)
  • The athlete login page link on the main site is more discoverable — add a small "Athlete? Log in here" link on the main login/landing page that points to
  • Parents can still reset the password at any time (which generates a new temporary password and re-sets the must-change flag), giving them full control to lock down or re-share access
  • The athlete login page itself shows a brief helper message explaining this is for athletes whose parents set up their login

Out of scope

  • Changing the fundamental auth architecture (athletes still use username/password, parents still use Replit Auth)
  • Allowing athletes to self-register without a parent
  • Email delivery system changes (uses existing Resend integration)
  • Changing what athletes can see/do once logged in

Relevant files

- - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Academy Experience Hub

Academy Experience Hub

Canadian Elite Volleyball Academy — Development Update • March 27, 2026

Academy Experience Hub

What & Why

The academy's revenue-generating content (events, sessions, camps, leagues) and development tools (journals, evaluations, skill development, Penny Coach) are currently buried or scattered across the parent/athlete community profile. "View Experience" is an admin-only preview that doesn't serve parents or athletes directly. This task reorganizes the community profile to put the academy experience front-and-center, making it obvious and accessible to parents and athletes while keeping school/club/team info as secondary context.

Done looks like

  • A new prominent "Academy" tab on the community profile replaces the current "Training & Events" tab and absorbs the relevant "View Experience" data
  • The Academy tab has clear sections:
- Active Programs — Current academy registrations (leagues, sessions, camps) with status, schedule, standings where applicable - Upcoming Events — Academy events the athlete is registered for or eligible for, with quick registration links - Past Programs — History of completed academy events/sessions/camps with dates and outcomes - Development — Quick-access cards linking to Penny Coach (journal), Development Profile (self-assessment), Skill Evaluations (coach feedback), and any e-learning resources
  • The existing "Volleyball" tab's content (measurements, journey, teams, achievements) remains but is clearly positioned as the athlete's broader volleyball story — school teams, club teams, and other organized sports
  • Parents see the Academy tab for each child in their Family view with a summary of that child's active academy participation
  • The "View Experience" admin preview functionality is preserved but its data is now surfaced directly to the athlete/parent in the Academy tab

Out of scope

  • Building new e-learning or biomechanics features (those don't exist yet — this task surfaces what exists today)
  • Changing the events marketplace/registration flow (events-listing page stays as-is)
  • Modifying the athlete dashboard (/athlete page) — this focuses on the community profile
  • Adding new API endpoints for data not currently available — we use existing endpoints

Relevant files

- - - - - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Thursday, March 26, 2026

Person Communication Timeline

Person Communication Timeline

Canadian Elite Volleyball Academy — Development Update • March 27, 2026

Person Communication Timeline

## What & Why Every person in the academy (athletes, parents, coaches) needs a unified view of all communications directed at them — emails sent, announcements they were included in, coach messages, admin notes, event notifications, and newsroom posts targeted to their role. Currently this information is fragmented: emails go to inboxes outside the platform, announcements have no per-person record, and profile messages are a separate system. This task adds a Communication tab to every person's profile showing their complete communication history, and ensures that outbound emails/announcements are linked to the recipient people records so nothing gets lost — especially important for athletes who don't check email.

## Done looks like

### Communication Tab on Person Profiles - Every person profile (community-profile page) gets a new "Communication" tab alongside the existing tabs (Overview, Volleyball, Coaching, Messages, etc.) - The tab shows a unified, reverse-chronological timeline of all communications involving that person: - Emails sent to them — pulled from the email_log table (Task #12), showing subject, date, type, and delivery status - Announcements they were included in — based on role matching, with the announcement title, date, and body expandable inline - Profile messages — existing admin notes, coach-parent messages, and feedback already on their profile, now also visible in the unified timeline - Event communications — session summaries, coach feedback, and event-specific messages linked to events they participated in - Newsroom posts targeted to their role — newsletters and announcements sent to their audience group - Each item is expandable to show the full content - Items can be filtered by type (Email, Announcement, Message, Event) and date range - Unread/new items since last profile visit are highlighted

### Communication Card on Dashboards - Athlete Dashboard and Family Dashboard get a "Recent Communications" card showing the last 5 items from their timeline with a "View All" link to their profile Communication tab - Coach Portal gets a similar card showing communications directed to them

### Linking Outbound Communications to People - When bulk emails or announcements are sent, the system creates links in a junction table connecting the communication to each recipient person - This allows querying "show me everything sent to Person X" efficiently - The email_log entries (from Task #12) are linked to person records via primary_email matching

## Out of scope - Two-way reply functionality from within the Communication tab (messages remain one-directional records) - SMS integration - Editing or deleting communications after they're sent - Push notifications to mobile devices

## Tasks 1. Create the communication_recipients table — A junction table linking communications (email_log entries, announcements, newsroom posts) to person IDs, enabling per-person communication history queries.

2. Build the Communication tab component — A reusable component that fetches and displays a unified timeline of all communications for a given person, with type filters, date filters, and expandable content.

3. Add the Communication tab to community-profile — Register the new tab on the person profile page, passing the person ID to the timeline component.

4. Add Recent Communications cards to dashboards — Add a compact "Recent Communications" card to the Athlete Dashboard, Family Dashboard, and Coach Portal showing the last 5 items with a link to the full timeline.

5. Link outbound communications to recipients — Update the announcement send flow and bulk email flow to record recipient person IDs in the communication_recipients table when messages are dispatched.

## Relevant files - - - - - -

Canadian Elite Volleyball Academy
elitevolleyball.training

Monday, March 16, 2026

Board Member Role & Document Hub

Board Member Role & Document Hub

Canadian Elite Volleyball Academy — Development Update • March 16, 2026

Board Member Role & Document Hub

What & Why

Add "Board Member" to the View As role switcher so Super Admins can preview the board member experience. Also add a document management section to the Board Dashboard where admins can upload, organize, and share board-related documents (CEO reports, agendas, meeting minutes, etc.) that board members can view and download.

Done looks like

  • "Board Member" appears in the View As role switcher dropdown in the sidebar; selecting it shows the same navigation a board member would see
  • The Board Dashboard at has a new "Board Documents" section below the existing financial content
  • Super Admins can upload documents (PDF, Word, images, etc.) with a title, category (CEO Report, Agenda, Minutes, Other), and optional meeting date
  • Board members and Super Admins can view, download, and search/filter uploaded documents by category
  • Super Admins can delete documents they've uploaded
  • Documents are stored via the existing object storage integration (presigned URL upload flow)

Tasks

  • Add "BOARD_MEMBER" to the PreviewRole type and wire it into the View As dropdown, preview label maps, and getUserPanel navigation logic so it shows the board member sidebar when previewing
  • Create a database table (title, category enum, file URL, file name, file size, uploaded by, meeting date, timestamps) with corresponding Drizzle schema, insert schema, and types
  • Add storage interface methods for CRUD operations on board documents
  • Create API endpoints for listing, uploading metadata, and deleting board documents (restricted to board members, bookkeepers, and super admins)
  • Build a "Board Documents" UI section on the board dashboard with upload functionality (using the existing ObjectUploader/presigned URL pattern), category filter, and a document list with download and delete actions
  • Relevant files

    - - - - - - - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Email Rebrand & Catalog

    Email Rebrand & Catalog

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Email Rebrand & Catalog

    What & Why

    All email templates and inline email sends currently use as the from-address and reference "Elite Volleyball" branding. The academy is transitioning to use as its primary domain. All emails need to be updated to send from with consistent "Canadian Elite Volleyball Academy" branding. Additionally, the full email catalog should be documented in a central registry so emails are easy to find, maintain, and automate.

    Done looks like

    • Every email sent from the app uses as the from-address
    • Email headers, footers, and body text reference "Canadian Elite Volleyball Academy" instead of "Elite Volleyball" or "VEA League"
    • The fallback from-address in is updated to
    • Community portal links in email templates point to instead of
    • A central email registry/catalog exists (e.g. a config object or reference file) listing every email type with its name, description, trigger (manual or automated), and the function/location that sends it — making it straightforward to add new emails or audit existing ones

    Tasks

  • Update the default from-address in and all fallback from-addresses throughout from to
  • Update all inline email sends in that hardcode to use the centralized Resend client's from-address instead
  • Update branding text in all 19 email templates in — headers, footers, and body copy should say "Canadian Elite Volleyball Academy" instead of "Elite Volleyball", "VEA League", or "Elite Academy Volleyball"
  • Update any community portal URLs in email templates from to
  • Create a central email catalog registry (e.g. an exported config/constant in a file like ) documenting all 24 email types with: key/id, display name, description, trigger type (manual/automated/transactional), and the function or route location that sends it. This catalog should be importable for use in admin UIs or future automation features.
  • Relevant files

    - - - - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Coach Portal Polish & Fixes 2

    Coach Portal Polish & Fixes 2

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Coach Portal Polish & Fixes

    ## What & Why The Coach Portal has several UX issues and a data-model bug that need fixing. The Specializations section has no way to add/edit entries. The Probationary Readiness checklist includes "Police Check Valid" which is wrong — the academy only uses Safe Sport + EPIC Check. The "Getting Started" badge is not clickable. Coaches need to see how long they've been with the academy. Profile editing is scattered across multiple places. Additionally, the coach level system needs a "Custom" level that SuperAdmins can assign with whatever pay rate they determine, overriding the standard tiered structure.

    ## Done looks like - Specializations section has an "Add/Edit Specializations" button that opens a form with preset volleyball specialization options (e.g., Serving, Setting, Passing, Blocking, Defense, etc.) plus custom entry - "Police Check Valid" is completely removed from the Probationary Readiness (Tier 1) requirements — only Safe Sport + EPIC Check remain as safety requirements - "Getting Started" badge in Coach Development Pathway is a clickable link that navigates to the Onboarding tab - Coach Portal Dashboard shows "Member Since" / academy tenure (e.g., "Academy Coach since March 2024 — 2 years") using the memberSince field from academyPeople - Coach profile credential badges area on the Dashboard tab shows tenure info alongside existing badges (ACADEMY HEAD COACH, NCCP: CERTIFIED, etc.) - Profile data entry is streamlined — the My Profile tab's read-only NCCP/experience section provides inline editing so coaches can update directly without hunting for the right form - A new "CUSTOM" coach level exists that SuperAdmins can assign to any coach with a freely-set custom hourly pay rate (not bound to the standard level pay ranges). The custom level and pay rate display correctly on the coach's portal, in staffing/assignment views, and in the pay scale

    ## Out of scope - Redesigning the entire Coach Portal layout - Coach onboarding flow changes beyond fixing the Getting Started link - Adding new certification types - Changes to the Coach Directory page

    ## Tasks 1. Remove Police Check from Tier 1 requirements — Remove policeCheckValid from the Probationary Readiness requirement list in the backend tier status calculation. Keep only Safe Sport and EPIC Check as safety requirements.

    2. Add Specializations editing UI — Add an "Edit Specializations" button to the Specializations section on the My Profile tab that opens a dialog/form with checkbox options for common volleyball specializations (Serving, Setting, Passing, Blocking, Defense, Hitting/Attacking, Libero Training, Team Strategy, Strength & Conditioning) plus a custom text input. Save via the existing coach profile update endpoint.

    3. Make Getting Started badge clickable — Convert the "Getting Started" badge in the Coach Development Pathway card into a clickable link that switches to the Onboarding tab.

    4. Add academy tenure display — Show how long the coach has been with the academy on the Dashboard tab, using memberSince from academyPeople. Display as a badge or info line like "Academy Coach since Mar 2024 (2 years)".

    5. Consolidate profile editing paths — In the My Profile tab's NCCP & Experience Details section (currently read-only), add "Edit" buttons or make fields inline-editable for yearsCoaching, nccpNumber, nccpStatus, primaryCoachingType so coaches can update directly without hunting for the right form.

    6. Add Custom coach level with SuperAdmin-set pay — Add a CUSTOM entry to ACADEMY_COACH_LEVEL_INFO in the schema. Add a customPayRate numeric field to coachProfiles that stores the SuperAdmin-determined hourly rate when the custom level is assigned. Update the level application approval flow so SuperAdmins can select "Custom" and enter any dollar amount. The coach's portal, pay scale display, and staffing views should all respect the custom level and its rate. The level calculator should never auto-recommend CUSTOM — it is only assignable by a SuperAdmin.

    ## Relevant files - client/src/pages/coach-portal.tsx - client/src/components/CoachWorkflowBanner.tsx - client/src/pages/academy-coach-levels.tsx - server/routes.ts:28181-28240,28540-28580 - shared/schema.ts:724-755 - server/storage.ts

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Coach Portal Polish & Fixes 1

    Coach Portal Polish & Fixes 1

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Coach Portal Polish & Fixes

    What & Why

    The Coach Portal has several UX issues and a data-model bug that need fixing. The Specializations section has no way to add/edit entries. The Probationary Readiness checklist includes "Police Check Valid" which is wrong — the academy only uses Safe Sport + EPIC Check. The "Getting Started" badge is not clickable. Coaches need to see how long they've been with the academy. Profile editing is scattered across multiple places. Additionally, the coach level system needs a "Custom" level that SuperAdmins can assign with whatever pay rate they determine, overriding the standard tiered structure.

    Done looks like

    • Specializations section has an "Add/Edit Specializations" button that opens a form with preset volleyball specialization options (e.g., Serving, Setting, Passing, Blocking, Defense, etc.) plus custom entry
    • "Police Check Valid" is completely removed from the Probationary Readiness (Tier 1) requirements — only Safe Sport + EPIC Check remain as safety requirements
    • "Getting Started" badge in Coach Development Pathway is a clickable link that navigates to the Onboarding tab
    • Coach Portal Dashboard shows "Member Since" / academy tenure (e.g., "Academy Coach since March 2024 — 2 years") using the field from
    • Coach profile credential badges area on the Dashboard tab shows tenure info alongside existing badges (ACADEMY HEAD COACH, NCCP: CERTIFIED, etc.)
    • Profile data entry is streamlined — the My Profile tab's read-only NCCP/experience section provides inline editing so coaches can update directly without hunting for the right form
    • A new "CUSTOM" coach level exists that SuperAdmins can assign to any coach with a freely-set custom hourly pay rate (not bound to the standard level pay ranges). The custom level and pay rate display correctly on the coach's portal, in staffing/assignment views, and in the pay scale

    Tasks

  • Remove Police Check from Tier 1 requirements — Remove from the Probationary Readiness requirement list in the backend tier status calculation. Keep only Safe Sport and EPIC Check as safety requirements.
  • Add Specializations editing UI — Add an "Edit Specializations" button to the Specializations section on the My Profile tab that opens a dialog/form with checkbox options for common volleyball specializations (Serving, Setting, Passing, Blocking, Defense, Hitting/Attacking, Libero Training, Team Strategy, Strength & Conditioning) plus a custom text input. Save via the existing coach profile update endpoint.
  • Make Getting Started badge clickable — Convert the "Getting Started" badge in the Coach Development Pathway card into a clickable link that switches to the Onboarding tab.
  • Add academy tenure display — Show how long the coach has been with the academy on the Dashboard tab, using from . Display as a badge or info line like "Academy Coach since Mar 2024 (2 years)".
  • Consolidate profile editing paths — In the My Profile tab's NCCP & Experience Details section (currently read-only), add "Edit" buttons or make fields inline-editable for , , , so coaches can update directly without hunting for the right form.
  • Add Custom coach level with SuperAdmin-set pay — Add a entry to in the schema. Add a numeric field to that stores the SuperAdmin-determined hourly rate when the custom level is assigned. Update the level application approval flow so SuperAdmins can select "Custom" and enter any dollar amount. The coach's portal, pay scale display, and staffing views should all respect the custom level and its rate. The level calculator should never auto-recommend CUSTOM — it is only assignable by a SuperAdmin.
  • Relevant files

    - - - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Dev Blog Publisher

    Dev Blog Publisher

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Dev Blog Publisher

    ## What & Why As the academy platform grows, the builder wants to share the development journey publicly on a Blogger blog. This tool lets a SuperAdmin select any feature plan (past or upcoming), compose a sanitized blog post from it, and publish it directly to the Blogger blog — all without leaving the admin area. Posts appear on the blog automatically via Blogger's built-in mail-to-blog feature. A post history log tracks everything that's been published.

    ## Done looks like - A "Dev Blog Publisher" card appears in the Command Center Tools tab, visible only to SuperAdmins - SuperAdmin can choose a source: an existing feature plan file (e.g. "Group Private Lesson Guardian Approval", "Certification Tracker") or a custom free-text entry - The content is automatically sanitized: code blocks are stripped, internal file paths and API routes are hidden, and no personal names or email addresses are included - A live preview shows exactly what will appear on the blog before posting - SuperAdmin can edit the title and body before posting - Clicking "Post to Blog" sends an email via Resend to — the subject is the post title, the body is clean HTML — causing it to publish automatically on Blogger - A "Post History" tab inside the card shows all previously published posts (title, date, source) - Posts are logged in a database table for reference

    ## Out of scope - Editing or deleting posts already published to Blogger (Blogger does not support that via email) - Scheduling posts for a future time - Pulling posts back from Blogger - Any Blogger API integration — email-only posting is sufficient

    ## Tasks 1. Schema: blog_posts table — Add a table to the database schema with fields for title, content snapshot, source file name, posted-at timestamp, and the person who posted it. Run db:push.

    2. Backend: blog API routes — Add server routes: (list available task .md files with titles and dates), (load and sanitize one task file for preview — strip code blocks, file paths, API routes, inline code), (sanitize content, send via Resend email to the Blogger address, log to table), (list post history). All routes require SuperAdmin access.

    3. Frontend: Dev Blog Publisher tool card — Add a new collapsible tool card to ToolsSection.tsx with two tabs: "New Post" (source selector dropdown of task files + custom option, editable title and body, live preview panel, Post to Blog button) and "Post History" (table of past posts with title, date, source). Show a sanitization notice so the admin knows what was stripped before posting.

    ## Relevant files - - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Group Private Lesson Guardian Approval

    Group Private Lesson Guardian Approval

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Group Private Lesson Guardian Approval

    What & Why

    When a parent books a private lesson and wants to include other athletes (up to 5 additional spots), the academy currently has no mechanism to notify or obtain consent from those athletes' guardians. This creates a liability and Safe Sport gap — any adult bringing a child to a private session should have explicit parental consent. This feature adds an invite-and-approve flow: the booking parent nominates athletes, each athlete's guardian(s) receive a notification to approve or decline, and the session fills only with confirmed participants.

    Done looks like

    • On a private lesson registration/checkout, the booking parent can nominate up to 5 additional athletes by name search (searching existing academy members) or by entering a name + email if the athlete is not yet in the system
    • Each nominated athlete's guardian(s) receive an email notification: "Your child [Name] has been invited to a private lesson on [Date] with [Coach]. Please approve or decline."
    • Guardians can approve or decline from a link in the email (no login required for the decision, similar to the co-parent invite flow) or from a new "Pending Approvals" section on their family dashboard
    • The booking parent can see the approval status of each invited athlete (Pending / Approved / Declined) from their family dashboard registration detail
    • An athlete's spot in the lesson is confirmed only after their guardian approves; declined or unapproved spots can be offered to another invitee or left empty
    • Admin (SuperAdmin / Coordinator) can see all pending guardian approvals for a private lesson in the event management view and can manually override/approve if needed
    • Payment: each family is responsible for their own athlete's share; the invited athlete's guardian pays when they approve (or the booking parent can optionally cover all spots at checkout — a toggle at booking time)

    Tasks

  • Schema: lesson athlete invites table — Create a table linked to an record (the organizer's booking): fields for , , (PENDING / APPROVED / DECLINED / CANCELLED), , , (for email link), , boolean. Add storage methods for CRUD and token lookup.
  • Backend: invite and approval routes — Add (authenticated, organizer only, validates they own the registration and the event is PRIVATE_LESSON), (public, returns invite context), and (public token-based, no auth required), and (authenticated, returns invite list with statuses). Add a route for the family dashboard.
  • Email notifications — On invite creation, send a Resend email to each invited athlete's guardian(s) (all guardians with , or all guardians if none set). Email includes lesson details (date, coach, location) and approve/decline buttons linking to the public token route. Send a follow-up confirmation email to the guardian after they approve or decline, and notify the organizer parent of each status change.
  • Booking UI — athlete nominator — On the private lesson registration flow (family dashboard / event registration page), after the organizer confirms their own athlete, show an "Add Training Partners" expandable section with an athlete search field (searches existing academy members). Display each nominated athlete with their approval status badge. Cap at 5 additional athletes. Show a "Organizer covers all spots" toggle that affects how payment is split at checkout.
  • Family dashboard — pending approvals panel — Add a "Lesson Invitations" section to the family dashboard (separate from the co-guardian panel) that lists pending invitations for each of the parent's athletes. Each card shows the lesson date, coach, organizer name, and Approve / Decline buttons. Approved/declined cards are shown in a collapsed history.
  • Admin event management view — In the private lesson event management panel, show an "Invited Athletes" section per registration listing each invitee's name, guardian email, status, and a manual override "Mark Approved" button for coordinators.
  • Relevant files

    - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Multi-Guardian Invite Parity

    Multi-Guardian Invite Parity

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Multi-Guardian Invite Parity

    What & Why

    Right now, only the designated primary guardian can send co-parent invitations. In split-family households — especially those with two couples (four adults total) — any verified guardian should be able to invite another adult for a shared child. This removes a coordination bottleneck and reflects how co-parenting actually works.

    Additionally, custody scheduling is currently a free-text notes field. For families that alternate residency on a structured schedule (e.g., odd/even weeks, or weekday/weekend splits), a structured week-pattern selector gives the academy cleaner visibility into which household an athlete is with on a given week.

    Done looks like

    • Any guardian with can open the "Invite Co-Parent / Guardian" dialog from the family dashboard, not only the primary guardian
    • Invited adults receive the same magic-link email and follow the same accept flow as before
    • A new "Custody Schedule" UI on the co-guardian panel lets a guardian set a repeating weekly pattern (e.g., Week A / Week B alternating, or Mon–Thu / Fri–Sun split) with a reference start date — stored as structured JSON rather than free text
    • The community profile admin view shows the structured schedule for each guardian in a human-readable format (e.g., "Week A: odd weeks starting Mar 17")
    • Existing free-text field is retained alongside the structured schedule for any additional context

    Tasks

  • Relax invite-sender restriction — Remove the primary-guardian-only check on ; instead allow any guardian who has for the child to send invites. Update the UI so the invite button is visible to all eligible guardians, not just the primary.
  • Structured custody schedule field — Add a JSON column to (schema + db:push). Define a simple structure: . The free-text field remains for open-ended notes.
  • Custody schedule UI — In the co-guardian panel on the family dashboard, replace the plain custody notes textarea with a structured schedule picker (alternating weeks selector or day-of-week checkboxes) plus the existing notes field. Any guardian with can edit this, not only the primary.
  • Admin profile display — In the community profile's Parent/Guardian card section, render the structured schedule as a human-readable summary alongside the existing Primary Residence and custody notes badges.
  • Relevant files

    - - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training

    Group Private Lesson Guardian Approval

    Group Private Lesson Guardian Approval

    Canadian Elite Volleyball Academy — Development Update • March 16, 2026

    Group Private Lesson Guardian Approval

    What & Why

    When a parent books a private lesson and wants to include other athletes (up to 5 additional spots), the academy currently has no mechanism to notify or obtain consent from those athletes' guardians. This creates a liability and Safe Sport gap — any adult bringing a child to a private session should have explicit parental consent. This feature adds an invite-and-approve flow: the booking parent nominates athletes, each athlete's guardian(s) receive a notification to approve or decline, and the session fills only with confirmed participants.

    Done looks like

    • On a private lesson registration/checkout, the booking parent can nominate up to 5 additional athletes by name search (searching existing academy members) or by entering a name + email if the athlete is not yet in the system
    • Each nominated athlete's guardian(s) receive an email notification: "Your child [Name] has been invited to a private lesson on [Date] with [Coach]. Please approve or decline."
    • Guardians can approve or decline from a link in the email (no login required for the decision, similar to the co-parent invite flow) or from a new "Pending Approvals" section on their family dashboard
    • The booking parent can see the approval status of each invited athlete (Pending / Approved / Declined) from their family dashboard registration detail
    • An athlete's spot in the lesson is confirmed only after their guardian approves; declined or unapproved spots can be offered to another invitee or left empty
    • Admin (SuperAdmin / Coordinator) can see all pending guardian approvals for a private lesson in the event management view and can manually override/approve if needed
    • Payment: each family is responsible for their own athlete's share; the invited athlete's guardian pays when they approve (or the booking parent can optionally cover all spots at checkout — a toggle at booking time)

    Tasks

  • Schema: lesson athlete invites table — Create a table linked to an record (the organizer's booking): fields for , , (PENDING / APPROVED / DECLINED / CANCELLED), , , (for email link), , boolean. Add storage methods for CRUD and token lookup.
  • Backend: invite and approval routes — Add (authenticated, organizer only, validates they own the registration and the event is PRIVATE_LESSON), (public, returns invite context), and (public token-based, no auth required), and (authenticated, returns invite list with statuses). Add a route for the family dashboard.
  • Email notifications — On invite creation, send a Resend email to each invited athlete's guardian(s) (all guardians with , or all guardians if none set). Email includes lesson details (date, coach, location) and approve/decline buttons linking to the public token route. Send a follow-up confirmation email to the guardian after they approve or decline, and notify the organizer parent of each status change.
  • Booking UI — athlete nominator — On the private lesson registration flow (family dashboard / event registration page), after the organizer confirms their own athlete, show an "Add Training Partners" expandable section with an athlete search field (searches existing academy members). Display each nominated athlete with their approval status badge. Cap at 5 additional athletes. Show a "Organizer covers all spots" toggle that affects how payment is split at checkout.
  • Family dashboard — pending approvals panel — Add a "Lesson Invitations" section to the family dashboard (separate from the co-guardian panel) that lists pending invitations for each of the parent's athletes. Each card shows the lesson date, coach, organizer name, and Approve / Decline buttons. Approved/declined cards are shown in a collapsed history.
  • Admin event management view — In the private lesson event management panel, show an "Invited Athletes" section per registration listing each invitee's name, guardian email, status, and a manual override "Mark Approved" button for coordinators.
  • Relevant files

    - - - -

    Canadian Elite Volleyball Academy
    elitevolleyball.training