Real-time mission tracker for NASA's Artemis II crewed lunar flyby. Streams live state vectors from the AROW Community API, renders the Earth-Moon-Orion system, surfaces upcoming maneuvers, and overlays NOAA space-weather data relevant to the crew beyond the magnetosphere.
Live: https://orion-live.vercel.app/
- Live telemetry strip: MET, distance to Earth, distance to Moon, speed, one-way light delay, mission progress
- 2D orbital scene with Earth, Moon, full planned trajectory ribbon, and current Orion position (pan + zoom)
- Mission timeline: past, current, and next events with countdown to the next maneuver
- Space-weather panel: Kp index, X-ray flare class, SEP threat level from NOAA SWPC
- Crew panel and mission-phase badge
- NASA TV live embed
- Graceful degradation: two-body propagation fallback when AROW is unavailable, with stale-data indicators
- Next.js 16 (App Router) + TypeScript (strict) + Tailwind v4
- shadcn/ui on
@base-ui/react - SWR for client polling
- Upstash Redis for server-side caching
- Zod for runtime validation of every external response
- date-fns for time math
- Deployed on Vercel
| Source | Use | Cache |
|---|---|---|
| AROW Community API | Live state vectors (position, velocity, J2000) | Redis, 10s TTL |
Committed ephemeris (public/data/ephemeris.json) |
Planned trajectory ribbon | Static, immutable |
| NOAA SWPC | Kp, X-ray flux, integral proton flux | Redis, 5 min TTL |
| YouTube (NASA channel) | Live broadcast embed | n/a |
All external fetches are proxied through /api/* routes (no client-side calls to NASA/NOAA) for CORS, caching, and rate-limit protection.
git clone https://github.com/<you>/orion-live.git
cd orion-live
cp .env.local.example .env.local # fill in Upstash creds
npm install
npm run devOpen http://localhost:3000.
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
AROW_API_BASE=https://api.arow.nasa.gov/community
Create a free Upstash Redis instance at https://upstash.com and paste the REST URL + token.
npm run dev— local dev servernpm run build— production build (copies Cesium static assets first)npm run start— run the built appnpm run lint— ESLint
app/
api/{telemetry,space-weather,ephemeris}/route.ts # cached proxies
page.tsx, layout.tsx, globals.css
components/
scene/ # orbital scene
panels/ # telemetry strip, timeline, crew, space weather, NASA TV
ui/ # shadcn primitives
lib/
arow.ts, propagation.ts, spaceWeather.ts, timeline.ts, crew.ts
redis.ts, types.ts, format.ts, constants.ts
hooks/
useTelemetry.ts, useSpaceWeather.ts, useMissionClock.ts
public/data/
ephemeris.json, timeline.json, crew.json
Push to GitHub, import the repo on Vercel, set the three env vars above, ship. Cesium assets are copied during the build via scripts/copy-cesium.mjs.
Not affiliated with NASA. Data is best-effort from public NASA/NOAA endpoints and may be stale or unavailable during outages. For official mission information visit https://www.nasa.gov/artemis-ii/.