Built on Y Build Go from prompt to a deployed app on your own domain — no server. Start free
BuildShipCompareThe LabAbout Start building →
ybuild / Scenarios

Inventory System for Bike Shops

A bike shop is really three businesses sharing one stockroom: a showroom of high-value bikes, a bin wall of thousands of tiny consumable parts, and a service department that quietly pulls from both. Most off-the-shelf POS tools force all of that into one flat product list, so a $5,000 e-bike and a 50-cent valve cap get counted the same way and the numbers drift by summer. This guide walks through the inventory system a shop actually needs, and how to stand it up as a running, hosted app on ybuild, served on your own domain.

The problem

What you’d build

Matrix product catalog with serialized bikes

A two-layer catalog: the model (Trek Marlin 7, 2026) is one product, and every size and color combination is its own variant with its own barcode, cost, price, count, and bin location. Complete bikes and e-bikes also become serialized units, one row per physical frame, so stock is never a vague model-level number. It ships live and hosted on ybuild from the first build.

Service work orders that consume stock

A repair intake and work-order screen where a mechanic opens a job against a customer bike, adds labor lines, and pulls parts. Every part added deducts from the same inventory the sales floor sells from, so the back of the shop and the front of the shop finally share one honest count.

Reorder and purchasing dashboard

A buying view that surfaces every variant below its reorder point, grouped by vendor and ranked by sell-through, plus any customer special orders. You draft purchase orders from it, receive shipments against those POs, and stock lands with correct cost and bin, all on your live ybuild app.

The data model

products
model_name, brand, category, model_year, msrp, vendor_sku, is_serialized
variants
product_id, size, color, upc_barcode, cost, retail_price, qty_on_hand, reorder_point, bin_location
serialized_units
variant_id, frame_serial, status, received_date, sold_date, customer_id, warranty_expires
work_orders
customer_id, unit_serial, status, intake_date, promised_date, labor_lines, parts_lines, total
purchase_orders
vendor, status, order_date, expected_date, po_lines(variant_id, qty_ordered, unit_cost, qty_received)

A day in the system

  1. Morning: a shipment from your distributor arrives. You scan each carton and receive it against the open purchase order, so stock lands in the right variants with the correct cost and bin location.
  2. Each complete bike in that shipment gets its frame serial scanned into a serialized unit and marked in_stock, tying that specific physical frame to its variant.
  3. A walk-in wants a Medium gravel bike in green. You check the variant matrix, see one in stock at bin R3, and reserve it so nobody else sells it out from under them.
  4. At checkout the sale deducts that variant, flips the serialized unit to sold, attaches it to the customer with a warranty-expiry date, and prompts you to register the frame serial for theft recovery.
  5. A regular drops off their bike for a tune-up. You open a work order against their unit serial, set a promised-ready date, and it lands in the service queue.
  6. The mechanic adds labor plus a new chain, two cables, and a tube. Each part deducts from stock as it is added to the job, so the count stays true whether a part sells over the counter or gets installed in back.
  7. End of day the reorder dashboard flags every variant below its reorder point, groups them by vendor, and drafts POs, including special-order lines for customers waiting on a size you do not stock.
  8. You cycle-count one bin, reconcile the physical count against the system, and any discrepancy logs against that variant so shrinkage becomes visible instead of a year-end surprise.

Where AI trips up

✓ Build first
  • The two-layer catalog: products to variants (per-variant count, cost, barcode, bin) plus serialized units for complete bikes. This is the spine everything else hangs on.
  • Point-of-sale deduction: scan a variant barcode or a frame serial, sell it, watch the count drop and the unit flip to sold and link to the customer.
  • The reorder view: every variant below its reorder point, grouped by vendor, ready to turn into a purchase order.
— Skip for now
  • A full accounting ledger. Export a CSV for your bookkeeper or QuickBooks instead of rebuilding a general ledger inside the app.
  • A customer-facing online storefront and web-store sync. v1 is the shop floor, not omnichannel; add online later once the counts are trustworthy.
  • Automated vendor catalog and EDI feeds. Start with manual PO entry and receiving; wire up an electronic distributor catalog once the core flow is solid.

FAQ

How do I handle one bike model that comes in five sizes and three colors?

Model it as a two-layer catalog. The model (Trek Marlin 7, 2026) is one product record, and each size-and-color combination is its own variant with its own barcode, cost, price, count, and bin. Stock always lives on the variant, never the model, so "three in stock" is always a specific size and color and you can never accidentally sell a Large you do not have.

Do I really need to track frame serial numbers?

For complete bikes and e-bikes, yes. The frame serial is what ties a specific unit to its buyer, its warranty window, and any theft claim. Model those bikes as serialized units, one row per physical frame with a status, and keep tubes, cables, and bolts as plain quantity. Registering the serial with a public registry such as Bike Index at the point of sale also helps recover it if it is ever stolen.

How do repair jobs keep from throwing off my counts?

Make the work order an inventory transaction. When a mechanic adds a chain or a tube to a job, that part deducts from the same stock the sales floor sells from. Labor is billed separately, but every physical part that leaves the shelf, whether sold over the counter or installed in back, comes out of one count.

Can it handle a special order for a customer who wants something I do not stock?

Yes. A special order is a purchase-order line tied to a customer. You order the specific variant from the vendor, and when it arrives it is received against the PO and flagged as spoken-for rather than free stock, so it does not get sold to a walk-in before your customer comes to pick it up.

How does this help with pre-season buying and seasonality?

Because every variant carries a reorder point and the system tracks real sell-through, the reorder dashboard shows what is moving and what is below threshold heading into spring. You place vendor POs from that view. The point is not to automate the buying decision, it is to make the shelf-versus-demand picture obvious so you are not guessing before your busiest months.

Sources

Build this for your business

Describe it, go live on your own domain in one pass — hosted, full-stack, no server. Free to start.

Start building free →
Related on ybuild
retail & local shopsSMB back-office Managed DatabaseManaged AuthCustom Domain Hosting CRUD AppDatabase SchemaFull-Stack App
Related scenarios
Build an Appointment App for Your SpaBuild a Booking App for a Dental ClinicBuild a Booking App for Your SalonBooking App for Tutors: Recurring Lessons, Prepaid Hours & No-Show ControlBookkeeping App for Small BusinessCRM for Law Firms
Build your own app
Free · no card
Start free →