A web-based event planner and schedule viewer for the Santos Tour Down Under cycling festival.
Inspired by the ongoing work by David Rossi who created and has maintained All The TDU for the last 8 years, I wanted to create a version that helped me acheive two main goals:
- A searchable/filterable view of events through a schedule and map lens
- A project to help me upskill in Laravel, Claude Code and AI/LLM integrations.
- Event browser — searchable, filterable listing of all TDU events with category, cost, distance, recurrence, and women's event indicators
- Timeline / schedule view — visual day-by-day timeline grid showing overlapping events across the festival week
- Map view — showing all the ride routes, event locations and race stages.
- Event detail pages — full event info with banner images and route links
- Favourites — authenticated users can save events to a personal shortlist
- Editor role — credentialed users can create and edit events, upload banner images, and manage sponsor logos
- Admin panel — user management and editor access approval workflow
- Data import — scraper and importer pipeline for ingesting event data from the official TDU program
| Layer | Technology |
|---|---|
| Backend | PHP 8.2+, Laravel 12 |
| Frontend | React 19, TypeScript, Inertia.js |
| Styling | Tailwind CSS 4, Radix UI |
| Auth | Laravel Fortify (with 2FA) |
| Media | Spatie MediaLibrary |
| Routing | Laravel Wayfinder (type-safe) |
| Database | Postgres Postgis (Docker) |
- PHP 8.2+ (via Laravel Herd or another local server)
- Composer
- Node.js 20+
git clone https://github.com/mayadomi/sidequester.git
cd sidequester
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate
php artisan db:seed
npm run buildcomposer dev # starts PHP server, queue worker, and Vite togetherOr run each separately:
php artisan serve
php artisan queue:listen
npm run devphp artisan events:importThe importer reads JSON scraped from the TDU website and normalises it against the canonical categories, sponsors, and locations defined in config/tdu.php.
The scraped data required a meaningful amount of manual curation — event titles, categories, and venue names varied significantly across the source, and sponsor associations were often missing or inconsistent. The normalisation aliases in config/tdu.php capture the bulk of these mappings, but edge cases were resolved by hand.
| Role | Access |
|---|---|
viewer |
Browse events, manage favourites |
editor |
Create and edit events, manage sponsor images |
admin |
Full access including user management |
Viewers can request editor access from the sidebar; admins approve requests from the Users panel.
composer test # lint + full test suite
php artisan test # tests only
composer lint # PHP auto-fix (Pint)
npm run types # TypeScript check
npm run lint # ESLint auto-fix
php artisan wayfinder:generate # regenerate type-safe route helpersA planned agentic layer would allow users to describe what they're looking for in natural language — "show me beginner-friendly morning rides near the city under 30km" — and have an AI assistant query, filter, and build a personalised schedule on their behalf. This would sit on top of the existing filter and favourites infrastructure and could also assist editors with event data entry and normalisation.
MIT




