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
- chart.js
- claude
- doctrine
- leaflet.js
- pinia
- postgresql
- railway
- symfony
- timescaledb
- vuejs
Log in or sign up for Devpost to join the conversation.