WISPAYROperators, get in touch
Technical Manifesto · v2026.04

The platform, as it actually is.

No brochure. No mock diagrams. This page documents the live system that is rendering it.

Ingest modules
294
Enabled
268
Healthy
241
Degraded
27
01 · Intel plane

Four planes, composed.

Every operator action, every public page, every SITREP is a path through these four planes. They are independent and independently deployable.

WORLDSIPHON · DATAPRISM · LENSESDISPATCH · ACTIONSURFACESADS-BAISGRIDWXSPACEOSINTRFCAMSpu2bravobig-serverlens(150+)correlatorsitrepruleschannelslogegpk.infolive.wispayrchaseitem-globekitayrshire
01

Siphon · Data plane

Rate-limited polite collectors. Every source has provenance, TTL, owner. Sharded across pu2 (leader), bravo, big-server.

02

Prism · Analytical plane

Pure functions over the data plane. 150+ lenses, typed inputs, cached outputs. Location-aware by parameter.

03

Dispatch · Action plane

A BYOK comms gateway. Stateless. Fire-and-forget pushes from Prism. Rules engine on top.

04

Surfaces · Experience plane

Next.js and static HTML. Every surface reads Prism. Nothing talks directly to a raw source from the browser.

02 · Data flow

From photon to pager.

One lifecycle, repeated 280+ times a minute.

  1. 01

    Source polls

    Siphon module runs on a configured interval. Fetches a URL, parses a feed, reads a socket. Tags output with source id, timestamp, owner node.

    pythonhttpxsqlite
  2. 02

    Normalised + stored

    Every source module returns a typed payload. Written to the shared siphon DB. Other nodes read it over the WG tunnel.

    postgressqlitewireguard
  3. 03

    Lens runs

    A Prism lens declares its inputs (one or more siphon keys) and a compute function. It runs on an interval or on-demand. Output cached with TTL.

    fastapipydanticredis
  4. 04

    Correlator fuses

    A meta-lens stitches lens outputs into hypotheses. 'Aviation anomaly + GNSS degradation + solar flare' becomes a single correlated event.

    blackboard
  5. 05

    Surface renders

    Next.js pages and the static EM Globe call /api/{lens}. Sub-second response from cache most of the time.

    next.jsreactthree.js
  6. 06

    Dispatch notifies

    If a rule fires, Prism POSTs to Dispatch. Dispatch picks the right channel per recipient and fires off. Log written. Done.

    smtptwiliotelegramapns
03 · Analytical surface

150+ lenses.

Examples drawn live from /api/lenses on Prism right now. Every name here resolves to a real JSON endpoint.

em_environmentspace · em

Electromagnetic environment index. Fuses geomag, radio, solar, flare, ground.

geomagnetic_stormspace

Storm score + phase + trend. Kp, Dst, solar wind, IMF, coupling proxy.

aurora_viewingspace · site

Per-location aurora viewing score. Weather × Kp × moon × AQI.

stormfront_outlookweather

3-day convective outlook for Southern UK. CAPE, shear, LPI, hazards.

stormfront_lightning_jumpweather

Detects rapid lightning-flash-rate jumps. Early storm intensification signal.

sitrepmeta

Cross-domain SITREP generator. Persona-tuned text narrative.

correlatormeta

Cross-lens event correlator. Builds hypotheses on the blackboard.

source_healthplatform

Self-observability. 283 sources, per-owner breakdown, failure modes.

atc_activeaviation

Is ATC open at EGPK? Evidence from ADS-B, METAR, NOTAM, schedule.

airport_ops_forecastaviation

Next-hour ops forecast. Weather, TAF, movements, NOTAM effects.

flight_etaaviation

ETA for scheduled arrivals from live ADS-B + ground speed + winds.

vessel_risk_scoremarine

Per-vessel risk from AIS, weather, tide, fleet SAR coverage.

beach_safetymarine · civic

CSO overflow × bathing water × weather × marine hazard → go/no-go.

harbour_accessibilitymarine

