OrbitalForge / how-to
How to use OrbitalForge
Everything you need to design an AI-payload satellite and understand the physics behind the score. Each section below stands on its own — jump in wherever you want.
What is OrbitalForge?
OrbitalForge is the fastest way to design an AI-payload satellite that can actually close. Pick an orbit, size a solar array, hang a compute payload off it, and a NASA GMAT R2026a script-mode pipeline propagates the full production force model — drag, gravity field, solar-radiation pressure, third-body gravitation, eclipses — and gives you a defensible score you can show an engineer.
Every constant in the codebase cites a primary source (NASA SBSP 2024, IERS, IAU 2015, SpaceX FCC SAT-LOA-20260108-00016). Every successful run becomes a public read-only page with an Open Graph card so you can paste one URL into X and have it unfurl. It's aimed at the next generation of orbital-infrastructure builders — orbital data centers, solar-power constellations, edge inference fleets, building blocks of programs like TERAFAB.
The designer
Open the designer at /design. Sliders are grouped into Orbit, Solar Array, Compute Payload, and Thermal & comms. Each group has a card; the right-hand column shows the live preview that updates instantly while you drag.
Altitude (km, 200–2000): sets eclipse geometry and atmospheric drag. Lower means more drag and shorter orbital life; higher means more radiation and slower phasing. FCC envelope info
Inclination (°, 0–180): the angle between the orbit plane and Earth's equator. ~97.4° at 500 km gives a sun-synchronous orbit (fixed local solar time on every pass — predictable lighting and eclipse). 51.6° matches the ISS.
Presets snap altitude + inclination to common operating points (low LEO, ISS-like, sun-sync 500/800 km, polar 1200 km).
Running simulations
There are two execution paths. The live preview runs locally and is approximate. The scored run goes through NASA GMAT R2026a end to end.
Runs in your browser. Closed-form Kepler period + Vallado worst-case eclipse + the same scoring formula. Sub-50 ms feedback as you drag.
Generates a .script file, runs GmatConsole headless inside the worker container with NRL-MSISE-00 drag, EGM96 70×70 gravity, spherical SRP, Sun + Moon as third bodies, and EclipseLocator umbral/penumbral events. ~2 s wall clock for a 1-day prop.
Hit Run full GMAT simulation and we poll the run status for up to 30 s. When it completes, the GMAT result card shows engine, score, eclipse fraction, avg power, orbital period, final SMA, and the station-keeping Δv budget. A Share row appears at the same time so you can paste a public URL.
Scoring explained
The total score is the product of six dimensionless factors. Each factor anchors to a cited constant — moving any slider has a predictable effect on the total.
power_mass_ratiospecific_power / 100 W/kgLinear lift from baseline flight-proven array density (~100 W/kg). Push specific power higher → more reward.realism_factor≤ 1, soft-cap at 300 W/kgNASA OTPS Space-Based Solar Power 2024. Beyond the SBSP advanced-array target the factor decays so wishful designs don't dominate the leaderboard.envelope_factor1.0 inside 500–2000 km, linear falloff outsideSpaceX FCC SAT-LOA-20260108-00016. Inside the AI-constellation operating shell you keep full credit; outside you lose it gradually with distance from the band.power_kw_factordesign_power_kw / 100 kWFCC filing references ~100 kW per AI satellite. Designs at exactly the reference get 1.0; bigger designs win more, smaller designs win less.eclipse_penalty1 − eclipse_fractionGMAT EclipseLocator umbral fraction. Penumbra is tracked separately; the penalty applies only to full umbra because power drops to zero only there.mission_bonus1.0 + 0.1 × mission_difficultyDifficulty 1–5 from the seeded missions. Hello LEO is 1; Frontier is 5. Reward multiplier from objective_json applies only when every target passes.Missions & leaderboards
Missions are physics-anchored challenges. Each mission has a list of target metrics (altitude, inclination, avg power, specific power…) you have to satisfy. Hit every target and the reward multiplier scales your score.
- Pick a mission from the dropdown on the designer, or open /missions and click Take this mission to deep-link.
- Submitting a run with a mission selected fills
mission_completed+mission_evaluationon the run, with the actual value of every target so the result page can render pass/fail badges. - Each mission has its own leaderboard sorted by completed runs first, then score. Open a mission card and click Leaderboard.
- The cross-mission top 10 lives at /community — last 30 days of public submissions, ranked by score.
- The global leaderboard ranks users instead of single runs: total score = sum of best run per mission. Tabs for all-time / month / week.
Understanding the orbit viewer
The 3D viewer is a quick at-a-glance sanity check. Earth sits at the origin; the sun is fixed along +X (the small amber sphere).
- Amber arc is the sunlit half of the orbit; slate arc is in Earth's umbra. Arc length = umbral fraction × 2π.
- Before a GMAT run, the umbra arc uses the Vallado worst-case β=0 cylindrical-shadow estimate. After a successful run, it uses the actual umbral fraction GMAT computed.
- Drag to rotate; the public result page auto-rotates if you keep your hands off.
- The faint blue disc is the orbit plane, tilted by inclination — useful for reading polar vs equatorial orientations at a glance.
Physics & realism
The non-negotiables of the project — read once, then trust the score.
- Engine: NASA GMAT R2026a, script-mode (.script → headless GmatConsole). The Python API is reserved for lightweight queries; every propagation goes through the script path.
- Force model: NRL-MSISE-00 drag, EGM96 70×70 gravity, spherical SRP with Cr=1.3, Sun + Moon as third bodies. Every run commits the exact config into
DesignRun.gmat_config_jsonfor reproducibility. - Station-keeping: a 0.005 m/s prograde ImpulsiveBurn fires once per orbit inside the propagation loop. Without it the canonical 100 kW / 300 m² reference design crashed perigee in <24 h under SRP eccentricity-pumping. Δv budget reported in the result. Station-keeping info
- Cited constants: every value in
backend/src/physics/constants.pycarries a primary-source citation. Tests enumerate the module and fail the build if anything goes uncited. - Honest caveats: no approximations is aspirational, not literal — GMAT itself is configurable, and choices like drag model or gravity order change the trajectory. The goal is no uncited approximations, not no approximations.