UN
UNOCC | Geospatial Solutions
Self-Service Mapping Tool
LIVE

Settings

Administration & integrations
User Management
Manage analyst and admin accounts across UNOCC, DPPA, and EOSG portals. Stored in the dashboard_users table on Supabase. Note: authentication itself still runs against the hardcoded list in index.html — this panel manages the profile directory only.
Loading users…
API Registry
Searchable catalogue of API endpoints used across UNOCC projects — ACLED, USGS, WFP ArcGIS services, and more. Add new endpoints, copy curl commands, and browse auth/parameter details.
HDX Resources
Auto-harvested catalogue of dataset URLs from the Humanitarian Data Exchange (HDX). Filter by data type, country, format, or organization. Re-populated by 08_AUTOMATION/Scripts/hdx_harvest.py.

Add user

Geostats Analysis

ECDC Basemap

Add layer from API registry

Loading registry…

Self-Service Mapping Tool — Project Plan

Rollout proposal for UNOCC, DPPA/DPO & EOSG · Drafted 2026-04-23 · Updated 2026-06-10 · Open source markdown →
LIVE v1.0

1. Executive summary

The UNOCC Self-Service Mapping Tool is an internal web application that consolidates GIS map production, request tracking, incident monitoring, and country factpacks into a single operational surface. This plan scales it to a service for UNOCC, DPPA/DPO, and EOSG at a projected ~500 users within 12 months, on self-hosted infrastructure owned and funded by UNOCC.

Status (2026-06-10): the platform is LIVE. The public stack — TLS edge, API with per-user auth + email allowlist, job queue, object storage, and a containerized QGIS render engine producing all nine map products — is in production on a single KVM4 VPS. The native mobile app, Orbis, is live on Android (sideloaded standalone build, verified on user devices) and in TestFlight rollout on iOS under a paid Apple Developer membership. The LLM chat tier (constraint 1) remains the principal unbuilt component of this plan.

1
LLM chat for every user — token cost scales with total headcount, not just analysts.
2
Self-hosted only — no managed PaaS. Inference can either go to a commercial LLM API over outbound HTTPS, or run on-prem.
3
Manual account issuance — no SSO in year 1; onboarding is a human step.
4
UNOCC-procured & UNOCC-funded from day one — a KVM4-class VPS is the baseline.

2. Users & use cases

OrgPrimary featuresPeak Y1
UNOCC — GISFactpack / basemap / ECDC, Kanban, chat-to-map15
UNOCC — WatchIncident map, GDACS RSS, conflict events, chat Q&A20
DPPA/DPOFactpacks, incident map, dashboards, chat Q&A200
EOSGCountry snapshots, briefing view, chat Q&A30
Interns / rotationalSame as desk officers50
Total~315
Stretch target ~500 users once usage is proven.

3. LLM tiering (vendor-neutral)

The chat backend routes each request to a capability tier. Specific models are chosen at deployment time based on what procurement and security approve; the architecture does not hardcode a vendor or version.

TierPurpose~ $/interaction
T1 — LightweightSimple Q&A, tracker lookups, short commands$0.005
T2 — StandardMulti-step reasoning, map chat with context$0.015
T3 — AdvancedHeavy analyst tasks (opt-in, role-gated)$0.07
Blended avg at a 70/30 T1/T2 mix ≈ $0.007 per interaction.

4. Live architecture ● IN PRODUCTION

Clients · Web + Mobile
  • Web dashboard (JWT login)
  • Orbis Android — sideloaded APK · LIVE
  • Orbis iOS — TestFlight · rolling out
  • Email delivery of finished maps
API plane · KVM4 (Docker)
  • Caddy TLS edge (maps.shirob.com)
  • FastAPI — auth, allowlist, audit
  • Baserow — job queue + users
  • MinIO — outputs, presigned URLs
Render plane · same VPS
  • QGIS 4.0.2 headless worker
  • 9 products incl. PPTX decks
  • 4 geostats pipelines (precise dates)
  • ACLED · UN Geodata · OSM · WB
LLM chat · NOT YET BUILT
  • Option A — commercial API (default)
  • Option B — on-prem open-weights
  • Tier 1 / 2 / 3 routing
  • Gates Phase 1 of this plan
All components are containerized and run on a single KVM4 VPS today (concurrency 1 on the render worker). The proposed migration re-points these same containers onto UN Azure managed services — Container Apps (API + UI, Baserow), PostgreSQL Flexible, Blob Storage, and a queue-triggered render Job — a re-host, not a rebuild. Because everything is already Dockerized, cutover is a re-pointing exercise (~2–3 weeks part-time) with zero downtime; the current environment keeps serving until the flip.
UNOCC Self-Service Mapping — from request to map in minutes (Request · Authenticate · Queue · Render · Store · Deliver, plus the full product catalog)
The self-service workflow (2026-06-11) — Request · Authenticate · Queue · Render · Store · Deliver, with the full product catalog and the self-service advantage. Click to open the full-resolution PNG. Companion briefing: unocc-dashboard-architecture-v2.md · v1 (April 2026, superseded).

