.nornir/assets/new-collectors-flow.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 380" font-family="sans-serif" font-size="13">
<defs>
<marker id="a" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto">
<path d="M0,0 L8,3 L0,6 Z" fill="#6fd3f5"/>
</marker>
<style>
.box{fill:#12232e;stroke:#6fd3f5;stroke-width:1.5}
.t{fill:#dCEAF2}.dim{fill:#7fb0cc;font-size:11px}
.edge{stroke:#6fd3f5;stroke-width:1.5;fill:none;marker-end:url(#a)}
.leaf{fill:#12281e;stroke:#5fd39a}
</style>
</defs>
<rect width="900" height="380" fill="#0b1620"/>
<text x="20" y="28" class="t" font-size="15">korp-collectors — new access methods → Arrow → skade / facett</text>
<!-- sources -->
<rect class="box" x="20" y="56" width="230" height="286" rx="8"/>
<text x="32" y="78" class="t">New open-data sources</text>
<text x="32" y="104" class="dim">WFS — OGC GetFeature (GML)</text>
<text x="32" y="124" class="dim">GTFS — transit feed .zip (CSV)</text>
<text x="32" y="144" class="dim">Bolagsverket — company registry</text>
<text x="32" y="164" class="dim">Nord Pool — day-ahead spot prices</text>
<text x="32" y="184" class="dim">Eurostat — SDMX-JSON 2.1 stats</text>
<text x="32" y="204" class="dim">USGS — earthquakes (GeoJSON)</text>
<text x="32" y="222" class="dim">RSS / Atom — syndication feeds</text>
<text x="32" y="240" class="dim">OpenAQ — air quality (JSON)</text>
<text x="32" y="258" class="dim">Energy-Charts — generation mix (JSON)</text>
<text x="32" y="276" class="dim">GTFS-RT — vehicle positions (protobuf)</text>
<text x="32" y="298" class="dim">format per method, not per agency</text>
<text x="32" y="316" class="dim">credential/agreement gated where needed</text>
<!-- parse (leaf) -->
<rect class="box leaf" x="320" y="80" width="230" height="256" rx="8"/>
<text x="334" y="104" class="t">Pure-Rust parse (leaf)</text>
<text x="334" y="130" class="dim">WFS → quick-xml GML → WKT</text>
<text x="334" y="150" class="dim">GTFS → ZIP (central dir) + CSV</text>
<text x="334" y="170" class="dim">Bolagsverket → REST field-map</text>
<text x="334" y="190" class="dim">Nord Pool → multiArea flatten</text>
<text x="334" y="210" class="dim">Eurostat → SDMX series/obs flatten</text>
<text x="334" y="230" class="dim">USGS → serde_json GeoJSON flatten</text>
<text x="334" y="250" class="dim">RSS/Atom → quick-xml item flatten</text>
<text x="334" y="266" class="dim">OpenAQ → serde_json results flatten</text>
<text x="334" y="282" class="dim">Energy-Charts → parallel-array zip</text>
<text x="334" y="298" class="dim">GTFS-RT → hand-rolled protobuf reader</text>
<text x="334" y="316" class="dim">→ Arrow RecordBatch · source_target()</text>
<!-- sink -->
<rect class="box" x="620" y="120" width="250" height="150" rx="8"/>
<text x="634" y="144" class="t">BatchSink</text>
<text x="634" y="170" class="dim">skade → Iceberg table</text>
<text x="634" y="190" class="dim">(feature skade-sink)</text>
<text x="634" y="216" class="dim">WFS geometry → facett osm3d</text>
<text x="634" y="234" class="dim">USGS quakes → osm3d scene</text>
<text x="634" y="252" class="dim">(map-scene position table)</text>
<path class="edge" d="M250,199 L318,199"/>
<path class="edge" d="M550,199 L618,199"/>
</svg>