Example: Fitness Studio Booking
A complete worked example showing Arnold in action on a real project - FitBook Studio, a fitness class booking platform.
The project
FitBook Studio lets users browse fitness classes, book spots, make payments, and sync with their calendar. Five features:
- Auth & Accounts - Registration, login, sessions, profiles
- Class Booking - Browse classes, book spots, capacity limits
- Payments - Stripe integration, refunds, platform fees
- Calendar Sync - Google Calendar integration
- User Accounts - Profiles, email verification, photo upload
Step 1: Initialize
> /arnold:init
🦕 What are you building?
> A fitness class booking platform. Users browse classes,
> book spots, pay with Stripe, and sync to Google Calendar.
Scaffolding docs/ ...
📁 docs/
├── 📁 auth/
├── 📁 booking/
├── 📁 payments/
├── 📁 calendar-sync/
├── 📁 accounts/
├── decisions/
└── specification.md
✓ 5 features scaffolded, 12 doc files created
Step 2: Record decisions
> /arnold:decide
Recording decision...
DEC-001: Stripe for payments (accepted, 2026-03-15)
DEC-002: No overbooking in v1 (accepted, 2026-03-16)
DEC-003: Google Calendar only, no Apple (pending)
✓ 3 decisions recorded in docs/decisions/
Step 3: Build, then check
After building the auth and booking features, run a check:
> /arnold:check
🦕 ARNOLD CHECK REPORT
━━━━━━━━━━━━━━━━━━━━━━
Scanned: 4 feature docs, 23 source files
🔴 DRIFT DETECTED
━━━━━━━━━━━━━━━━━
1. auth: Session timeout
📄 Docs say: "Sessions expire after 24 hours"
💻 Code has: SESSION_TTL = 72 * 60 * 60
→ Docs say 24hr, code says 72hr. Which is right?
2. booking: Capacity limit
📄 Docs say: "Maximum 20 spots per class"
💻 Code has: MAX_CAPACITY = 30
→ Docs say 20, code says 30.
🟢 ALIGNED
━━━━━━━━━━
✓ auth: Rate limit is 5 attempts per minute
✓ payments: Stripe is the payment processor
✓ booking: Users cannot book the same class twice
Run /arnold:resolve to fix drift items.
Step 4: Resolve drift
The team decided to increase capacity to 30, so we update the docs. But the session timeout was accidental - code should match docs:
💡 Tip
Not every drift item is a bug. Sometimes the code is right and the docs need updating. Arnold lets you decide.
The result
After resolving, the project status shows:
- 🟢 Auth - Aligned (session timeout fixed in code)
- 🟢 Booking - Aligned (docs updated to say 30 spots)
- 🟢 Payments - Aligned
- 🔵 Calendar Sync - Planned (not yet built)
- 🟢 Accounts - Aligned
Docs and code are in sync. The project is healthy. When someone changes something, /arnold:check will catch it.