Products is SalesThumb's unified view of everything your shop sells. It sits in the left sidebar under Run the shop, above Inventory — deliberately, since Products is meant to be the higher-level "everything we sell" concept and Inventory is just one slice of it.
What it actually reads
Before Products existed, what a shop sold was split across four separate systems with no shared view: services (used on quotes and invoices), five kiosk "sales matrix" tables (one each for window tint, ceramic coating, PPF, residential flat glass, and commercial flat glass), film product SKUs, and physical inventory items. The Products page doesn't replace any of those tables — it's a read layer that flattens all eight into one searchable list, tagged by source:
- Service — quote/invoice line items
- Sales Matrix · Window Tint, Ceramic, PPF, Flat Glass (Home), Flat Glass (Business) — the five kiosk pricing tables
- Film Product — roll SKUs
- Inventory Item — physical stock
Each row's Edit button routes to that row's original, full-featured editor for the advanced fields specific to its source — unless the row is already linked to a shared canonical product record, in which case Edit opens a unified dialog that updates every linked surface at once instead.
Searching and filtering
The toolbar has a search box (matches on name or brand), an Active only checkbox, and a row of colored chips — one per source — each showing a live count. Click a chip to toggle that source in or out of the table. You can't filter every source off at once; unchecking the last remaining chip just resets the filter back to showing everything, so you're never left staring at an empty table by accident.
Adding one product to multiple surfaces at once
Click + New product and you get a single form instead of having to pick which system to add it to first. Enter the shared details once — name, brand, base price, active/inactive — then tick every surface this item should exist on. Ticking a surface (say, Kiosk · Window Tint and Inventory at the same time) reveals just that surface's own extra fields, like tier and VLT% for a tint film, or unit and category for an inventory item. Submitting creates the record on every ticked surface in a single transaction, through one mutation — there's no separate "which silo do you want" chooser followed by a separate form per silo.
Importing a price menu from CSV
Click Import CSV to bulk-load a whole menu at once. Paste CSV text directly into the box or upload a .csv file; the first row must be your column headers. A Download template button gives you a ready-made example with the right headers and sample rows spanning tint, PPF, ceramic, a service, an inventory item, and a film roll, so you can see the expected shape before building your own file.
The columns are: name, brand, surface, base_price, tier, coverage, vlt, sale_price, category, duration_min, unit, film_type, and active. Not every column applies to every row — which ones matter depends on surface, which must be one of: kiosk_tint, kiosk_ceramic, kiosk_ppf, kiosk_flat_home, kiosk_flat_biz, service, inventory, or film.
As you paste or upload, a live preview table parses every row and marks it Ready or flags the specific problem — "Missing name," "Unknown surface," "Bad service category," or "Bad unit," for example. Most fields that don't match an expected value (like an unrecognized tier or film type) just fall back to a sensible default quietly rather than blocking the row — only a missing name, a missing or unrecognized surface, an invalid service category, an invalid inventory category, or an invalid inventory unit actually stop a row from importing.
Hitting Import runs the ready rows through the browser one at a time, through the exact same creation mutation the manual "+ New product" form uses — the same spine, linking, and cross-surface propagation, so there's no separate import code path that could drift from the form. A progress line tracks it live ("Importing… 12/40"), and a closing toast reports how many succeeded and how many failed. If everything succeeds, the dialog clears itself and closes; if anything failed, it stays open with your pasted text intact so you can fix the flagged rows and re-run just those.
A few things worth knowing
- No owner/admin gate. Unlike granting an Award or approving Time Off, viewing, adding, and importing products isn't restricted by role — any signed-in team member for the shop can do all of it.
- Products can't be hidden from the sidebar. Like Team Hub and Invoices, Products doesn't have a visibility toggle on the Customize sidebar screen — it's always in the rail for everyone whose role includes it.
- This is a read layer, not a migration. The four underlying source tables still exist and still work exactly as they did before Products shipped; this page just gives you one place to see and search across all of them.
Need help? Use the in-app help widget or email info@roffik.com.
Frequently asked questions
Q: Does adding a product here delete or replace my existing services and inventory items?
A: No. Products reads from the same underlying tables your shop already used — services, the kiosk sales-matrix tables, film products, and inventory items. Nothing is migrated or deleted; Products just adds one combined view and one combined creation flow on top.
Q: What happens if I only tick one surface when creating a new product?
A: It's created on just that surface, exactly as if you'd added it the old way through that surface's own page — ticking multiple surfaces is optional, not required.
Q: Can Front Desk or Technician roles use the Products page?
A: Yes. There's no role restriction on viewing, creating, editing, or importing products — every signed-in team member for the shop has full access.
Q: My CSV row has an unrecognized value in the tier or film_type column — will the whole row fail?
A: No. Most non-critical fields (tier, coverage, VLT, film type) fall back to a sensible default when the value isn't recognized. Only a missing name, a missing or invalid surface, or an invalid service/inventory category or unit actually blocks a row.
Q: Is there a limit to how many rows I can import at once?
A: The importer doesn't publish a row cap — it processes whatever you paste or upload, one row at a time, in your browser.
Q: Where do I go to edit a product's advanced, source-specific fields after it's created?
A: Click Edit on its row in the Products table. That opens the item in its original full editor (kiosk package, service, inventory item, or film product) unless it's already linked to the shared product record, in which case Edit opens the unified dialog instead.