index · all work
11 · exoplanet classification

GRIT-X-AWA

A web observatory that classifies exoplanet candidates from NASA's Kepler and TESS data with a gradient-boosting ensemble, keyless demo included.

Year2026
Statusprototype
RoleNASA Space Apps team · full-stack + ML
Built withAstro 5 · React 18 · TypeScript 5 · three.js r167 · react-three-fiber · +12
grit-x-awa-kappa.vercel.appopen ↗

Live demo. Click Run to load the real app and use it right here, or open it full-screen.

01Overview

GRIT-X-AWA is a web app for classifying exoplanet candidates from two NASA missions, Kepler and TESS. The front end is Astro 5 with React 18 islands and a three.js starfield: a landing page drops into a Mission Control dashboard where you pick a mission, upload a CSV or type a candidate in by hand, read model-metric cards, then open a full-page results modal with per-class confidence and CSV or JSON export. A paginated browser reads Supabase-hosted mission datasets, react-three-fiber renders 3D orbital views, and an in-app chatbot answers questions about the science.

The prediction engine is a Python FastAPI service on Google Cloud Run. Each mission has its own ensemble of three gradient-boosting models, CatBoost, XGBoost, and LightGBM, blended by a fixed weighted soft vote (0.40 / 0.35 / 0.25) into a labeled disposition. It now ships as a keyless public demo: demo mode is on by default, so uploads and manual entries return canned but realistic predictions, the data browser falls back to bundled sample rows, and the chatbot returns a graceful scripted reply, which means the whole site runs with no backend and no API keys. Set PUBLIC_DEMO=false with a live backend to hit the real ensemble.

02The problem

Vetting a transit signal as a real planet, an eclipsing binary, or noise is slow expert work, and the raw Kepler and TESS tables are wide and unfriendly. GRIT-X-AWA puts a trained ensemble behind a single upload box so a candidate list becomes labeled dispositions with confidence in seconds, and makes the pipeline explorable in the browser instead of a notebook.

03Highlights
  • Two per-mission ensembles of three gradient-boosting models each (CatBoost, XGBoost, LightGBM) combine by a fixed weighted soft vote, argmax(0.40*Cat + 0.35*XGB + 0.25*LGBM), with the weights and class order pinned in each model's meta.json.
  • Kepler reads 21 KOI features into 3 classes (CANDIDATE, CONFIRMED, FALSE POSITIVE); TESS reads 17 base features engineered into about 66 model inputs across 6 classes (APC, CP, FA, FP, KP, PC), and the backend auto-detects which mission a CSV belongs to.
  • A keyless demo mode is on by default: CSV upload, manual entry, the Supabase data browser, and the chatbot all fall back to deterministic canned fixtures and bundled sample rows, so the deployed site never shows a blank screen or asks for a key; PUBLIC_DEMO=false restores the real backend paths.
  • The front end runs Astro 5 in SSR mode on the Vercel adapter with React 18 islands: a three.js starfield landing (SpaceScene), a Mission Control dashboard, a react-three-fiber 3D orbital viewer (ExoplanetVisualization3D), and a full-page prediction-results modal that exports to CSV and JSON via html2canvas.
  • The AI chatbot is an Astro server endpoint (/api/chat) with per-IP rate limiting (20 messages per day) that degrades to a scripted reply when no model key is present, so the assistant stays graceful in the public demo.
  • The FastAPI service loads and caches the pickled models on startup and exposes CSV upload, single predict, stats, and recent-prediction endpoints; Supabase (Postgres plus Storage) persists uploads and prediction history when configured, and the service still runs in a local mode when the database is absent.
04By the numbers
6
gradient-boosting models: a CatBoost, XGBoost, LightGBM ensemble per mission, blended 0.40 / 0.35 / 0.25
2
NASA missions, 9 disposition classes: Kepler's 3 and TESS's 6
0
keys or backend needed: demo mode is on by default with canned predictions and bundled sample data
21
Kepler features and 17 TESS features (engineered into about 66) feed the models
What's inside5 parts
  • frontendapp

    Astro 5 and React 18 client with a three.js starfield: the Mission Control dashboard (mission pick, CSV upload or manual entry, metric cards, results modal with CSV and JSON export), a paginated Supabase data browser, react-three-fiber orbital views, and the chatbot.

  • backendservice

    FastAPI app on Google Cloud Run that auto-detects the mission, preprocesses the CSV, runs the weighted ensemble, and returns per-row predictions with per-class confidence over a REST API.

  • kepler + tess modelsmodel

    Two per-mission ensembles (CatBoost, XGBoost, LightGBM) plus their imputer, encoders, and meta.json, pickled and loaded on backend startup for the 3-class Kepler and 6-class TESS vote.

  • demoFixtureslibrary

    The keyless demo layer: deterministic canned prediction fixtures, bundled sample rows for the data browser, and a scripted chatbot reply, gated by the PUBLIC_DEMO flag so the site runs with no backend or keys.

  • chat endpointservice

    An Astro SSR /api/chat route with per-IP daily rate limiting that powers the in-app assistant and degrades to a graceful scripted reply in demo mode.

·Tags
exoplanet classificationensemble MLNASA open datathree.jsFastAPIdata visualization
Full tech stack 17
Astro 5React 18TypeScript 5three.js r167react-three-fiber@react-three/dreiTailwind CSS v3SupabasePythonFastAPIXGBoostLightGBMCatBoostscikit-learnpandasGoogle Cloud RunVercel