Inspiration

This was litterally a new domain for me. I played some racing cars games when I was a kid and it was always interesting to see that there are a lot of variables to win a race. Now with this hackathon I was able to discover more about these variables. And as a software engineer, I've always worked with big data, but mostly for consumption and functional requirements, not at displaying it in a graph like. And this was the opportunity

What it does

The application serves as a comprehensive racing analytics platform that:

  • Imports race data from CSV files including telemetry, lap times, race results (provisional and official), and weather data
  • Visualizes telemetry with interactive charts showing speed, throttle, brake, RPM, and G-forces over time or distance
  • Analyzes lap performance by breaking down sector times, identifying consistency patterns, and comparing laps
  • Displays race results with position tracking, gaps to leader, fastest laps, and class standings
  • Maps GPS tracks showing racing lines and vehicle positions throughout sessions
  • Manages events and sessions organizing data by track, event, and session type (practice, qualifying, race)

How we built it

Backend: Symfony 6 (PHP 8.3) with Doctrine ORM, providing RESTful API endpoints for all data operations.

Database: TimescaleDB (PostgreSQL extension) optimized for time-series telemetry data. Handles 30M+ rows of telemetry efficiently using hypertables with automatic partitioning.

Frontend: Vue 3 with Composition API, Vite for builds, and a custom dark theme optimized for data visualization. Charts built with reactive components for real-time filtering and zooming.

Deployment: Railway.app with containerized Docker deployments. Separate services for backend API and frontend static hosting.

Data Pipeline: Custom Symfony console commands for CSV ingestion with intelligent file detection, session matching, and data validation.

Challenges we ran into

TimescaleDB at scale: Managing 30M+ telemetry rows required careful schema design, compression policies, and query optimization. Standard PostgreSQL patterns didn't work - we had to learn TimescaleDB-specific approaches like chunk elimination and continuous aggregates.

CSV format variations: Race data comes in inconsistent formats. Column names differ between provisional and official results, timestamps vary, and some files have encoding issues. Building a robust parser that handles all variations was complex.

Deployment complexity: Railway's volume mounts, port configurations, and build environment required significant debugging. Getting the PHP built-in server to respond on the correct port and ensuring CORS worked between frontend and backend services took troubleshooting.

Data coherence: Ensuring consistency between frontend displays, API responses, and database values across entities like drivers, vehicles, sessions, and results required careful validation at every layer.

Accomplishments that we're proud of

  • Clean architecture: Clear separation between entities (Event → Session → SessionParticipation → Results) that accurately models real motorsports data relationships
  • Efficient telemetry handling: Successfully storing and querying millions of telemetry points with sub-second response times
  • Intuitive data management: Import wizard that auto-detects file types, matches sessions, and handles both provisional and official results
  • Production deployment: Full CI/CD pipeline with Railway, handling both frontend and backend with proper environment configuration

What we learned

  • TimescaleDB hypertables and compression are powerful but require understanding when to use them (and when not to - foreign keys don't work on compressed chunks)
  • A lot of functional terms about this domain

What's next for Racing Analytics

A lot: Driver comparison tools: Overlay telemetry from multiple drivers to identify where time is gained or lost Predictive analytics: Use historical data to predict tire degradation, optimal pit windows, and race strategy Real-time data ingestion: Connect directly to timing systems for live session analysis AI-powered coaching: Automated insights identifying specific corner improvements and driving technique adjustments And more ...

Built With

Share this project:

Updates