Add-ons are anything you sell alongside the rental — helmets, locks, child seats, delivery, insurance. They appear in the walk-in wizard and on the public booking page, get charged with the reservation, and show up as line items on receipts.
Configure them at Shop Rentals → Add-ons.
Categories
Every add-on belongs to one of six categories. The category drives display tone (color in the catalog) and sometimes UX behavior:
| Category | Use for | Example |
|---|---|---|
safety | Helmets, knee pads, lights | Bicycle helmet |
accessory | Locks, baskets, child seats | U-Lock |
service | Tune-up, delivery setup | Pre-rental tune-up |
delivery | Delivery to address | Delivery (3 mi radius) |
insurance | Damage protection plans | $10 damage coverage |
other | Anything else | Tour map |
Categories are display-only — they don't affect pricing or inventory math.
Bookable vs. unlimited
The most important decision per add-on: is it bookable?
- Bookable — you have a finite inventory. The system tracks usage across overlapping reservations and refuses to oversell.
- Not bookable — unlimited supply (services, insurance, digital items).
For a 10-helmet shop, mark Helmet as bookable with quantity_total = 10.
If five overlapping reservations have each booked 2 helmets, the next
reservation that asks for a helmet gets available: 0.
For services like Damage Insurance, leave bookable unchecked — you can sell as many as customers want.
Pricing semantics
Add-on prices are per-unit, fixed. There's no per-day pricing on add-ons today.
If you want a "$10/day insurance" add-on, the customer pays $10 once per reservation, not $10 per rental day. You can work around this by either:
- (a) folding the daily charge into the base rental rate
- (b) creating multiple variants ("Insurance — 1 day," "Insurance — 7 days")
Most operators just charge a flat per-rental price; customers don't notice the difference.
Quantity per reservation
Customers can buy multiple of the same add-on (e.g., 2 helmets for a
couple). The walk-in wizard and public booking page expose +/- quantity
buttons. The total for that line is quantity × price_cents.
Snapshot behavior — important
When an add-on is added to a reservation, the system snapshots the
current name, category, and currency into the reservation_addons
row. This means:
- If you rename "Helmet" to "Bicycle Helmet" later, existing receipts still say "Helmet" — historical accuracy is preserved.
- If you raise the price from $5 to $7, existing reservations stay at $5; only new bookings see $7.
- If you delete (deactivate) an add-on, existing receipts still render.
This matches how pricing_snapshot works on the reservation itself.
Editing and deleting
- Edit any field at any time. Only new bookings see changes.
- Delete soft-deletes by setting
deleted_at. The add-on disappears from the catalog but historical receipts remain valid. - Deactivate (uncheck Active) hides the add-on from new bookings without deleting. Use this for seasonal items.
Sort order
Each add-on has a sort_order integer. Lower numbers appear first.
The walk-in wizard and public page render in this order. We recommend:
- Safety first (helmets) — usually required
- Common accessories (locks, lights)
- Optional accessories (child seats)
- Services (delivery, tune-up)
- Insurance (last — customers decide after seeing the total)
Image URLs
The image_url field is shown on the public booking page (rendered
above the price). It's optional but helps conversion — customers who
can see the helmet are more likely to add one. Use a public HTTPS URL,
not a local file.
Bulk add-on operations
There's no bulk-edit UI today. To run a price change across multiple add-ons (e.g., 10% increase across the board), use the database editor with a SQL update, or edit them one at a time.
Common configurations
- Bike shop minimum — Helmet (bookable), U-Lock (bookable), Damage Insurance (unlimited)
- Family shop — add Child Seat (bookable, low qty)
- Tour shop — add Tour Map ($2, accessory) and Pre-rental Tune-up ($15, service)
- Delivery shop — add Delivery (variable price, delivery category) with bookable unchecked
Add-ons in checkout
For how add-ons appear at checkout (walk-in and public booking), inventory cap enforcement, and per-rider quantity limits, see Selling add-ons at checkout.
Running a fleet on this hardware?
Levy Fleets runs scooters, e-bikes, mopeds and golf carts on the IoT hardware you already have, with integration pages for 29 vendors including Segway, Okai, Omni, Queclink, Invers and Comodule. Keyless unlock, geofencing, rider payments and rider support are included, and the Managed plan is a share of revenue with no per-vehicle software fee.