Inspiration

This summer, the World Cup is bringing millions of fans across the US, Mexico, and Canada, and every one of them will be juggling five different apps just to find a hotel, grab a meal, or find their own friends in an 80,000-person stadium. We didn't need to imagine that problem: we live a smaller version of it every weekend at high school and club tournaments, where forty families are scattered across five different group texts, nobody knows which hotel is the "team hotel," and the schedule changes with half the squad never finding out. As three teammates genuinely obsessed with sports and tournaments, we built Touro to fix that, for a Saturday club tournament and for the World Cup alike.

What it does

Touro is a live tournament companion for squads, teams, families, and fans, traveling together for a game weekend.

  • Instant squad onboarding: create a squad in seconds, or join one instantly with an invite code, no separate signup flow needed.
  • Role-aware experience: parent, player, coach, organizer, or fan, each sees a dashboard tailored to what they actually need.
  • Smart Schedule Engine: the core of the app. Tournament brackets shift constantly, a blowout ends 20 minutes early and every downstream game needs to move. Touro recalculates the cascade automatically using historical game-duration data, and only notifies the squads actually affected, instead of burying everyone in alerts.
  • Live feed: scores, field changes, and weather delays, scoped to what matters to your squad, replacing the group-text chaos.
  • GameDay AI: an in-app assistant you can ask things like "do I have time to grab lunch before the semifinal?" and get an answer grounded in your real schedule and location.
  • Squad hub: built-in group chat, live roster, one-tap invite links, and a parent-controlled, encrypted emergency medical card (allergies, contacts, insurance) that's one tap away for a coach in an actual emergency.
  • Live map/navigation: opt-in, squad-scoped location sharing that auto-expires when the weekend ends, plus pins for every field, hotel, restaurant, parking lot, and first-aid station with instant turn-by-turn directions.
  • Hotels & restaurants, socially filtered: instead of generic listings, see how many of your own squad are staying or eating at each spot, so logistics decisions run through people you trust.

How we built it

Touro is a Next.js 16 (App Router, React 19) application, built with the vinext toolchain and deployed on Cloudflare Workers via Wrangler, with optional D1 (SQLite) and R2 bindings managed through Drizzle ORM for data persistence. The UI is styled with Tailwind CSS 4, and the live map/navigation experience is built on Leaflet and react-leaflet with custom pins for fields, hotels, restaurants, parking, and first-aid stations.

GameDay AI is powered by Groq's hosted inference (Llama 3.3 70B), we round-robin across multiple API keys to keep the assistant responsive during live demos without stalling on rate limits. The Smart Schedule Engine is custom logic that models tournament games as a dependency graph, recalculating downstream game times from historical duration data whenever an upstream game finishes early or late, and diffing the result to notify only affected squads.

Challenges we ran into

  • Modeling tournament schedules as a real dependency graph, not just a flat list of times, so a single early finish correctly cascades through every downstream game without over-notifying uninvolved squads.
  • Keeping GameDay AI fast and reliable on a shared/rate-limited inference provider during a live demo, which pushed us to build key round-robining rather than relying on a single API key.
  • Balancing a genuinely useful location-sharing feature with privacy, we designed it to be opt-in, squad-scoped, and auto-expiring rather than a persistent tracker, which shaped both the data model and the UI.
  • Making one dashboard feel different and relevant for five very different roles (parent, player, coach, organizer, fan) without maintaining five separate apps.

Accomplishments that we're proud of

  • A working Smart Schedule Engine that actually recalculates cascading tournament schedules live, instead of faking it with a static mock.
  • An AI assistant that answers real, grounded questions about your specific schedule and location rather than generic chat.
  • A cohesive, role-based experience covering the entire tournament weekend, schedule, communication, safety, and logistics, in one app.

What we learned

  • How to design real-time, dependency-aware scheduling logic instead of treating a schedule as a static artifact.
  • How to build responsible location-sharing features, scoping and auto-expiry are as important as the feature itself.
  • How to ship a full-stack app end-to-end on Cloudflare's edge platform (Workers, D1, R2) with Next.js.

What's next for Touro

  • Live score ingestion from real tournament data sources instead of demo data.
  • Push notifications for schedule cascades and squad chat.
  • Expanding GameDay AI to proactively surface conflicts (e.g., "your flight overlaps with the championship game") instead of only answering on request.

Tech Stack / Built With

Frontend

  • Next.js 16 (App Router)
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • Leaflet / react-leaflet (live map & navigation)
  • Lucide React (icons)

Backend / Infra

  • Cloudflare Workers (via Wrangler)
  • Cloudflare D1 (SQLite), optional data persistence
  • Cloudflare R2, object storage
  • Drizzle ORM / Drizzle Kit
  • vinext (Vite-based Next.js runtime for Cloudflare)
  • Vite

AI

  • Groq API (Llama 3.3 70B), powers GameDay AI (schedule Q&A, cascade explanations, daily digests)

Tooling

  • ESLint
  • Node.js 22+

Built With

Share this project:

Updates