Solar Studio
2026A browser-based astronomy experience combining a 2D celestial visibility map with real-time weather data, a 3D solar system rendered from NASA JPL Horizons positions, crescent moon visibility zones, and time simulation.

Motivation
Public interest in space tends to drop after childhood, even as space activity grows. Existing tools like Celestia and OpenSpace are desktop applications that require installation and assume prior interest. There is no web-based tool that combines real astronomical data with location-aware visibility and interactive 3D exploration in one place.
Solar Studio was built to fill that gap: a browser-based experience that makes space feel personal and close rather than abstract. The 2D map connects astronomical data to your own location and weather, while the 3D view creates a sense of scale and wonder. The goal is not to teach facts, but to give people a reason to look up.
Features
2D Visibility Map
Interactive Leaflet map overlaying celestial object visibility on real-time weather. Click anywhere on the globe for a visibility score for the Moon and planets.
3D Solar System
React Three Fiber scene with planets rendered in up to 8K textures, atmospheric shaders, orbit rings, and an asteroid belt. Positions sourced from NASA JPL Horizons.
Tonight's Sky
Dashboard with rise/set times, altitude charts, moon phase visualizations, and peak visibility scoring based on your location.
Crescent Moon Visibility
Yallop criteria zones (A-F) for predicting early crescent sightings, with global overlay on the 2D map.
Celestial Events
Upcoming eclipses, meteor showers, and aurora forecasts from NOAA SWPC with countdown timers.
Spacecraft Tracking
Real-time positions of Voyager 1/2, Pioneer 10, and Parker Solar Probe with mission data cards and distance HUD in AU.
Time Simulation
Scrub through time to see how the sky changes. Planet positions and visibility data update in sync.
Guided Tours
Narrative camera tours through the 3D solar system with informational overlays at each stop.



Architecture

Technical Highlights
Yallop Crescent Visibility
Implements NAO Technical Note 69 (Yallop 1997) for predicting crescent moon visibility. Calculates a q-value classifying visibility into zones A through F, accounting for topocentric crescent width, arc of vision, and angular separation at the optimal observation time.
Atmospheric Visibility Model
Uses Koschmieder's law with composite extinction coefficients derived from cloud cover, precipitation, fog, and time-of-day factors. Haversine distance calculations and horizon distance formulas with atmospheric refraction for accurate scoring.
Data Pipeline
FastAPI backend with scheduled ETL jobs fetching from 5+ external APIs: Open-Meteo for weather grids, JPL Horizons for spacecraft ephemeris, USNO for eclipse data, and NOAA SWPC for aurora forecasts. Three-tier caching strategy on the frontend with location, overlay, and bulk forecast caches.
Direction-Preserving Scaling
The solar system spans a 75:1 distance ratio from Mercury to Neptune. A power-law compression (d = (raw * 20)^0.55) squashes large distances while keeping every planet in the correct direction from the Sun. Planet radii use a separate exponent (0.65) so even small moons remain visible and clickable.
Visibility Scoring
Each map cell computes a weighted score from four factors: weather (0.30), time of day (0.30), altitude (0.25), and brightness (0.15). The weights were tuned by hand-checking against real sky conditions across different objects, locations, and times. Scores are cached per object, location, and time to keep panning responsive.
Custom Hex Grid Layer
The visibility overlay is a custom Leaflet GridLayer that draws canvas-based hex cells. Cell size adapts to zoom level, starting at about 1 degree and halving as the user zooms in. Each tile is rendered synchronously to avoid Leaflet's async tile-ready race condition.
3D Performance
8K planet textures cached via PWA at runtime to keep the initial bundle small. Position extrapolation lerps between JPL data points for smooth animation. Scene stays alive when hidden to avoid shader recompilation stalls on mode switch.
Testing
68 frontend unit tests (Vitest) covering visibility calculations, Yallop crescent q-values, and scene coordinate scaling. 77 backend tests (pytest) covering API endpoints, weather caching, event refresh pipelines, and mission data seeding.
Future Work
- Richer 3D content — detailed planet surface features, flythrough camera animations, and more interactive overlays in the solar system scene.
- Deeper 2D/3D integration — selecting an object in one view highlights it in the other, creating a seamless connection between the map and the 3D scene.
- Expanded celestial catalogue — add satellites, deep-sky objects, and active space missions beyond the current planets and spacecraft.
- Better onboarding flow — a guided walkthrough for first-time users so they can discover features without reading documentation.