Hey devs,
I’m a 6th‑semester Software Engineering student and I’ve been building a passion project called APEX F1 – a full Formula 1 race simulation app written entirely in Flutter & Dart. 🏎️
It started as a simple F1 calendar and turned into a full race weekend simulator with AI, GPS‑accurate tracks, and a persistent championship mode. I’m pretty happy with how far it’s come, but now I’d really like feedback from more experienced developers.
High‑level overview
Built with Flutter 3 + Dart 3, zero backend – all logic runs on‑device.
Full F1 race weekend: qualifying (Q1/Q2/Q3) + race simulation.
GPS‑accurate circuit maps for all 24 tracks in the 2024 F1 calendar (using my own open‑sourced GeoJSON data).
20 AI drivers with different consistency / behavior profiles.
Three seasons built‑in (2023, 2024, 2025) + support for custom seasons via JSON.
Technical details
Architecture: feature‑first, “clean‑ish” structure (feature modules with shared core).
State: mostly StatefulWidget + AnimationController (no Riverpod/BLoC yet).
Storage: shared_preferences for profile, championship progress, and custom seasons.
UI: Neon dark theme, Google Fonts (Orbitron + Rajdhani), ~20+ animated transitions.
Responsive layout: custom helper that scales sizes based on a 390px baseline, tested from 360px phones to 600px+ tablets.
Links
Web build (Firebase Hosting): https://apex-f1-159.web.app
Repo: https://github.com/GulrezQayyum/apex-f1
Circuit data (open source): https://github.com/GulrezQayyum/f1_circuits-2024_season
What I’d love feedback on (for devs)
If you have some time to check the repo or play a couple of races, I’d really appreciate feedback on:
Architecture & structure
Is the feature‑first layout reasonable for a project this size?
Any obvious refactors you’d suggest before it grows further (e.g., extracting domain layer, introducing DI, etc.)?
State management & reactivity
Right now it’s mostly StatefulWidget + manual setState and controllers.
Would you recommend migrating to Riverpod / BLoC / ValueNotifiers for this kind of simulation UI?
Performance
The live GPS circuit map animates 20 cars every frame. Any suggestions on optimizing this in Flutter (custom painters, offscreen layers, etc.)?
Things you’d profile or watch out for on mid/low‑end devices?
Data & simulation design
Lap time / AI behavior is currently driven by JSON + some randomness around base pace and consistency.
If you’ve built sims before, any tips for keeping it fun but not totally random?
Feel free to be brutal (but constructive) — I want to use this project to level up as a developer.
If anyone’s interested, I can also break down the GPS data pipeline, circuit rendering, or how I structured the race engine in more detail. Happy to share code snippets or diagrams.
Thanks in advance to anyone who takes a look. 🙌
Top comments (0)