Jersey email: E2E validation + production send to boys #182

Closed
opened 2026-03-29 18:57:18 +00:00 by forgejo_admin · 3 comments
Contributor

Type

Feature

Lineage

Decomposed from forgejo_admin/basketball-api#243. Ops/validation scope.

Repo

forgejo_admin/westside-landing (UI validation)
forgejo_admin/basketball-api (send trigger)

User Story

As Marcus (admin)
I want the jersey email flow validated end-to-end before sending to all boys
So that parents have a smooth ordering experience with no broken links or stale copy

Context

Template hotfixed via ConfigMap with deadline copy, Kings+Queens gear photos from Marcus, opt-out removed. Code changes (division filter, template persistence) tracked in basketball-api#243. This ticket covers the manual validation and production send gate.

File Targets

No code changes — this is an ops/validation ticket.

Dependency Gate

This ticket MUST NOT execute until both dependencies are merged and deployed:

  1. westside-landing#180 — deadline text fix on jersey page (PR #189 in review)
  2. basketball-api#243 — division filter + exclude_ordered params on send endpoint

Without #243, the send endpoint has no division filter and would email ALL parents (boys + girls).

Acceptance Criteria

  • Dependencies deployed: Both #180 and #243 merged and live in cluster
  • E2E walk-through: email link → jersey page shows 'April 10' deadline → size/number selection → Stripe checkout session created → success page
  • Stripe verified: Products active, webhook endpoint reachable, config confirmed
  • Test send: POST /admin/email/jersey-reminder?test_email=Marcusdraney23@gmail.com — Marcus approves
  • Token generation: Call POST /admin/generate-tokens to generate token for Max Jordan (paid parent, no token). Endpoint auto-generates tokens for paid parents missing them.
  • Production send: POST /admin/email/jersey-reminder?division=boys&exclude_ordered=true — sends to ~35 boys

Test Expectations

  • Playwright screenshot: jersey page with 'April 10' deadline
  • Playwright screenshot: size/number selectors working
  • Confirm Stripe webhook config via basketball-api pod env
  • Run command: manual Playwright/Chrome DevTools validation

Constraints

  • Stripe is LIVE — no test transactions without explicit approval
  • Must not send production emails until Marcus approves final test
  • Sequential: deploy deps → validate → test send → approve → production send

Checklist

  • Validation complete
  • Marcus approved
  • Production send complete
  • project-westside-basketball
  • forgejo_admin/basketball-api#243 — code changes (BLOCKING dependency)
  • forgejo_admin/westside-landing#180 — deadline bug (BLOCKING dependency)
### Type Feature ### Lineage Decomposed from `forgejo_admin/basketball-api#243`. Ops/validation scope. ### Repo `forgejo_admin/westside-landing` (UI validation) `forgejo_admin/basketball-api` (send trigger) ### User Story As Marcus (admin) I want the jersey email flow validated end-to-end before sending to all boys So that parents have a smooth ordering experience with no broken links or stale copy ### Context Template hotfixed via ConfigMap with deadline copy, Kings+Queens gear photos from Marcus, opt-out removed. Code changes (division filter, template persistence) tracked in basketball-api#243. This ticket covers the manual validation and production send gate. ### File Targets No code changes — this is an ops/validation ticket. ### Dependency Gate This ticket MUST NOT execute until both dependencies are merged and deployed: 1. `westside-landing#180` — deadline text fix on jersey page (PR #189 in review) 2. `basketball-api#243` — division filter + exclude_ordered params on send endpoint Without #243, the send endpoint has no division filter and would email ALL parents (boys + girls). ### Acceptance Criteria - [ ] **Dependencies deployed:** Both #180 and #243 merged and live in cluster - [ ] **E2E walk-through:** email link → jersey page shows 'April 10' deadline → size/number selection → Stripe checkout session created → success page - [ ] **Stripe verified:** Products active, webhook endpoint reachable, config confirmed - [ ] **Test send:** `POST /admin/email/jersey-reminder?test_email=Marcusdraney23@gmail.com` — Marcus approves - [ ] **Token generation:** Call `POST /admin/generate-tokens` to generate token for Max Jordan (paid parent, no token). Endpoint auto-generates tokens for paid parents missing them. - [ ] **Production send:** `POST /admin/email/jersey-reminder?division=boys&exclude_ordered=true` — sends to ~35 boys ### Test Expectations - [ ] Playwright screenshot: jersey page with 'April 10' deadline - [ ] Playwright screenshot: size/number selectors working - [ ] Confirm Stripe webhook config via basketball-api pod env - Run command: manual Playwright/Chrome DevTools validation ### Constraints - Stripe is LIVE — no test transactions without explicit approval - Must not send production emails until Marcus approves final test - Sequential: deploy deps → validate → test send → approve → production send ### Checklist - [ ] Validation complete - [ ] Marcus approved - [ ] Production send complete ### Related - `project-westside-basketball` - `forgejo_admin/basketball-api#243` — code changes (BLOCKING dependency) - `forgejo_admin/westside-landing#180` — deadline bug (BLOCKING dependency)
Author
Contributor

