Docs
Changelog
What's new and what's changed in NTHMAP.
v0.4.0 — Public site, docs, CLI, MCP (current)
- Public marketing site at
/with hero, features, pricing, use cases, dev strip, and CTA - Documentation site at
/docswith markdown rendering, sidebar nav, 8 core pages - 16 vertical market use case articles at
/use-caseswith filterable index - Python CLI — single-file install, API-key based, pipe-friendly JSON/CSV/YAML output
- MCP server — stdio JSON-RPC server exposing every dataset as a tool for Claude/ChatGPT/Cursor
- API keys — Bearer token auth alongside session cookies, create/list/revoke endpoints, bcrypt hashed,
key_prefixlookup
v0.3.0 — Admin, i18n, smart loading
- Internal admin panel at
/adminwith users CRUD, app settings editor, translation editor, dashboard stats - Multi-language —
lang_labeltable with top 10 languages (en, zh, hi, es, ar, bn, pt, ru, ja, de), frontend loader, RTL support, per-user preference - AI saved prompts — per-user CRUD, clickable list in sidebar, usage tracking
- Collapsible accordion layer groups — each layer section in the sidebar is now a
<details>accordion - Per-layer filters — vessel speed/load moved into Vessels group, event severity filter added to Events group
- Smart zoom-out vessel loading — backend caps vessel count by zoom level (200 → 5000) and orders by
est_cargo_mtso the biggest ships stay visible at world view - Mobile responsive — sidebar slides over the map under 900px, compact topbar under 600px
- Light theme fix — switched to CARTO
light_nolabelsbasemap for better marker contrast
v0.2.0 — Performance + UX polish
- gzip compression on all JSON/JS/CSS responses —
/api/vesselswent from 63 KB to 12 KB - Viewport-gated vessel/infra/events fetching — only loads what's in view, debounced on
moveend - Cache headers — 1-year immutable on
/static/vendor/*,no-cachewith ETag revalidation on other static - Modal system — Promise-based
ntmAlert/ntmConfirm/ntmPrompt/ntmToast/ntmCustomreplaces every native browser dialog - New auth modal — tabbed Sign in / Sign up with rich brand header and Pro feature breakdown
- Sidebar collapse with slide animation, keyboard hotkey Cmd/Ctrl-\
- Avatar dropdown menu with language picker, tier pill, admin link, Sign out
v0.1.0 — MVP
Initial Phase 1 build per PLAN.md:
- Database: PostgreSQL 16 + PostGIS, 9 tables, seeded with 150 vessels, 169 infrastructure assets, 15 events, 12 prices, 8 chokepoints
- Backend: Flask blueprints for auth, map data, user features, AI (OpenAI), billing (Stripe), draw analysis
- Frontend: Leaflet (no WebGL requirement) + vanilla ES modules
- Layers: vessels (rotated triangle icons), infrastructure (typed badges + pipeline polylines), events (pulsing markers + radius circles), chokepoints (zone rectangles + count badges)
- Draw tool: Leaflet.draw polygons/rectangles/circles → PostGIS
ST_Withinanalysis → regional breakdown - AI integration: OpenAI chat completions via stdlib urllib (no SDK dependency)
- Stripe billing: checkout, customer portal, webhook handler
- Vessel motion simulator — runs as systemd service, moves vessels along heading every 30 seconds for dev demo