Repository navigation
Minor release. The console now works on a phone, a replay can leave the desk as a link, the archive can live in TimescaleDB, and the globe is a lot faster.
Read "Upgrading" before you pull if you run docker-compose.prod.yml.
Replay any day, and share it
- Public-archive replay. Aircraft replay from the public readsb heatmap archives for any day since 2024, before your own archive starts. The Play button drives the clock through half-hour chunks with a 24-entry cache, decoded in a Web Worker.
- Rewind links. A URL opens the map at a place, a contact and a moment.
- TimescaleDB archive. With
HISTORY_PG_DSNset (both compose files now set it), the position archive lives in a compressed Postgres + TimescaleDB hypertable with an hourly rollup. Without it, the backend falls back to SQLite. - Projections.
GET /api/history/projectreturns a one-hour cone and chokepoint ETAs from a contact's own track.
On your phone
- At 767 px and under, the console is a map app: the map takes 93% of the screen, and Layers, Find, Time, Alerts and More open as bottom sheets you can drag.
- Area alerts push to your phone through ntfy, with "Alert me about this area" on the map.
/api/overheadreturns the nearest aircraft as small JSON for desk displays.- arm64 images are published next to amd64.
Faster globe
Measured A/B on the same backend, headed Chrome on the GPU:
| v1.1.0 | v1.2.0 | |
|---|---|---|
| all layers on, fps p05 / p50 | 9 / 50 | 51 / 91 |
| fly-in to 400 km, worst frame | 340 ms | 94 ms |
| boot chunk (gzip) | 746 KB | 434 KB |
Ships
A new AIS pipeline polls ShipXplorer, an OpenWaters sweep and VesselFinder into a freshness-wins store keyed by MMSI, so a cached source can never overwrite a fresher fix.
MCP server
focus_area takes a polygon (one ring of [lon, lat] pairs) as well as a circle. The server is also listed on Glama: https://glama.ai/mcp/servers/AndrewCTF/velocity
Analyst features
- Clearance is enforced on every ontology read and write through one predicate.
- Entity-resolution merge candidates go to a review queue; nothing auto-merges.
- Foundry pulls a named SQL table by cursor and ingests documents (eml, docx, txt, md, pdf).
- Write-back actions go through the human-in-the-loop proposal queue.
Google Earth 3D basemap (off by default)
A photoreal city mesh with no API key. It reads a private Google endpoint, outside Google's terms, so it stays off unless you set GOOGLE_3D_KEYLESS=true. The licensed ENABLE_GOOGLE_3D stream never turns it on.
Security
Dependency advisories closed in vite, dompurify, vitest, pillow (13.0.0) and certifi. pnpm audit and pip-audit report no known vulnerabilities.
Upgrading
docker-compose.prod.ymlnow runs a TimescaleDB service and refuses to start withoutTIMESCALE_PASSWORDin.env. It still requiresVELOCITY_VERSION; set it tov1.2.0.- The dev
docker-compose.ymlalso starts a TimescaleDB service now and points the API at it. - Either way, an existing SQLite archive is not copied automatically. To keep it, run
scripts/history_migrate_sqlite_to_pg.pyonce against the new database.
Full changes: #93, #95, #96, #97, #98, #99, #100, #101, #102.