# ADP developer handoff

## Brand, pages and purpose
Use the exact user-selected name Athletes Development Professionals (ADP). Teen Sport remains the descriptive service, ages 13–19. Six pages: home, programs/membership, method, families/FAQ, consultation and privacy. Keep ADP distinct from ANDAM's adult concierge benefits. Working brand/domain rights and operating entity need confirmation before launch.

## Layout
Forest #143B30, deep #0D211C, ivory #F4F4EC, white #FFFEF9, ink #102922, lime #D4ED83, muted #596B61, line #CFD7CB. Barlow Condensed display; DM Sans body. Desktop max-width1280px with 50px side gutters; 100px major sections. At1100px reduce gutters/gaps. At800px use20px gutters, 78px mobile header and stack split/program/form grids. At380px collapse journey/session grids. Hero has a dark readable overlay with the photograph below/behind copy on mobile. Essential content remains HTML text.

## Membership and copy authority
Proposed base:399USD/person/28days; eight60-minute appointments; cap6compatible athletes; entry45-minute Blueprint; taught practice actions; incorporated reviews and authorized guardian updates. Payment costs included; applicable tax and final terms stated before purchase. No online payment. Keep catalog/config and static content/FAQ synchronized. Existing contracts are separate. Location copy states planned Training Room/American Fork delivery subject to venue confirmation; home service needs a complete separate quote.

## Age and permission rules
13–15:Foundation, minor. 16–17:Performance, minor. 18–19:Performance, adult. Experience/readiness can alter the actual starting prescription. Under13/20+ not eligible for this request route. For minors, a parent/legal guardian submits their own contact details and confirms authority; later private guardian consent and athlete assent required. Adult athletes use self or authorized adult contact, with appropriate permission; a parent/payer has no automatic record access. Do not collect full DOB, school address, medical history, minor private contact or public profiles here.

## Inquiry modes
config.js inquiryEndpoint=null: explicit no-submission preview; values stay in page memory only. Configure an approved same-origin HTTPS endpoint, e.g./api/inquiries, for live submissions. Cross-origin HTTPS can be configured but requires correct CORS and data terms. Do not insert an API key in client code. Browser validation is convenience; server validation and permission checks are mandatory. Request delivery does not mean enrollment, medical clearance or reserved capacity.

## Endpoint contract
POST JSON. Header Idempotency-Key: client-generated UUID; retain for retries of identical payload. Reuse must not duplicate records. Changed payload gets a new key. Success only after durable acceptance; return HTTP2xx with {"ok":true,"requestId":"server-generated-id"}. No fake success responses. Failure uses appropriate4xx/5xx; do not echo sensitive details. The client times out after20seconds and retains data in the current page; a timeout does not prove the server failed. Same-key retry must reconcile existing acceptance.

Fields:program,catalogVersion,ageBand,role,authorityConfirmed,sport,season,goal(optional,max500),setting,area(max100),availability(optional,max200),contactName(max100),email(max254),contactMethod(email/call/text),phone(max40;required for call/text),contactConsent=true,interest(optional Foundation/Performance). Raw form checkbox authority may also be present; normalize and validate all fields server-side. Do not trust client prices, roles, consent or age. Validate against allowlists; reject malformed/oversized payloads, unsupported origins and missing authority. Rate/spam controls, abuse monitoring, duplicate protection and appropriate request logging are required. Keep private free text out of analytics and routine logs. Review retention/deletion policy, access controls and processor terms. Create a staff task and send an appropriate confirmation only after accepted delivery.

## Interaction acceptance
Test menu toggle and Escape/focus. Tabs support click, arrows,Home/End and correct aria-selected/tabindex. Explorer displays only information; no auto-clearance. Form step controls validate current inputs; Enter cannot bypass a step. Changing minor/adult band resets contact role/authority. Phone becomes required for call/text. Before serialization, age/role/authority is checked again. Render input using textContent, not HTML. No storage or trackers. All actual endpoint behavior must be tested in browser after configuration.

## Release checks
360,390,768,1024,1440px;200%zoom;keyboard;screen reader;reduced motion;image crop;external fonts/fallback. Test every age/role boundary, form back/edit, email/phone errors, timeout, non-JSON failure, double-submit, idempotent retry and changed-payload retry. Confirm actual coach/qualification/insurance/venue/schedule and public contact details. Approve proposed prices/tax/policies; implement elapsed24-hour cancellation and separate renewal cancellation in the booking system. Replace preview privacy with accurate production processing terms and contacts. Remove noindex only on approved public pages and add correct canonicals/sitemap. Static/boundary checks do not replace browser QA.

## Photography provenance
Built-in image generation produced adp-athletes.png for this project: fictional older teen athletes rehearsing controlled acceleration under an adult coach, charcoal/olive sportswear, mountain sports-field setting, premium natural light, no logo/text. adp-coaching.png reuses the prior Teen Sport illustrative concept: supervised older teen warm-up in a bright refined studio. Neither depicts verified ADP people or premises. Preserve disclosure/appropriate context and approve assets before advertising. No clinical or recruitment outcome is implied.

## Research and implementation
See RESEARCH.md in the source bundle for the official Parisi,D1 and Exos pages and limited design inferences. Website source is framework-free HTML/CSS/ESmodules. build.py regenerates pages; serve dist using an HTTP server. Developer guide link is for the private preview; it can be removed from public navigation after handoff.
