Programmes are structured records, not prose. Each has an age range, days, times, a level and a location, and those fields are visible on the card without opening anything. A parent can scan the list and eliminate most of it immediately, which is what they are trying to do. The descriptive copy sits underneath for the ones that survive the scan.
The programme list filters by age, because that is the first cut every parent makes. Typing a child’s age narrows the list to the batches they can actually join. It works without JavaScript as a plain grouped list, since a filter that fails silently is worse than one that was never there.
The enquiry form is attached to programmes rather than sitting on a separate contact page. Starting an enquiry from a programme card carries the programme, age group and batch timing into the message, so the academy receives a question it can answer in one reply instead of a message saying "interested, please share details". There is a direct call link and a WhatsApp link alongside it, because for this audience those are used more than any form and pretending otherwise would be a design decision made for the portfolio rather than for the client.
The team and facilities content is real photography, presented as a gallery that loads only what is on screen. Squad and coaching profiles are short and factual. The temptation on a sports site is atmospheric copy, and atmospheric copy is what makes a parent scroll past the section with the answer in it.
Performance was the thing I spent most of the build on, and none of it is visible. Images are sized to the layout rather than uploaded at camera resolution, the fold renders from static output with no client-side fetch, and there is no video anywhere on the landing view. The result is a site that shows the programme list before a parent has finished waiting for it.