A full-stack, real-time web dashboard tracking every spacecraft, satellite, rocket and mission ever launched by the Indian Space Research Organisation β from Aryabhata (1975) to Aditya-L1 (2023).
- About the Project
- Features
- Tech Stack
- Project Structure
- Getting Started
- API Endpoints
- Pages & Sections
- Database Models
- GitHub Actions CI/CD
- Docker Deployment
- Cloud Deployment
- Data Sources
- Author
- License
India's space programme is one of the most remarkable achievements in modern science. From launching Aryabhata in 1975 on a borrowed Soviet rocket, to landing on the lunar south pole in 2023 β ISRO has consistently achieved the extraordinary on a budget that rivals no major space agency.
This project was built to make all of that data accessible, searchable, and beautiful.
The ISRO Mission Control Dashboard is a production-grade full-stack web application that:
- Fetches live data from the ISRO Open API and caches it in SQLite
- Displays spacecraft, launchers, customer satellites, and ISRO research centres
- Visualises trends with 5 interactive Plotly.js charts
- Shows ISRO's global footprint on a live Leaflet.js map with orbital overlays
- Supports user authentication (register/login) and a personal Favourites system
- Ships with Docker and a full GitHub Actions CI/CD pipeline
Built with Python (Flask), vanilla JavaScript, and a deep love for space. πΈ
- 240 animated twinkling stars with random durations
- 3 rotating orbital rings with glowing satellite dots
- Purple / black / deep-blue animated nebula clouds
- Scroll-reveal animations on every section
- Live animated stat counters
- ISRO milestones timeline (1975 β 2023)
- Cosmos info cards: Earth, LEO, GEO, Moon, Mars, Sun-L1
- Complete catalogue of every ISRO spacecraft ever launched
- Live search by name or launch vehicle
- Filter by launch year (auto-populated dropdown)
- Full detail modal on card click
- Save to Favourites with one click (β)
- Full profiles for all 6 rocket families: SLV Β· ASLV Β· PSLV Β· GSLV Mk I Β· GSLV Mk II Β· LVM3 Β· SSLV
- Shows flight count, thrust (kN), stages, current status
- Operational vs Retired badges
- International satellites launched by ISRO for 30+ countries
- Filter by country, search by satellite name
- Columns: Name Β· Country Β· Launch Date Β· Vehicle Β· Orbit
- Leaflet.js map with dark CartoDB tiles
- All ISRO centres plotted with custom markers
- Both launch sites (SHAR Sriharikota + Thumba)
- Orbital track overlays: LEO Β· GEO Β· SSO Β· Inclined
- Simulated real-time satellite dot on LEO track
- Layer toggle controls (centres / sites / orbits)
- Launches by Year β bar chart, colour-scaled
- Launcher Flights β horizontal bar comparing all rocket families
- Customer Satellites by Country β top 10 nations
- Mission Type Breakdown β donut (Earth Obs / Comms / Nav / Science / Tech Demo)
- Cumulative Launches β line chart with area fill
- Register with username + email + password (min 6 chars)
- Login with username OR email
- Passwords hashed with Werkzeug PBKDF2
- Session management via Flask-Login
- Duplicate username/email protection
- Save any spacecraft, launcher, or satellite
- Persists in SQLite across server restarts
- Filter by item type Β· Remove any item
- Shows save timestamp for each item
- Cards for all 8 major research facilities
- Full name, location, description for each
| Layer | Technology | Purpose |
|---|---|---|
| Backend | Python 3.11 + Flask 3.0 | Web server & REST API |
| Database | SQLite + SQLAlchemy 2.0 | Users, favourites, API cache |
| Auth | Flask-Login + Werkzeug | Sessions & password hashing |
| Frontend | Vanilla HTML5 + CSS3 + JS | UI without framework overhead |
| Charts | Plotly.js 2.26 | Interactive analytics |
| Maps | Leaflet.js 1.9 | Live orbital map |
| Fonts | Orbitron Β· Share Tech Mono Β· Syne | Cosmic aesthetic |
| API | isro.vercel.app | Live spacecraft & launch data |
| Caching | SQLite LaunchCache (30-min TTL) | Offline fallback + speed |
| CI/CD | GitHub Actions | Automated testing & deployment |
| Container | Docker + Gunicorn | Production deployment |
isro-mission-control/
β
βββ run.py # App entry point
βββ requirements.txt # Python dependencies
βββ Dockerfile # Container config
β
βββ backend/
β βββ __init__.py # Flask app factory (create_app)
β βββ models/
β β βββ __init__.py # User, Favourite, LaunchCache models
β βββ routes/
β β βββ auth.py # /auth/* endpoints
β β βββ api.py # /api/* endpoints
β β βββ pages.py # HTML page routes
β βββ utils/
β βββ isro_api.py # API fetcher + cache + fallback data
β
βββ frontend/
β βββ templates/
β βββ base.html # Shared nav, auth modal, toast
β βββ landing.html # Cosmic home page
β βββ index.html # Main dashboard
β βββ map.html # Live Leaflet map
β βββ favourites.html # Saved items page
β
βββ .github/
βββ workflows/
βββ ci.yml # GitHub Actions pipeline
- Python 3.10+ β python.org
- Git β git-scm.com
- VSCode (recommended) β code.visualstudio.com
# 1. Clone
git clone https://github.com/YOUR-USERNAME/isro-dashboard.git
cd isro-dashboard
# 2. Create virtual environment
python -m venv venv
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate
# 3. Install dependencies
pip install -r requirements.txtpython run.pyOpen http://127.0.0.1:5000 in your browser.
The SQLite database (instance/isro.db) is created automatically on first run.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/stats |
Summary counts |
| GET | /api/spacecrafts?q=&year= |
Spacecraft list (searchable) |
| GET | /api/launchers?q= |
Launch vehicles |
| GET | /api/customer_satellites?q=&country= |
International satellites |
| GET | /api/centres |
ISRO centres with coordinates |
| GET | /api/analytics |
Aggregated chart data |
| GET | /api/countries |
Country list for filters |
| Method | Endpoint | Body |
|---|---|---|
| POST | /auth/register |
{ username, email, password } |
| POST | /auth/login |
{ identifier, password } |
| POST | /auth/logout |
β |
| GET | /auth/me |
Returns current user or null |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/favourites |
Get all saved items |
| POST | /api/favourites |
Save an item |
| DELETE | /api/favourites/<id> |
Remove an item |
| URL | Page | Description |
|---|---|---|
/ |
Landing | Cosmic home β stars, features, cosmos info, author |
/dashboard |
Dashboard | Spacecraft / Launchers / Satellites / Analytics |
/map |
Live Map | Leaflet map with orbital tracks |
/favourites |
Saved | Personal bookmarked missions |
| Column | Type | Notes |
|---|---|---|
| id | Integer PK | Auto-increment |
| username | String(80) | Unique |
| String(120) | Unique | |
| password_hash | String(256) | PBKDF2 hashed |
| created_at | DateTime | UTC |
| Column | Type | Notes |
|---|---|---|
| id | Integer PK | Auto-increment |
| user_id | FK β User | Owner |
| item_type | String(50) | spacecraft / launcher / satellite |
| item_name | String(200) | Display name |
| item_data | Text (JSON) | Full item blob |
| saved_at | DateTime | UTC |
| Column | Type | Notes |
|---|---|---|
| endpoint | String(200) | Unique API key |
| data | Text (JSON) | Cached response |
| fetched_at | DateTime | TTL = 30 minutes |
git push to main
β
[Job 1: test]
Install Python 3.11
Test app factory imports
Test all 9 API routes β HTTP 200
Test register β login β bad login rejection
β
[Job 2: build] (main branch only)
Build Docker image
Start container + curl health check
β
[Job 3: notify]
Print deployment-ready summary
# Build
docker build -t isro-dashboard .
# Run
docker run -p 5000:5000 -e SECRET_KEY=your-secret isro-dashboard
# Open http://localhost:5000- Push to GitHub
- railway.app β New Project β Deploy from GitHub
- Add env var:
SECRET_KEY=your-secret - Done β Railway auto-detects the Dockerfile β
- render.com β New Web Service β Connect GitHub repo
- Build:
pip install -r requirements.txt - Start:
gunicorn run:app - Add env var:
SECRET_KEY=your-secret
| Source | URL | Data |
|---|---|---|
| ISRO Open API | isro.vercel.app | Spacecraft, Launchers, Centres |
| ISRO Stats | isrostats.in | Launch statistics |
| CartoDB | carto.com | Dark map tiles |
API responses are cached for 30 minutes. If the API is unreachable, the dashboard falls back to built-in sample data β it always works.
Developer Β· Space Enthusiast Β· Python Developer
A passionate developer who built this dashboard to make India's extraordinary space programme more accessible and explorable for everyone. Combining a love for Python, data engineering, and the cosmos β this project tracks every rocket, satellite and mission ISRO has ever launched.
- ISRO β 50 years of extraordinary space exploration
- isro.vercel.app β Open API for ISRO data
- Plotly.js β Interactive chart library
- Leaflet.js β Open-source maps
- CartoDB β Dark map tiles
- Flask β Lightweight Python web framework
MIT License β Copyright (c) 2024 Anjum A Khan
Free to use, modify, and distribute.
Made with Passion, by Anjum A Khan
"Space is not just the final frontier β it is the infinite canvas of human potential."
β Star this repo if you found it useful!