sortie.live
sortie.live

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

Shipped44

ShippedinfrastructureP0

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.

BL-001
ShippedinfrastructureP0

TypeScript type definitions

Full type system: ConflictEvent, Article, Feedback (with attachments), Donation, Subscription, BacklogItem, MilitaryAsset, TimelineState, ConflictMeta.

BL-002
ShippeduiP0

Page shells & design system

Landing, news, donate, about, feedback, backlog pages with dark theme (#0f0f14), shared SiteHeader nav component, Inter + JetBrains Mono fonts.

BL-003
ShippedinfrastructureP0

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.

BL-008
ShippedinfrastructureP0

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.

BL-009
ShippedmapP0

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.

BL-010
ShippedtimelineP0

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.

BL-011
ShippeddataP0

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.

BL-020
ShippedmapP0

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.

BL-026
ShippeddataP0

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.

BL-027
ShippedtimelineP0

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.

BL-028
ShippeduiP0

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.

BL-040
ShippeduiP0

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.

BL-060
ShippeduiP0

Share system + dynamic OG images

Shareable timeline URLs with ?t= parameter. Dynamic OG image generation via next/og. One-click Twitter/Reddit/copy sharing.

BL-061
ShippeddataP0

AI event narration summaries

17 daily narrative summaries read like war correspondent briefs. Typewriter effect component synced to timeline.

BL-063
ShippedmapP0

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.

BL-064
ShippeduiP0

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.

BL-065
ShippedanimationP1

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.

BL-004
ShippeduiP1

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.

BL-005
ShippeddonationP1

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.

BL-006
ShippeduiP1

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.

BL-012
ShippeddataP1

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.

BL-021
ShippednewsP1

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.

BL-022
ShippednewsP1

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.

BL-024
ShippeduiP1

Ctrl+K command palette

Global search via cmdk — searches articles, backlog items, and pages. Keyboard shortcut, dark themed modal, debounced API queries.

BL-041
ShippednewsP1

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.

BL-042
ShippednewsP1

Expanded RSS feed sources

25+ feeds across wire services, major outlets, conflict specialists, defense press, OSINT analysts.

BL-043
ShippeddataP1

Article-event linking system

Automatic linking of articles to events by time+location proximity. Metric justification with source trails.

BL-044
ShippeduiP1

Premium brand assets

Custom app icons (512/192/32/180), upgraded OG image, source badges, web manifest for PWA.

BL-045
ShippedmapP1

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.

BL-048
ShippeddataP1

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.

BL-049
ShippedmapP1

Country statistics dashboard

Floating panel with 4 tabs (by attacker, target, type, casualties). Bar charts update as timeline scrubs. Color-coded per actor.

BL-050
ShippedmapP1

Attack direction arrows

10 directional arc routes showing attack corridors with animated flow. Width scales by event count.

BL-051
ShippeddataP1

Strike vector data model

StrikeVector type on 13 key events tracking attacker, origin, target, weapon, platform. /api/events/vectors endpoint.

BL-052
ShippeddataP1

Article intelligence + corroboration

Regex-based event extraction from articles. Union-find corroboration engine. 39 events from 730 articles, 595 clusters.

BL-053
ShippeddataP1

NASA FIRMS + UCDP integration

Satellite fire detection and Uppsala conflict data. 16 data sources cataloged in CLAUDE.md.

BL-054
ShippeduiP1

Photorealistic editorial images

11 Gemini-generated images: satellite views, radar screen, operations center, 5 region cards, about page hero.

BL-055
ShippedinfrastructureP2

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.

BL-007
ShippedinfrastructureP2

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.

BL-013
ShippedinfrastructureP2

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.

BL-014
ShippedinfrastructureP2

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.

BL-025
ShippeduiP2

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.

BL-046
ShippeduiP2

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.

BL-047
ShippedinfrastructureP3

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

BL-015