Booking system blueprint
Drop your bags, and prove they came back.
A two-sided booking system for luggage storage near transit hubs in Cagayan de Oro. Travelers book and pay, partner shops check bags in, and pickup is verified by matching a QR code to the tamper-seal number logged at drop-off.
V1 · Oct 2026
Three sides, one booking
The traveler, the partner shop and operations each get their own view.
| Surface | Who uses it | What it does | Access |
|---|---|---|---|
| Traveler site | A traveler | Explains the service, pricing and hubs, and runs the six-step booking | Open |
| Partner sign-up | A shop or business | Collects an application to become a storage point | Open |
| Partner counter | A partner shop | Today’s drop-offs and pickups, logging the seal, releasing bags, and the month’s payout | Password |
| Operations | Operations | Reviews partner applications and handles disputed bookings | Password |
The booking flow
Six steps from choosing a hub to holding a bag tag.
Swipe sideways to see the whole flowchart
Read this flow as a list
- Traveler opens the booking. Six steps: Hub, Bags and Time, Price, Protect, Pay, Tag
- 1. Choose a hub. Hubs show live partner counters
- Hub chosen?. A hub with a live partner
- 2. Bags and timing. 1 to 10 bags, a drop-off time and a pickup time
- Ask for a hub. Stays on step 1
- Pickup after drop-off?. Both times are required
- 3. Price worked out in the open. The lower of the hourly and daily totals
- Show the timing message. Stays on step 2
- 4. Optional protection. A flat add-on, ₱20 per booking
- 5. Name and contact. Who is picking the bag up
- Details valid?. Name 2+ characters, contact 5+
- Pay with PayMongo. A placeholder in this build: proceeds as if paid
- Ask for the details. Stays on step 5
- Create the booking. Saved to Supabase when keys are set, otherwise demo mode. Status: pending
- 6. Bag tag and QR. The booking ID as a QR code, seal number left blank
How the price is worked out
Per bag, the lower of an hourly total and a daily total.
| Rate | Value |
|---|---|
| Hourly | ₱25 per bag per hour |
| Daily flat | ₱129 per bag per day |
| Protection add-on | ₱20 flat per booking |
| Bags per booking | 1 to 10 |
Worked examples, from the same rule the booking uses
| Stay | Bags | Hourly total | Daily total | Charged per bag | Storage total |
|---|---|---|---|---|---|
| 2 hr | 1 | ₱50 | ₱129 | ₱50 | ₱50 |
| 5 hr | 1 | ₱125 | ₱129 | ₱125 | ₱125 |
| 6 hr | 1 | ₱150 | ₱129 | ₱129 | ₱129 |
| 12 hr | 1 | ₱300 | ₱129 | ₱129 | ₱129 |
| 30 hr | 1 | ₱750 | ₱258 | ₱258 | ₱258 |
| 5 hr | 2 | ₱125 | ₱129 | ₱125 | ₱250 |
| 26 hr | 3 | ₱650 | ₱258 | ₱258 | ₱774 |
A booking, start to finish
The four statuses a booking moves through.
Swipe sideways to see the whole flowchart
Read this flow as a list
- Booking created. Status: pending. The seal number is empty
- Partner receives the bag. Logs the seal number. Status: active
- Dispute raised?. Operations can flag any booking
- Operations flags the booking. Status: disputed
- Partner releases the bag. Checks the QR and the seal number first. Status: completed
- Marked resolved. Status: completed
- Booking completed. Counts toward the partner’s payout
Statuses
| Status | Meaning | Set when |
|---|---|---|
| pending | Booked, bag not handed over yet | The traveler finishes step 5 |
| active | The bag is in the partner’s custody, with a seal logged | The partner receives the bag |
| completed | The bag has been released | Pickup is confirmed, or a dispute is resolved |
| disputed | Flagged for operations to settle | Operations flags it |
Partners and payouts
How a shop joins, and how it is paid.
Swipe sideways to see the whole flowchart
Read this flow as a list
- A business applies. Name, type, address, contact, hours, space, notes
- Name and number given?. Both are required
- Application saved. Status: new
- Ask for the missing detail. Nothing is sent
- Operations reviews it. Open applications are new or reviewing
- Approve?. Operations decides
- Pick a hub and a revenue share. A percentage from 0 to 100
- Application marked rejected. Status: rejected
- Partner goes live. Added as an active partner. Application marked approved
What is stored
Three tables hold everything.
| Table | Holds |
|---|---|
| bookings | Booking ID, traveler name, contact, hub, number of bags, drop-off time, pickup time, price, protection add-on, seal number, status, partner |
| partners | Business name, address, contact number, hub, revenue share percentage, active |
| partner_leads | Business name, type, address, contact person, contact number, opening hours, storage space, notes, status, created at |
What is built and what is a placeholder
Plain about where the demo ends.
| Part | Status |
|---|---|
| Six-step booking and pricing | Built, and runs in the browser |
| Bag tag with QR code | Built. The booking ID is the QR code |
| Saving bookings and partners | Built for Supabase. With no keys set, it runs in demo mode and nothing is saved |
| Partner counter and operations views | Built, each behind a password gate |
| Payment with PayMongo | Placeholder. The booking proceeds as if paid |
| Protection policy | Placeholder. The fee is added, and issuing a policy is not wired up yet |
Want something like this?
Tell me about the process you want off your plate. The brief takes about three minutes, and the project is priced before I start.
Start a BriefBagDrop CDO is a concept, shown with made-up data. Real records and anything confidential are left out.