Fitsbug — Fitness Marketplace Platform
Full payment lifecycle: ready → success → cancel → refund
Objective
Give independent personal trainers one place to manage bookings, clients, and payments instead of juggling manual scheduling and separate payment tools.
The Problem
Trainers needed reservation management, session history, and real payment processing — including cancellations and refunds — without an existing marketplace platform built for that workflow.
Approach
Designed the relational schema for members, bookings, and payments, then built the reservation flow (calendar, booking, session history) on top of 20+ Java servlets and 10+ MyBatis mappers. Integrated Toss Payments for the full payment lifecycle (ready → success → cancel → refund), and validated it through end-to-end manual testing across cancellation and refund edge cases.
Challenges
- Modeling booking and payment state transitions correctly — especially cancel/refund edge cases — without an ORM's built-in state machine to lean on.
- Keeping the calendar and booking UI in sync with backend state via AJAX without a frontend framework doing that work for me.
What I Learned
- Designing a payment lifecycle state machine from scratch against a real payment gateway, rather than trusting a library to handle the edge cases.
- Writing MyBatis mappers directly gave more visibility into the actual SQL being run than a heavier ORM would have.