Tide × wind × weather for specific harbours in the Clyde estuary.

storm_trackerweather · grid

Live storm impact: weather, rivers, rainfall, warnings, grid outages.

infrastructure_cascadecivic

Grid + telecoms + water + transport cascade score for Ayrshire.

commuter_easecivic

Per-location door-to-door ease: trains, roads, weather, fuel, outages.

grid_pulsegrid

Frequency, demand, generation, imbalance. 300s cadence.

carbon_windowgrid

When to run the kettle: real-time grid carbon intensity with forecast.

fuel_arbitragefuel · finance

Cross-fuel comparator: petrol, heating oil, gas, LPG, red, hydrogen, EV.

raynet_network_healthradio · civic

Clyde RAYNET 16-node AllStar status. Silence detector, hub flap.

cve_infrastructure_exposuresecurity

Are our upstream providers in today's CVEs? InfoCon layered on top.

+ ~120 more. Every lens is a pure function of its declared inputs.

04 · Action plane

Dispatch is BYOK on purpose.

We do not want to be in the business of holding anyone's SMTP password. Bring your own keys; we forward, log, and track.

Channels

Email (SMTP, per-tenant), SMS, Telegram Bot, APNs/FCM push, webhook out. Add a channel: implement one adapter.

Shape

Three stateless hosts (big-server PM2, small-server PM2, pu2 launchd) fronted by the same nginx cert bundle. Any one dies, traffic re-routes.

Upstream

Prism calls dispatch with fire-and-forget POST /api/events/inbound. If dispatch is down, Prism retries. Sender is never blocked.

Ops

Every send is logged per-tenant. Per-channel rate limits. Per-recipient opt-out tables. Designed for regulators, not hustlers.

05 · Resilience

Mesh-first networking.

When the internet degrades — and it will — the platform keeps working.

WireGuard backbone

small-server is the hub at 10.200.0.0/24. big-server, pu2, bravo, halio all peer. Subnet forwarding through the hub is live.

  • 10.200.0.9   pu2
  • 10.200.0.10   big-server
  • 10.200.0.8   dispatch leader
  • 10.200.0.16   bravo

Reticulum mesh

A four-node Reticulum mesh runs on top. TCP-over-WG today, transport abstraction tomorrow — LoRa and packet radio bearers already in the backlog.

small-server hub :4965 · pu2 · bravo · halio
06 · Infrastructure

Two VPS, two more in the room.

Not a platform-as-a-service. A platform built from principles up.

NodeRoleLocationSpecs
big-serverPublic web surface, PM2, intel planePhoenix, AZ8c / 16 GB / 80 GB
small-serverMulti-tenant apps, WG hub, relayPhoenix, AZ4c / 8 GB / 60 GB
pu2Siphon leader, FTP ingestAyr, UKmac mini
bravoSiphon worker, visionAyr, UKM4 Pro MacBook

Process mgmt

PM2 on Linux, launchd on macOS. One process manager per OS. No Kubernetes in the loop.

DB

PostgreSQL 16 on big-server + small-server. Per-service DBs. Nightly pg_dump -Fc, 14-day local retention.

Deploy

git pull on the host, restart. Some services autossh-tunnel into the relay. No CI pipeline; no CD either.

07 · Principles

How we build.

01

No fabricated data.

If we don't have it, the UI says so. Never invent coordinates, timestamps, counts, or status. Hard rule, not a guideline.

02

Everything through Siphon.

No surface talks directly to a third-party API. One gatekeeper, one rate limit, one place to audit TOS compliance.

03

Pure lenses.

A Prism lens is a pure function of its declared inputs. Same inputs, same output. Replayable, cacheable, explainable.

04

Identity at the edge.

QR code = token. Token = identity. No login flows for field kit; just scan and act.

05

BYOK everywhere it matters.

Customers bring their own Stripe, their own SMTP, their own Twilio. We don't want the liability.

06

Small team, legible code.

Built by one. No JIRA, no sprints, no theatre. Code is the contract.

Next

Want to run your event, venue, or region on this?