Active Rentals
—
Online Bookings Pending
—
Awaiting vehicle assignment
Failed / Unpaid
—
Upcoming Returns (7 days)
—
⏰ Overdue Returns
—
Past end date — action needed
Today's Pickups
—
Compliance Alerts
—
Expiring within alert window
Open Toll Items
—
Vehicles Under Repair
—
Recent Activity
Loading…
⚠️ Alerts
Loading…
This Week
Revenue
—
New Customers
—
Returned
—
Fleet Active
—
Total Fleet
-
Available
-
Rented
-
Maintenance
-
Retired
-
Fleet
Loading fleet...
Total Customers
-
Active
-
Inactive
-
Blacklisted
-
Customers
Loading customers...
📋 Reservations
All rental reservations — search, filter, and manage from here.
Total
-
Active
-
Open
-
Closed
-
Cancelled
-
Loading…
All system settings in one place. Changes apply immediately after saving.
Company
Billing & Payments
Fuel
Fleet Defaults
Notifications
Fees & Charges
Rental Defaults
Global defaults for vehicle classes. Use "Sync to all classes" to push bonds & overage rates to existing classes.
Bonds & Deposits
Compliance Alerts
Days before expiry to raise an alert. Warning = orange alert, Critical = red alert + WhatsApp notification.
Young Driver Bond (21-24)
Flat bond for drivers under "Young threshold". Leave 0 to use multiplier instead.
Drivers younger than this get the young bond. e.g. 25 means 21-24 inclusive.
Used only when fixed amount is 0. e.g. 150 = 1.5× class bond.
Online Booking — Rental Types
Control which rental types appear on the public booking page. Use this to launch one type at a time without touching any other settings.
💡 If only one type is enabled, customers skip the type-selection step entirely and go straight to vehicle selection.
Bond Bank Transfer Details
Bank details shown to customers paying their bond by bank transfer on the booking page.
API Integrations Admin only
These override the .env file. Leave blank to use the server's .env value. Sensitive keys show only the last 4 characters.
Email
💳 Stripe — Rent Account
Used for ongoing rent payments + customer card setup
🔒 Stripe — Bond Account
Used for security deposits / bond charges (separate Stripe account)
Miles WhatsApp
Other APIs
GPS Tracking (Traccar)
🔑 Agent API Keys
Bearer tokens for fine-nominator, toll-nominator, rego agent, etc.| NAME | ROLE | KEY | CREATED | ACTIVE | ACTIONS |
|---|---|---|---|---|---|
| Loading… | |||||
Vehicle Classes
| Class | Features | Available Online | Recommended | Status | Actions | ||
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Pricing Rates
Loading…
Vehicle Types
| # | Name | Status | Actions |
|---|---|---|---|
| Loading… | |||
Additional Charges
| # | Name | Category | Charge Type | Amount | Applies To | Taxable | Default | Status | Actions | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
Email Templates
Select a template on the left to edit
Variables:
WhatsApp Templates (Miles)
Edit the automatic WhatsApp messages customers receive. Use
{{variable}} placeholders.
Clearing a body falls back to the built-in default for that language only.
Select a template on the left to edit
Variables:
Terms & Conditions
One version per rental type — customers sign this in the contract
Show:
| Rental Type | Version | Status | Updated | Actions |
|---|---|---|---|---|
| Loading… | ||||
Privacy Policy
Synced from m8tservices.com.au/privacy-policy/ — read-only
Apply to Rental Types
Last synced: —
Not yet synced — click "Sync from Website" to load content.
Fair Wear & Tear Policy
Synced from m8tservices.com.au/fair-wear-tear-policy/ — read-only
Apply to Rental Types
Last synced: —
Not yet synced — click "Sync from Website" to load content.
Contract PDF Template
Editable text blocks printed on the generated contract PDF
🔧 Maintenance Categories
Configure the category types available when logging maintenance jobs and vehicle expenses. Changes apply to all new entries — existing records are not affected.
ADD NEW CATEGORY
💡 Tip: The value is stored with maintenance records (keep it short, lowercase, no spaces). The label is what operators see in dropdowns.
Audit Log
| Time | Event Type | Severity | Actor | Summary | Reservation | Customer |
|---|---|---|---|---|---|---|
| Select filters and search to load entries | ||||||
Admin Tools
Development and testing utilities. Use with care in production.
▶ Manual Billing Run
Runs the weekly billing engine immediately — same logic as the Thursday cron.
Use any date to simulate a past or future billing cycle.
Tip for testing: create a reservation with a start date 3–4 weeks in the past, then click Run several times stepping through dates to process each week.
Tip for testing: create a reservation with a start date 3–4 weeks in the past, then click Run several times stepping through dates to process each week.
🚧 Maintenance Mode
When enabled, all visitors see a friendly “back shortly” page instead of the CRM.
Use this BEFORE deploying risky changes (billing, payments, Stripe) so customers don’t hit a half-broken state mid-action.
Always reachable while ON: /health (uptime monitors), /api/webhooks/* (Stripe must keep delivering), /api/auth/login, and /api/settings (so you can turn it back off).
Always reachable while ON: /health (uptime monitors), /api/webhooks/* (Stripe must keep delivering), /api/auth/login, and /api/settings (so you can turn it back off).
Loading current status…
🏦 PayTo (Long-term + RTB)
When enabled, a "Send PayTo Setup Link" button appears on long-term and rent-to-buy reservations.
The customer authorises a weekly direct debit via NPP — no card surcharge, no chargebacks.
Daily rentals continue to use card payments unchanged.
Loading current status…
🩺 System Health
Live status of every monitor that matters. Auto-refreshes every 30 seconds while this tab is open.
External monitors (UptimeRobot etc.) poll the same endpoints.
New Terms & Conditions Version
Invoices
Loading…
| Invoice # | Date | Customer | Period | Type | Amount | Status | Actions |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Pending
-
Charged
-
Waived
-
Disputed
-
Pending Total
-
🛣️ Tolls
| Notice # | Date | Vehicle | Road | Amount | Admin Fee | Total | Status | Actions | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
Pending
-
Nominated
-
Confirmed
-
Failed
-
Pending Total
-
📋 Fines
| Infringement # | Date | Vehicle | Location | Amount | Admin Fee | Total | Status | Actions | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
🎯 Fine Nominator
Run history — runs weekly on Mondays 7am Sydney via GitHub Actions
🔑 Refresh Okta cookies (≈ every 30 days, or after exit-code 99) click to expand
When to run this:
- Weekly run failed with exit code 99 ("Okta cookies expired")
- About once a month as preventive maintenance
- If you've changed your Okta password recently
Step 1 — Capture a fresh session on your Mac
cd '/Users/AIProject/Whatsapp Agent/M8T Whatsapp/m8t-crm/scripts/fine-nominate-maia' python3 capture_okta_cookies.py
A Chromium window opens. Sign in to Okta, complete the MFA push, wait for the dashboard tiles to load, then press Enter in the terminal.
Step 2 — Copy the JSON to clipboard
cat okta_state.json | tr -d '\n' | pbcopy
Step 3 — Update the GitHub secret
- Open GitHub → Secrets and variables → Actions
- Find
OKTA_SESSION_STATEand click the pencil ✏️ - In the Value field: Cmd+A (select all) → Delete (clear) → Cmd+V (paste)
- Click Update secret
Step 4 — Verify
Click ▶ Run Now above. The first line of the run log should show:
Secret lengths — OKTA_SESSION_STATE=20000+ MAIA_API_KEY=58 ANTHROPIC_API_KEY=108
If OKTA_SESSION_STATE shows 0 or under 1000 → paste didn't take, retry Step 3.
Other secrets (don't expire, no maintenance needed):
MAIA_API_KEY ·
ANTHROPIC_API_KEY
| Started | Status | Total fines | Nominated | Skipped | Triggered by | Duration |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Open
-
With Insurer
-
In Repair
-
Closed
-
Total
-
🚨 Claims
| Claim # | Incident Date | Vehicle | Customer | Fault | Location | Days Open | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Pink Slip Due
-
Rego Due
-
Renewed (15d)
-
Spend Rego (15d)
-
Spend CTP (15d)
-
Active Runs
-
🤖 Registration Cockpit
Within next 15 days
📋 Stage 1 — Pink Slip Due
Send to workshop for inspection. Required before rego renewal.
0 selected
| Plate | Vehicle | Odometer | Pink Slip Expiry | Workshop | Action | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
🚗 Stage 2 — Rego Due
Dispatch the GitHub Actions agent to renew with QBE/Service NSW.
0 selected
| Plate | Vehicle | Rego Expiry | CTP Expiry | State | Action | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
✅ Stage 3 — Recently Renewed
Renewals paid in the selected window.
| Paid Date | Plate | Vehicle | Category | Amount | Supplier | New Expiry |
|---|---|---|---|---|---|---|
| Loading… | ||||||
⚡ Active Agent Runs
Currently queued or running on GitHub Actions.
| Started | Plates | Status | Run URL |
|---|---|---|---|
| Loading… | |||
Total Devices
-
Online (≤10 min)
-
Stale (10 min – 2 h)
-
Offline (>2 h)
-
📍 GPS Tracking
Live positions from Traccar
🪫 Battery warning
Click to filter the table to only these vehicles.
| Plate | Vehicle | Last Fix | Speed | Ignition | Battery | Odo (manual) | GPS odo (fleet) | Trip (Traccar) | Status | Location | Map | Approval |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
📈 Finance
|
→
💰 Revenue Breakdown
🧾 Expense Breakdown
🚗 Per-Vehicle P&L
⚠️ Top Outstanding Customers
Stuck Customers
-
Total Past Due
-
💰 Collections — Chase Outreach
Two-step chase: customers needing rail setup, then customers with this week's payment failures.
🔧 Setup Needed 0
Customer has no PayTo mandate AND no saved card. Auto-billing won't work — they need to set up a rail.
| Customer | Reservation | Vehicle | Past Due | Days Out | Last Link Sent | Actions | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
🧾 Extra Charges Pending 0
One-off charges (toll, fine, damage, cleaning, late fee, adhoc) — includes post-close additions. Total: $0.00
| Customer | Reservation | Vehicle | Type | Description | Amount | Method | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
💳 Payment Follow-up 0
Rail exists but this week's payment failed. Send a one-shot Pay Now link.
| Customer | Reservation | Vehicle | Amount Owed | Method | Last Failure | Actions | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Total Jobs
-
Scheduled
-
In Progress
-
Completed
-
Cost This Month
-
🔧 Maintenance
| Vehicle | Type | Status | Workshop | Date | Labour | Parts | Total | Next Service | Actions | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
Total
-
Draft
-
Sent
-
Accepted
-
Expired
-
💬 Quotes
| Customer | Class | Type | Start | End | Weekly | Total | Valid Until | Status | Actions | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
Total Open
-
Payment Escalations
-
Residual Escalations
-
Minor Alerts
-
Compliance Alerts
-
🚨 Maia Alerts
Loading alerts...
🟡 Minor Payment Alerts
Loading minor alerts...
✅ Compliance Alerts
Loading compliance alerts...
to
Select a report and click Run.
👤 Team & Permissions
Loading users...