Screen-share this
Field → MAR
Every control on the public form, and the Master Athlete Record field it writes. v0 creates intent — not an active membership.
| Form | MAR | Notes |
|---|---|---|
| Legal name * | legal_name | Split from preferred. Record name. |
| Preferred name | preferred_name | What coaches should use. |
| Date of birth * | dob + age_at_submit + coppa_under_13 | Age calculated. Under 13 requires parent / legal guardian. |
| Sport * | sport | baseball | fastpitch only. |
| Throws / bats | handedness.throw / handedness.bat | R / L / (bat S). |
| Positions[] | positions | Optional context. Not a tryout. |
| Self-reported skill | self_reported_skill_band | Routing copy only. NEVER written to working_rank. |
| — (system) | working_rank | Always unranked from this form. Coach-assigned 1–8 later. |
| Guardian / payer name * | household.primary_guardian_name | Household stub, not the athlete. |
| Email * · phone * | household.email / phone | Payer contact. |
| Relationship | household.relationship | COPPA gate if under 13. |
| Emergency name + phone * | household.emergency_* | Required. Should be a second person. |
| Second guardian | household.second_guardian_name | Optional. |
| Program cards | product_code | fh_pilot_200 default, or dec_warriors_free. |
| — (system) | location_id | Always field_house. Prose may say Fredericksburg Field House. |
| Interest chips | interest_tags | Hitting / Fielding / Pitching / Speed / Private. Tags, not SKUs. |
| Preferred start date | preferred_start_date | Intent only. |
| Day + Morning/Afternoon/Evening | preferred_weekly | Seat preference, not credits. |
| Also available | also_available | Optional extra windows. |
| Apply vs waitlist | enrollment_intent + enrollment_status | apply → pending; waitlist → waitlist. Staff mark active offline. |
| Conduct / waiver * | consent_flags.conduct_waiver | Hard gate. Timestamped. |
| Media yes/no * | consent_flags.media | Separate flag. Not bundled into the waiver. |
| Device video yes/no * | consent_flags.device_video | HitTrax / cage. Does not create a device account. |
| Youth data * | consent_flags.youth_data | Retention / youth data. Required to keep the ID. |
| — (system) | consent_at | ISO timestamp when flags were captured. |
| — (system) | bda_athlete_id | BDA-YYYY-####. Never reused. |
| — (system) | household_id | HH-YYYY-#### household stub. |
Gaps vs Heather’s Google Form
- Split legal vs preferred name
- Sport baseball / fastpitch
- Handedness and positions
- Household vs athlete (COPPA)
- Product = FH preferred weekly seat, not vague programs-as-membership
- Consent split (waiver / media / device / data)
- No fake Elite → membership nickname mapping
- Waitlist language when capacity is full
On submit
- Mint bda_athlete_id = BDA-YYYY-#### (counter, never reuse)
- Mint household stub HH-YYYY-####
- product_code = fh_pilot_200 or dec_warriors_free
- location_id = field_house · working_rank = unranked
- enrollment_status = pending or waitlist
- Notify AJ + Heather via outbox stub (not live email yet)