CRToros
A Django platform for Costa Rica's bull-riding circuit: events, leagues, participants and results in one place.

What it solves
- Turns a circuit that lived in WhatsApp groups and printed posters into a single calendar with sign-ups and results.
- Men's and women's leagues with nomination and voting phases, plus a full admin panel for the organising team.
- Ride and wristband logging that leaves a searchable history where none existed before.
- Events close automatically on a scheduled task, so nobody has to remember to switch sign-ups off.
Costa Rican bull riding is a large, completely decentralised circuit. The information (who rides, where, when, who won) lived scattered across WhatsApp groups, posters and posts that disappeared into the feed. CRToros is an attempt to give that circuit a digital home.
What it solves
One calendar instead of twenty group chats. Every event carries date, time, town, ring, organiser and broadcaster, plus a visible status: open, with registered participants, closed. Someone looking to ride this weekend checks one place.
Participation with a real record. Users register, complete a profile according to their type (rider, cattle owner, fan) and sign up for events. Wristband and ride logging leave behind a searchable history that simply didn’t exist before, and that serves the participant as much as the organiser.
A league with written rules. Men’s and women’s leagues, with a nomination phase, registration window, voting and a standings table. What used to be settled by judgement call is now written down and auditable.
The design decision
The circuit already worked without a platform: it had spent decades organising itself by phone and word of mouth. Introducing software there couldn’t mean asking people to change how they work, so the rule was that every screen had to solve something that’s genuinely awkward today: finding the next event, seeing who’s signed up, checking a standings table, and nothing more. Anything that didn’t save a specific person work stayed out.
How it’s built
Django 5.2 with PostgreSQL in production, TailwindCSS on the front end and Cloudinary for event and participant imagery. It’s deployed on Railway, with scheduled tasks that close events automatically once their date passes, a small detail that removes the organising team’s most repetitive manual chore, and automated email for confirmations and notices.
The staff panel covers the whole operation: events, riders, bulls, and the catalogues of towns, rings and riding groups. The goal was for the team to run the platform day to day without depending on me for anything.