Skip to main content

GeoReport CMS — A CMS-driven geospatial report generation platform powered by Wagtail/Django.

Project description

GeoReport

Hazard-agnostic geospatial report engine for early warning systems.

An installable Wagtail/Django package that generates CMS-driven geospatial analysis dashboards and bulletins. Configure once for any hazard — drought, flood, locust, food security, climate — no code changes needed.

PyPI Python 3.11+ Django 5.2+ Wagtail 7.x License: GPL-3.0

Why GeoReport?

Early warning systems need reporting dashboards. Building one from scratch means months of work — models, views, charts, maps, PDF export, CMS admin. GeoReport gives you all of that as a pip install, fully configurable through the Wagtail admin.

One package, any hazard:

Hazard Phases Maps Metrics
Drought Normal → Watch → Warning → Alert → Emergency SPI, NDVI, Land Cover Rainfall, Temperature, Soil Moisture, NDVI
Flood Low → Moderate → High → Very High → Extreme Flood extent, River levels Precipitation, River discharge, Affected area
Locust Calm → Outbreak → Upsurge → Plague Breeding sites, Swarm tracks Egg laying, Hopper bands, Swarm count
Food Security IPC 1 → 2 → 3 → 4 → 5 Food insecurity, Market prices Population affected, GAM, SAM
Your hazard Configure in CMS Any WMS/XYZ/GeoJSON Any indicator

Features

  • CMS-driven — all content managed through Wagtail admin, zero code changes
  • 10 chart types — exposure analysis, time series, climate trends, vegetation indices
  • Cartographic map figures — configurable legends, scale bars, north arrows, attribution
  • 6 map layer types — WMS, XYZ, vector tiles, GeoJSON, COG, heatmap
  • Native PDF export — jsPDF vector rendering, not screenshots
  • PNG export — html2canvas at 3x resolution with watermarks
  • Bulletin system — auth-gated advisory bulletins with expert commentary
  • REST API — Django REST Framework endpoints for dashboard configuration
  • No npm/node — pure server-rendered templates + vanilla JS via CDN
  • Dockerized — PostGIS + Gunicorn, single docker compose up

Install

pip install hazard-georeport
# or
uv add hazard-georeport

Add to your Django project:

# settings.py
INSTALLED_APPS = [
    "georeport.dashboard",
    "wagtail.contrib.settings",
    "wagtail.snippets",
    "wagtail",
    "rest_framework",
    "corsheaders",
    # ... your other apps
]

# urls.py
from django.urls import path, include

urlpatterns = [
    path("", include("georeport.urls")),
    # ... wagtail, admin, etc.
]

Then migrate and seed:

python manage.py migrate
python manage.py seed_default_config

Quick Start (Demo Project)

git clone https://github.com/icpac-igad/Geo-Report.git
cd Geo-Report
uv sync

python sandbox/manage.py migrate --run-syncdb --settings=sandbox.settings.dev
python sandbox/manage.py seed_default_config --settings=sandbox.settings.dev
python sandbox/manage.py createsuperuser --settings=sandbox.settings.dev
python sandbox/manage.py runserver 0.0.0.0:8000 --settings=sandbox.settings.dev

Open http://localhost:8000 (dashboard) or http://localhost:8000/cms/ (admin).

Docker

cd sandbox
docker compose up --build
Service URL
Dashboard http://localhost:9101
Wagtail Admin http://localhost:9101/cms/

CMS Configuration

Everything is configured through the Wagtail admin — no code changes needed.

Settings (Site-wide)

Model What It Configures
DashboardSettings Title, organization, logo, primary color, copyright text
TimeConfiguration Period cycles (dekadal, monthly, seasonal), available years, seasons

Snippets (Collections)

Model What It Configures
HazardPhase Severity levels — name, color, sort order (e.g., Watch → Alert → Emergency)
Region + admin levels Geographic hierarchy — countries and admin boundaries
MetricConfig Key indicator cards — title, unit, icon, value range
ChartConfig Which charts to show — enable/disable, custom titles
MapSection Map panels — layer type, data URL, legend entries, attribution
HydroBasin + levels Hydrological basin hierarchy
Cluster Country groupings for regional analysis
AreaType Available spatial selection modes
FooterAction Action buttons — export PDF, export PNG, share, view bulletin
ExtendedTag Categorized tags for indicators
BulletinConfig Bulletin content — expert comments, sections, outlook

