---
path: /domains/nyx/neo
surface: customer
domain: nyx
auth: signed-in
source: apps/oshun/web/src/app/domains/nyx/neo/page.tsx
status: walked
last_walked:
  '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data
  (2xx), console/page-errors, expected content, screenshot verified; live
  screen-reader, touch, offline, and telemetry-delivery checks pending a manual
  AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md'
---

# Nyx · Near-Earth Object Tracker

## Purpose

Browsable list of near-Earth objects (NEOs) — asteroid/comet trackers with risk
indicators. Wired via `apps/oshun/web/src/app/domains/nyx/neo/page.tsx` ('use
client') which mounts `<NyxNEOTracker onBack={() => router.back()} />`.

## Entry points

- **Direct URL / bookmark** — yes (signed-in)
- **In-app navigation** — verify Nyx hub link
- **Browser back affordance** — in-component back button calls `router.back()`

## Layout regions

`NyxNEOTracker` (`apps/oshun/web/src/components/domains/nyx/NyxNEOTracker.tsx`):

- **Header**: back button (`aria-label="Back"`), `AlertTriangle` icon
  (`var(--l-alert)`), `<h1>Near-Earth Object Tracker</h1>`
- **Filters / summary strip** — verify which filter chips appear (size /
  approach date / risk)
- **NEO list** — rows per object with name, magnitude, miss distance, approach
  date, hazard flag
- **Detail / row drawer** — verify whether selected NEO opens an inline detail
  panel

## States

- [ ] **Loading** — bundled NEO data; client-only
- [ ] **Populated** — default catalog visible
- [ ] **Filtered** — chip narrows visible objects
- [ ] **Empty (filtered out)** — verify empty-state copy
- [ ] **Hazardous flagged** — objects exceeding hazard threshold render in alert
      color
- [ ] **Offline** — static bundle; works offline

## Interactions

### Header

- [ ] **"Back" button** (icon, `ArrowLeft`) — `onBack` → `router.back()`

### Filters

- [ ] **Each filter chip** (button) — verify exact filter labels (e.g., All /
      Hazardous / Close-approach)

### NEO list

- [ ] **Each NEO row** — verify whether row is interactive (opens detail) or
      read-only
- [ ] **Hazard badge** — color-coded indicator
- [ ] **Miss distance / approach date / magnitude** — read-only fields

## Data & contracts

- **Reads**: bundled NEO data inside the component
- **Writes**: none
- **Realtime**: none
- **Caching**: static client bundle
- **Auth/role check**: middleware enforces signed-in for `/domains/*`

## Cross-references

- Domain hub: [`nyx.md`](./nyx.md)
- Sibling tools: [`domains-nyx-solar-system.md`](./domains-nyx-solar-system.md),
  [`domains-nyx-satellites.md`](./domains-nyx-satellites.md)
- Component source:
  `apps/oshun/web/src/components/domains/nyx/NyxNEOTracker.tsx`

## Open questions / known gaps

- [ ] Enumerate the exact NEO dataset and counts
- [ ] Confirm whether rows link to a per-object detail page or only inline
      expansion
- [ ] Document hazard-flag thresholds (Torino / Palermo scale?)
- [ ] Verify whether data is fixture or live-fetched (component is too large to
      scan inline — verify the data source)
