# Core satvis configuration: the GP groups served by the worker, plus the # static per-satellite facts attached to their records at refresh time. # # Merged with every data/custom/*/satvis.yaml plugin config into # satvis.generated.json by scripts/generate-groups.mjs at build time. # The seven groups below are carved out of `active` by name instead of being # fetched as their own CelesTrak group. `active` is already pulled for the plugin # groups, and sources are deduped, so they cost nothing extra — dropping their own # fetches took a refresh from ~12.2 MB to ~7.2 MB, against CelesTrak's 250 MB/day # per-IP budget, and 15 sources down to 8. # # Verified against a same-cycle `active` snapshot on 2026-07-29. Every derivation # below is a superset of the CelesTrak group — nothing upstream serves is lost: # # oneweb, globalstar, iridium-NEXT exact, record for record # starlink +2 STARLINK-2401/47818, STARLINK-34343/64157 # planet +1 PELICAN-11/69871 # eutelsat +1 EUTELSAT 53A/40277 # spire +12 recent LEMUR-2s (66680, 67366, 68471-68493) # # The extras are objects CelesTrak keeps in `active` but not in the curated group. # Most carry high (recent) NORAD ids, so they read as launches not yet folded into # the group rather than deliberate exclusions — but EUTELSAT 53A is a 2014 craft, # so some are genuine editorial drops. We serve them either way. # # `satellites` rows rather than plain select.noradIds for the members that carry no # matching prefix: a row's upstreamName is checked against the record, so a rename # or decay surfaces as a warning in /api/groups.json instead of silently shrinking # the group. # # Still fetched as their own sources — editorial lists with no name pattern at all: # gnss, science, resource, weather, cubesat, stations, last-30-days. # # Re-check a derivation before widening it. These are curated lists, and a pattern # that fits today drifts as operators add product lines (planet needed PELICAN, # TANAGER and EDDA appended to FLOCK/SKYSAT for exactly that reason). groups: - name: cubesat sources: [{ celestrak: cubesat }] - name: globalstar sources: [{ celestrak: active }] select: { namePattern: "^GLOBALSTAR" } - name: gnss sources: [{ celestrak: gnss }] - name: iridium-NEXT sources: [{ celestrak: active }] select: { namePattern: "^IRIDIUM" } - name: last-30-days sources: [{ celestrak: last-30-days }] - name: oneweb sources: [{ celestrak: active }] select: { namePattern: "^ONEWEB" } - name: planet sources: [{ celestrak: active }] # FLOCK/SKYSAT are the original lines; PELICAN, TANAGER and EDDA are newer and # share no prefix with them. select: { namePattern: "^(FLOCK|SKYSAT|PELICAN|TANAGER|EDDA)" } - name: resource sources: [{ celestrak: resource }] - name: science sources: [{ celestrak: science }] - name: spire sources: [{ celestrak: active }] select: { namePattern: "^LEMUR" } # Spire craft that are not LEMURs. satellites: - { noradId: 66678, upstreamName: OTTER SDM } - { noradId: 67364, upstreamName: TWILIGHT-1 OBJECT B } - name: starlink sources: [{ celestrak: active }] select: { namePattern: "^STARLINK" } - name: stations sources: [{ celestrak: stations }] - name: weather sources: [{ celestrak: weather }] - name: eutelsat sources: [{ celestrak: active }] select: { namePattern: "^EUTELSAT" } # Eutelsat-operated, but catalogued under their Express names. satellites: - { noradId: 39612, upstreamName: EXPRESS-AT1 } - { noradId: 39613, upstreamName: EXPRESS-AT2 } # Static per-satellite facts, matched against a record's NORAD_CAT_ID alone. # `name` is documentation only — it never takes part in matching. # # Swath extents are PER-SIDE cross-track distances (km) from the ground track to # the swath edge, relative to flight direction (starboard = velocity bearing + # 90°). They are NOT halves of a full swath width. Sides can differ: Sentinel-3's # sensor is tilted to avoid sunglint (starboard-heavy in flight). # # Provenance: transcribed from an upstream prediction table whose extents were # cross-checked against published sensor swaths and, where noted, calibrated against # real product footprints. Entry order and grouping mirror that table, so a re-sync # stays a readable diff. Only LEO imagers appear here — geostationary weather # platforms have no moving ground-track swath. # # Satellites absent from this table fall back to the app defaults (see # src/config/satelliteMetadata.ts). satellites: # MODIS (Terra/Aqua) — 2330 km nominal; footprints reach ~1170/side. - { noradId: 25994, name: TERRA, swathStarboardKm: 1175, swathPortKm: 1175 } - { noradId: 27424, name: AQUA, swathStarboardKm: 1175, swathPortKm: 1175 } # VIIRS (JPSS) — 3040 km nominal; L1 footprints reach ~1556/side. - { noradId: 37849, name: SUOMI NPP, swathStarboardKm: 1565, swathPortKm: 1565 } - { noradId: 43013, name: NOAA 20 (JPSS-1), swathStarboardKm: 1565, swathPortKm: 1565 } - { noradId: 54234, name: NOAA 21 (JPSS-2), swathStarboardKm: 1565, swathPortKm: 1565 } # MSI (Sentinel-2) — 290 km nominal; L1C tiles reach ~149/side. - { noradId: 40697, name: SENTINEL-2A, swathStarboardKm: 150, swathPortKm: 150 } - { noradId: 42063, name: SENTINEL-2B, swathStarboardKm: 150, swathPortKm: 150 } - { noradId: 60989, name: SENTINEL-2C, swathStarboardKm: 150, swathPortKm: 150 } # SLSTR (Sentinel-3) — tilted against sunglint, so the sides differ. # Side assignment verified empirically against real SLSTR granule footprints: # the tilt points the sensor WEST on the descending day pass, i.e. starboard. # Observed reach 995-998 / 499-502 km. - { noradId: 41335, name: SENTINEL-3A, swathStarboardKm: 1000, swathPortKm: 500 } - { noradId: 43437, name: SENTINEL-3B, swathStarboardKm: 1000, swathPortKm: 500 } # TROPOMI (Sentinel-5P) — 2600 km nominal, nadir-pointing (no tilt, unlike # Sentinel-3); NRTI footprints reach ~1366 both sides. - { noradId: 42969, name: SENTINEL-5P, swathStarboardKm: 1375, swathPortKm: 1375 } # OLI (Landsat) — 185 km total. - { noradId: 39084, name: LANDSAT 8, swathStarboardKm: 92.5, swathPortKm: 92.5 } - { noradId: 49260, name: LANDSAT 9, swathStarboardKm: 92.5, swathPortKm: 92.5 } # AVHRR/3 (MetOp) — 2900 km total. - { noradId: 38771, name: METOP-B, swathStarboardKm: 1450, swathPortKm: 1450 } - { noradId: 43689, name: METOP-C, swathStarboardKm: 1450, swathPortKm: 1450 } # MERSI (Fengyun-3) — 2900 km total. # Only the satellites carrying a confirmed MERSI variant are listed; the older # Fengyun 3A/3B/3C and the newer 3G/3H are deliberately absent (see ADR-0002). - { noradId: 43010, name: FENGYUN 3D, swathStarboardKm: 1450, swathPortKm: 1450 } - { noradId: 49008, name: FENGYUN 3E, swathStarboardKm: 1450, swathPortKm: 1450 } - { noradId: 57490, name: FENGYUN 3F, swathStarboardKm: 1450, swathPortKm: 1450 } # SGLI (GCOM-C) — 1150 km total. - { noradId: 43065, name: GCOM-C (SHIKISAI), swathStarboardKm: 575, swathPortKm: 575 }