Capability catalogue21 entries
Everything it does,and what each onehad to clear.
Grouped by the order a shop lives the day. 16 of the 21 below are reachable from a product screen today. The other 5 are real domain code with no screen in front of them yet, marked Next up and held out of every tier until there is one.
Build the Fleet
Every bike on the floor, serialized, described, and accounted for.
Serialized bike inventory
SoloOne record per physical bike, keyed on its serial number.
- The unit is the thing you rent
- Reservations name a specific serial number, not a "type" or a pool. The bike that goes out is the bike on the agreement.
- Serial numbers are unique per shop
- The same serial cannot be entered twice in one organization, so a re-keyed bike does not quietly become two bikes.
- Model and year on the record
- Model, year, and free-text notes live on the unit, so the bike that needs a fork recall is findable.
Serial number unique per organization
Faceted bike catalog
SoloLegal class, frame style, geometry, fit, size, and wheel size as independent axes.
- Six axes, not one dropdown
- Class 1/2/3, commuter/cruiser/mountain/cargo/folding/fat-tire, step-over or step-through, unisex/mens/womens, S/M/L, and wheel size are separate fields.
- Match the rider, not the label
- A 5’2″ guest asking for a step-through cruiser is a filter across three facets. A single "bike type" column cannot answer that.
- Legal class is a first-class field
- Class 3 bikes are restricted on paths in many jurisdictions. It is stored per unit, not inferred from the model name.
Class 1/2/3 · 6 frame styles · S/M/L
Unit status lifecycle
SoloAvailable, reserved, rented, in service, damaged, sold, or retired.
- Pull a bike without deleting it
- A bike with a bent rotor moves to in-service or damaged. Its rental history stays intact because the record never leaves.
- Sold and retired are states, not deletions
- Shops that also sell bikes keep the unit on the books after it leaves the rental pool.
- Indexed by shop and status
- The "what is available right now" question is an indexed read, not a scan of the whole fleet.
7 lifecycle states
Battery cycle tracking
FleetA cycle count per unit, so you retire packs on data instead of complaints.
- The pack is the expensive part
- Cycle count is tracked on the unit itself, which is the number that predicts a mid-ride bail-out.
- Rotate the fleet deliberately
- High-cycle units can be steered toward short hourly rentals and away from week-long resort bookings.
- Retire before the refund
- A pack replaced on schedule costs less than a stranded guest and a comped rental.
Cycle count per unit
Multi-location fleet
MultiEvery bike has a home store, and the whole fleet is visible from one place.
- One fleet, several storefronts
- Each unit carries the location it currently lives at, so a second shop is a filter rather than a second system.
- Availability per store
- Look at one storefront or all of them without maintaining a separate inventory list per site.
- Bikes can move
- A unit’s home location is a field that changes, not a permanent assignment made at purchase.
Price the Ride
Hourly, daily, weekly — quoted for the exact bike and the exact window.
Hourly, daily, and weekly quoting
SoloQuote a specific bike for a specific window across all three rate ladders.
- One window, one number
- Give a unit and a start/end time and get the price. The hourly, daily, and weekly rates all live on the same rate plan.
- Most specific plan wins
- Rates resolve by precedence: a plan pinned to the unit beats one for the size tier, which beats frame style, which beats legal class, which beats the shop default.
- Quoting changes nothing
- A quote is a read. Nothing is reserved, charged, or held until an agreement is created.
5-level rate precedence
Early return and late fees
SoloA prorated-refund or no-refund rule per plan, and an hourly late fee at check-in.
- Pick your early-return policy
- Each rate plan is either no-refund or prorated: a prorated plan refunds whole unused days when a guest brings a bike back early.
- Late fees are floored at zero
- An on-time or early return never produces a negative charge. The fee is a per-hour rate on the plan, rounded up on partial hours.
- The rule is set before the rental, not argued after it
- Because the policy lives on the rate plan, the number at check-in follows the terms the guest was quoted.
Per-unit rate overrides
FleetPin a price to one serial number and it beats every broader rule.
- Halo bikes price themselves
- The one cargo bike with the child seats can carry its own rate without inventing a new size tier or frame style to hold it.
- No rule duplication
- An override is a rate plan attached to a unit. Everything else in the fleet keeps using the shop-wide defaults.
- Top of the precedence ladder
- A unit-pinned plan is checked first, so an override is never silently beaten by a broader plan added later.
Rate plan editor
Next upBuild and edit the rate ladder from the dashboard.
- Seasonal rates without a deploy
- Shoulder-season and peak-season ladders become something a shop owner changes, not a configuration request.
- See the precedence you are creating
- The resolution order already exists in the pricing engine; the editor is what makes it legible before it surprises you in a quote.
Sign Them Out
Waiver signed and guardian co-signed before the wheels turn.
Digital liability waivers
SoloA versioned waiver signed to the renter’s record, not a clipboard in a drawer.
- The template version is on the signature
- Each waiver records which version of your terms was signed, so a later revision does not rewrite what a past guest agreed to.
- Signed to the renter, not the rental
- The waiver belongs to the client record and is referenced by the agreement, which is what makes a repeat guest fast.
- Signatures are stored, not embedded
- A signature is a reference into object storage rather than a blob in the row, so the record stays small and the image stays retrievable.
Versioned templates
Guardian co-sign gate
SoloMinors ride when the guardian has actually signed — checkout refuses until then.
- Three consent modes
- Adult, in-person guardian, and remote guardian. The mode is chosen when the waiver is created, not assumed from the renter’s age.
- A pending co-sign is a legal state, not an error
- The waiver saves unsigned while a remote guardian is still being chased. It is checkout, not signing, that blocks.
- Checkout is the enforcement point
- Either guardian mode without a guardian signature on file is refused at checkout, so the gate cannot be talked around at the counter.
- The guardian can switch to in-person
- A guardian who turns up in person converts a remote consent into an in-person one and signs there and then.
Checkout blocked until the co-sign lands
Deposit holds and damage waivers
Next upConfigure a deposit hold, a damage-waiver fee, or a partner policy per rental.
- Three protection shapes, one seam
- Deposit hold, damage waiver fee, and licensed insurance partner are configuration, not three different codebases.
- Damage settles against the hold first
- A damage charge captures from the held amount up to its limit and releases the remainder, falling back to a fresh charge only when there is no hold.
- Coverage terms travel with the plan
- What the plan actually covers is stored on the plan, so the answer at check-in is the answer the guest was sold.
Licensed insurance partner
Next upPush coverage to a licensed third party instead of holding the risk yourself.
- An integration, not a calculation
- Partner coverage is an external authorization and settlement call, which is why it sits behind a provider interface rather than inline pricing code.
- Swappable by plan
- A shop can run deposit holds on hourly rentals and partner coverage on week-long resort bookings.
Bring It Back
A check-in that settles late fees, damage, and where the bike actually is.
Reserve, check out, check in
SoloOne agreement per rental, moving reserved to active to completed.
- A checkpoint per side of the rental
- Checkout and check-in each write their own record, so "when did this bike actually leave" has an answer.
- Reservations hold a real bike
- An agreement names the unit, the renter, the rate plan, the protection plan, and the waiver. There is no reservation without all five.
- Double-booking is a database guarantee
- Overlapping agreements on the same unit are blocked in the database, not just in the form that submits them.
- Disputes are a status, not a deletion
- A contested rental moves to disputed and stays on the record with everything that led there.
6 agreement states
Damage charges at check-in
SoloRecord damage against the check-in, with a reason and the staff member who found it.
- Attached to a checkpoint
- A damage charge references the specific check-in it came out of, which is what makes it defensible three weeks later.
- Reason and staff member are required
- Every charge names what happened and who recorded it. An anonymous charge cannot be written.
- Settles against the protection plan
- The charge captures from the deposit hold where there is one and releases the rest, rather than being a separate untracked invoice.
Returns at any storefront
MultiCheck a bike in at a different shop and its home location follows it.
- The fleet stays honest
- Returning at store B updates the unit to store B, so tomorrow’s availability does not promise a bike that is across town.
- No transfer paperwork
- The move is a side effect of the check-in the staff member was doing anyway.
One-way rentals
MultiPick up at one storefront, drop off at another, on one agreement.
- Pickup and dropoff are separate fields
- The agreement records both, so a point-to-point ride along the coast is a normal rental rather than an exception.
- Rebalancing becomes visible
- Because one-way rentals are recorded as such, the shuttle run between storefronts is something you can see coming.
Mid-rental extensions
Next upA guest keeps the bike another day and pays for it without a second agreement.
- Extensions are their own record
- Each extension keeps the previous and new end times plus its own charge, so the rental’s history reads in order.
- Charged on the hourly rate
- The extension charge is the additional hours, rounded up, at the plan’s hourly rate.
Run the Shop
Several storefronts, the right staff access, and a trail behind every write.
Staff access control
SoloEvery rental route requires a real role on a real organization.
- Roles are enforced server-side
- Admin and contributor roles gate the rental endpoints themselves, not just which buttons the dashboard renders.
- One shop cannot read another
- Rental data is scoped per organization at the database level, which is what makes running two brands on one platform safe.
Audit trail on every write
FleetWho changed what, on which rental, with what role.
- Written on the way through
- Agreement creation, checkout, check-in, waiver signing, damage charges, and bike-unit edits each emit an audit record as they happen.
- Actor and role, not just a timestamp
- Each entry names the person and the role they were acting under, which is the part that matters in a damage dispute.
- Events for the things that should trigger work
- Checkout, check-in, and damage charges also publish domain events, so downstream automation has something to listen to.
Hotel and resort delivery
Next upDeliver to a guest’s hotel as a dispatched, scheduled visit.
- A delivery is a scheduled visit
- Drop-off and pickup become a real job with a window and an address, dispatched from the storefront that holds the bikes.
- The rental knows about the delivery
- The agreement carries a reference to the delivery visit, so a late van and a late rental are the same conversation.
- Runs on the same scheduling engine as service work
- Deliveries are not a parallel calendar; they use the field-service job and visit model the rest of the platform already schedules against.
NextWhich tier carries what
The matrix says which tier each of these lands on.
One row per capability above, one column per tier, and a mark where the tier carries it. The bottom tier carries the whole single-shop loop.