Spaces:
Configuration error
Configuration error
| # 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 } | |