beginner
shop-rentals
add-ons
inventory

Configuring Add-ons

Sell helmets, locks, child seats, delivery, and insurance alongside rentals — with bookable inventory limits, categories, and per-reservation snapshots

Levy Fleets TeamMay 7, 20266 min read

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:

CategoryUse forExample
safetyHelmets, knee pads, lightsBicycle helmet
accessoryLocks, baskets, child seatsU-Lock
serviceTune-up, delivery setupPre-rental tune-up
deliveryDelivery to addressDelivery (3 mi radius)
insuranceDamage protection plans$10 damage coverage
otherAnything elseTour 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:

  1. Safety first (helmets) — usually required
  2. Common accessories (locks, lights)
  3. Optional accessories (child seats)
  4. Services (delivery, tune-up)
  5. 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.