Onus is a fitness accountability platform that puts real financial stakes behind your gym commitment. You know you should go. You just don't. We fix that.
- Commit — Set a SMART goal with AI. Sign the contract. The stakes are set.
- Show up — Check in after each session. Geolocation confirms you were there.
- Or pay — Miss a session? A penalty hits your card. Show up? Rewards accumulate.
No honor system. No excuses. Just proof.
| Feature | Description |
|---|---|
| AI Goal Builder | Smart goal creation based on your schedule, history, and motivation |
| Geolocation Check-in | Verify you were actually at the gym — no manual logging |
| Tiered Penalties | Starter ($7), Committed ($15), Dedicated ($30) per miss |
| Grace Sessions | Buffer for emergencies — resets monthly by tier |
| Rewards Program | Earn credits toward gym memberships, supplements, gear, gift cards |
| Partner Ecosystem | Planet Fitness, Equinox, MyProtein, Whoop, Garmin, Nike, and more |
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS, shadcn/ui |
| Database & Auth | Supabase |
| AI | Anthropic Claude (mocked) |
| Animations | Framer Motion |
- Node.js 20 or later
# Clone and install
git clone https://github.com/your-org/onus.git
cd onus
npm install
# Configure environment
cp .env.example .env.localAdd your keys to .env.local:
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Yes | Supabase anon key |
SUPABASE_SERVICE_ROLE_KEY |
For account deletion | Service role key |
ANTHROPIC_API_KEY |
Optional | AI goal builder (mocked by default) |
npm run devOpen http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
src/
├── app/ # Routes
│ ├── page.tsx # Landing
│ ├── login/ # Auth
│ ├── how-it-works/ # Product explainer
│ ├── pricing/ # Tier comparison
│ ├── onboarding/ # 3-step signup flow
│ ├── dashboard/ # Main app
│ ├── history/ # Past weeks & penalties
│ ├── rewards/ # Earned rewards
│ └── profile/ # Account & payment methods
├── components/
│ ├── ui/ # shadcn components
│ ├── layout/ # Navbar, Sidebar
│ ├── landing/ # PartnerScrollSection
│ ├── onboarding/ # TierSelect, GoalBuilder, ContractSummary
│ └── dashboard/ # StatsRow, WeekView, CoachingCard
└── lib/
├── mock-data.ts # Mock data
├── types.ts # TypeScript interfaces
└── supabase/ # Client, server, admin
| Token | Hex | Usage |
|---|---|---|
| Background | #0e0e10 |
Primary |
| Surface | #131315 |
Cards, elevated |
| Card | #1a1a1d |
Content blocks |
| Accent | #c8f060 |
CTAs, highlights |
| Danger | #f07070 |
Penalties, missed |
| Text | #f0efe8 |
Primary |
| Muted | rgba(240,239,232,0.45) |
Secondary |
Open in VS Code or Cursor with Dev Containers for a pre-configured Node 20 environment. The .devcontainer config runs npm install on first create.
Onus — Fitness accountability with teeth.