Archived: the classic site (v1), frozen 29 Oct 2026. Kept for reference only: its data stopped updating and some functions may not work. Go to the current site →
ROGER WILCO IMAGERYpre-alpha
New interface

Roadmap

What comes next, release by release. Updated 2026-10-28. 25 items — 3 in-progress · 4 shipped · 16 planned · 2 research.

v0.7.x

Ships & aircraft

Counts and identities on top of imagery and heat.

in-progressM · 2–4 days

Ship & aircraft counts with AIS / ADS-B identities

Turns "activity" into numbers per site and names where transponders allow.

Plan
Sources
Sentinel-1 RTC, Sentinel-2 L2A, JRC Global Surface Water, OpenStreetMap piers/aprons, aisstream.io (AIS), adsb.lol (ADS-B mil)
Method
Radar CFAR ship detection on water; optical ship detection plus berth occupancy along mapped piers for moored warships; aircraft as change vs a multi-scene median on mapped aprons. Match detections to AIS/ADS-B positions within distance/time windows.
Outputs
data/detections/passes.csv, data/detections/objects.csv, annotated plates, data/tracks/*
Done when
Pilot sites (Halifax, Esquimalt, Norfolk, Trenton, Barksdale) give counts that match a manual count within ±20% on 3 clear passes each.
Risks
Moored hulls merge with piers; fighters below resolution; Overpass outages (now cached).
v0.8.0

Night, dark ships, alerts, provenance (current)

Next pre-alpha. One new all-weather signal, one analytic win, and the two things needed before anything goes public.

shippedM · 2–4 daysneeds: EARTHDATA_TOKEN secret

Night lights (VIIRS Day/Night Band)

Sees blackouts, blacked-out bases, new lit construction and front-line activity every night, at any latitude and through most smoke; would have shown the Crimea blackout directly.

Plan
Sources
NASA Black Marble VNP46A1 daily (LAADS / LANCE NRT), VIIRS DNB
Method
Daily radiance per site (sum and median in the box, cloud- and moon-masked), 30-day rolling baseline, z-score anomaly; flag drops > 50% (blackout) and new persistent lit area. Region-scale boxes for Crimea, Gaza, Lebanon, Sudan, Ukraine front.
Outputs
data/nightlights/<site>.csv, nightly before/after plates, flags into the alert stream
Done when
Reproduces the 23–24 Oct Crimea blackout and the Gaza/Lebanon baselines; runs nightly unattended.
Risks
NASA Earthdata login token needed (free); moonlight and snow-glare corrections; 500 m pixels are coarse for single bases.
in-progressS · ≤1 day

Dark-ship flags (radar ship with no AIS)

A ship the radar sees that is not broadcasting is a story in itself — sanctions evasion, warships, smuggling.

Plan
Sources
Sentinel-1 detections, AIS log
Method
For each radar ship detection, search AIS within 500 m and ±30 min of the pass. No match and length > 40 m → dark candidate. Suppress known fixed objects (persistent at the same spot in > 70% of passes).
Outputs
dark flag on objects.csv, per-site dark count, plate colour coding
Done when
AIS logging runs continuously; one week of dark-ship candidates reviewed by hand at Hormuz, Bandar Abbas, Tartus, Hodeidah.
Risks
AIS logging is sampled (~50 min of each hour) — gaps would create false "dark", so detections without AIS heard in the window are marked NO-COVERAGE, not dark.
Depends on
Ship & aircraft counts with AIS / ADS-B identities
shippedS · ≤1 day

Alerts (push / email)

Stop polling; hear about flags within an hour.

Plan
Sources
FIRMS watch, night lights, detections, dark ships
Method
One alert rule file (site, signal, threshold, quiet hours). A GitHub Action posts new flags to email and a push channel (ntfy.sh topic or Slack/Signal webhook), de-duplicated per site per 6 h.
Outputs
alerts.yaml rules, data/alerts/log.csv, notifications
Done when
A FIRMS flag at any site reaches Kevin's phone within one run of the watch.
Risks
Alert fatigue — start with Flagged-only and per-site mute.
shippedS · ≤1 day

Provenance — hash and timestamp every drop

Proves what we knew and when — matters if a finding (e.g. the Wainwright timing) is challenged.

Plan
Method
On every commit that adds data or a SITREP, write a manifest of SHA-256 hashes; timestamp it with OpenTimestamps (Bitcoin, free) and optionally anchor the daily root hash on Algorand. Verification script and a public "proofs" page listing each SITREP's hash and anchor.
Outputs
proofs/<date>.json, .ots files, scripts/provenance.py verify, Proofs page
Done when
SITREP 001–004 hashed and timestamped retroactively; new SITREPs stamped automatically.
Risks
Algorand anchoring needs a funded account; OpenTimestamps needs no account.
v0.9.0

Change, baselines, review

See through cloud and polar night; know what normal looks like; put a human decision on every published flag.

plannedL · 1–2 weeks

Radar change detection (Sentinel-1)

The only way to watch Arctic/NWS sites until February and cloudy sites year-round.

Plan
Sources
Sentinel-1 RTC (same orbit stacks)
Method
Group passes by relative orbit; log-ratio and multi-temporal coefficient-of-variation per pixel against a 6-pass baseline; flag compact changes (new structures, vehicles parks, vessels, burn/ground scars). Optional: coherence from SLC via ASF HyP3 (free) for construction and earthworks.
Outputs
change maps per site, flagged blobs with area, plates
Done when
Detects known changes (Wainwright burn scar, Hormuz shipping shifts) and stays quiet at static sites for a week.
Risks
Speckle; orbit geometry differences; snow and freeze/thaw signals in the Arctic.
plannedM · 2–4 days

Analyst review queue

Every published claim traceable to a human call; builds labelled data to cut false positives.

Plan
Method
Private review page lists new flags/detections with plate thumbnails; confirm / dismiss / note. Decisions stored as a CSV committed to the repo (or Artifact database); detectors learn per-site suppressions from dismissals.
Outputs
data/review/decisions.csv, review page, suppression list
Done when
All flags in a week reviewed in < 20 minutes total.
Risks
Static site cannot write — needs a small backend (VPS) or GitHub API form.
Depends on
Alerts (push / email)
v0.10.0

Warnings & interference

Signals that tell us where to look before something happens, and first-pass news correlation without manual searching.

researchM · 2–4 days

GPS jamming & spoofing map

Strong, under-used indicator around the Baltic, Kaliningrad, Black Sea and Gulf.

Plan
Sources
ADS-B NIC/NACp fields (adsb.lol / ADSB Exchange historical), gpsjam.org methodology
Method
Aggregate share of aircraft with degraded navigation integrity per H3 hex per day; flag hexes above threshold near watchlist sites. Needs all aircraft, not just military → bulk daily ADS-B dumps.
Outputs
data/gnss/<date>.csv, daily map, site flags
Done when
Reproduces known jamming areas (Kaliningrad, eastern Med) for a test week.
Risks
Data volume (daily global dumps are GBs) — likely a VPS job.
plannedM · 2–4 daysneeds: FAA NOTAM API key (optional)

Navigation warnings & NOTAMs

Live-fire areas, missile tests and closures are announced in advance — they tell us where to look.

Plan
Sources
NGA Maritime Safety Information broadcast warnings (NAVAREA IV/XII, HYDROLANT/HYDROPAC), NAV CANADA / FAA NOTAMs
Method
Pull warnings daily, parse coordinates and dates, intersect with watchlist boxes and zones; show active warnings on site pages and in SITREPs.
Outputs
data/warnings/<date>.json, site-page panel
Done when
Active warnings appear for Black Sea, Baltic and Atlantic exercise areas.
Risks
Free-text coordinate parsing; FAA NOTAM API needs a key.
plannedM · 2–4 days

Automated first-pass news correlation

Today the CORRELATED / PARTIAL / NOT IN NEWS tags are done by hand.

Plan
Sources
GDELT 2.0 events & GKG (free), optional ACLED (key)
Method
For each flag, query GDELT events within 25 km and ±48 h; rank articles; propose a tag with links. Analyst confirms in the review queue.
Outputs
news candidates per flag, proposed tags in SITREP drafts
Done when
Proposed tags agree with manual tags on SITREPs 001–004 for ≥ 70% of items.
Risks
GDELT geocoding noise; language coverage.
Depends on
Analyst review queue
vside-feeds

Side feeds (ntfy)

Small personal push feeds on the same alert plumbing — quick wins, any order.

plannedS · ≤1 day

Feed: earthquakes near watch sites

Shallow quakes near watchlist sites as a push; first half of the seismic item.

Plan
Sources
USGS earthquake GeoJSON feeds (free)
Method
Hourly pull of USGS feed; shallow (< 10 km) events within 50 km of a site push to ntfy.
Outputs
ntfy pushes, data/seismic/*.csv
Depends on
Alerts (push / email)
plannedS · ≤1 day

Feed: military aircraft over Calgary

Fun and useful — a push when a military callsign crosses the Calgary area.

Plan
Sources
adsb.lol /v2/mil (already logged)
Method
Filter the hourly ADS-B log for positions within ~60 km of YYC; push new callsigns (dedupe per aircraft per day).
Outputs
ntfy pushes
Depends on
Alerts (push / email)
plannedS · ≤1 dayneeds: Gmail connected to the scheduled task

Feed: ATIP / OIC inbox

Know the moment an ATIP release or OIC letter lands.

Plan
Sources
Gmail (connector)
Method
Scheduled check of Gmail for new mail from ATIP offices / OIC; push sender + subject only.
Outputs
ntfy pushes
Risks
Keep message bodies out of pushes (public topic).
Depends on
Alerts (push / email)
plannedS · ≤1 day

Feed: news spikes at watch sites

Early warning when reporting about a watch site jumps — a preview of auto-news.

Plan
Sources
GDELT DOC 2.0 API (free)
Method
Hourly article counts per site keyword set; push when the count exceeds 3× its 7-day hourly median.
Outputs
ntfy pushes
Depends on
Alerts (push / email)
vterms

Terms & licensing

Take the draft Terms of Use (v0.1, live on the site as a draft) to in-force, and build what they promise.

plannedS · ≤1 dayneeds: Kevin's calls; legal review

Terms: open decisions

The Terms can't take effect until the open [DECISION]/[TBD] items are settled and a lawyer has read them.

Plan
Method
Set the effective date; add a contact address for licensing, verification and legal notices; confirm aisstream.io redistribution terms before offering AIS-derived feeds; decide on a French version; legal review.
Outputs
docs/TERMS.md v1.0
Done when
No [DECISION] or [TBD] markers remain and the draft banner comes off.
plannedS · ≤1 day

Terms: public-facing cleanup

The draft on the site shows internal notes ("Items marked [DECISION] need Kevin's call", amber markers).

Plan
Method
Strip internal notes and markers from the rendered page (the repo copy keeps them), or remove them when v1.0 lands.
Outputs
terms.html
Depends on
Terms: open decisions
shippedS · ≤1 day

Privacy policy

Required by Terms section 16 before any account or verification data is collected. Draft placeholder v0.1 (PIPEDA / Alberta PIPA) is on the site; open decisions and legal review remain.

Plan
Outputs
docs/PRIVACY.md, privacy.html
Done when
Published and linked from the footer and the Terms.
plannedS · ≤1 day

Attribution on every output

Terms section 9 credit line plus required Copernicus / NASA / OSM credits on every SITREP, chart and imagery export.

Plan
Method
Generate the credit strings in the pipeline and stamp them on plates, PDFs and exports.
Outputs
plates, SITREP PDFs, exports
plannedS · ≤1 day

ODbL-derived datasets kept separate

Databases derived from OpenStreetMap or adsb.lol must carry ODbL terms, not RWI's non-commercial terms.

Plan
Method
Publish ODbL-derived tables in their own folder with an ODbL notice; keep RWI value-added layers apart.
Outputs
data/odbl/*, licence notices
in-progressL · 1–2 weeks

Journalist & student accounts

The free licence (Terms section 5) needs signup, verification and personal API keys.

Plan
Method
Signup with verification evidence (press card, association membership, newsroom email, published work; student email or enrolment), annual re-verification, personal API keys with rate limits, commercial-licence enquiry path.
Outputs
accounts, API keys
Depends on
Privacy policy, Terms: open decisions
v0.11.0

Extra sensors & coverage

Fill remaining sensor gaps and extend the base register beyond Canada.

plannedS · ≤1 day

Seismic events

Large explosions and nuclear tests (Punggye-ri) show up on seismometers.

Plan
Sources
USGS earthquake API (free), EMSC
Method
Pull events daily; shallow events near watchlist sites flagged; add Punggye-ri as a site.
Outputs
data/seismic/*.csv, flags
Done when
Feed runs daily; historic test (2017) reproduced as a check.
researchM · 2–4 days

Industrial activity from air quality (Sentinel-5P)

NO₂/SO₂ over refineries, LNG and smelters shows shutdowns and restarts after strikes.

Plan
Sources
Sentinel-5P TROPOMI NO₂/SO₂ (Copernicus / Planetary Computer)
Method
Weekly mean column over infrastructure sites vs baseline; flag sustained drops.
Outputs
data/s5p/<site>.csv
Risks
~5 km pixels — only big facilities; wind and cloud effects.
plannedS · ≤1 day

Satellite pass prediction

Board shows when the next usable image of each site is due, so ad hoc requests have an honest ETA.

Plan
Sources
CelesTrak TLEs for Sentinel-1/2, Landsat, NOAA-20/21, Suomi-NPP; Open-Meteo cloud forecast
Method
Propagate orbits (skyfield) for 72 h, intersect with site boxes and swath widths; add cloud forecast.
Outputs
next-pass table per site
plannedL · 1–2 weeks

Coverage beyond Canada

Full registers for the US, NATO allies, Russia and China, built and verified the same way as Canada.

Plan
Method
Source lists (government, OSM military=*, Wikidata), place boxes, verify every box against first imagery, tag region/CCMD/country/program; roll out in batches of ~50.
Outputs
watchlist additions with verified flags
Risks
Watchlist size vs Actions run time — move heavy jobs to the VPS.