FitKid Schedule
A web application built to solve a specific problem: FitKid championship schedules arrived as PDFs, were shared over WhatsApp with errors, and parents had no idea when their kids were competing. FitKid Schedule fixes that with a fast mobile search.
The Problem
The competition schedule arrived as a PDF. The coordinator forwarded it on WhatsApp. Parents asked what time it was, someone replied with the wrong number, someone else corrected it... guaranteed confusion at every championship.
The Solution
-
Search by name
Type the athlete's surname and the app shows their slot instantly. No more scrolling through a PDF.
-
Category and gender filters
Alevín, Benjamín, Infantil... filter by category and gender to narrow the list down to the age group you care about.
-
Club highlight
The ?club= URL parameter highlights all participants from a given club. Share the link and the filter travels with it.
-
Installable PWA
No App Store needed. Install from the browser and it works on any phone in the technical team.
Tech Stack
Frontend
- Astro 5 (SSR)
- TypeScript
- CSS puro
- React islands
Infrastructure
- Vercel
- PWA / Service Worker
- Middleware Astro
Data
- Markdown + Git
- Zod (Content Collections)
- Scripts TS (PDF → MD)
Technical Decisions
-
No database
Schedules live in Markdown files versioned with Git. A deploy is a publish. No admin panel, no SQL, no running costs.
-
Simple password auth
Two roles (admin and viewer) handled in Astro middleware with httpOnly cookies. The admin sees sensitive data; the viewer sees only published schedules. No OAuth, no JWT, no external library.
-
Highlight without server state
The favourite club is stored as a ?club= URL parameter. The state is the URL. You can share the link with the filter already applied — no backend or session required.
Open Source & GDPR
The code is public on GitHub. The public repo uses fictional data, satisfying GDPR without friction: code and data are separated by design.
Full schedule at a glance
Every time slot and category of the day on a single page, no pagination. Designed so the referee or coordinator can scan the schedule at a glance.
Search by name
Type a name and the system highlights it instantly across the full view. Parents can find their child's slot without reading row by row.
Your club always visible
Set your club via an environment variable and all its athletes appear in cyan automatically. No code changes, no redeploy needed.
Mobile-first
Athletes and families check the schedule from their phone right at the venue. No app to install — it works as a PWA.
Curious about the details?
The code is open. You can inspect the auth middleware implementation, the Markdown data structure, and the PDF import scripts.