Almost every taxi configuration screen lives in the Ops Console (<your-slug>-admin.bettersuite.io), not the owner dashboard. The owner dashboard's onboarding wizard does collect your Operation Area — the list of cities you plan to run in, capped by your plan's locations limit — but everything below is set up in the Flutter ops console.
If you haven't picked your cities yet, do that first in Owner Dashboard → Onboarding → Operation Area. Then come back here.
What you're actually configuring
| Concept | Where it lives in the Ops Console | What it is |
|---|---|---|
| Service class | Taxi → Management → Pricing | A bookable tier (Economy, Premium, XL). Carries pricing parameters and driver/vehicle eligibility rules. |
| Vehicle catalog | Taxi → Management → Vehicles | The makes, models, and colors drivers can pick from. Distinct from individual vehicles registered to drivers. |
| Pricing overrides | Taxi → Management → Pricing → Overridden Zones | Zone-level flat fares, group flat fares, and zone surcharges that layer on top of a service class. |
| Dispatch rules | Settings → Dispatch | How driver offers are sent (broadcast vs. sequential) and how candidates are scored. |
| Regions and zones | Management Common → Regions | Geographic regions and their zones, including geofences. Used by pricing overrides and dispatch. |
| Map provider | Settings → Map | Preferred map provider and defaults for the dispatcher map. |
The Drivers section is its own surface — see Onboard Drivers.
Step 1: Create your service classes
Open Taxi → Management → Pricing. The List tab shows your existing service classes; click New pricing to create one.
The form (PricingDetailsScreen) is divided into four sections.
Basic info
| Field | Notes |
|---|---|
| Image | Optional; shown to passengers when picking a tier. |
| Name | e.g. "Economy". |
| Code | A short uppercase identifier — the hint suggests STANDARD, PREMIUM. |
| Description | Short blurb shown in the app. |
| Position | Sort order in the picker. |
| Max person capacity | Integer seats. |
| Active | Toggle to hide a class without deleting it. |
Pricing
The economics are pricing-mode-aware:
- Pricing Mode —
FIXED(predetermined fee, no driver submission) orMETERED(driver submits the final fee at end of ride). Source:backend/crates/taxi/domain/src/services/pricing_mode.rs. - Fee Policy and Payment Timing are dropdowns over the
Enum$FeePolicy/Enum$PaymentTimingenums. - Absolute Min/Max Fee are in minor units (cents) — the form labels them
minor. - Lower / Upper / Auth Percentage are in basis points (
bp) — 10000 = 100%. - Stopover Per Minute Rate in minor units.
- Can Do Delivery toggle.
Settings
- Search Radius — meters; default search radius when this class is dispatched.
- Fee Confirmation Timeout and Metered Fee Timeout — seconds.
- Platform Commission — bp (10000 = 100%).
- Platform Commission Flat — minor units, applied on top of the percentage.
Eligibility
This section controls which drivers can take rides for this service class. There are two modes (backend/crates/taxi/domain/src/services/eligibility_mode.rs):
- Dynamic — drivers automatically qualify if they meet the criteria below.
- Manual — only drivers explicitly added to this class's roster qualify. INCLUDE / EXCLUDE overrides in
taxi.driver_service_classlayer on top either way.
In Dynamic mode, the editor exposes:
- Vehicle requirements — max vehicle age (years), allowed body types, allowed size classes, allowed fuel types, minimum seats, minimum doors. Leave any field blank to skip that requirement.
- Driver KPIs & profile — minimum rating (e.g. 4.85), minimum completed rides, minimum acceptance rate (30d), maximum cancellation rate (30d), minimum driver tier, and an optional required-gender filter. The UI itself flags the gender filter as "Use sparingly — only for legally permitted gender-restricted services."
- Customer & VIP gates — minimum customer tier (Unverified / Basic / Verified / Premium) the passenger must hold, and an "Only VIP-eligible drivers" toggle.
- Compliance — require unexpired license/insurance/registration, require approved driver photo, require passed background check, and a multi-select of Required certifications that points at the catalog you manage in
Management Common → KYC → Certifications.
Step 2: Curate the vehicle catalog
Taxi → Management → Vehicles is a landing page with three sub-screens: Vehicle Makes, Vehicle Models, and Vehicle Colors (VehicleLandingScreen).
Each list mixes two row types:
- Global rows seeded by the platform — every tenant sees them. You can't edit a global row, but the row's overflow menu (
...) lets you Hide for my tenant so it stops showing up to drivers picking a vehicle. Hidden rows can be brought back via Unhide. - Yours rows — makes / models / colors you've added for your tenant. These are editable and deletable.
Add a custom make from Vehicle Makes → Add. Models live under their make; colors are flat.
This catalog is what drivers (and the "Create Driver" form in the next step) pick from when registering a vehicle. It does not track individual vehicles or vehicle approval — that happens implicitly when a driver is approved (see Onboard Drivers).
Step 3: Define pricing overrides (optional)
Back on Taxi → Management → Pricing, the Overridden Zones tab lets you layer zone-specific fares on top of a service class. The sub-tabs are:
- Zone Flat Fares — a fixed price for trips that match a (origin zone, destination zone, service class) combination.
- Group Flat Fares — flat fares for groups of zones.
- Zone Surcharges — extra fees applied when an origin or destination zone matches.
Zones themselves come from Management Common → Regions, where each region carries a polygon geofence drawn on a map (RegionDetailsScreen uses a GeofenceFormField). You add regions before you can reference them in a flat fare.
Step 4: Configure dispatch
Open Settings → Dispatch. The screen (SettingsDispatchScreen) writes a single tenant-wide dispatch config.
Dispatch Strategy
- Broadcast — notify all eligible drivers at once.
- Sequential — notify drivers one by one.
(Enum$DispatchStrategy.BROADCAST / SEQUENTIAL.)
Common Options
| Field | Unit |
|---|---|
| Request Expiry Time | seconds |
| Search Area | meters (max search radius) |
Broadcast Options (when Broadcast is selected)
| Field | Unit |
|---|---|
| Wave Size | drivers per wave |
| Wave Interval | seconds between waves |
| Max Waves | total waves |
| Broadcast Radius Increment | meters added per wave |
Sequential Options (when Sequential is selected)
| Field | Unit |
|---|---|
| Per Driver Timeout | seconds |
| Max Drivers to Test | drivers |
| Max Retries Per Driver | times |
Driver Scoring
Sliders 0–100 for Distance Weight, Driver Rating Weight, Idle Time Weight, Cancel Rate Weight, plus a numeric Threshold and Top N drivers to keep. The page renders an Impact Breakdown widget below the sliders so you can see how a candidate driver gets scored before you save.
Tier-aware policy
A separate section for per-customer-tier overrides:
wait_time_grace_seconds_by_tier— JSON keyed by tier (unverified/basic/verified/premium); seconds the driver waits at pickup before billable charges start.no_show_radius_meters_by_tier— JSON keyed by tier; how close the driver must be to mark a no-show.- Auto-rebook minimum tier — dropdown over
Disabled/Basic/Verified/Premium. If a trip drops and the passenger is at or above this tier, the system automatically attempts to re-match.
Reset to default restores the platform defaults; Save changes writes the config.
Step 5: Set the map provider
Settings → Map picks the preferred map provider and defaults shown on the dispatcher live map. This is a per-tenant preference, not a per-class one.
What we don't have (so you don't go looking)
A few capabilities that the previous version of this article suggested exist, but don't:
- No "Live Map → Service Area" polygon editor in the ops console. Geofences are drawn per region in
Management Common → Regions, not as a single tenant-wide polygon. - No "Test mode vs. live mode" toggle. There's a per-tenant
is_demoflag that gates demo affordances in the driver/passenger apps, but it's set at tenant provisioning, not flipped from the operator UI. - No vehicle approval queue. Individual vehicles aren't approved separately — they're attached to a driver and reviewed as part of the driver's pending verification (see the next article).
- No "surge multiplier" field on service classes. The eligibility / pricing fields in
PricingDetailsScreendon't include a surge knob. Demand-shaping is done through pricing overrides and dispatch scoring.
Suggested order on day one
This is advisory — not enforced by the product:
- Set your operation cities (owner dashboard).
- Add at least one Region in
Management Common → Regionswith a geofence covering your service area. - Create at least one Service Class in Dynamic mode with sensible defaults.
- Save Dispatch settings (the defaults are reasonable for a small fleet — increase the search radius if drivers are sparse).
- Move on to driver onboarding.
What's next
- Onboard Drivers — invite, verify, and approve the people who'll drive for this fleet.
- Plans & Billing — your plan's
locationslimit caps how many cities you can register in Operation Area. - Dashboard Tour — the two-dashboard split, in case you're hunting for a setting you remember seeing elsewhere.