🏭 This is the plant's own stock — the same rows as Factory ▸ Plant Stock, live. A count entered either place shows up in both immediately.
Loading inventory…
Select a view to load inventory.
Movement History
Date
Change
Qty After
Reason
Reference
Notes
By
Loading…
🪨
Slab Tracker
Individual natural stone slab records — dimensions, bundle, finish, warehouse location, status (available → reserved → sold/damaged). Each slab variant is its own SKU.
📍 Phase 6 — Slab Tracker
Loading purchase orders…
PO #
Vendor
Status
Expected
Subtotal
Shipping
Total
Created
Loading…
Loading special orders…
SPO #
Customer
Vendor
Status
Expected
Invoice
Created
Loading…
Incoming Payments
Visible to every manager and admin across all six stores — a payment is not tied to a store until it is matched to an invoice.
Waiting on a payment right now?
The mailbox is checked every 30 minutes on its own. Press Check for Payment to look immediately — useful with a customer at the counter.
Loading assemble jobs…
Assemble #
Customer
Invoice
Priority
Scheduled
Delivered
No completed assemble jobs yet.
Loading transfers…
Transfer #
From
To
Status
Items
Created
Dispatched
Loading…
Loading returns…
RMA #
Customer
Invoice
Status
Reason
Refund
Created
Loading…
Loading tasks…
Task #
Subject
From
To
Priority
Status
Due
Created
Loading…
Team Portal
Everything in one place
Jump to the tools your team uses every day, and see what’s happening across the company.
Loading…
Loading the board…
Time Clock
Loading…
to
⚠ Limited to 6 months
Loading reports…
💰 Sales Summary
Today
—
Total Revenue
—
Invoices
—
Avg Sale
—
Quick Sales
Paid 0%Outstanding $0
💳 Payment Methods
Loading…
📋 Estimate Pipeline
—
Draft
—
Pending
—
Approved
—
Invoiced
Conversion rate—%
Total value in pipeline—
🏆 Top 10 Products
Loading…
🪨 Countertops Sold
Slabs, peninsulas, backsplashes and bullnose — by piece.
Loading…
🚪 Cabinets Sold by Colour
Read from the line comments where the SKU and the colour disagree.
Loading…
⚠ Outstanding Invoices
—
0–30 days
—
31–60 days
—
60+ days
Loading…
📦 Inventory Value
Loading…
Total retail value—
Settings
Company-wide settings are managed in the Admin Control Panel (Admin role required). Settings include default tax rate, discount thresholds, return policy text, invoice terms, estimate validity, and optional feature toggles (swatches, add-ons).
Supabase Project URL
Configured in source code
Logged in as: —
Role: —
Location: —
🔐
Admin Control Panel
Re-enter your password to continue.
Build Roadmap
All 17 build phases and where each one stands.
Phase
Feature
Status
Product Categories
One list, used everywhere — dropdowns, filters, the product picker, imports, and pricing. Order here is the order shown app-wide.
Order
Icon
Name
Status
Loading…
Used on documents → retired, not deleted
SKU
Name
Category
Unit
Retail
Cost
Margin
Status
Loading…
User Management
Create accounts, assign roles and locations, set manager PINs
Name
Email
Role
Location
PIN
Status
Last Login
Loading…
🔐 Page Access by Role
Which sidebar pages each role can open, and where they land after login.
Admins always see everything. Changes apply at each user's next login.
Loading…
🏭 Factory Reorder Permissions
Who may prepare a company-wide reorder sheet, and who may send it to the factory without approval.
Anyone allowed to prepare but not to submit directly raises a request that an admin approves in ⑭ Approvals.
Admin can always do both. Changes apply at each user's next login.
Loading…
Manager / Supervisor Price Editing
When on, managers & supervisors at the selected stores get an “Edit Price” button on a product’s detail in the Products tab. Turn off to keep price changes inside this admin panel.
Enforced in the database too — turning this off blocks price writes server-side, not just in the browser.
Enabled at these stores
Tier Pricing Rules
Discount % applied by customer tier & product category — auto-applied in all pickers
Tier
Category
Discount %
Effective From
Effective To
Notes
Action
Loading…
Location Price Modifiers
Base prices are Carson (QB baseline). Click any cell to edit — blank cells inherit the location's "All" default.
Loading…
Audit Log
When
Action
Performed By
Record
Result
Loading…
Product Pricing
Retail & cost prices — changes are effective-dated
Product
SKU
Category
Retail
Cost
Margin %
Since
Action
Loads on demand — the full catalog is large. Typing in search also loads it.
💬 Comment Presets
Standard comments staff insert by typing the code in any comment line
(Estimates, Invoices, Quick Sale) — exactly like the SKU lookup.
Loading…
Default Tax Rate
× 100 = % (e.g. 0.0950 = 9.50%)
Applied to all new invoices and estimates unless overridden by a location-specific rate below.
🖨 Print Font Size
Overall text scale for all printed documents — estimates, invoices, letterhead, purchase orders, quick-sale receipts, and packing slips. 14 = standard size (documents print as designed); higher scales everything up proportionally, lower scales down. Larger is easier to read but may push long documents onto an extra page.
scale (8–20). 14 = standard.
Saved — takes effect on the next print.
📐 Document Top Margin
Top margin (inches) for the colored estimate, invoice, purchase order, and return/credit-memo documents. Lower values move content up and shrink the blank band at the top of page 1. Letterhead documents use the separate Letterhead Margins above.
inches (0.25–2). 0.5 = default.
Saved — takes effect on the next print.
Per-Location Tax Rate Overrides
Location
Tax Rate (decimal)
Notes
Loading…
Invoice & Estimate Settings
Set the top and bottom margins when printing on pre-printed letterhead paper. Adjust until your content lands in the blank body zone of the form. Typical starting values: top 2.2in, bottom 1.8in.
Min 6 characters. Share verbally — never email.
Return & Restocking Policy
All unopened returns
Opened countertop returns
Opened cabinet returns
Discount Label Options
Labels available when adding a Group Discount. Staff see all labels including Manager Discount.
Location Settings
Edit showroom details, toggle active status
Loading…
Data Export
🧾
Invoices
All invoices with totals, status, customer, location
📋
Estimates
All estimates with status, customer, totals
👥
Customers
All customers with tier, type, contact, location
💰
Payments
All payments with method, amount, invoice reference
Minimum stock each store should keep on hand. Drives the low-stock flag on the Inventory page and the green / yellow / red status in the Inventory export.
One row per SKU — name, category, unit, retail, cost, description, tags, active. Edit and re-import to update fields.
⏱️
Time Clock
Weekly timesheet — summary + detailed breakdown by employee
📕
Product Price List
Price sheet by category & line — for dealers & retailers
Data Import
🏷️
Products
Import products from XLSX or CSV. Supports QuickBooks and Apex standard format.
Required: sku (always) · name, category, unit (new products). Tags use | between values.
👥
Customers
Import customers from QuickBooks XLSX export. Auto-detects Sale Permit (tax exempt) customers.
📦
Bulk Inventory Count
Upload a two-column CSV (sku, qty) to set stock counts for one location. Writes through the movements ledger.
Maintenance
🧮
Reset negative inventory to 0
Finds every product sitting below zero at any location and sets it to 0. Each change writes a
ledger row (reason physical count) credited to you, so History shows what it was.
Preview first — nothing changes until you press Fix.
⚙️ Built-in Suggestions
When a cabinet door style line is added (any C- line except the carcass series),
the matching carcass is suggested with the same model code and quantity —
American/face-frame doors pair with C-12, European/frameless doors with C-18.
Suggestions appear in the "Goes with" strip in Estimates, Invoices, and Quick Sale,
and hide automatically when the box is out of stock at the register's location.
Comma-separated line codes. These lines get no box suggestion and never trigger the
missing-box warning — they keep their American/European tag and grouping.
When a countertop piece is added, the other pieces of the same color family
(family = the SKU's first token, e.g. Q-E09) are suggested —
counter, backsplash, peninsula — so the set sells together. Out-of-stock pieces show with the ⚠ marker.
➕ Static Suggestion Rules
"When the document has trigger, suggest product." Triggers: a whole category,
a SKU prefix (e.g. G- for granite), or an exact SKU.
Suggested products pool into the same "Goes with" strip at location pricing.
Loading…
Vendor Directory
Company-wide supplier list — all staff can view, admin can edit
Loading…
Time Clock Employees
Enroll employees in the time-clock system. Enrolled employees with a PIN set can clock in at their store's kiosk.
Loading…
Kiosk Announcements
Messages shown on the time-clock screen. Target one or more locations; each can carry English and Vietnamese text and an optional show/hide date window.
Loading…
Edit shift
Times are in Pacific. Clearing the Clock Out reopens the shift. Saving records who made the correction.
Manage apps
Add the tools your team uses. Links open in a new tab. Use the order number to sort, and pick which roles see each tile. Leave a URL blank to grey-out a tile until it’s ready.
New Announcement
Tablets refresh announcements every few minutes. Leave a language blank if it does not apply — the other language still shows.
Select Your Location
Loading locations…
⚠️
Are you sure?
SKU reference
Tip: type a full SKU to decode it, a name to search (e.g. bainbrook), or tap a category below to list everything in it.
Browse by category
Prefix▲
What it is
Category
Sold by
Example
Line▲
Line name
Style
Box it pairs with
Example door SKU
Add Category
Lower = earlier everywhere (use gaps of 10 to leave room).
Request Stock from the Factory
Number assigned on save
—
Always the factory — nothing to choose.
Products to Request
Select a product
Selected
Click to add · click again to remove
Bill of Materials
—
Quantities are what it takes to build one unit.
Materials
#
Material
Qty per unit
Unit
Note
No materials yet — add the parts this product is built from.
New Production Order
—
Materials this run needs
Material
Per unit
Needed
On hand
After
—
Adjust Material Stock
—
On hand now:0
Required for everything except opening stock. Written to the movements ledger.
Stocking Levels
—
Flag when on hand falls to this
Buffer for demand and lead-time variance
Movement History
Add Product
Loading product…
Unique company-wide identifier
Sellable merchandise. Appears in estimates, invoices and the price list.
Where the buying unit differs from the usage unit
Used in product picker search across all modules
Specs shown on product detail and printed documents — e.g. Finish, Mount Type, Flow Rate
Initial Pricing
Factory Sourcing
Used by the reorder calculation: avg daily usage × lead time + safety stock
Opening Inventory (optional)
Set starting stock quantities per location. Leave blank for 0.
Loading locations…
Product Details
Group Images
One image per Countertop color group — every size/cut variant with no image of its own uses it. A product's own image always wins.
Loading…
Finish photo by color + type, with a style + type shape diagram as fallback. A product uses its own image first, then its color+type photo, then the shape diagram.
Loading…
One image per Shower Panel color — every size with no image of its own uses it. A product's own image always wins.
Loading…
Edit Pricing
This is what gets stored. Every other store is computed from it.
Previous price record will be closed as of this date.
Add Tier Rule
⚡ Tier rules auto-apply to all product pickers — estimates, invoices, and quick sale.
Applied as: Retail Price × (1 − discount% / 100)
Leave blank = ongoing
Import Preview
Fields to write — for existing SKUs, only ticked fields change. Everything is left alone by default.
Edit Location Modifier
Positive = more expensive than Carson baseline. Negative = less expensive.
Carson should remain at 0.
Subcategory rules
Override this category's modifier for specific product types, matched by SKU prefix.
Most specific (longest prefix) wins; products without a matching rule use the category modifier above.
Bulk Inventory Count Import
Location:
#
SKU
Description
Category
Current QOH
New Count
Delta
Import Customers
QuickBooks customer list
#
First Name
Last Name
Company
Phone
Email
Address
Tax Exempt
Adjust Stock
—
—
—
Log a Payment
Copy what the bank alert says. Matching it to an invoice comes next — you do not need to know whose it is yet.
Logging a payment does not mark anything paid. Confirm the money is in the account before releasing goods.
Match to Invoice
Save to Catalog
Turns this custom line into a permanent product — searchable on every estimate, invoice, and Quick Sale from now on.
Leave the price blank if you do not know it yet — the product saves with a "No price set" badge for an admin to fill in later.
Register this network
Enter details
Reorder Levels
AllNo level setBelow levelOut of stock
Set every product shown to units
Suggest a level that covers
of sales, based on the last 90 days
Nothing is saved until you click Save
SKU
Product
On hand
Sold / month
Sales rank
Suggested
Min level
Status
Set Reorder Point
Low stock alert fires when qty_on_hand drops to or below this number. Set 0 to disable.
Add Customer
Contact Info
Which location owns this customer record
Address
Classification
Controls automatic price discounts in estimates & invoices
Referral Alerts
Tax Status
Tax Exempt (Resale Permit)
Invoices will have $0 tax — permit details required
⚠ Resale Permit Required — CA Board of Equalization
California seller's permit number
Leave blank if permit has no expiry
Add Note
New Estimate
·● UNSAVED
Customer & Project▾
Click to select customer…
Line Items
Qty
Description
Unit Price
Disc %
Line Total
No items yet — click "Add Product" or "Custom Line" below
Subtotal$0.00
Taxable / Non-taxable
Item discounts$0.00
Order discount
Additional discount
Tax
%
$0.00
Total$0.00
⚡ pricing applied
Notes
Submit for Review
How should this be filled?
⚠ This PO is already pending review. Resubmitting will notify the assignee the PO has been updated.
Create Purchase Order
Pick the items you need to source
Send Purchase Order
Choose how to send to the vendor
Sends from sales@apexgraniteoutlet.com.
↩ Send Back to Manager
Send Stock to a Store
Number assigned on save
Anyone active at the other store.
Products to Transfer
#
Product
On Hand
Qty Requested
Add products above
Assign Transfer
Pick who owns this transfer.
TRF-2026-001
Manager Authorization
Incorrect PIN. Please try again.
Dispatch Quantities
·→
Confirm the qty going on the truck for each product. Send less than requested, or
set a line to 0 if it is out of stock — the truck leaves with the rest.
Product
Requested
On hand
Dispatching
🚚 Confirming dispatches this transfer and deducts the stock from the sending store.
Confirm Receipt
·→
Enter the quantity actually received per item. If less than dispatched, a damage reason is required.
Product
Dispatched
Received
Damage Reason
✅ Confirming closes this transfer and adds the received stock to this store.
Add User
Share this verbally with the user — they can change it after logging in.
PIN — used for clock in/out and approvals
Leave blank to keep existing
Login Password — the sign-in password (min 6 characters)
Type a new password, then Set
Container
Cancel Request
Edit Location
🏪 Business names on printed documents
Leave blank to use the corporate name (Apex Home Outlet).
Controls which stores this location appears alongside.
New Special Order
SPO number assigned on save · Stock reserved to customer on receipt
Items to Order
#
Product
Qty
Unit Price
Line Total
Add products above
SPO-FRD-2026-001
Receive Special Order Stock
⚠ Stock received here is reserved directly to the customer — it will NOT be added to general inventory.
Product
Ordered
Prev. Rcvd
Receiving Now
New Task
TSK-2026-001
ORD-2026-001
REQ-…
Add Vendor
Add Non-Inventory Item
Add Group Discount
%
Remove Discount Group?
This will remove the Group Sub Total, Discount, and Group Net rows together.
New Purchase Order
PO number assigned on save
↩ Returned by Purchaser — review notes
Products to Order
#
Product
Qty
Cost Price
Line Total
Add products above
Shipping:
Total: $0.00
PO-2026-001
Receive Stock
Enter the quantity actually received. Stock will be added to inventory immediately on confirmation.
Product
Ordered
Prev. Rcvd
Receiving Now
New Credit / Refund
Credit Memo (RMA) number assigned on save
Invoice *
Items to Credit
Credit Summary
Add-on Invoice
Add-on subtotal$0.00
Sales tax$0.00
Add-on total$0.00
Tax refunded only on taxable items. Restock fee deducted from merchandise credit only.
Card refunds: a credit card refund fee (default 5%) is taken on the Settle step. Store credit and cash refunds have no fee.
RMA-2026-001
Reject Return
The customer will be informed the return was not accepted. A reason is required.
Cancel Transfer
⚠ This transfer is in transit. Cancelling will automatically reverse the inventory deduction at the sending location.
Decline Stock Request
The requesting store will be notified. No inventory changes occur.
✓ Sale Complete
Decline Estimate
The estimate will be returned to Draft so staff can revise and re-submit.
Select Customer
Export Products CSV
One row per SKU with product fields, pricing, and per-location stock. Edit and re-import to update.