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 · terminal
> /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 · terminal
> /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 · terminal
> /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.

ACCESS DENIED
"Ah ah ah, you didn't
say the magic word."
Ah ah ah! You didn't say the magic word.
Ah ah ah! You didn't say the magic word.
Ah ah ah! You didn't say the magic word.
NEDRY_PROTOCOL // ACTIVE
click anywhere or press esc to dismiss