Organizer Journey
So what: Signup is friction-free until the email verification step. That gate is the only thing standing between us and a full organizer dashboard walkthrough. Phase A (pre-verification) is complete and documented below. Phase B (post-verification dashboard, tournament-create, draws, scoring, payments) is paused at the gate per
BLOCKERS.md— resumes when Nestor provides the 6-digit code. Until then, the post-verification half of this doc is sourced from Featurebase changelog + public marketing copy + observed event pages, not from a logged-in walkthrough — clearly tagged as inferred.
Phase A — pre-verification (completed 2026-05-22)
Step 1 — discovery / landing
URL: https://wecourts.com/
Screenshot: screenshots/01-home.png
What the prospective organizer sees:
- Hero "Padel Tournaments — Find tournaments matched to your skill" (player-first hero, but organizer nav present)
- Top nav: Compete | WPPR Rating | Community | Organize | Log In | Sign Up
- Footer "Partners" block: List Padel Tournament | Add Your Club | Become Partner | Developer API
- Footer "Become Partner" goes to WhatsApp +971 52 893 2202 (not a self-serve page) — see screenshots/01-home.png footer
Inference: WeCourts splits organizers into 3 tiers — self-serve (sign up freely), Sales-qualified (WhatsApp to onboard as WPPR Partner), and Federation/Association (likely BD-led).
Step 2 — "Organize" dropdown / mega menu
Hovering / clicking "Organize" in the top nav shows entries (extracted from rendered DOM):
- Run Tournaments — "Group Stage / Knockouts, Round Robin, King of Court, Americano and more" → /new
- Create a Match — "WPPR Verified Matches. Perfectly balanced." → /matches/create (auth-gated)
- Register Your Club — "Become WeCourts Partner." → /signup/organizer
- Become an Organizer — "Manage events and leagues." → /signup/organizer
- WeCourts TV — "Live court displays with QR pairing and remote control" → /tv
Three CTAs converge on /signup/organizer (Run Tournaments redirects to /new marketing page; Register Your Club and Become an Organizer go directly to the signup form). The split between "Club" and "Organizer" is marketing-only — the signup page says "Clubs and organizers use the same tools." (screenshots/11-signup-organizer.png).
Step 3 — /new marketing page (Run Tournaments landing)
URL: https://wecourts.com/new
Screenshot: screenshots/15-new-tournament.png
Text dump: raw-html/15-new-tournament.text.txt
Key claims surfaced on this page that shape an organizer's expectations: - "Free Forever" — no listing fee - AI-Powered Setup — upload a tournament poster, AI extracts data, form pre-fills, publish in minutes - WPPR Verified — verification tier exists - 9,400+ active players (here) vs 25K+ players (footer) — claim inconsistency worth flagging in self-critique - 3,500+ tournaments (footer) vs 3,500+ tournaments (here, consistent) - 200+ clubs (here) vs 450+ clubs (footer) — second inconsistency; the lower numbers may be MENA-only and the footer global
4-step funnel marketed: Sign Up → Select Type (Standard / WPPR Verified) → Upload Poster → Go Live.
Step 4 — /signup/organizer (the form)
URL: https://wecourts.com/signup/organizer
Screenshot: screenshots/11-signup-organizer.png
Text dump: raw-html/11-signup-organizer.text.txt
Fields collected:
| Field | Type | Required | Placeholder | DOM id |
|---|---|---|---|---|
| First name | text | y | John | firstName |
| Last name | text | y | Doe | lastName |
| Email | email | y | john@example.com | signup-email |
| Password | password | y | Create a strong password | signup-password |
Plus a "Sign up with Google" button at the top (OAuth path).
No phone collected at this step (player path collects phone OTP; organizer path is email-first per screenshots/14-matches-create.png).
Copy on the form:
Create your organizer account Clubs and organizers use the same tools. Back to choose path ... Use at least 8 characters. By creating an account, you agree to our Terms and Privacy Policy
Step 5 — form submit
Filled with:
- firstName: Nestor
- lastName: Sanchez Martin
- email: nestor@thepadelsociety.co
- password: 20-char generated, stored in CREDENTIALS.md
Screenshot pre-submit: screenshots/27-signup-filled.png
On click of Create account the page navigates to /verify-email.
Step 6 — verify-email gate (RESOLVED 2026-05-22)
URL: https://wecourts.com/verify-email
Screenshot: screenshots/28-post-signup.png
Text:
Verify Your Email We've sent a 6-digit verification code to nestor@thepadelsociety.co Enter verification code Verify Email Didn't receive the code? Resend in 53s Back to Sign Up
Resolution: Code 157208 provided by Nestor; accepted by wecourts. Account passed verify-email gate.
Step 7 — login (post-verify) — /login/organizer
URL: https://wecourts.com/login/organizer
Form fields:
#email— email (placeholder "Enter your email")#password— password (placeholder "Enter your password")#rememberMe— checkbox- "Continue with Google" — OAuth alternative
- "Sign In" — submit
Observation: Login is role-specific by URL — /login/organizer (this) vs /login/player (separate). The login routes split before auth.
Step 8 — /onboarding — set up organizer profile (path choice)
URL: https://wecourts.com/onboarding
Screenshot: screenshots/52-onboarding-root.png, 62-onboarding-root-recapture.png
Text dump: raw-html/62-onboarding-root.text.txt
Page copy:
"Set up your organizer profile Verify your WhatsApp, then tell us where you organize tournaments. Takes about a minute. ✓ WhatsApp verified How do you run tournaments? Choose the option that fits you best."
Critical UX detail: "WhatsApp verified" already shows ✓ on first arrival to /onboarding. WeCourts pre-validates the phone number from somewhere (likely Google OAuth profile lookup OR — more likely — the WPPR identity-graph already had Nestor's number from a prior tournament submission). I never entered a phone. This is identity-graph leverage in action.
Two-path choice (button buttons in a 2-card layout):
- "I'm part of a Padel Club" — "My club hosts the tournaments."
- "I'm an Organizer Company" — "I organize tournaments across venues."
This is the persona fork. The downstream entity created is either a Club row (venue-anchored) or an Organizer row (entity-anchored, multi-venue). Both routes feed the same approval queue.
Step 9a — Organizer Company path → "Find your organizer company"
Screenshot: screenshots/53-onboarding-org-company-form.png, 63-onboarding-org-company-list.png
Pattern: Dedupe-search-then-create.
UI shape:
- Search box / scroll-list with existing Organizer Companies (sorted; "0-all" filter chip → all)
- Existing entries display: name + "Select" button
- Sample entries visible: "360 Padel Tour UAE", "971 PADEL", "973 Padel Tour", "Abu Dhabi Sports Council", "Asia Pacific Padel Tour (APPT)", "Astro", "Battleground", "Bravo Padel", "Champions Road", "Chiquitas Dubai", "Crazy Padel Gang (c.p.g.dxb)", "Dubai Padel Cup", "EG Padel Group", "Empower Sports Services", "Endurance Sports Servies" [sic — typo preserved], "FM Padel Academy", "Fujairah Padel", "GOAT Games", "HPT"
- Fallback: "Can't find it? Create a new company" button
So what: The dedupe-first pattern prevents duplicate org records. Compare to the player-side identity-graph leak (duplicate profiles, no merge) — they got identity dedupe right on the org side but failed on the player side. The mechanism is the same (search-before-create); they just don't enforce it for players.
Step 9b — "Create your company" form
URL: still https://wecourts.com/onboarding (no URL change — modal/section swap)
Screenshot: screenshots/54-onboarding-create-company.png, 64-create-company-form.png
Text dump: raw-html/64-create-company-form.text.txt
Form fields (with DOM ids):
| Field | DOM id / type | Required | Notes |
|---|---|---|---|
| Company name | #cname text |
Yes | placeholder "Your company or brand name" |
| Description | #cdesc textarea |
No | placeholder "Tell players about your organization, events, and what makes your tournaments special..." |
| Logo | input[type=file] |
No | "Upload Logo, Click to browse • PNG, JPG up to 10MB" — accepts file OR URL (dual-mode upload) |
| Logo URL fallback | unnamed url input | No | "or Enter Image URL" |
| WhatsApp Number | unnamed tel input |
No | Inline UX text: "This number will be pre-filled for new tournaments" |
| Email Address | #cemail email |
No | placeholder "contact@yourcompany.com" |
| Website | #cweb url |
No | placeholder "https://yourcompany.com" |
#cinsta url |
No | placeholder "https://instagram.com/yourcompany" | |
| Country | "Select country" dropdown | No | Full ISO-3166 list — all countries accepted (verified by opening the dropdown — screenshots/61, 65) |
| City | "Select city" dropdown | No | Country-coupled (visible cities depend on country selected) |
| Submit | "Create company" button | — |
Step 9c — Padel Club path → "Find your club"
Screenshot: screenshots/59-onboarding-padel-club.png
Same dedupe-search pattern as Organizer Company path but matched against the clubs directory (the same UUIDs we saw under /clubs/{uuid} in Phase 1). Top 20 clubs displayed sorted alphabetically. Notable entries: ISD Padel (Dubai), Jordan Tennis Federation (Amman), Padel Arena (Sharjah), Padel Art (Dubai), Padel Kingdom UAE (Dubai), Padel One (Dubai), Padel Park (Dubai), Padel Square (Ajman), Padelmania (Abu Dhabi), Rally Padel Club (Dubai), The Lob Dubai (Dubai), WPA - World Padel Academy (4 locations: 321 Sports Abu Dhabi, Dubai, Khorfakkan, Sharjah), 1969 Al-Sadd Padel Indoor Court (Doha, Qatar) ← Qatar coverage confirmed, 364 Sport Club (Madaba, Jordan), 40 Love Padel Club & Cafe (Amman, Jordan), 4padel (Riyadh, Saudi Arabia) ← Saudi coverage confirmed, 700 Padel & Fitness Hub (Dubai).
Step 9d — "Create your club" form
Screenshot: screenshots/60-onboarding-create-club.png
Form fields (different from Company — minimal field set):
| Field | Required | Notes |
|---|---|---|
| Club name | Yes | |
| Country | Yes | Full ISO-3166 |
| City | Yes | Country-coupled |
| About | No | textarea (no "Description" label here — copy variation) |
| WhatsApp Number | No | Same "pre-filled for new tournaments" inline copy |
| Email Address | No | |
| Website | No | |
| No | ||
| Submit | — | "Create club" button |
No Logo field in this MVP variant (vs Company form which has dual-mode logo upload). Suggests club logos come from elsewhere (likely the wider Clubs directory which already has photos field). Country and City being required on Club (but not on Company) reflects that clubs are venue-anchored, companies are entity-anchored.
Step 10 — /onboarding/pending-review — manual approval gate (ACTIVE BLOCKER)
URL: https://wecourts.com/onboarding/pending-review
Screenshot: screenshots/51-onboarding-pending.png
Text dump: raw-html/52-onboarding-pending-review.text.txt
Page copy verbatim:
"We're reviewing your profile Thanks, Nestor! Our team is reviewing your organizer profile. You'll get a WhatsApp message as soon as you're approved — usually within a few hours. We'll notify you at +66620230022. Waiting for approval — checking automatically Need help? Contact WeCourts Sign out"
Critical findings:
- Approval is human-review, not automated — the "usually within a few hours" SLA confirms this
- Approval signal channel is WhatsApp, NOT email — fully MENA-native UX even for the approval moment
- The phone number was pre-resolved without user input — Nestor's +66 number appeared even though he never entered it. Best explanation: the WPPR identity-graph already had a Player row for him (someone submitted a tournament he played in), and login matched email → existing Player record → linked phone.
- The page auto-polls for state change ("checking automatically"). XHR to
/api/auth/meis one polling endpoint observed. - All organizer-write routes (
/tournaments/new,/matches/create,/organizer,/organizer/tournaments,/profile,/organizer/profile) redirect HERE. The full create-tournament wizard is unreachable without approval.
This is the manual-trust ladder in action. WeCourts treats organizer signup like a partnership-prospect funnel — not a self-serve product moment. Strategic implication for OpenRally: a fully self-serve organizer signup (no manual gate) is a meaningful UX differentiator IF we ship abuse-controls strong enough to not need humans in the loop.
See BLOCKERS.md for the blocker protocol; Phase 3 wizard-walk is paused at this gate.
Phase B — post-approval (PAUSED at gate 2)
Everything below is what we will verify once approval lands. Until then, this section's claims are inferences from Featurebase changelog + public marketing copy + observed event pages — NOT from a logged-in walkthrough. Clearly tagged.
Everything below is what we will verify once the code arrives. Treated as inference, not observation. Source citations on every line.
Inferred dashboard structure
From 34-featurebase-changelog.text.txt (2026-05-04 entry "Organizer Hub Mega Menu"):
- Identity-aware top-level Hub groups: Community | Players | Results | Club/Company Setup | (others not fully enumerated)
- Global Command Palette (Ctrl+K / Cmd+K) for finding actions, players, tournaments, setup routes
- Drilldown sheets pattern (not modal-stack): Scoring Settings has format / scoring / KOC / TV / magic links / DQ / incidents / seeds / advanced controls
Inferred tournament-create flow
From 15-new-tournament.text.txt + 34-featurebase-changelog.text.txt (Apr 30 "Trusted organizers skip approval on duplicated tournaments"):
- Choose source: new tournament OR duplicate from prior tournament (duplicates get auto-approved if organizer is "trusted" tier)
- AI poster upload step (claimed): upload PNG/JPG of physical poster → AI extracts name, date, time, fee, levels, capacity, prize pool
- Structure selection: team size (formats with MGG eligibility: 12/14/18; Direct Advance eligibility: 10/11/20/21/22/23/26/27), bracket type, scoring rules, court count
- Operator Console drilldown sheets: format / scoring / KOC / TV pairing / magic links generation / DQ rules / incident policy / seeding / advanced
- Publish toggle: Standard vs WPPR-Verified (latter likely requires partnership / sales-qualified)
Inferred tournament-management surface (per Featurebase changelog + observed event pages)
Day-to-day actions:
- Set / lock / open registration
- Approve / waitlist / reject registrations
- Partner-search invite resolution (Accept / Decline / Reassign)
- Looking-for-Partner queue: review LFP listings, mark them as connected after match-up
- Edit fee, dates, capacity (subject to "Close Registration" expiring pending invites — same pattern as OpenRally v0.4 W41)
Mid-tournament actions (SOS Console — 34-featurebase-changelog.text.txt Apr 18):
Teams & Players: - Add a Team (creates matches for a new or registered team) - Replace a Team (swap team but keep matches and scores intact) - Change a Player (update name on a team without affecting scores) - Team No-Show (remove + bring in replacement)
Draw & Schedule: - Move Team to Group (transfer team between groups) - Swap Teams Between Matches (switch two unscored matches) - Start Knockout Early (lock confirmed qualifiers; begin bracket ahead of schedule) - Quick Team Edit (toggle on → tap any team in bracket → swap — scores untouched)
Reset & Undo:
- Reopen Group Stage (undo conclude, delete the KO bracket, finish groups)
- Restart Knockout (delete all KO matches, return to groups)
- Restart Tournament (clear all scores, return to pre-start)
- Remove & Disqualify (with 3 outcome modes per 34-featurebase-changelog.text.txt May 4: forfeit-wins / zero-unplayed / void-all)
Post-tournament actions:
- Submit results to WPPR (Direct or Linked-to-tournament, 5-7 day SLA per
07-drop-in.text.txt) - Resubmit results after a waiver (waiver gets revoked on resubmit per
34-featurebase-changelog.text.txtApr 30) - Mark tournament complete; "Path to Victory" + "Watch Recap on WeCourts TV" auto-generated
Inferred scoring / live-events surface
Per Operator Console drilldown labels (34-featurebase-changelog.text.txt May 4):
- TV pairing tab — pair a screen via QR (screenshots/10-tv.png shows the pairing CTA)
- Magic links tab — generate shareable, auth-less URLs (probably for scorers, referees, players, partners)
- DQ tab — disqualification rules
- Incidents tab — log incidents (no-shows, injuries, disputes)
- Seeds tab — top-seed picker (auto-opens team list on "+ Add" per Apr 30 changelog)
- Advanced tab — power-user settings
Inferred player communications surface
WhatsApp deep-linking by context (34-featurebase-changelog.text.txt Apr 30):
- Solo registrants → "Add a partner or track your registration"
- LFP listings → "Manage your listing"
- Waitlist → "Check your waitlist position"
- Match day → "See match schedule and details"
Implies a WhatsApp Business API integration (or wa.me deep-link templating) — and that the organizer can trigger / preview these messages from the dashboard.
Gated surfaces not visible to us pre-verification
- The organizer dashboard itself (
/o/*,/organizer/*,/dashboard/*— exact route unknown; we have only the marketing-page/organizewhich redirects to/) - The tournament-create form
- The bracket scoring screen for an in-progress tournament
- Payment configuration (since payments are "In Progress", may not have shipped a UI yet)
- WhatsApp community claim/create flow (
/communitiesshows the public surface only) - Magic-link generation UI
- TV pairing flow (Operator Console TV tab)
- AI poster upload UI (the marketing page is the only proof this exists at all)
What to verify the moment Nestor unblocks
Order of priority (because organizer dashboard sessions auto-expire):
- Tournament-create UI — does the AI poster extraction actually work? Upload a sample poster and see what fields land.
- Structure selection — count the bracket-format options offered: do Round Robin, KOC, Americano (testing), Mixed Doubles all appear as first-class structures?
- Operator Console — open one drilldown sheet (e.g., Scoring) and document the field count.
- SOS Console — find the SOS entry point on a live tournament; document the 12+ actions.
- Magic links — generate one and inspect the URL pattern (no-auth? signed JWT? expiry?).
- TV pairing — generate a pairing code; verify the QR flow.
- Payments configuration — does any payment UI exist, or is it still gated behind a "Coming Soon"?
- Multi-organizer collaboration — find the invite-collaborator UI; capture the RBAC roles offered.
- Trust tier indicator — find any UI surface that shows the organizer's tier (probation / standard / trusted).
- Mobile organizer UX — view the dashboard on phone width; confirm parity with marketing claim "manage events and leagues" on mobile.
Each of these gets a dedicated screenshot + text dump + addition to feature-matrix.md to convert ⚠️/🔧 markers into confirmed ✅/❌.