Skip to main content
Open Source

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

Full schedule at a glance

01

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

Search by name

02

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

Your club always visible

03

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
04

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.