A modern, dark, radar-style flight tracking dashboard.
- Frontend: React (functional components), Tailwind CSS, Leaflet (Carto Dark tiles), Framer Motion
- Backend: Python Flask (JSON API)
- Database: MySQL (schema + sample seed provided)
frontend/— React UIsrc/components/— layout + widgets (Sidebar/Topbar/Stats)src/features/flights/— map + flight details panelsrc/lib/— Axios API client
backend/— Flask API + SQL scriptsapp/routes/— API routesapp/data/— dummy flight data generatorsql/— MySQL schema + seed
From backend/:
python -m venv .venv
.\.venv\Scripts\Activate.ps1pip install -r requirements.txtpython run.pyOr from the repo root:
npm run backendAPI:
GET http://localhost:5000/healthGET http://localhost:5000/flightsGET http://localhost:5000/flight/1POST http://localhost:5000/auth/loginGET http://localhost:5000/auth/me
These scripts create tables flights, locations, users and insert sample data.
Run in MySQL:
SOURCE backend/sql/schema.sql;
SOURCE backend/sql/seed.sql;Note: the current API endpoints return dummy data (for fast UI iteration). You can later swap to DB-backed queries using the same schema.
From frontend/:
npm installCreate frontend/.env (optional):
VITE_API_URL=http://localhost:5000Run dev server:
npm run devOr from the repo root:
npm run devNote: open the app via the Vite dev server URL (don’t double-click/open index.html directly, or you may see “Failed to load module script”).
- Same PC:
http://localhost:5173 - From phone / another laptop: use the Network URL printed by Vite (e.g.
http://192.168.x.x:5173).- Important: on a phone,
localhostmeans the phone itself. - If you try a custom hostname like
http://anthundu:5173it will only work if that name resolves via DNS/hosts to your PC.
- Important: on a phone,
Open:
http://localhost:5173
Login:
- Demo creds:
demo@skytrack.ai/demo123
To use a real airplane/cloud photo (instead of the default SVG), add your image here:
frontend/public/auth-bg.jpg(or.jpeg/.png/.webp)
Then refresh http://localhost:5173/login (the UI auto-detects the file and switches to the photo background).
Alternative (easiest): open http://localhost:5173/login and click Set background photo to pick an image from your PC (saved in browser storage).
Windows note: make sure the filename isn’t accidentally auth-bg.jpg.png (turn on “File name extensions” in File Explorer, or rename it to auth-bg.png).
- Left sidebar navigation (Dashboard / Live Map / Flights / Airports / Settings)
- Top navbar: logo, search (flight/airport/route), profile icon
- Full-screen dark world map using Leaflet + Carto dark tiles
- Multiple flight markers (dummy data) with glowing airplane icons and popups
- Route lines between origin and destination
- Dashboard widget cards (live flights, delays, distance, efficiency)
- Right-side sliding flight details panel with route, speed/altitude, progress bar, ETA
- This is intentionally built to look premium (dark glass panels, gradients, smooth motion) while keeping the UX exactly as requested.
- If you want the backend to read from MySQL instead of dummy data, tell me and I’ll wire SQLAlchemy models + queries to match the current UI JSON shape.