A-103 Swan Padel Club
A concept site for a padel club that does not exist.
ConceptSwan Padel Club is not a real business. It is a fictional club invented so the site could be designed and built end to end, the way a real one would be, without a client brief to work from. Every name, price and league table on it is made up.
- Client
- Self-initiated concept
- Year
- 2026
- Sheet
- A-103, 3 of 5
- Status
- Concept, no real client
- Role
- Sole developer and designer
- Stack
- Laravel, Inertia.js, React, TypeScript, Tailwind CSS, Motion
Summary
A complete, working site for a padel club that does not exist, built to show what a local sports club could have rather than to describe one that already does. Six pages, forms with real server-side validation, and a full local SEO layer. It says it is a concept on every page.
The brief
Most local sports clubs are let down by the same thing: a site that lists the facilities and says nothing about what turning up actually feels like. Courts are a commodity. The reason people join is the Wednesday regulars.
So the concept was built around that — accessibility first, community second, and the competitive side deliberately fourth, where somebody who has never held a racket won't trip over it.
Construction notes
What I built, keyed 1 to 5.
- Built the brand outward from the name: palette, type pairing and the swan mark
- Wrote the front end in React and TypeScript on Inertia, against a Laravel back end
- Built the booking and enquiry forms on Form Request validation, behind one notifier interface
- Found and fixed a client-render fault serving every page the same title and no description
- Audited every page against the Web Interface Guidelines at desktop and mobile widths
Outcome
A finished six-page concept site with working forms. It is a concept, not the site of a real club.
Worth noting
-
The SEO layer was fixing a real fault, not decoration
The site renders on the client, so nothing an Inertia page added to the document head ever reached a crawler. All six pages were serving an identical title and no description at all. That got fixed at the source — the metadata is held in PHP and rendered server-side, with the same values shared to React so navigation stays in step.
-
One abstraction, because it earned its place
Both forms hand off to a single notifier interface. The test for whether that was worth building was simple: two real implementations and more than one call site. On the demo it logs; a live club would swap the binding for a mailer and change nothing else.
-
Made-up details stop where they could do harm
The structured data carries the locality and opening hours, but no phone number and no street address. Schema gets scraped into directories, and an invented number that turns out to belong to a real household is not a risk worth taking for a demonstration.
More drawings
Hiring, or want something like this?
Ask me how I built it, or tell me what you're working on, or email oscarfreeman@live.co.uk.