Sortie Live is under active development. This backlog updates in real time from our database.
Backlog
Everything we're building, have built, and are considering. Sorted by priority. Updated live.
1
Currently Building
1
Planned
4
Proposed
44
Shipped
Currently Building1
Proposed4
Fog of war layer
Semi-transparent overlay that reveals areas only as events are reported — unknown regions stay dark. Creates dramatic reveal effect during playback.
Satellite imagery overlay
Before/after satellite imagery for major strike sites. Sourced from open satellite providers.
Conflict comparison mode
Compare this conflict to historical ones: Gulf War, Iraq War, etc. Side-by-side timeline and casualty data.
Mobile app (React Native)
Native mobile app with push notifications for major events, offline map caching, and optimized touch timeline.
Shipped44
Project scaffolding & Next.js setup
Next.js 16 + Tailwind CSS 4 + TypeScript + Mapbox GL JS. Amplify auto-deploy from main branch. amplify.yml build config.
TypeScript type definitions
Full type system: ConflictEvent, Article, Feedback (with attachments), Donation, Subscription, BacklogItem, MilitaryAsset, TimelineState, ConflictMeta.
Page shells & design system
Landing, news, donate, about, feedback, backlog pages with dark theme (#0f0f14), shared SiteHeader nav component, Inter + JetBrains Mono fonts.
CI/CD pipeline & production deploy
Amplify app d22g2ky1jjoeqq auto-deploys from main. GitHub webhook triggers build. Route53 DNS for sortie.live + www.sortie.live. ACM cert auto-provisioned. Build ~3 min.
DynamoDB single-table setup
Table sortie-live with PK/SK + GSI1, GSI2, GSI3. PAY_PER_REQUEST billing. Stores backlog, feedback, events, articles, donations. DALs for each entity type.
Mapbox GL interactive map
Full-screen dark map (mapbox-gl dark-v11) with zoom, pan, navigation controls. MapCanvas component, MapProvider context, MapLegend overlay. /map full-screen page. Mini preview on landing page.
Timeline playback system
TimelineProvider (rAF playback, 1x/2x/4x/8x speed, 24h/3d/7d/all range, seekTo, loop), TimelineBar (draggable amber scrubber, day ticks, event density histogram, keyboard shortcuts), PlaybackControls (play/pause, speed/range pills, analytics), EventCard (type/confidence badges, casualties, sources). Timeline explorer page with server+client split.
ACLED data ingestion pipeline
ACLED API client (src/lib/acled.ts), events DAL (src/lib/dal/events.ts), ingestion script (scripts/ingest-acled.ts), events API routes (/api/events). Fetches from Iran, Iraq, Yemen, Lebanon, Syria. Maps ACLED event types to our schema.
Strike marker visualization
Pulsing circles on map colored by event type (airstrike=red, drone=amber, missile=orange, naval=blue, ground=gray). Size scales with casualties. Opacity fades by age. Click opens EventCard popup with details, sources, confidence badge.
Sample event data seed
scripts/seed-data.ts generates 100 realistic sample conflict events + 30 articles covering Feb 28 - Mar 16 2026. Locations across Iran, Iraq, Yemen, Lebanon. Mix of event types. Seeded into DynamoDB for dev/demo.
Timeline + map + events integration
Full /timeline page wiring: MapCanvas + StrikeMarker + TimelineBar + PlaybackControls. Events fetched from API, filtered by currentTime, displayed as markers. Timeline scrub shows/hides events. The core 'weather radar for war' experience.
Landing page redesign
Million-dollar conversion-optimized landing page with animated hero, dynamic stats from API, live news cards, trust section with source badges, cinematic dark aesthetic.
HUD-style timeline redesign
Full UX overhaul — news sidebar, event narration, auto-play, compact inline controls, intro hint, bottom status bar. Fighter jet HUD meets Bloomberg Terminal.
Share system + dynamic OG images
Shareable timeline URLs with ?t= parameter. Dynamic OG image generation via next/og. One-click Twitter/Reddit/copy sharing.
AI event narration summaries
17 daily narrative summaries read like war correspondent briefs. Typewriter effect component synced to timeline.
Fleet interpolation + missile-vessel linking
6 vessels with timestamped positions. Escorts follow carrier tracks with offset. Timeline-aware interpolation. US Navy strikes traced to launching vessel position.
Event list navigation + region quick-jump
Scrollable event list with type filter and search. Click any event to fly map there and seek timeline. Region buttons for Iran/Hormuz/Israel/Yemen/Iraq/Gulf. Timeline starts at recent events so map looks busy on load.
Military asset sprite generation
19 military asset sprites via scripts/generate-sprites.js: carrier, destroyer, submarine, fast boat, F-35, F-22, B-2, MQ-9, Shahed drone, strike marker, impact ring, intercept flash, 5 UI icons, OG image, favicon. Schematic/blueprint style — no war glamorization.
Public backlog system
DynamoDB-backed public backlog at /backlog with status badges, priority indicators, category tags, detail drill-down pages. API at /api/backlog with DynamoDB-first, static-data fallback. 20 items seeded.
Donation system with Stripe
Stripe Checkout for one-time ($5/$10/$25/$50) and $2/month Sortie Supporter subscription. API routes: /api/stripe/checkout, /api/stripe/subscribe, /api/stripe/webhook. Lazy getStripe() for build safety.
Feedback system with file uploads
Interactive feedback form with drag & drop file upload (PNG/JPG/GIF/WebP/PDF/TXT, 10MB x 5 files). Presigned S3 URLs for direct browser uploads to sortie-live-uploads-637423404906. Feedback stored in DynamoDB with attachment S3 keys.
GDELT data ingestion pipeline
GDELT DOC API client (src/lib/gdelt.ts), ingestion script (scripts/ingest-gdelt.ts). Queries for iran+war, iran+airstrike, strait+of+hormuz, hezbollah+attack, houthi+missile. Lower confidence than ACLED.
RSS news feed ingestion
RSS parser (src/lib/rss.ts) for Al Jazeera, Reuters, AP, BBC, NPR. Articles DAL (src/lib/dal/articles.ts), ingestion script (scripts/ingest-rss.ts), articles API routes (/api/articles). Keyword filtering for conflict content.
News aggregation page
Functional /news page wired to articles API. Source filter bar, article cards with source badges, timestamps, summaries. Links to original sources. DynamoDB-backed with static fallback.
Ctrl+K command palette
Global search via cmdk — searches articles, backlog items, and pages. Keyboard shortcut, dark themed modal, debounced API queries.
Dynamic news page with infinite scroll
Client-side news page with infinite scroll (replaces broken Load More button), source filtering, search, and clickable article cards linking to originals.
Expanded RSS feed sources
25+ feeds across wire services, major outlets, conflict specialists, defense press, OSINT analysts.
Article-event linking system
Automatic linking of articles to events by time+location proximity. Metric justification with source trails.
Premium brand assets
Custom app icons (512/192/32/180), upgraded OG image, source badges, web manifest for PWA.
Iranian assets + flight paths
IRGC fast boats, submarine, missile TELs on map. Aircraft sortie flight paths (F-35, B-2, MQ-9, F-22) with animated dashed lines.
Data pipeline execution
All pipelines executed: 200 events, 700 articles, 5727 article-event links, 5 justified metrics. Live RSS from 27 feeds. Full DynamoDB population complete.
Country statistics dashboard
Floating panel with 4 tabs (by attacker, target, type, casualties). Bar charts update as timeline scrubs. Color-coded per actor.
Attack direction arrows
10 directional arc routes showing attack corridors with animated flow. Width scales by event count.
Strike vector data model
StrikeVector type on 13 key events tracking attacker, origin, target, weapon, platform. /api/events/vectors endpoint.
Article intelligence + corroboration
Regex-based event extraction from articles. Union-find corroboration engine. 39 events from 730 articles, 595 clusters.
NASA FIRMS + UCDP integration
Satellite fire detection and Uppsala conflict data. 16 data sources cataloged in CLAUDE.md.
Photorealistic editorial images
11 Gemini-generated images: satellite views, radar screen, operations center, 5 region cards, about page hero.
PostHog analytics integration
Client (posthog-js) + server (posthog-node) PostHog. PostHogProvider wraps layout. Typed analytics helpers for map, timeline, donation, share, feedback events. Same key as overlordloop.
WorkMail email setup
hello@sortie.live mapped to Rick's AWS WorkMail account. MX, DKIM (3 CNAME), SPF, DMARC, autodiscover DNS records in Route53. Domain ownership + DKIM verified.
Smoke test suite & health check
GET /api/health returns status/timestamp/version. scripts/smoke-test.sh checks 10 URLs against production. npm run smoke:prod for post-deploy verification.
Automated data processing cron
scripts/cron-process.sh unified cron runs every 10 minutes: RSS ingestion, article-event linking, metrics recalculation. Every 4 hours: Claude product-owner agent for feedback triage and backlog sync. Single cron entry replaces multiple separate jobs.
Education / Learn section
Multi-page /learn section with conflict summary, glossary of military terminology, and citation methodology. Helps users understand data sources and conflict context. Shipped in commit 81d3f5b.
Live user counter
Heartbeat-based live active user counter. Client pings /api/live every 30s, server counts recent heartbeats in DynamoDB with TTL. No WebSockets needed. Shipped in commit 0993e31.
@zdoc documentation system
Python compile script (scripts/compile-docs.py) extracts @zdoc annotations from source files into docs/zdoc-output.md. 39 annotations across 15 files.