Living Document Notice
Published 2026-09-18. The evolving architecture, revisions, and connected notes for this dispatch live in the Stax Digital Garden.
Multi-Band Horizons: Designing the Modular Ingest Chassis
Summary
Hushwire began as a dedicated observatory for airborne ADS-B transponders operating on 1090 MHz. However, the physical space surrounding an observer is permeated by multiple overlapping electromagnetic telemetry streams. Coastal and estuarine zones carry Maritime Automatic Identification System (AIS) broadcasts on VHF marine bands, while low Earth orbit satellites transmit ephemeris and downlink packets across UHF and amateur satellite frequencies.
To accommodate emerging telemetry sources without fragmenting the codebase, Hushwire is refactoring its data pipeline into a modular “ingest chassis.” By decoupling protocol-specific demodulation from the polar display engine, the chassis establishes a universal telemetry adapter interface. Whether parsing ADS-B Mode S frames, AIS NMEA sentences, or satellite Two-Line Element (TLE) orbital propagations, data normalizes into a unified spatial frame. This dispatch outlines the architectural chassis, the polymorphic contact interface, and how multi-band observation preserves visual calmness.
Beyond the Aeronautical Band
Physical observation of a local horizon naturally extends beyond aviation:
┌─────────────────────────────────────────────────────────────┐
│ Physical Electromagnetic Spectrum Overhead │
├─────────────────────────────────────────────────────────────┤
│ • AIR Band: 1090 MHz ADS-B (Civilian / Commercial Aviation) │
│ • MAR Band: 161.975 / 162.025 MHz AIS (Vessel Traffic) │
│ • SAT Band: L-Band / UHF SGP4 Ephemeris (LEO Satellite Orbits)│
└─────────────────────────────────────────────────────────────┘
While these domains utilize distinct physical radio layers and packet framing conventions, their spatial representations share fundamental geometric properties:
| Domain | Protocol / Encoding | Update Interval | Physical Identifier | Spatial Dimension |
|---|---|---|---|---|
| Aviation (AIR) | Mode S Extended Squitter (1090 MHz) | 1 to 5 seconds | 24-bit ICAO Hex | 3D (Lat, Lon, Baro Altitude) |
| Maritime (MAR) | AIS VHF AIVDM Sentences (162 MHz) | 2 to 180 seconds | 9-digit MMSI Number | 2D (Lat, Lon, Surface Water) |
| Satellite (SAT) | SGP4 Orbital Propagator (Ephemeris) | Deterministic (Kepler) | 5-digit NORAD ID | 3D (Sub-satellite Lat, Lon, Altitude) |
The Unified Ingest Chassis Architecture
In monolithic monitoring apps, adding a new data source often results in branching UI logic (if (type === 'boat') renderBoat()). This approach introduces spaghetti code, inconsistent styling, and regression risks.
Hushwire’s modular chassis isolates ingest adapters behind a strict lifecycle interface. Adapters run inside dedicated Web Workers or edge micro-services, outputting a standardized stream of normalized telemetry records into the central dispatch bus:
┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────────┐
│ AIR Adapter (ADS-B) │ │ MAR Adapter (AIS) │ │ SAT Adapter (NORAD) │
│ Mode S JSON Parser │ │ NMEA AIVDM Decoder │ │ SGP4 Orbit Propagator│
└───────────┬────────────┘ └───────────┬────────────┘ └───────────┬────────────┘
│ │ │
└───────────────────────────┼───────────────────────────┘
│
▼ (Normalized Telemetry Streams)
┌────────────────────────────────────────────────────────────────────────┐
│ Modular Ingest Chassis Engine │
│ │
│ • Unified Spatial Index (Polar Coordinate Clamping) │
│ • Contact Deduplication & Lifecycle Manager (Active / Carrier Lost) │
│ • Domain-Specific Vector Projection │
└───────────────────────────────────┬────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────┐
│ Unified Phosphor Canvas Renderer │
│ │
│ • P7 Decay Accumulation Buffer │
│ • Domain-Specific Polar Glyphs (Chevron / Vessel Hull / Orbit Track) │
│ • Non-Overlapping Azimuth Callouts │
└────────────────────────────────────────────────────────────────────────┘
The Polymorphic Telemetry Interface
The chassis formalizes telemetry ingestion using TypeScript generics, bounding every record by physical primitives while permitting domain-specific attributes:
export type TelemetryBand = "AIR" | "MAR" | "SAT";
export interface BaseContact {
id: string; // Normalized unique ID (e.g. "air:a834b2", "mar:367123456")
band: TelemetryBand; // Active band classifier
lat: number; // Decimal degrees [-90.0, 90.0]
lon: number; // Decimal degrees [-180.0, 180.0]
headingDeg: number; // Ground track or vessel course [0, 359]
speedKts: number; // Speed over ground in knots
timestampUtc: number; // Epoch fix timestamp in seconds
}
export interface AirContact extends BaseContact {
band: "AIR";
altitudeFt: number;
verticalRateFpm: number;
callsign: string;
}
export interface MarContact extends BaseContact {
band: "MAR";
vesselName: string;
mmsi: string;
vesselType: "CARGO" | "TANKER" | "TUG" | "SAILING" | "PASSENGER";
navStatus: string;
}
export interface SatContact extends BaseContact {
band: "SAT";
noradId: number;
satName: string;
elevationDeg: number; // Observer elevation angle [-90, 90]
azimuthDeg: number; // Compass azimuth from observer
rangeKm: number;
}
export type AnyContact = AirContact | MarContact | SatContact;Ingest Adapter Contract
Every protocol plugin implements a minimal four-method lifecycle contract:
export interface IngestAdapter {
readonly band: TelemetryBand;
readonly name: string;
initialize(config: Record<string, unknown>): Promise<void>;
start(originLat: number, originLon: number, radiusNm: number, onUpdate: (contacts: AnyContact[]) => void): void;
stop(): void;
getStatus(): "DISCONNECTED" | "CONNECTING" | "STREAMING" | "ERROR";
}Symbology and Visual Cohesion Across Bands
Integrating multiple domains on a single radar screen creates severe visual clutter if rendered naively. Hushwire maintains visual calm through domain-specific geometric glyphs and strict luminance separation:
Aviation (AIR): ▲ Chevron Glyph
Solid phosphor green (#52b788)
High-speed dynamic trails
Maritime (MAR): ⬢ Elongated Hexagon Glyph
Subdued cyan / steel blue (#48cae4)
Slow, protracted wake lines
Satellite (SAT): ◇ Diamond Glyph with orbital arc projection
Warm amber / gold (#e0a96d)
Predictable cross-sky horizon passes
// Render dispatch selecting glyph by band
export function drawBandGlyph(ctx, contact, screenX, screenY) {
ctx.save();
ctx.translate(screenX, screenY);
ctx.rotate((contact.headingDeg * Math.PI) / 180);
switch (contact.band) {
case "AIR":
ctx.strokeStyle = "#52b788";
ctx.beginPath();
ctx.moveTo(0, -6);
ctx.lineTo(4, 5);
ctx.lineTo(0, 3);
ctx.lineTo(-4, 5);
ctx.closePath();
ctx.stroke();
break;
case "MAR":
ctx.strokeStyle = "#48cae4";
ctx.beginPath();
ctx.moveTo(0, -7);
ctx.lineTo(3, -2);
ctx.lineTo(3, 6);
ctx.lineTo(-3, 6);
ctx.lineTo(-3, -2);
ctx.closePath();
ctx.stroke();
break;
case "SAT":
ctx.strokeStyle = "#e0a96d";
ctx.beginPath();
ctx.moveTo(0, -5);
ctx.lineTo(5, 0);
ctx.lineTo(0, 5);
ctx.lineTo(-5, 0);
ctx.closePath();
ctx.stroke();
break;
}
ctx.restore();
}Architectural Roadmap
| Phase | Target Horizon | Ingest Protocol | Status |
|---|---|---|---|
| v0.1 | Airspace (1090 MHz) | Cloudflare Worker / ADS-B JSON | In Review (02 Review) |
| v0.2 | Maritime Horizon (VHF AIS) | AIVDM NMEA WebSocket Adapter | Chassis Design Stage |
| v0.3 | Orbital Passes (Low Earth Orbit) | SGP4 Ephemeris / CelesTrak TLE | Mathematical Modeling |
By establishing clean adapter boundaries early, Hushwire prepares for multi-band situational awareness without compromising its core principles: local sovereign processing, zero tracking, and tranquil visualization.
- Directus Target: hushwire
- Garden Source Reference: Chassis Extensibility, Multi-Band Telemetry, MOC - Fleet Operations, MOC - Bosun PKM Tools