Admin Panel
Manage bookings, equipment, and users
Booking Status Distribution
Recent Bookings
Quick Actions
Bookings
Track when equipment goes out, stays out, and comes back in
Filters
Select a day
Click a date to see pickups and returns.
| Booking | Customer | Equipment | Dates | Status | Revenue | Actions |
|---|
Equipment Management
Browse, filter, and manage your rental fleet
Maintenance Schedule
Upcoming preventive maintenance across your fleet
Select a day
Click a date to see PM tasks due that day.
Meter & rental PM
Hours, miles, and rental-count tasks without a fixed calendar date — sorted by urgency.
Loading…
User Management
| User | Role | Verification | Member Since | Actions |
|---|
Loading analytics…
Business Expenses
Track shop supplies, utilities, and other costs not tied to a specific machine. Upload receipts from your phone.
This month
$0.00
Year to date
$0.00
All recorded
$0.00
Expense history
Tap an expense to view its receipt
Loading…
Checkout Steps
Drag cards or use arrows to reorder the checkout lifecycle and set where each step lands.
Current Flow Preview
Complete Real Checkout Lifecycle
This is the actual end-to-end flow based on current code. Use this as the source of truth when configuring steps or debugging.
- • Identity Verification (Veriff) — Customer must complete and get approved status before they can submit any booking. Checked in modal via
check-verification-status. - • Date + quantity selection on equipment page with live availability check (DateRangePicker →
/api/check-availabilityor Edge Function). - • "Book Now" opens BookingModal.
- Auth Gate — Login or create account.
- Verify Identity — If not already verified → forced into VerifyIdentity island.
- Contract Review Gate (very important):
- — Must open the Rental Contract PDF
- — Minimum 12-second enforced reading timer
- — Check "I have read and agree"
- — Enter signer name + signature date
- Submit → calls
submit-booking-approvalEdge Function.
- • Re-validates contract signature + identity verification (hard gate)
- • Double-checks stock/availability
- • Calculates requires_deposit = (days until start > 2)
- Creates booking with status:
- →
awaiting_deposit(most common — 25% auth hold) - →
pending_approval(last-minute bookings, no deposit) - • If deposit required → immediately generates Stripe deposit checkout link via
create-final-payment(with override) and returns the URL.
next_step: 'pay_deposit' + URL → immediate redirect to Stripe.- 1. Customer completes Stripe deposit authorization (manual capture, 25%)
- 2. Stripe redirects back → various confirm endpoints
- 3. stripe-webhook receives
checkout.session.completed(payment_type=deposit) - 4. Updates booking:
deposit_paid=true, status changes, stores payment intent - 5. EMAIL SENT:
booking_confirmationviasend-emailEdge Function (only on successful payment) - 6. Customer lands back on Dashboard
/dashboard showing "Awaiting Staff Review".- • No automatic payment link
- • Recommended: Send
booking_receivedemail here (we added support for this) - • Staff must manually approve in Admin panel
- Approve (approve.ts):
- — Updates status
- — If deposit still needed → generates payment link
- — EMAIL SENT: booking decision email to customer (newly wired)
- Reject:
- — Status →
cancelled - — EMAIL SENT: rejection notification
- — Status →
/api/bookings/create-*-payment → Edge Function → returns Stripe URLcheckoutRedirects (depositSuccess, extensionSuccess, etc.)send-email Edge Function (Resend). Failures are logged but never block the booking flow.
Current email types used: booking_confirmation, booking_received, booking_status_update, refund_issued.
Visual Timeline (from Database)
Real Payment Stages (Accurate)
| Stage | Amount | Timing | Stripe Mode | Email Trigger | Key Behavior |
|---|---|---|---|---|---|
| 1. Deposit Authorization | 25% of total (auth hold) | Immediately after booking submission (if >48h away) | Manual Capture | booking_confirmation | Stripe Checkout redirect. Held until return or cancelled. |
| 2. Final / Remaining Payment | Remaining 75% (or full if no deposit) | Before or at pickup (via Dashboard or Admin) | Capture or new charge | booking_confirmation / status update | Often triggered by staff "Initiate Pickup Payment" |
| 3. Extension Payment | Additional days | While rental is active | Manual Capture | Usually none | Separate Stripe session. Updates booking end_date + total. |
| 4. Return / Extras | Damage, late fees, fuel, etc. | After equipment returned | Off-session charge or refund | refund_issued (if applicable) | Can auto-charge saved card or issue partial refund of deposit. |
| 5. Refunds | Partial or full | Staff initiated in Admin | Refund | refund_issued | Tracked in booking_refunds table + invoice adjustment. |
Checkout Redirects
Define where Stripe and checkout events send the user.
Rental Contract PDF
Upload the legal rental contract. Customers must open and acknowledge this PDF before booking.
Email Activity Log
All automated and custom emails sent through the platform.
Compose Email
Leave blank to use the selected customer above.
Inbox
Messages sent to you by customers from their dashboard.