Skip to content

ilhankilic/resilland-intelligence

RESILAND Intelligence

🌐 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 .com we could acquire for the build). Internal code identifiers use the shorter resiland prefix that pre-dates the domain. Same project, three spellings, all intentional.

Built with Claude Code Opus 4.7 Hackathon License

📋 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).


Demo video

Watch the demo — RESILAND Intelligence × Cerebral Valley "Built with 4.7"

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

Landing — "Restoring Central Asia's landscapes" with the Three.js globe hero

Landing — marketing surface

Same data, different lens — 3D topographic view Phase 4 report preview
Same data, different lens — MiniTerrain 3D topo view (Sentinel-2, NDVI time series, cadastral polygons, admin boundaries on one canvas) A Phase 4 report, drafted by Opus 4.7 — Fergana Valley / Namangan Oblast feasibility card with inline citations
Voice + MCP inline showcase Clone + plug keys + ship CTA and footer
Speak to your landscape + Your assistant, wherever you work — Web Speech → Haiku 4.5 / Opus 4.7 and a live MCP install snippet in one frame Clone it. Plug your keys in. Ship. — CTA + full footer with Slack / Discord / WhatsApp / LinkedIn community links
Testimonials + MCP install
Shaped with the people doing the work — consultant testimonials alongside the pip install mcp-resilland + claude mcp add flow

/app — live map

Full Central Asia satellite view with RESILAND regions highlighted Zoomed parcel with satellite imagery + Map Layers panel
World scale — 20.5 M ha under management across six countries, RESILAND pilot regions highlighted in emerald + violet Parcel detail — ESRI satellite imagery, Map Layers side panel (base maps, weather, fires, vegetation)
Layer control with Default / Mine / Org tabs + opacity sliders
Layer-aware stats + controls — Default / Mine / Org tabs, per-layer opacity, multi-tenant sharing (sprint H)

Analyze dashboard

Area Intelligence Report — verdict 74/100 with highlights and risks Environment & NDVI tab — temperature, precipitation, drought, NDVI charts
Verdict overview — Opus 4.7 suitability score 74/100, confidence = high, top species, ecological highlights, risks, next steps, pipeline sidebar Environment & NDVI — temperature monthly series, precipitation SPI-3, drought index, NDVI 5-year trend — all sourced from ERA5 + CHIRPS + Sentinel-2

/stats — live data intelligence

Data Intelligence Dashboard KPIs Chunk distribution + country coverage + ticker + live disclosure panel
KPIs — 125 documents, 757 chunks, 413 avg tokens, 5,925 Sentinel scenes, 20.5 M ha, 3,566 parcels — all live from Postgres every 30 s Deeper view — chunk-size distribution (Voyage-3), country-coverage bar (UZB 100%), live ticker, and the LIVE / PLACEHOLDER / TILE-API disclosure panel

Admin console

Setup Wizard — 5-step flow Organizations — members + invitations + roles
First-run setup wizard — Account → AI Providers → Maps → Satellite → Default Layers, credentials Fernet-encrypted in Postgres, nothing written to .env Organizations — multi-tenant workspaces, role-based invitations (owner / admin / user), revocable tokens
Knowledge Ingestion — drag-drop + GitHub repo
Knowledge Ingestion — drag-drop DOCX / PDF / PPTX / MD / GeoJSON or paste a GitHub repo URL; Opus 4.7 classifies kind + relevance + tags, Voyage-3 embeds into pgvector

/roadmap — "What's Next" (7 Three.js dioramas)

Chapter 01 Simulation + 02 ZonePlan Chapter 03 Census + 04 DroneCensus
01 Simulate · Q2 2026 — 36 saplings grow in a parcel over a 20-year timeline, sun arcs overhead, carbon ring fills. 02 Design · Q2 2026 — 4-zone nursery auto-design with irrigation lanes and floating octahedron markers 03 Measure · Q3 2026 — Sentinel-2 orbits overhead, scan cone reveals bounding boxes across 40 trees. 04 Measure · Q3 2026 — drone mows lawn pattern over crop-row field while the satellite writes weekly deltas
Chapter 05 Reports + 06 Community Chapter 07 AIDetect + pricing card
05 Report · Q4 2026 — 8 floating document planes with header bars and connector lines, progress rings fill at 84%. 06 Community · Q4 2026 — 14 pins on a grid-map, photo cards hover overhead, lines rise to a central pool sphere 07 Intelligence · Q1 2027 — holographic leaf with 5 pulsing disease spots, scan ring + 8 orbiting octahedron readouts · below: BYO-key pricing card ($10 ≈ 1,000 Opus 4.7 scans, transparent cost math)

Screenshots reflect the state as of 2026-04-25 on resilland.com. Files live in assets/screenshots/.

What

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.

Why

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

Who it is for

  • 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

Geographic scope

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.

Features

Landing + public

  • 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

Analysis workflow

  • 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=analyses and 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

Report center

  • 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

Admin + ops

  • 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/ingest takes 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_logs with actor + diff + target + timestamp; MRV-ready
  • MCP servermcp-resilland on PyPI · source lives both in this mono-repo at mcp/ 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.

Bring your own keys

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_shared in /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.

Quick start

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:3000

Production 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

Tech stack

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

Architecture

┌─────────────────────────────────────────────────────────────┐
│ 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.

Data pipeline & ingestion

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.

Current ingestion footprint

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)

Documents broken down by kind

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

Ingestion pipeline

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.

Planned ingestion (post-submit roadmap)

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.

Sprint timeline

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.

Data sources

  • 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

Acknowledgements

  • İ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 & security

  • 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)

Roadmap — coming soon

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.

MCP server

Already shipping in v0.2 (post-submission PyPI upload):

  • get_stats_overview / get_stats_summary — live KPI dashboard feed
  • list_reports / get_report — Report Center access via MCP
  • translate_report — background translation fan-out; poll from MCP
  • create_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 rest
  • aggregate_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}

Managed Agent pipeline

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).

Stats trend data

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.

Translate worker

/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.

Policy CMS

/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.


License

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.