Sola is a full-stack solar site intelligence platform for small and mid-size solar EPCs, developers, and commercial rooftop sales teams.
It helps teams find rooftops and land parcels with the most usable solar area and strongest project viability, then rank them quickly enough to turn GIS data into qualified pipeline.
/ Solar EPC teams
\ Rooftop solar installers
/ Energy consultants
\ Renewable energy researchers
/ Local government body planners
\ Sustainability teams
/ Students working on solar/geospatial analysis
| Question | Feature |
|---|---|
| Where are the potential solar sites? | Interactive Kerala map |
| Which sites are worth checking first? | Solar suitability score |
| Which site is better than another? | Site comparison |
| What makes a site promising? | Score factors |
| What makes a site risky? | Risk indicators |
| Where are the sites located visually? | Map markers |
| Can sites be ranked? | Ranked shortlist |
| Can this support early planning? | Screening workflow |
UI Inspiration (Thanks to Google Stitch. Loved it!)
---
User Panel
---
Admin Dashboard
$ Kerala-only solar site map
$ Interactive map markers
$ Solar suitability scoring
$ Site comparison
$ Basic risk consideration
$ Adjustable scoring logic
$ Streamlit-based interface
[] Find high-potential commercial rooftops and sites without manual map trawling.
[] Prioritize leads by usable area, irradiance, flood risk, and grid proximity.
[] Return ranked polygons as GeoJSON for map workflows and downstream analysis.
[] Keep the data model ready for AI roof detection, shading analysis, and grid hosting layers.
[] Give sales and development teams a shared source of truth for early site screening.
UI - Google Stitch
Frontend: Next.js 15 App Router, TypeScript, Tailwind, MapLibre GL JS.
Backend: Python 3.11, FastAPI async, SQLAlchemy 2.0, GeoAlchemy2.
Database: PostgreSQL 16 with PostGIS 3.4.
GIS: GeoPandas, Shapely, PVLib, Rasterio.
Container: Docker Compose with PostGIS, backend API, and Grafana.
Sola/
├── backend/ # FastAPI application
├── frontend/ # Next.js 15 App Router frontend
├── gis-processing/ # GeoPandas/PVLib/Rasterio processing workspace
├── grafana/ # Monitoring dashboards and provisioning
├── data/ # Raw, processed, and sample datasets
├── docs/ # Architecture, data, API, contribution docs
└── scripts/ # Setup, seed, and utility scripts
GET /api/v1/sitesreturns GeoJSON FeatureCollections.- Filters:
city,min_area_sqm,min_score, andlimit. - Token-free MVP map using MapLibre GL JS and OpenStreetMap raster tiles.
- Realistic suitability scoring:
- usable area weight
- irradiance weight
- flood risk weight
- grid proximity weight
- Sample PostGIS data loads automatically on first database startup.
- Kerala MVP candidate sites are included in
scripts/load-thiruvananthapuram-sites.sqlanddata/sample/thiruvananthapuram_solar_sites.csv. - Structured JSON logging and defensive API error handling.
- Data model includes AI-detection status fields for later roof segmentation workflows.
- Grafana provisioning is ready for operational dashboards.
- Clone and enter the repository:
git clone https://github.com/Githubdiaries/Sola.git
cd Sola- Create your local environment file:
cp .env.example .env- Start PostGIS, the FastAPI backend, and Grafana:
docker compose up --build- Verify the backend:
curl http://localhost:8000/health- Query ranked solar sites:
curl "http://localhost:8000/api/v1/sites?city=Kochi&min_area_sqm=8000&min_score=80"- Open service UIs:
- API docs: http://localhost:8000/docs
- Grafana: http://localhost:3001
Default Grafana credentials are admin / admin unless changed in .env.
The frontend is scaffolded separately so product work can continue in parallel with GIS/API development.
cd frontend
npm install
NEXT_PUBLIC_API_URL=http://localhost:8000 npm run devOpen http://localhost:3000.
List all top-ranked sites:
curl "http://localhost:8000/api/v1/sites?limit=25"Filter by project viability:
curl "http://localhost:8000/api/v1/sites?min_score=85&min_area_sqm=7000"View the Kerala MVP pipeline:
curl "http://localhost:8000/api/v1/sites?city=Thiruvananthapuram&limit=50"If your database volume already existed before the Thiruvananthapuram seed file was added, load it once:
type scripts\load-thiruvananthapuram-sites.sql | docker exec -i sola-postgis psql -U sola -d solaScore a candidate before saving it:
curl -X POST "http://localhost:8000/api/v1/analysis/suitability" \
-H "Content-Type: application/json" \
-d '{"usable_area_sqm":9000,"annual_ghi_kwh_m2":1880,"flood_risk_score":0.2,"grid_distance_km":1.8}'- Backend configuration lives in
backend/app/core/config.py. - Database sessions and PostGIS initialization live in
backend/app/core/database.py. - The candidate site model lives in
backend/app/models/solar_site.py. - Scoring logic lives in
backend/app/services/suitability_service.py. - Sample seed data lives in
scripts/init-db.sql.
The scoring service is intentionally isolated from the API endpoint so future AI roof detection can update polygons, usable area, shading loss, and confidence metadata without changing route contracts.
- Final engineering approval
- Structural roof verification
- Electrical system design
- DISCOM or grid approval
- Land ownership verification
- Detailed shading analysis
- Financial feasibility modelling
- Legal or permitting review
- Scale it on a larger geographical span.
- Club with renewable data centres, in including them as primary costumers .
- Make the color gradient score flexible .
AGPL-3.0. See LICENSE.