5. Cost model (USD)

Target platform: UN Azure (Container Apps, PaaS). Hosting is consumption-based - actual spend tracks usage. Figures below are Azure public pay-as-you-go list prices (East US, June 2026); final figures confirmed with OICT/UNOCC at provisioning.
Realistic
~30 users - year 1
~$235/mo
~$2,800 / year
Container Apps (API + UI, Baserow)$100
PostgreSQL Flexible$50
QGIS render job (per-second)$35
Storage + egress$13
Monitoring + security + other$37
Growth
~75 users - year 2+
~$405/mo
~$4,900 / year
Container Apps (API x2 + UI, Baserow)$175
PostgreSQL Flexible$75
QGIS render job (per-second)$70
Storage + egress$23
Monitoring + security + other$59
Proposed budget - held flat at a growth-scenario ceiling
Azure hosting
$450/mo
$5,400 / yr - growth ceiling + ~10% margin
Tools, APIs and analytical services
$550/mo
$6,600 / yr - dev + analysis tooling, API + data access
Total budget
$1,000/mo
~$12,000 / yr for year 1
Cost discipline built in: billing is consumption-based, so hosting tracks usage (~$235/mo at today's realistic load) - the $450 line is a ceiling, not a burn rate. 1-year reservations on always-on services cut 20-35% once usage is proven; retiring Baserow into native Postgres saves ~$30/mo. Budget alerts at 50/80/100% from day one.
Versus today: the platform currently runs on a shared commercial VPS at ~$15-30/mo, billed personally, with no UN identity, SLA, or continuity. The Azure budget buys UN tenancy, Entra ID SSO, managed backups/monitoring, and a platform a successor can operate.

6. Migration plan

Everything is already containerized - the hard work (QGIS rendering off the Mac into Linux Docker) is done. Migration is a re-pointing exercise, not a rebuild: about 2 to 3 weeks part-time, zero-downtime (the current environment keeps serving until cutover).
Phase 0
UN Azure access (about 1 wk, mostly waiting)
  • Subscription / resource group via OICT/UNOCC
  • Confirm Container Apps availability + billing
  • Naming, tagging, DNS for maps.un-domain
  • Exit: tenancy + budget approved
Phases 1-4
Lift to Azure (about 1 to 2 wks)
  • Storage: MinIO to Azure Blob + SAS presign
  • Data: Postgres Flexible + Baserow Container App
  • API: image to ACR to Container App + custom domain
  • Render: Azure Files + ACA Job (queue-triggered); test all products end to end
Phase 5
Cutover (2 to 3 days)
  • Repoint web users to maps.un-domain
  • Rebuild Orbis, new TestFlight build
  • Freeze + final data sync
  • Decommission VPS UNOCC containers
Phase 6
Hardening (1 to 2 wks post-cutover)
  • Entra ID SSO + Key Vault
  • Budget alerts + Defender for Cloud baseline
  • Optionally retire Baserow into Postgres

7. Key risks

#RiskMitigation
R1UN tenant policy blocks Container Apps / public ingressConfirm in Phase 0; fall back to the same containers on a single Azure VM
R2QGIS render slower on Azure Files than local diskBenchmark in Phase 4; bake data into image or premium files (+$10-15/mo)
R3Procurement / tenancy approval lead timeStart Phase 0 now; current environment keeps serving (zero downtime)
R4Egress costs grow with adoptionMaps are 0.2 to 2.5 MB; even 5,000 downloads/mo is about $1 egress
R5ehsa / dppa / factpack-PPTX product gapsIndependent of hosting; tracked separately

8. Decisions to unblock Phase 0

  1. Azure subscription / resource group sponsored via OICT/UNOCC - billing arrangement + Container Apps policy confirmation.
  2. Production DNS - agree the hostname (maps.un-domain).
  3. Budget line - approve US$ 1,000/mo (about US$ 12,000/yr): $450 Azure hosting + $550 tools, APIs and analytical services.
  4. Identity - Entra ID SSO scope + group mapping for Phase 6 hardening.
  5. UAT lead nominated for the Phase 5 cutover (web + Orbis TestFlight).

9. Success metrics

MetricPhase 1Phase 2Phase 3
Weekly active users2575300
LLM spend vs forecast±20%±15%±10%
Uptime98%99%99%
P1 incidents / month≤1≤10
User satisfaction (5-pt)n/a3.54.0
Factpacks / week vs baseline+25%+50%+75%
Map Production Workflow
New Map Request
Basemap
Open on ReliefWeb
MAP CHAT
Factpack Basemap
The boundaries and names shown and the designations used on this map do not imply official endorsement or acceptance by the United Nations.
Cover-page aspect 8.05 × 7.37 in (1.092:1). Subject country outlined in brown, neighbours at 50% opacity, Hydrolakes enabled, settlement labels at Factpack sizes (9 / 7 / 6 pt). No thematic overlays.
Chat
Loading production reports…