A complete fitness gamification platform built live during our webinar — demonstrating AI-assisted development with Oracle’s JSON Duality Views.
Webinar Recording: LinkedIn Event
This repository contains FitTrack, a gamified fitness platform built entirely during today’s live vibe coding session. Users connect fitness trackers, earn points from physical activities, then spend points on sweepstakes tickets for prize drawings.
| Metric | Value |
|---|---|
| Lines of Python | ~3,150 |
| Repositories | 12 complete |
| API Routes | Fully implemented |
| Build Time | One live session |
src/fittrack/
├── api/
│ ├── routes/ # FastAPI endpoint modules
│ └── schemas/ # Pydantic request/response models
├── services/ # Business logic layer
├── repositories/ # Data access (Oracle + JSON Duality Views)
├── models/ # Domain models and enums
├── workers/ # Background job processors (Redis Queue)
└── core/ # Config, database, exceptions
The live session naturally evolved toward clean separation:
| File | Purpose |
|---|---|
001_initial_schema.sql |
Relational tables with integrity constraints |
002_duality_views.sql |
JSON Duality Views for document-style API |
This mirrors production deployment patterns: schema first, then the document API layer.
The core innovation demonstrated is Oracle’s JSON Duality Views — storing data relationally while accessing it as documents:
# Traditional relational INSERT
cursor.execute("""
INSERT INTO users (id, email, password_hash, role, status)
VALUES (:id, :email, :hash, :role, :status)
""", params)
# With JSON Duality View - same table, document API
cursor.execute("""
INSERT INTO users_dv (data) VALUES (:1)
""", [json.dumps({
"_id": user_id,
"email": email,
"passwordHash": password_hash,
"role": "user",
"status": "pending"
})])
Why this matters:
# First-time setup
make setup
# Start all services (Oracle, Redis, API, Workers)
make dev
# Run tests
make test
# Seed sample data
make db-seed
| Endpoint | Purpose |
|---|---|
GET /api/v1/health |
Liveness/readiness checks |
POST /api/v1/users |
User registration |
GET /api/v1/users/{id} |
User profile |
POST /api/v1/activities |
Log fitness activity |
GET /api/v1/drawings |
List sweepstakes |
POST /api/v1/tickets |
Purchase entry |
What it does: Users connect fitness trackers, earn points from physical activity, spend points on sweepstakes tickets, compete on tiered leaderboards.
Competition Tiers: 31 brackets based on demographics (age, sex, fitness level) ensure fair competition:
M-18-29-BEG (Male, 18-29, Beginner)F-40-49-ADV (Female, 40-49, Advanced)OPEN (All users)Point System:
Sweepstakes: Daily, weekly, monthly, annual drawings with CSPRNG selection and full audit trails.
Building a complete backend with 12 repositories, full API surface, and database migrations in a single live session demonstrates the power of vibe coding with good context files.
No more choosing between document flexibility and relational integrity. No more syncing document stores with relational databases. The database handles both views natively.
The CLAUDE.md file made AI-assisted development dramatically more effective. Good context = good output.
The decision to split migrations (tables → duality views) wasn’t planned — it emerged during the session. That’s a sign of good architecture: the right structure becomes obvious as you build.
Reach out on LinkedIn or open an issue in this repo.
Built live with Oracle 26ai, FastAPI, and vibe coding.