Skip to content

Amertos/PitwallPro

Repository files navigation

🏎️ PitWall Pro

Advanced Formula 1 Telemetry, Strategy & 3D Visualization Dashboard

License: MIT React Three.js Vite PRs Welcome Issues Stars

πŸš€ Live Demo Β· πŸ“¦ Source Code Β· πŸ“ Changelog


πŸ“Έ Overview

PitWall Pro is a professional-grade F1 telemetry dashboard that brings the pit wall experience to your browser. Featuring real-time 3D car visualization, live telemetry streaming, head-to-head driver comparisons, and race strategy simulation β€” all in a single, performant React application.

🏁 Live at: amertos.github.io/PitwallPro


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        PitWall Pro                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚          β”‚    β”‚           Visualization Layer             β”‚  β”‚
β”‚  β”‚  Header  β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  + Theme β”‚    β”‚  β”‚ 3D Sceneβ”‚  β”‚ TrackMap β”‚  β”‚ Charts  β”‚ β”‚  β”‚
β”‚  β”‚ Controls β”‚    β”‚  β”‚ (R3F)   β”‚  β”‚          β”‚  β”‚(Rechartsβ”‚ β”‚  β”‚
β”‚  β”‚          β”‚    β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚       β”‚           β”‚              β”‚       β”‚  β”‚
β”‚                  β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚                   β”‚                      β”‚  β”‚
β”‚  β”‚ Driver   β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚ Cards    │◄────  β”‚         Playback Controls          β”‚  β”‚  β”‚
β”‚  β”‚ + Weatherβ”‚    β”‚  β”‚    Play Β· Pause Β· Speed Β· Seek     β”‚  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚                  β”‚                   β”‚                      β”‚  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚ Strategy β”‚    β”‚  β”‚       Telemetry Data Layer         β”‚  β”‚  β”‚
β”‚  β”‚ Sim      │◄────  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  β”‚
β”‚  β”‚          β”‚    β”‚  β”‚  β”‚telemetry β”‚  β”‚   metadata    β”‚  β”‚  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  β”‚  β”‚  .json   β”‚  β”‚    .json      β”‚  β”‚  β”‚  β”‚
β”‚                  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚  β”‚ Advanced β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β”‚ Panels   β”‚                                                   β”‚
β”‚  β”‚(Head2Headβ”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Timeline β”‚    β”‚              State Management             β”‚  β”‚
β”‚  β”‚ Tires    β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚  β”‚
β”‚  β”‚ Export)  β”‚    β”‚  β”‚useState   β”‚  β”‚useMemo    β”‚            β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  β”‚useCallbackβ”‚  β”‚useRef     β”‚            β”‚  β”‚
β”‚                  β”‚  β”‚useContext  β”‚  β”‚lazy()     β”‚            β”‚  β”‚
β”‚                  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚  β”‚
β”‚                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

✨ Features

Feature Description
🏎️ 3D F1 Visualization Ultra-detailed F1 car models with DRS animation, exhaust glow, and speed particles
πŸ“‘ Live Telemetry Real-time speed, gear, RPM, and delta time between drivers
πŸ“Š Interactive Charts Zoomable telemetry and gear charts with hover sync
🏁 Race Positions Live position tracking and lap-by-lap analysis
βš”οΈ Head-to-Head Direct driver comparison across all metrics
🎯 Strategy Simulation Experiment with tire strategies and pit stops
πŸ—ΊοΈ Track Map Circuit visualization with driver positions
⌨️ Keyboard Shortcuts Full keyboard navigation for power users
πŸŒ“ Dark/Light Themes Toggle between beautiful dark and light modes
πŸ“± Responsive Design Works on desktop and mobile
πŸ”Œ Performance Optimized Lazy-loaded 3D, RAF-based playback, memoized components

πŸ› οΈ Tech Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Frontend Stack                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                             β”‚
β”‚  βš›οΈ  React 19          β”‚  Component UI      β”‚
β”‚  🎨  Three.js + R3F   β”‚  3D Rendering      β”‚
β”‚  πŸ“Š  Recharts          β”‚  Data Charts       β”‚
β”‚  πŸ–ŒοΈ  Lucide React      β”‚  Icons             β”‚
β”‚  ⚑  Vite 8            β”‚  Build Tool        β”‚
β”‚  πŸ”  OxLint            β”‚  Code Quality      β”‚
β”‚  πŸš€  gh-pages          β”‚  Deployment        β”‚
β”‚                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ (recommended: 20+)
  • npm or yarn or pnpm

Installation

# Clone the repository
git clone https://github.com/Amertos/PitwallPro.git

# Navigate to the project
cd PitwallPro

# Install dependencies
npm install

# Start development server
npm run dev

Build for Production

# Build optimized production bundle
npm run build

# Preview the build locally
npm run preview

Deploy to GitHub Pages

npm run deploy

⌨️ Keyboard Shortcuts

Key Action
Space Play / Pause
← β†’ Seek backward/forward Β±10 frames
Home Reset to start
End Jump to end
1 2 3 4 Playback speed: 0.5x, 1x, 2x, 5x
L Toggle lap times table
F Toggle fullscreen
T Toggle dark/light theme
P Toggle advanced panels

πŸ“‚ Project Structure

PitwallPro/
β”œβ”€β”€ public/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ F13DScene.jsx          # 3D visualization (lazy-loaded)
β”‚   β”‚   β”œβ”€β”€ Header.jsx             # App header with controls
β”‚   β”‚   β”œβ”€β”€ DriverCard.jsx         # Driver info cards
β”‚   β”‚   β”œβ”€β”€ TelemetryChart.jsx     # Speed/RPM telemetry charts
β”‚   β”‚   β”œβ”€β”€ GearChart.jsx          # Gear shift visualization
β”‚   β”‚   β”œβ”€β”€ DeltaTime.jsx          # Time delta display
β”‚   β”‚   β”œβ”€β”€ TrackMap.jsx           # Circuit map
β”‚   β”‚   β”œβ”€β”€ PlaybackControls.jsx   # Play/pause/speed controls
β”‚   β”‚   β”œβ”€β”€ StrategySimulation.jsx # Pit strategy simulator
β”‚   β”‚   β”œβ”€β”€ DriverSpeedComparison.jsx # Side-by-side speed
β”‚   β”‚   β”œβ”€β”€ DriverHeadToHead.jsx   # Head-to-head stats
β”‚   β”‚   β”œβ”€β”€ RacePositions.jsx      # Race position tracker
β”‚   β”‚   β”œβ”€β”€ LapTimesTable.jsx      # Lap time analysis
β”‚   β”‚   β”œβ”€β”€ RaceSituation.jsx      # Race state display
β”‚   β”‚   β”œβ”€β”€ RaceTimeline.jsx       # Race event timeline
β”‚   β”‚   β”œβ”€β”€ TireStrategyVisualizer.jsx # Tire strategy view
β”‚   β”‚   β”œβ”€β”€ SessionComparison.jsx  # Session comparison
β”‚   β”‚   β”œβ”€β”€ WeatherWidget.jsx      # Weather info
β”‚   β”‚   β”œβ”€β”€ ExportData.jsx         # Data export
β”‚   β”‚   └── ErrorBoundary.jsx      # Error handling
β”‚   β”œβ”€β”€ context/
β”‚   β”‚   └── ThemeContext.jsx        # Theme state management
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   └── useFullscreen.js       # Fullscreen API hook
β”‚   β”œβ”€β”€ data/
β”‚   β”‚   β”œβ”€β”€ telemetry.json         # Telemetry data
β”‚   β”‚   β”œβ”€β”€ metadata.json          # Driver/session metadata
β”‚   β”‚   └── f1database.js          # F1 database utilities
β”‚   β”œβ”€β”€ App.jsx                    # Main application
β”‚   β”œβ”€β”€ App.css                    # Application styles
β”‚   β”œβ”€β”€ index.css                  # Global styles
β”‚   └── main.jsx                   # Entry point
β”œβ”€β”€ .github/
β”‚   └── ISSUE_TEMPLATE/
β”‚       β”œβ”€β”€ bug_report.md          # Bug report template
β”‚       └── feature_request.md     # Feature request template
β”œβ”€β”€ LICENSE                        # MIT License
β”œβ”€β”€ CONTRIBUTING.md                # Contribution guidelines
β”œβ”€β”€ CODE_OF_CONDUCT.md             # Code of conduct
β”œβ”€β”€ CHANGELOG.md                   # Version history
β”œβ”€β”€ SECURITY.md                    # Security policy
β”œβ”€β”€ package.json
β”œβ”€β”€ vite.config.js
└── README.md

πŸ”§ Configuration

The project uses Vite with the following configuration:

// vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  base: '/PitwallPro/',  // GitHub Pages base path
})

🀝 Contributing

Contributions are welcome! Please read our Contributing Guide for details on:

  • How to submit issues
  • How to submit pull requests
  • Development setup
  • Code style guidelines

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


πŸ‘¨β€πŸ’» Author

Amertos β€” GitHub


πŸ™ Acknowledgments

  • Formula 1 β€” The greatest racing series on Earth
  • React β€” A JavaScript library for building user interfaces
  • Three.js β€” 3D graphics library for the web
  • Recharts β€” Redefined chart library for React
  • Vite β€” Next generation frontend tooling

Built with ❀️ for Formula 1 enthusiasts

🏎️ Live Demo · ⭐ Star this repo if you like it!

Releases

Packages

Contributors

Languages