Map Layers

Each MapSection supports:

Layer Type Use Case
WMS GeoServer/MapServer layers (SPI, NDVI, flood extent)
XYZ Standard tile servers
Vector Tiles MVT/PBF sources
GeoJSON Feature data from APIs
COG Cloud Optimized GeoTIFFs
Heatmap Point density visualization

Configure legend entries as JSON:

[
  {"color": "#006400", "label": "Very High"},
  {"color": "#FFD700", "label": "Moderate"},
  {"color": "#8B0000", "label": "Very Low"}
]

Architecture

georeport/                    # Installable package
├── dashboard/                # Django app (app_label="dashboard")
│   ├── models.py             # 15 Wagtail CMS models
│   ├── views.py              # Dashboard + bulletin views
│   ├── api.py                # DRF REST API
│   ├── serializers.py        # API serialization
│   ├── templates/            # Server-rendered HTML
│   ├── static/
│   │   ├── css/report.css    # Single stylesheet, CSS custom properties
│   │   └── js/
│   │       ├── dashboard.js  # Interactions, AOI drawing, PDF/PNG export
│   │       ├── charts.js     # Chart.js factory (10 chart types)
│   │       └── maps.js       # Map figure rendering + cartographic elements
│   └── management/commands/  # seed_default_config, load_gadm
└── urls.py                   # Package routes

Frontend Stack (CDN — no build step)

Library Version Purpose
Chart.js 4.4.7 All charts
MapLibre GL JS 4.7.1 Map rendering
html2canvas 1.4.1 PNG export
jsPDF 2.5.2 PDF export

Roadmap

  • Installable package with Wagtail CMS
  • Hazard-agnostic naming and configuration
  • Cartographic map figures with legends
  • Native PDF/PNG export
  • Bulletin system
  • REST API (Django REST Framework)
  • Data Provider interface — connect live APIs (CHIRPS, MODIS, ERA5)
  • Dynamic chart groups — DB-driven chart grouping
  • Seed profilesdrought.json, flood.json, minimal.json
  • PyPI release — versioned package on PyPI
  • Tests & CI/CD — unit tests, GitHub Actions
  • Documentation site — full docs with examples

Contributing

  1. Clone and run the demo project (see Quick Start)
  2. Explore the dashboard and CMS admin
  3. Open issues for bugs or ideas
  4. Submit pull requests against main

License

GPL-3.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hazard_georeport-0.1.0.tar.gz (442.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hazard_georeport-0.1.0-py3-none-any.whl (457.4 kB view details)

Uploaded Python 3

File details

Details for the file hazard_georeport-0.1.0.tar.gz.

File metadata

  • Download URL: hazard_georeport-0.1.0.tar.gz
  • Upload date:
  • Size: 442.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hazard_georeport-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1d671eb681885bbada388e60472d242de67128a6e7bdef37b30223747959a188
MD5 459a90eaaad6695955511fc5bf47aaba
BLAKE2b-256 1201d9eec1c99802f5eca193ebca8ed2de93bab86dac6acdfffa8df1638810b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hazard_georeport-0.1.0.tar.gz:

Publisher: publish.yml on icpac-igad/georeport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hazard_georeport-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hazard_georeport-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94cc919ee4772be0fe23d9f8ef14779eee7a5d67800bd72eb81a6f7a6660cfa2
MD5 71392c9cecc085e798d4b1b077f88117
BLAKE2b-256 8d7a73f30b610b0b97d1d9f2281dde2e36d2e55d2429a4fdc7e26d0eac2ba099

See more details on using hashes here.

Provenance

The following attestation bundles were made for hazard_georeport-0.1.0-py3-none-any.whl:

Publisher: publish.yml on icpac-igad/georeport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page