🌐 Live at resilland.com
AI-powered decision support for the World Bank's $256M RESILAND CA+ landscape-restoration program — Claude Opus 4.7 turns months of consultant analysis into minutes, live in production.
Production dark theme + 4-language UI (EN · TR · RU · UZ) · 3D globe hero + interactive satellite map across six countries · Opus 4.7 generates Phase-4-style feasibility reports in 2–3 minutes (with prompt caching) · Drop a field photo for Opus Vision analysis, or a KMZ/KML/GeoJSON polygon for geospatial scoring · MCP server + admin panel — clone, run
python scripts/setup.py, plug in your own API keys.
A note on naming. The World Bank program is RESILAND CA+. Our production domain is resilland.com (the
.comwe could acquire for the build). Internal code identifiers use the shorterresilandprefix that pre-dates the domain. Same project, three spellings, all intentional.
📋 Roadmap & Channels: ROADMAP.md — what's live today (web + MCP + WhatsApp bot at
+90 535 374 99 71), what's coming in Q2/Q3 2026 (5-country expansion · Blender 3D nursery design · disease/product CV · researcher no-code sub-agent builder · 12 queued open datasets), and the long-term moonshots.🪧 Live kanban board: github.com/users/ilhankilic/projects/2 — the same 25 roadmap items as a public GitHub Projects board. Switch the layout to Board and group by Roadmap Phase for the four-column kanban view (Done · Q2 2026 · Q3-Q4 2026 · Moonshot).
▶ Watch on YouTube — 3:15 · İlhan Kılıç (retired engineer, Türkiye) opens the build with consultant İsmail Belen (Turkish forestry expert, decades of arid-land restoration in Central Asia) and Dr. Hülya Hernandez — six days of Opus 4.7 work on the World Bank's $256 M RESILAND CA+ program. Cameras on the live site: globe hero → satellite map → Opus 4.7 feasibility report streaming → MCP install snippet.
Screenshots reflect the state as of 2026-04-25 on resilland.com. Files live in
assets/screenshots/.
An AI-powered decision-support platform that turns months of manual landscape-restoration analysis into minutes. Built in six days for the Cerebral Valley "Built with Opus 4.7" hackathon as a working prototype for the World Bank's RESILAND CA+ program — a $256M landscape-restoration initiative covering Kazakhstan, Kyrgyzstan, Tajikistan, Uzbekistan ($153M) and Turkmenistan — plus Türkiye as a partner geography drawing on decades of OGM / TEMA reforestation expertise.
Designed to be clone-and-go: nothing sensitive lives in the repo. Run the interactive scripts/setup.py wizard, answer a few questions, docker compose up, and you are live — locally on your laptop or on a Linux VPS behind nginx.
Central Asia is the most under-represented region in AI-for-climate. RESILAND CA+ manages tens of millions of hectares of degraded forest across five countries, and decisions rely on month-long manual consultant reports. Every day of delay means more desertification, mudflows and lost ecosystem services. Türkiye's decades of dryland afforestation experience is directly transferable — this platform connects those dots.
What Opus 4.7 does here that no prior model class could:
- Teacher model — learns from nine World Bank Phase 4 feasibility reports, drafts new ones in 2–3 minutes (with prompt caching) instead of months of consultant work
- Multi-modal vision — reads field photos + Sentinel-2 imagery + multi-page PDFs in the same request, cites passages by page
- Localized at the UI level — full English / Turkish / Russian / Uzbek interface; report bodies are Sonnet-translated on demand and clearly labeled as machine translation
- Adaptive routing — Haiku 4.5 handles ~90 % of conversational queries, Sonnet 4.6 drives per-section report generation with prompt caching, Opus 4.7 escalates for deep cross-document reasoning and Vision
- World Bank Task Team Leaders overseeing RESILAND projects
- National forestry agencies in the five CA countries (Uzbekistan State Forestry Agency, etc.)
- Field consultants running Phase 4-6 assessments — including the team behind this project
- Community cooperatives implementing on-the-ground restoration
| Code | Country | Role |
|---|---|---|
| UZB | Uzbekistan | Primary pilot — 3,563 cadastral parcels + nine Phase 4 reports |
| KAZ | Kazakhstan | RESILAND CA+ partner ($6M allocation) |
| KGZ | Kyrgyzstan | RESILAND CA+ partner ($52M allocation) |
| TJK | Tajikistan | RESILAND CA+ partner ($45M allocation) |
| TKM | Turkmenistan | RESILAND CA+ partner |
| TUR | Türkiye | Partner geography — OGM / TEMA afforestation expertise |
Every spatial table carries a country column so the same platform serves all six geographies; Sentinel-2, GADM boundaries and climate data cover the region uniformly.
- 3D globe hero with procedural NDVI shader + atmospheric glow (Three.js)
- /stats — live data-intelligence dashboard: documents, vector chunks, NDVI rasters, parcels, area, sources — queried from production Postgres every 30 s, with transparent LIVE / PLACEHOLDER / TILE-API badges on every panel
- Landing reports modal — nav / CTA / footer Reports buttons open a modal listing the user's saved reports instead of navigating away; anonymous visitors see a sign-in prompt
- Voice + mascot — Web Speech API + Haiku 4.5 assistant that can navigate pages and trigger the analyze pipeline by voice
- Draw-then-analyze — draw a polygon on the map, pick a model (Opus 4.7 / Sonnet 4.6), get a streaming dashboard: verdict card + species recommendations + NDVI trend + nearest nurseries + climate + 9 section markdowns
- Cached reopen — click any past analysis from the Reports drawer or
/reports?tab=analysesand the full dashboard rehydrates from cache (no Opus re-run). Old reports that predate the cached-dashboard format gracefully fall back to 9 per-section markdown cards - Upload pipeline — drop a photo / KMZ / KML / GeoJSON / GeoTIFF; parse + Vision + reverse-geocode + feasibility report in one flow
- Background translate — translation runs in an asyncio background task so closing the tab does not lose work; UI polls until the sibling report flips to
final
- Multi-lingual siblings — one analysis_group shares reports across EN / TR / RU / UZ with the same scope and data
- Per-section versioning — re-analyze any of the nine sections (executive_summary, ndvi_analysis, …) without touching the rest
- Share links — 7-day signed URLs, public read-only with PDF download
- PDF export — server-side weasyprint render with MRV-ready metadata
- Oblast roll-ups — aggregate dozens of parcel analyses into a programme-level brief
- Multi-tenant — Organizations + invitations + per-org layer sharing via M2M (migration 0013)
- Policy engine — personal key → operator-shared key + active demo allowance → HTTP 402, explicit cascade documented in
/admin/providers - 10 k-token / day demo allowance — users without keys can try the platform for 30 days on the operator's shared key
- Knowledge ingestion —
/admin/ingesttakes DOCX / PDF / PPTX / MD / HTML / GeoJSON or a GitHub repo URL, pipes it through parse → Opus 4.7 metadata (kind / relevance / tags / summary) → semantic splitter → Voyage-3 embeddings → pgvector, all with per-stage audit trail - CMS — help centre + blog + privacy policies, all TipTap-editable, locale-aware
- Audit log — every mutation (role changes, provider edits, ingestion runs, prompt updates, report creation) appended to
audit_logswith actor + diff + target + timestamp; MRV-ready - MCP server —
mcp-resillandon PyPI · source lives both in this mono-repo atmcp/and in its own distribution repo github.com/ilhankilic/mcp-resilland (PyPI release pipeline). 16 tools, 8 resources, 3 prompts covering parcels, nurseries, analyze_area, feasibility reports, translate, Report Center (list/get/translate/share/PDF), and live platform stats. Usable inside Claude Desktop / Cursor / Windsurf.
Two modes, switchable per provider:
- Self-host (BYO keys) — each user pastes their own key on
/settings/api-keys; the Policy Engine routes requests to that key. - Operator mode — an operator flips a provider to
is_operator_sharedin/admin/providers. Users can then run on that key under a demo allowance (default: 30 days, 10 k tokens / 100 requests per day, issued from/admin/demo-keys). Hitting the cap returns HTTP 402 with a link back to settings.
Cascade: personal key → operator-shared + active demo → 402.
git clone https://github.com/<YOUR_GITHUB_USER>/resilland-intelligence.git
cd resilland-intelligence
# Interactive wizard — writes .env, walks Firebase/API-keys/passwords:
python scripts/setup.py
# Spin up the stack
docker compose up -d
docker compose exec backend alembic upgrade head
# First sign-in becomes superadmin:
open http://localhost:3000Production deployment (Linux VPS + nginx + certbot): see DEPLOY.md or run python scripts/setup.py --prod for production defaults.
| Service | Local port |
|---|---|
| Next.js frontend | 3000 |
| FastAPI backend | 8000 |
| PostgreSQL 16 + PostGIS 3.4 | 5432 |
| Redis 7 | 6379 |
| MinIO API / console | 9000 / 9001 |
pgAdmin (--profile tools) |
5050 |
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (app router) + React 18 + TypeScript + Tailwind + Three.js + react-leaflet + TipTap |
| Backend | FastAPI (Python 3.11) + SQLAlchemy 2.0 async + asyncpg + GeoAlchemy2 + Alembic |
| Database | PostgreSQL 16 + PostGIS 3.4 + pgvector |
| Cache / queue | Redis 7 |
| Object store | MinIO (S3-compat) |
| Auth | Firebase Auth (Google + email/password) |
| AI | Anthropic Claude Opus 4.7 · Sonnet 4.6 · Haiku 4.5 |
| Embeddings | Voyage-3 (Voyage AI) |
| Satellite | Sentinel-2 via STAC · Google Earth Engine · SoilGrids · Open-Meteo · ESA WorldCover |
| MCP | FastMCP 3.x — mcp-resilland on PyPI / mirror repo |
| Deployment | Docker Compose + nginx + Let's Encrypt |
┌─────────────────────────────────────────────────────────────┐
│ Next.js frontend — landing + /app map + /reports + /stats │
│ 3D globe · draw polygon · streaming dashboard · TipTap CMS │
└────────────────────────────┬────────────────────────────────┘
│ HTTPS + SSE
┌─────────────────▼─────────────────┐
│ FastAPI backend │
│ /parcels /ai/analyze (stream) │
│ /reports /agent/internal /mcp │
│ Policy engine · audit log · RQ │
└──┬──────┬──────────────┬───────┬──┘
│ │ │ │
┌──────────▼─┐ ┌─▼────────┐ ┌──▼───┐ ┌▼──────────┐
│ Postgres 16│ │ Anthropic│ │MinIO │ │ Redis │
│ + PostGIS │ │ Opus / │ │(S3) │ │ + RQ │
│ + pgvector │ │ Sonnet / │ │uploads│ │ cache │
│ 25 tables │ │ Haiku │ │reports│ │ sessions │
└────────────┘ └──────────┘ └──────┘ └───────────┘
All backend reads are read-only against /data (bind-mounted government datasets); mutations only touch Postgres + MinIO.
RESILAND Intelligence is only as good as the data under it. Here's what
the stack has processed as of 2026-04-25 — all numbers are live and
visible on the /stats dashboard.
| Layer | Count | Notes |
|---|---|---|
| Cadastral parcels | 3,563 | Public Uzbek cadastral shapefile → PostGIS (EPSG:4326), every parcel has geometry + centroid + raw DBF attrs |
| Total area under management | 20,507,131 ha | Sum of Parcel.area_hectares across the 3,563 rows |
| Admin boundaries | 229 | GADM 4.1, Uzbekistan oblast + tuman level (Kazakhstan/Kyrgyzstan/Tajikistan/Turkmenistan/Türkiye boundaries queued — see roadmap) |
| Nurseries | 11 | RESILAND-9 + 2 auxiliary, GPS-point rows with category + source |
| NDVI snapshots | 5,921 | Sentinel-2 L2A monthly medians, per-parcel, multi-scale buffers (500 m / 2 km / 5 km / 10 km) |
| Tree species catalog | 64 | Curated Central Asia + Türkiye dryland restoration candidates |
| Species enrichments | 65 | Opus 4.7 cross-reference writes — disease, pest, cultivar, silviculture, ecology, 4 languages |
| Documents (RAG corpus) | 125 | Broken down below |
| Vector chunks | 757 | All embedded (Voyage-3, 1024 dims) |
| Total tokens in pgvector | 312,858 | Avg 413 tokens/chunk with 50-token overlap |
| Feasibility reports (final) | 13 | 9 World Bank Phase 4 originals + 4 Opus-generated drafts |
| Report sections (versioned) | 99 | Each section can be re-analysed without touching the other eight |
| Layer features | 3,843 | Admin boundaries + parcels + nurseries + uploads, each visible on the map |
| User uploads | 5 | Photo / KMZ / KML / GeoTIFF; Vision analysis + reverse-geocode + auto-feasibility |
| Audit log events | 289 | Every mutation traced (who / what / when / diff) |
| Kind | Count | What it contains |
|---|---|---|
regional_data |
75 | Country-level climate indicators (ERA5, CHIRPS, SPI, FWI, Hansen GFC, WRI water stress, MODIS dust, soil moisture, WorldCover) |
species_profile |
20 | One document per tree species — climate profile, tolerances, silviculture |
research_brief |
10 | Academic paper summaries (Stanturf 2020, Matsui 2019, Sutton 2026, Dubovyk 2013/2017, Meroni 2017 BACI) |
phase4_report |
9 | World Bank RESILAND CA+ Phase 4 feasibility reports (Dargom, Kitob, Pastdargom, Şehrisabz, Termiz, Uzun, Shortan, O'rtaorol, Nine-Nurseries summary) |
other |
8 | Uncategorised — tagged for reclassification |
phase5_report |
1 | Qoravultepa detailed design (post-Phase 4) |
nursery_handbook |
1 | Turkish OGM Fidan Yetiştiriciliği handbook |
technical_disposition |
1 | MRV protocol draft |
Raw source (PDF / DOCX / shapefile / CSV / KMZ / TSV)
↓
Parse + clean (PyMuPDF · python-docx · pyshp · fastkml)
↓
Opus 4.7 metadata pass (kind · relevance · tags · summary · language)
↓
Semantic splitter (50-token overlap; 400-600 target)
↓
Voyage-3 embedding (1024-dim dense vectors)
↓
PostgreSQL 16 + pgvector (IVFFlat index, cosine distance)
↓
Retrieval: top-K cosine + similarity score injected into prompts
Every ingestion step appends an audit_logs row so the lineage is
queryable later — critical for the MRV (Monitoring-Reporting-Verification)
use case where World Bank task team leaders must cite provenance.
Next wave targets the remaining five RESILAND CA+ partner geographies and roughly 10× the current RAG corpus. Concrete targets:
| Layer | Today | Target Q3 2026 | Why |
|---|---|---|---|
| Admin boundaries | 229 (UZB only) | ~2,100 (all 6 countries) | GADM 4.1 covers KAZ/KGZ/TJK/TKM/TUR at district level; loading is a one-off scripts/import_boundaries.py run |
| Cadastral parcels | 3,563 (UZB) | ~60,000 (UZB + KAZ + KGZ pilot districts) | Kazakhstan State Land Committee + Kyrgyz Forest Service sharing agreements in draft |
| NDVI snapshots | 5,921 | ~200,000 | Expand from UZB-only pilot to Central Asia + Türkiye at monthly cadence |
| Documents | 125 | ~1,500 | FAO GAEZ crop suitability, UN-REDD+ national submissions, Turkish OGM silviculture library (~1 GB PDFs queued), academic literature pipeline via OpenAlex |
| Vector chunks | 757 | ~45,000 | Follows directly from 10× document count + slightly shorter chunks for newer handbooks |
| Species catalog | 64 | ~250 | Add shrubs + saxaul-belt halophytes + post-fire pioneers + Türkiye Mediterranean species |
| Species enrichments | 65 | ~4,000 | 250 species × 16 (country × use-case) Opus cross-refs |
| Nurseries | 11 | ~200 | Full Uzbek agency inventory + Turkmen / Kyrgyz / Kazakh partners |
Gate: we ship the submission with what judges can verify is live — the 10× targets above need partner data agreements + budget for the ingestion compute, not engineering work. The pipeline scales linearly; no rewrites needed.
Day 0 — 2026-04-21 · Repo, plan, domain, decision log. Day 1 — 2026-04-22 · Sprint 1 + Auth: Docker stack, PostGIS, 5 domain + 6 auth/admin tables, FastAPI, Next.js dark-theme map, Firebase auth, admin panel, encrypted provider vault, 5-step setup wizard. Day 2 — 2026-04-22 · Sprint 2 + 3: pgvector + Phase 4 RAG ingestion, SpatialContextBuilder, Opus 4.7 feasibility generator with prompt caching, Vision upload pipeline, EN/TR/RU/UZ i18n, voice (Web Speech), MRV-ready PDF, country column on every spatial table. Day 3 — 2026-04-23 · Sprint G + H: draw + measure, area analysis streaming, mascot page-awareness, organisations + invitations + layer sharing (0013), 3D viewer gate, API-key policy engine, demo allowance, MCP settings page, policy_pages CMS, public-repo flip prep. Day 4 — 2026-04-24 · Sprint R + MA: Report Center (R-01..R-23 + S1..S4 + B1..B4), in-map Reports drawer + detail modal, SSE streaming, Managed Agent Phase A+B bridges (P2 area pipeline + P3 translator), deploy hook. Day 5 — 2026-04-25 · Landing: 3D globe hero, /stats data-intelligence dashboard, landing reports modal, analyses cached reopen, social links, security sweep, README polish. Day 6 — 2026-04-26 · Demo video + submission + repo flip to public.
- Sentinel-2 L2A — 10 m optical imagery, 5-day revisit (STAC + GEE)
- GADM 4.1 — administrative boundaries for all six countries
- OpenStreetMap — base tiles
- Open-Meteo — weather forecasts
- SoilGrids 250 m — soil properties
- ESA WorldCover 10 m — land-cover classification
- Mapbox Terrain-RGB — elevation / DEM for 3D (BYO token)
- Uzbek cadastral shapefile — public forest parcels registry (licensed locally, not redistributed)
- Internal consulting datasets — used locally for analysis, never committed
- İsmail Belen — international forestry expert (40+ years across Türkiye, Central Asia and UN/FAO programmes). Primary domain partner; platform design shaped by his long-running work on RESILAND CA+ feasibility assessments and ORMEL / TEMA reforestation programmes in Türkiye.
- World Bank Korea Green Growth Trust Fund — primary program funder for RESILAND CA+.
- Anthropic × Cerebral Valley — hackathon organisers, Opus 4.7 access, API credits.
- Claude Code — paired through every sprint; dev practice, diffs and docs are a joint effort (see commit log + CLAUDE.md).
- CONTRIBUTING.md — branch + PR conventions, code style, migration rules
- CODE_OF_CONDUCT.md — community expectations
- SECURITY.md — vulnerability reporting (please do not open a public issue for security findings)
- DEPLOY.md — self-host deployment guide (nginx + certbot + Docker Compose)
These features are built and tested; they are scheduled for the first post-hackathon release rather than the 2026-04-26 demo so the submission surface stays small and stable.
Already shipping in v0.2 (post-submission PyPI upload):
get_stats_overview/get_stats_summary— live KPI dashboard feedlist_reports/get_report— Report Center access via MCPtranslate_report— background translation fan-out; poll from MCPcreate_report_share_link/get_report_pdf_url— share + PDF in-line- New prompt
report_center_workflow— one-shot generate → translate → share
Queued for v0.3 (sprint M0, ~June 2026):
- Upload pipeline tools — start + poll image / KMZ / KML / GeoTIFF Vision analysis over MCP
reanalyze_section(report_id, section_key, model, instructions)— regenerate a single section without touching the restaggregate_oblast(oblast_code, language, model)— programme-level roll-up- Admin oversight tools —
admin_list_reports,admin_audit_log(operator-only scopes) - Resource expansion —
resiland://oblasts,resiland://species/enriched/{code}
Phase A + B shipped (flag-gated in production): P2 area pipeline and
P3 report translator. Call sites routed through Anthropic Managed Agents
when USE_AGENT_PIPELINE=true with HMAC-signed service tokens, cost
guardrails, and full audit trail in agent_invocations.
Queued for sprint post-submit: P4 (MCP Companion), P5 (Upload Triager), P6 (Chat Companion), P7 (Admin Ops).
Sparkline + delta percentages on /stats are procedural placeholders
today (flagged with the ⚠ PLACEHOLDER badge on every panel). Real
historical trend data will stream from a stats_snapshots table
populated by a nightly RQ job — planned for June 2026.
/api/reports/{id}/translate?background=true currently runs inside an
asyncio.create_task. Scheduled fix: move to a dedicated RQ queue
worker container with exponential backoff on Sonnet rate limits, so a
translate fan-out survives a full backend restart.
/admin/policy body is still raw Markdown. TipTap WYSIWYG editor (same
one used on the Help + Blog CMS) is queued as a body_markdown → body_html migration + editor swap.
Apache 2.0 — see LICENSE.
Built in six days with Claude Code during the April 2026 "Built with Opus 4.7" hackathon. No pre-hackathon code was carried over.




