Scope Review: NEEDS_REFINEMENT

Review note: review-666-2026-03-29

Ticket is well-structured with complete template and full traceability, but has three refinement items before it can advance:

  • [BODY] AC #5 (Generate token for Max Jordan) has no documented procedure — add the method (DB query, admin endpoint, or manual insert).
  • [BODY] Add explicit dependency gate: "Do not move to next_up until westside-landing#180 and basketball-api#243 are both merged and deployed." Both are currently open (#180 in_progress, #243 in backlog).
  • [SCOPE] AC #2 references #180 for deadline fix, but the jersey page already shows "April 10" in current code. Clarify which surface #180 fixes (email template ConfigMap?) and update AC #2 accordingly.

Critical dependency: The current POST /email/jersey-reminder endpoint has no division or exclude_ordered parameters. AC #6 (production send to boys) is blocked until basketball-api#243 is deployed.

## Scope Review: NEEDS_REFINEMENT Review note: `review-666-2026-03-29` Ticket is well-structured with complete template and full traceability, but has three refinement items before it can advance: - **[BODY]** AC #5 (Generate token for Max Jordan) has no documented procedure — add the method (DB query, admin endpoint, or manual insert). - **[BODY]** Add explicit dependency gate: "Do not move to next_up until westside-landing#180 and basketball-api#243 are both merged and deployed." Both are currently open (#180 in_progress, #243 in backlog). - **[SCOPE]** AC #2 references #180 for deadline fix, but the jersey page already shows "April 10" in current code. Clarify which surface #180 fixes (email template ConfigMap?) and update AC #2 accordingly. **Critical dependency:** The current `POST /email/jersey-reminder` endpoint has no `division` or `exclude_ordered` parameters. AC #6 (production send to boys) is blocked until basketball-api#243 is deployed.
Author
Contributor

Scope review: NEEDS_REFINEMENT → REFINED

Per review review-666-2026-03-29:

  1. Added explicit procedure for token generation (existing POST /admin/generate-tokens endpoint)
  2. Added ### Dependency Gate section — both #180 and #243 must be merged+deployed before execution
  3. Clarified #180 is about the Svelte page text (PR #189 in QA review)

Issue body updated per consolidated spec convention.

**Scope review: NEEDS_REFINEMENT → REFINED** Per review `review-666-2026-03-29`: 1. Added explicit procedure for token generation (existing `POST /admin/generate-tokens` endpoint) 2. Added `### Dependency Gate` section — both #180 and #243 must be merged+deployed before execution 3. Clarified #180 is about the Svelte page text (PR #189 in QA review) Issue body updated per consolidated spec convention.
Author
Contributor

Scope Review: READY (re-review)

Review note: review-666-2026-03-29

All 3 findings from previous NEEDS_REFINEMENT review are resolved:

  • Token generation procedure — AC #5 now documents POST /admin/generate-tokens with clear explanation
  • Dependency gate section — New ### Dependency Gate section added with both blocking dependencies and rationale
  • #180 scope clarification — Confirmed: jersey page at +page.svelte:276 still shows "March 28", fix is needed on the page itself

Scope is solid. Ready to move backlog → todo. Hold at todo until both #180 and #243 are merged and deployed before advancing to next_up.

## Scope Review: READY (re-review) Review note: `review-666-2026-03-29` All 3 findings from previous NEEDS_REFINEMENT review are resolved: - **Token generation procedure** — AC #5 now documents `POST /admin/generate-tokens` with clear explanation - **Dependency gate section** — New `### Dependency Gate` section added with both blocking dependencies and rationale - **#180 scope clarification** — Confirmed: jersey page at `+page.svelte:276` still shows "March 28", fix is needed on the page itself Scope is solid. Ready to move `backlog → todo`. Hold at `todo` until both #180 and #243 are merged and deployed before advancing to `next_up`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ldraney/westside-app#182
No description provided.