The official website of MoveYourBody, live at move.aossie.org.
MoveYourBody is AOSSIE's privacy-first, open-source fitness app. It builds personalized 5β7 minute micro-workouts around your goals, equipment and injuries, adapts after every session from your feedback, and runs entirely offline with on-device AI and hands-free voice control. The app itself is developed in AOSSIE-Org/MoveYourBody; this repository contains its landing page.
What the landing page presents, taken from the app repository and its contributors:
- Personalized workouts: sessions built from goals, fitness level, preferences, equipment and target body region.
- Short sessions: quick 5β7 minute micro-workouts of three exercises.
- Smart, adaptive recommendations: post-workout feedback on difficulty and intensity gradually tunes future sessions.
- Variety engine: recently performed exercises are avoided to keep workouts fresh.
- Safety-aware: exercises that could aggravate a stated injury are never recommended.
- Offline, on-device AI: a quantized
all-MiniLM-L6-v2model on ONNX Runtime; data stays on the phone. - Voice control: start, pause, skip or repeat hands-free.
- Plus: daily reminders, progress statistics, custom workouts, exercise search and body-focus sessions.
| Area | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack), React 19, TypeScript |
| Styling | Tailwind CSS v4 with semantic CSS-variable tokens |
| Localization | next-intl - English (en) and Hindi (hi), type-checked catalogs |
| Theming | next-themes - dark (default) and light |
| Motion | CSS keyframes, scroll-driven animations and small IntersectionObserver hooks; lenis smooth scroll; a WebGL button |
| Icons | lucide-react plus inline brand marks |
| Hosting | Static export (out/) on GitHub Pages, custom domain move.aossie.org |
- The project has a logo (
public/brand/icons/MoveYourBody_logo.svg). - The project has a favicon (
public/brand/icons/favicon.ico) and app icons. - The web frontend:
- Has proper title and metadata (localized per language).
- Has proper Open Graph metadata (
public/brand/og-image.jpg), to ensure that it is shown well when shared in social media. - Has a footer and header with AOSSIE logos and social handles.
- Uses React Server Components by default, introducing Client Components (
"use client") only when interactivity or client hooks are required. - Is deployed to GitHub Pages via a GitHub Workflow (
.github/workflows/nextjs.yml). - Has automated CI build and lint validation (
.github/workflows/ci.yml). - Has automated unit and component test suite with Vitest and React Testing Library (
npm test). - Has CodeRabbit automated AI code review (
.coderabbit.yml). - Has open-source legal compliance (
DCO.md,COPYRIGHT.md,MAINTAINERS.md). - Supports light and dark themes, English and Hindi, and reduced-motion preferences.
- Award-style landing page: pointer-parallax hero with a liquid-metal WebGL download button, a scroll-lit manifesto, a bento grid of interactive feature demos (build a session, simulate voice commands, rate a workout, toggle injuries), a sticky phone that walks through the recommendation pipeline, an orbiting privacy "vault", and an open-source section with the team and contributors.
- App screens built in code: the phone mockups recreate the app's UI in its own palette, so they stay crisp, themeable and translatable at any size.
- Performance first: only compositor-friendly animations, off-screen work paused, no animation libraries, pre-compressed WebP/JPEG assets, and a tiny favicon.
- Accessible: semantic landmarks, skip link, keyboard-operable demos,
aria-pressed/aria-livestate, and full content with reduced motion or without JavaScript. - Robust i18n & l10n: subpath routing (
/en,/hi), Devanagari typography, and compile-time checks that every locale has every key. - SEO & AI readiness: per-locale canonical/alternate links, sitemap, JSON-LD (
MobileApplication), web manifest,llms.txt, OpenAPI and.well-knownmanifests.
βββ .github/workflows/ # CI (lint + build), GitHub Pages deployment, merge-conflict labels
βββ next.config.ts # Static export + next-intl plugin
βββ public/
β βββ CNAME # Custom domain for GitHub Pages (move.aossie.org)
β βββ .well-known/ # assetlinks.json, ai-plugin.json
β βββ api/, openapi.json # Machine-readable project metadata
β βββ llms.txt, robots.txt
β βββ brand/
β βββ Brand.md # Brand guidelines (colours, type, assets)
β βββ og-image.jpg # Social share card (1200Γ630)
β βββ assets/ # hero-model.webp
β βββ icons/ # Logos, favicon, app icons
βββ src/
βββ app/
β βββ page.tsx # Redirects / to the default locale
β βββ sitemap.ts, manifest.ts, api/info/route.ts
β βββ fonts/ # Self-hosted Lexend
β βββ [locale]/ # layout.tsx, page.tsx, globals.css, error.tsx, not-found.tsx
βββ components/
β βββ hero/ # Hero (parallax) + HeroStage
β βββ dock/ # Dock navbar, language switcher, theme toggle
β βββ sections/ # Manifesto, Features, HowItWorks, Privacy, OpenSource, DownloadCta, SiteFooter
β βββ mockups/ # AppScreens: the app's screens rebuilt in code
β βββ ui/ # Reveal, CountUp, SpotlightGroup, PhoneFrame, SectionHeading, LiquidMetalButton, styles.ts
β βββ providers/ # Theme and Lenis providers
βββ config/ # languages.ts, links.ts (site URL + all external links)
βββ i18n/ # routing, request, navigation, metadata, typed messages
βββ messages/ # en.json, hi.json
All visible text lives in src/messages/en.json and src/messages/hi.json. Keys are type-checked: a missing Hindi key or a typo in t("...") fails npm run build.
Headlines use a <hl> tag for the accent word:
"title": "A personal coach that fits in <hl>five minutes</hl>"t.rich("title", { hl: highlight })- Register it in
src/config/languages.ts:{ code: 'fr', name: 'French', localName: 'FranΓ§ais' },
- Copy
src/messages/en.jsontosrc/messages/fr.jsonand translate every value. - Add it to
messagesMapinsrc/i18n/messages.ts(typed asMessages, so the compiler checks it is complete) and add its Open Graph locale insrc/i18n/metadata.ts.
Use the locale-aware helpers from src/i18n/navigation.ts instead of next/link / next/navigation. In-page links are plain anchors (href="#features"); Lenis turns them into smooth scrolls that clear the fixed dock.
Colours are CSS variables in globals.css, defined for :root (light) and .dark, and exposed to Tailwind through @theme:
<div className="bg-surface text-foreground-primary border border-border-subtle">
<span className="text-highlight">Adapts to both themes</span>
</div>Never use inline dark: utilities; add a token instead. See public/brand/Brand.md for the palette.
Keyframes are --animate-* tokens in globals.css. Wrap content in <Reveal> for scroll-in entrances, use motion-safe: for loops, and pause anything off screen with useInView. Read the Motion & Performance rules in AGENTS.md before adding effects.
npm install
npm run devOpen http://localhost:3000. You are redirected to /en (English); /hi serves Hindi.
npm testnpm run buildThis writes the static site to ./out. Pushing to main builds and deploys it to GitHub Pages via .github/workflows/nextjs.yml, with NEXT_PUBLIC_SITE_URL=https://move.aossie.org.
public/CNAME contains move.aossie.org. Point a DNS CNAME record for move at aossie-org.github.io and set the custom domain under Settings β Pages of this repository.
public/.well-known/assetlinks.json declares org.aossie.move. Replace REPLACE_WITH_PLAY_APP_SIGNING_SHA256_FINGERPRINT with the SHA-256 fingerprint from Play Console (Setup β App integrity β App signing key certificate) to enable verified links.
We welcome contributions of all kinds! Please read CONTRIBUTING.md, then:
- Fork the repository and create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'feat: add some AmazingFeature'). - Ensure code quality:
npm run lintnpm testnpm run build
- Push your branch (
git push origin feature/AmazingFeature). - Open a Pull Request for review.
To contribute to the app itself, visit AOSSIE-Org/MoveYourBody.
Β© 2026 AOSSIE. See COPYRIGHT.md.