Inspiration
In microgravity, astronauts rapidly lose bone density and muscle without regular, well-dosed training. We wanted a simple, explainable way to scale workouts for any gravity using public space data—so crews can preserve bone stimulus and limit atrophy risk.
What it does
GravityFit Exo is a searchable catalog of exoplanets. Each planet has a gravity-based Intensity Index (1–10) that suggests how to scale loads, sets/reps, and cardio to keep training stimulus appropriate in partial-g. You can search by name, click a card, and see the planet’s gravity fraction and the estimated workout intensity.
How we built it
- Data cleaning: We filtered the NASA Exoplanet Archive to rows with both mass and radius, removing incomplete/outlier points.
- Physics core: We compute surface gravity relative to Earth as
$$ g_{\text{fraction}} \approx \frac{m}{r^2}, $$
where $m$ is mass in $M_\oplus$ and $r$ is radius in $R_\oplus$.
- Index mapping: We map $g_{\text{fraction}}$ to a 1–10 Intensity Index, then round to the nearest integer for easy interpretation.
- Modeling: We trained a scikit-learn Linear Regression using a 75/25 train/test split to smooth estimates and generalize to planets not yet reviewed (monotonic: lower $g$ ⇒ higher dose).
- Stack: Data wrangling in Python/pandas (Colab). FastAPI back-end serves planets, gravity fractions, and indices. Next.js (JavaScript) front-end provides search + clickable cards.
- Deploy: Front-end to Vercel; FastAPI serves the API our UI consumes.
Challenges we ran into
- Missing/uncertain data: Many entries lacked mass or radius; we flagged and excluded those to avoid misleading indices.
- Units & extremes: Ensuring consistent Earth units and handling “puffy” or ultra-dense planets; we use clipping to keep indices realistic.
- End-to-end wiring: API pagination, CORS, and connecting Colab-generated data to the FastAPI service cleanly.
- Monotonic behavior: Preserving the intuitive rule (lower $g$ ⇒ higher intensity) across both formula and model outputs.
Accomplishments that we're proud of
- A physics-first, transparent pipeline from raw catalog → gravity fraction → interpretable Intensity Index.
- A fast, searchable UI with clear, rounded tiers that non-experts can understand at a glance.
- A tiny, explainable linear regression that stabilizes estimates while keeping the science visible.
- Clean separation of concerns: FastAPI API + Next.js front-end, ready for scale on Vercel.
What we learned
- A single meaningful feature—gravity—goes a long way when paired with guardrails.
- Explainability > complexity for trust in health/fitness tooling.
- Rounding to whole-number tiers improves usability without losing the signal.
- Good data hygiene (filtering/flags) matters as much as model choice.
What's next for GravityFit
- Public deploy on Vercel and a live demo link.
- Exports (PDF/CSV) for planet lists and intensity indices.
- Model transparency page with MAE/RMSE and dataset coverage.
- Caching & perf improvements for snappier search.
- Uncertainty badges where mass/radius errors are large.
- Accessibility & polish: keyboard navigation, mobile layout, and API docs.
Built With
- fastapi
- javascript
- next.js
- npm
- pandas
- pip
- pydantic
- railway
- react
- shadcn
- tailwind
- typescript
- uvicorn
- vercel
Log in or sign up for Devpost to join the conversation.