GLIMPSE
JWST spectroscopy visualizer
Interactive JWST exoplanet transit spectroscopy visualizer. Browses the JWST observation catalog, renders transmission spectra with 1-sigma error bars, overlays molecular absorption bands, and exports publication-ready data. WCAG 2.1 AA compliant.
What it is
GLIMPSE is a full-stack visualization tool for exoplanet atmospheres.
When a planet transits its host star, a fraction of starlight filters
through its atmosphere; molecules absorb at characteristic wavelengths,
producing a spectral fingerprint. GLIMPSE renders those fingerprints
interactively from real JWST archive data and physically-motivated demo
models. The transmission spectrum plots transit depth d = (Rp/R*)^2 in
ppm against wavelength — feature amplitudes are 10–1000 ppm for gas giants
and 1–100 ppm for terrestrials.
By the numbers
| Metric | Value |
|---|---|
| Wavelength coverage | 0.6–5.3 um (NIRSpec + NIRISS) |
| Molecules with band overlays | 7 (H2O, CO2, CO, CH4, SO2, NH3, Na/K) |
| Uncertainty bands | 1-sigma and 2-sigma |
| Spectral binning range | 5–100 points |
| Export formats | CSV, JSON, PNG |
| Canvas render target | 60 fps on mobile |
| Accessibility standard | WCAG 2.1 AA |
| Text / UI contrast | 4.5:1 / 3:1 |
| Zoom without loss of function | 200% |
| Frontend hosting | Vercel |
| Backend hosting | Render (free tier) |
Architecture
+-------------------------------------------------------------+
| Next.js 16 / React 19 |
| (Vercel) |
| Target Selector | Spectrum Canvas | Spectrogram / LC |
+------------------------------+------------------------------+
| HTTPS (JSON)
v
+-------------------------------------------------------------+
| FastAPI (Python 3.11) |
| (Render free tier) |
| /api/mast/targets | /api/mast/demo-data | /api/mast/... |
+------------------------------+------------------------------+
|
v
+-------------------------------------------------------------+
| MAST Archive (STScI) + NASA Exoplanet Archive |
| JWST NIRSpec / NIRISS transit FITS via astropy |
+-------------------------------------------------------------+The frontend also ships Next.js API routes (apps/web/src/app/api/*) as
a resilience layer so the app stays interactive when the free-tier
Render backend cold-starts.
Key features
- Transmission spectra with uncertainty bands — Transit depth in ppm vs. wavelength, rendered to HTML5 Canvas with 1-sigma and 2-sigma shaded regions. No chart library; custom renderer targets 60 fps on mobile.
- Molecular band overlays — H2O (1.4, 1.9, 2.7 um), CO2 (4.3, 15.0), CO (2.3, 4.6), CH4 (2.3, 3.3, 7.7), SO2 (4.0, 7.3, 8.7), NH3 (1.5, 2.0, 10.5), Na/K (0.59, 0.77). Per-molecule toggles let users reason about composition visually.
- Spectrogram heatmap + light curves — 2D heatmap across wavelength and orbital phase; transit light curves at user-selected wavelengths.
- Live MAST queries — Pulls JWST NIRSpec / NIRISS transit FITS
through
astroqueryagainst the Mikulski Archive for Space Telescopes. Demo mode falls back to physically-motivated simulated spectra grounded in published JWST observations. - Exoplanet parameter lookups — NASA Exoplanet Archive integration returns planet / host-star parameters for each target.
- Spectral binning controls — 5 to 100 points, user-adjustable.
- CSV / JSON / PNG export — Publication-ready output of the active spectrum and view.
- Colorblind-safe palette — Okabe-Ito by default across all charts.
- Resilience layer — Next.js API routes shadow the Python backend so the frontend remains interactive during Render free-tier cold starts.
Accessibility
- WCAG 2.1 AA — 4.5:1 text contrast, 3:1 UI contrast, 200% zoom without loss of function.
- Screen-reader data tables — Every canvas chart has an
aria-labeldescription plus a hidden table of the underlying data points. - Keyboard navigation — Focus indicators on every control, skip links, data points reachable via keyboard.
API reference
Base URL: https://astrospecvis.onrender.com.
| Method | Path | Purpose |
|---|---|---|
| GET | / | Health + metadata |
| GET | /health | Render health check |
| GET | /api/mast/targets | Curated JWST exoplanet target list |
| GET | /api/mast/demo-data/{target}?bin_size=20 | Simulated transit spectrum |
| GET | /api/mast/real-data/{target} | Live JWST data from MAST |
| GET | /api/mast/exoplanet/{target} | NASA Exoplanet Archive parameters |
| GET | /api/mast/molecular-bands | Molecular absorption band catalog |
Stack
| Layer | Technology |
|---|---|
| Frontend framework | Next.js 16 (App Router), React 19 |
| Language (web) | TypeScript 5 |
| Styling | Tailwind CSS 4 |
| Animation | Framer Motion 12 |
| Charts | HTML5 Canvas (custom renderer) |
| 3D | three.js, @react-three/fiber, drei |
| Icons | lucide-react |
| Backend framework | FastAPI |
| Language (api) | Python 3.11 |
| Astronomy | astropy >=6.0, astroquery >=0.4.7 |
| Numerics | numpy, scipy |
| ASGI server | uvicorn + uvloop + httptools |
| Data sources | MAST Archive (STScI), NASA Exoplanet Archive |
| Hosting | Vercel (web), Render free tier (api) |