TerrAlert | Changelog
Full responsive/mobile redesign across all surfaces
feature perf
  • feature AppShell — collapsible sidebar drawer on mobile (≤768 px) with hamburger toggle and overlay
  • feature Prototype — hamburger nav drawer, responsive landing grids (4→2→1 col), dashboard panel toggle
  • feature admin.html — collapsible sidebar on mobile; stat grids collapse from 4-col to 1-col
  • feature changelog.html & status.html — topbar wraps gracefully; entry layout stacks at 640 px
  • perf Replaced 100vh with 100dvh in AppShell to fix iOS Safari viewport clipping
  • perf Touch targets raised to ≥ 44 px minimum height via index.css
Support center, worker heartbeat, and admin security hardening
featurefixsecurity
  • featuresupport.html — standalone support center with FAQ, getting started, contact form, and SLA table
  • fixCelery beat worker_heartbeat task — writes terralert:worker:heartbeat every 60 s so GET /status shows worker as operational
  • securityadmin.html — removed client-side password; login now verifies token server-side via GET /admin/stats
  • featureSupport nav tab and screen added to prototype with FAQ accordion and contact form
  • fixSupport link added to status.html and changelog.html footers
  • fixsitemap.xml — /support entry added
Launch prep — public status page, changelog, and live health monitoring
feature
  • featureGET /status endpoint probing DB, Redis, Celery worker, tile server, and S3
  • featureStatus page with 30-second live polling and 90-day uptime strip
  • featureChangelog page with tag-based filtering (feature / fix / perf / docs / security)
  • featureStandalone status.html and changelog.html for pre-auth access
  • featureSystem nav section in sidebar with Status and Changelog links
Developer documentation — API guide, webhook guide, .env reference, API keys page
docsfeature
  • docsllms.txt updated to llmstxt.org spec for AI search engine crawlers
  • docsdocs/api-guide.md — full REST reference with cURL / Python / JS examples
  • docsdocs/webhook-guide.md — HMAC-SHA256 verification in Python, Node.js, Go
  • docs.env.example — complete 30+ variable reference with inline comments
  • featureAPI Keys page — Pro+ gated JWT display with reveal/copy and code tabs
Performance & caching — Redis cache layer, GZip compression, composite DB indexes
perffeature
  • perfRedis async cache for GET /aoi (TTL 60 s) and stats endpoint (TTL 30 s)
  • perfGZipMiddleware with minimum_size=1024 bytes
  • perfMigration 0006: composite indexes on detections, scenes, alerts, pipeline_logs
  • featureLocust load test suite — four user classes, p95 > 500 ms fails the run
Database migrations & developer tooling — Alembic, Makefile, seed script
featuredocs
  • featureAlembic migration system — 6 versioned files from initial schema to perf indexes
  • featurescripts/seed.py — idempotent development seed with demo AOIs (ON CONFLICT DO NOTHING)
  • featureMakefile — dev, test, lint, migrate, seed, and load-test targets
  • featuredeploy.yml runs alembic upgrade head before the rolling restart
Observability — Sentry error tracking and Prometheus metrics scrape endpoint
feature
  • featureSentry SDK with FastAPI + Starlette integration (send_default_pii=False for GDPR)
  • featureGET /metrics — Prometheus scrape endpoint via prometheus-fastapi-instrumentator
  • featureStructured request logging with loguru across all routers
Enterprise plan + admin panel with competitive pricing intelligence
feature
  • featureadmin.html — password-gated dashboard with plan manager and user management
  • featureEnterprise pricer with AOI/frequency sliders and Planet/Maxar/Airbus benchmarks
  • featurePOST /enterprise/checkout — creates custom Stripe Price + Checkout Session
  • featurePOST /enterprise/inquiry — deal notification email via SendGrid
Full codebase audit — plan enforcement, scan frequency gates, data retention sync
fixsecurity
  • securitysecurity_utils.py — HISTORY_DAYS, API_ACCESS_TIERS, assert_scan_frequency_allowed()
  • fixPOST /scan and /aoi/{id}/scan now gated to Pro / Enterprise only
  • fixdata_retention_days synced on every Stripe tier change event
  • fixWorker tasks respect scan_frequency and stamp last_scanned_at after each run
Marketing footer, legal pages, and pre-footer conversion layer
featuredocs
  • feature4-column site footer with live status dot and social links
  • docsprivacy-policy.html, terms-of-service.html, security.html
  • featurePre-footer CTA banner with social proof stats and trust badges
Security hardening, GDPR compliance, and load testing baseline
securityfeature
  • securitySecurityHeadersMiddleware — CSP, HSTS, X-Frame-Options, referrer policy
  • securityRequestSizeLimitMiddleware — 1 MB body cap, blocks oversized payloads
  • featureGDPR router — data export (ZIP), deletion request, right-to-erasure anonymisation
  • featureWebhook HMAC-SHA256 signing and 5-attempt exponential backoff retry
Alert engine — email delivery, webhook push, exponential retry queue
feature
  • featureSendGrid email alerts with templated HTML + plain-text fallback
  • featureWebhook delivery with HMAC-SHA256 and 5-attempt retry (1m/5m/30m/2h/8h)
  • featureCelery beat retry task processes the failed delivery queue every minute
Supabase auth, Stripe billing, and React frontend shell
feature
  • featureSupabase JWT validation via JWKS with automatic session refresh
  • featureStripe — Checkout Session, customer portal link, webhook event handler
  • featureReact frontend: Dashboard, Detections, Alerts, Billing, Account, Pricing
Initial release — satellite pipeline, AI model, REST API, job queue, tile server
feature
  • featurePostGIS schema + EODAG pipeline: download → preprocess → detect → ingest
  • featureSiamese U-Net change detection model (ResNet-34 encoder), corroborated against independent FIRMS/GLAD/RADD signals before alerting — see docs/model-training.md for the held-out evaluation
  • featureFastAPI REST API with JWT auth and asyncpg connection pool
  • featureCelery + Redis job queue with beat scheduler for periodic scans
  • featureTiTiler COG tile server + PostGIS MVT vector tiles + MapLibre GL JS dashboard