One workspace for tendering, accounting & bid-to-project, operations and the CEO dashboard — built for construction and joinery projects across Lebanon, the GCC and West Africa.
HEX Workspace · Sign In
HEX Grain
Costing, quotations, invoicing, receivables, shop floor and project Gantt in one connected application.
Sign in with your name and PIN — your role decides which projects and screens you see. The CEO dashboard keeps its own PIN.
HEX Grain
Doors & cabinet costing — built on HEX Consultancy's own pricing logic
Working asDisplay currency
Pricing from BOQ
Welcome to HEX Grain 👋
HEX Consultancy's doors, cabinets & kitchen costing bench — priced items track per client/project and roll straight into quotations and invoices.
Who's working right now?
What do you want to do?
click a card to jump straight there
How it all fits together
click any step to open it
Doors, cabinets and kitchens (a kitchen is just a run of cabinets, priced module by module) all follow this same path, start to finish.
Display currency (top right) only changes how Door/Cabinet/Session Log/Overview/Doc Log are BROWSED — it never changes what's stored. Pricing itself always happens in your base currency, set in Library.
HEX-IQ — the small blue hexagon in the bottom-right corner — is a chat assistant built into this tool. It only ever sees this tool's own live data (Library prices/stock, the open session, business overview), never invents figures, and can flag things like unset prices, low stock, missing lead times or thin margins.
Door specification
dims in mm
Leaf thickness is independent of jamb width — the leaf is the slab (~35–64mm); the jamb is the timber casing lining the wall opening (typically 150–200mm to span the wall).
Jamb/précadre is a rough sub-frame built into the wall opening ahead of the finished frame — always plywood (or a melamine-faced board if you want it faced), priced by area, not the frame's solid-wood species.
Accessories & hardware
Labor & shop cost mode
from library rates
Indirect costs (this item)
overhead, power, depreciation…
Elevation
Jamb / head section
Schematic material build-up through the jamb (a head section, at the top of the frame, is typically the same build-up) — not to architectural drafting standard. Same layers left to right whichever side you're cutting, since the app doesn't distinguish hinge side from lock side.
Cost breakdown — dry cost
per unit
Component
Qty / basis
Cost
Dry cost
–
Overhead + profit
–
Sell price
–
Material price sensitivity
what if board/veneer/hardware/hinge prices move?
Cabinet specification
dims in mm
Hardware
Indirect costs (this item)
overhead, power, depreciation…
Front elevation
Side view
Looking along the width, wall (back) on the left, room (front) on the right — shows depth, shelf heights and the door leaf's own thickness.
Top view
Plan view from above — wall (back) at the top, room (front) at the bottom, with door swing shown for reference.
Cost breakdown — dry cost
per unit
Component
Qty / basis
Cost
Dry cost
–
Overhead + profit
–
Sell price
–
Material price sensitivity
what if board/veneer/hardware/hinge prices move?
Kitchen
modular floor + wall cabinets along one or more walls, priced module by module
Same finish on every cabinet?
Overhead and profit are set once for the whole kitchen, not per module. Height is set once per kitchen too, shared by every wall in an L/U layout. Shelves and drawers are always set per module. When "Same finish" is Yes, box/back/door materials, finish and toggles (back / hanger rail / soft-close) are set once above and locked on every module; when No, each module sets its own. A drawer module's front is priced as part of the drawer itself — same as the Cabinet tab — with no separate front-panel material line.
Front elevation
One strip per wall for an L/U layout — perpendicular walls can't share one flat elevation.
Side view
Schematic side profile per row (every floor module shares the same height/depth, likewise every wall module) — wall above, floor below.
Top view
Plan view, drawn as the actual straight/L/U footprint — floor-unit depth solid, wall-unit footprint as a dashed inset near the wall line.
Cost summary
per module + kitchen total
Module
Dry
Sell
Dry cost
–
Overhead + profit
–
Sell price
–
Material price sensitivity
what if board/veneer/hardware prices move? — whole kitchen
Cladding specification
dims in mm, area in m²
Add each wall in the order you'd walk around the room. The length is that wall's own run; the angle is how much the NEXT wall turns from this one, measured on the room side — 90° is a normal square corner, 180° is a straight continuation (no corner), under 90° is an acute corner. This fixes every wall's position relative to the one before it.
Openings to deduct
doors, windows — by height × width, positioned exactly
"From left" and "from floor" locate the opening's bottom-left corner on that wall, so it's drawn exactly where it is on site.
Estimated frame layout from bay spacing — adjust to match your actual panel divisions.
Backing (battens)
fixed behind every cladding type — timber, not invented pricing
Estimated as 1 running metre of batten per (spacing ÷ 1000) m² of area — a standard estimating approximation, override the LM below if you measure it differently.
Fixing hardware
Site install
separate crew from shop production
Front view
Front elevation — openings drawn in place.
Top view
Plan view from above.
Cost breakdown — dry cost
per unit
Component
Qty / basis
Cost
Dry cost
–
Overhead + profit
–
Sell price
–
Material price sensitivity
what if board/veneer/wood prices move?
Bill of Quantities
upload or build a BOQ, then price each line into Door/Cabinet before it lands in the session log
A BOQ belongs to one session log — same Client/Project as the Session Log tab. Lines here are just queued specifications/sizes/quantities; nothing is costed until you price each one on the Door or Cabinet page. Kitchen lines are priced on the Cabinet page too (kitchen units are cabinets), just tagged "Kitchen" here for tracking.
–
Add a BOQ line
specification, size & quantity
Import / export
fixed column template
BOQ lines
No BOQ lines yet — add one above or import a file.
Session log
–
Cost control: register the realistic (actual) cost incurred on each item below and it's compared against the theoretical cost this dashboard computed (material + labor + indirect, before overhead/profit). Any excess is flagged.
No items priced yet — build a door or cabinet and add it here.
Variation orders — this session
scope changes after the original quotation, costed the same way
A variation order (VO) is a scope change agreed after the quotation. Build it from Library items, send the PDF to the client, then record the client's approval with proof. Once approved it joins the project's Gantt and shop queue and can be invoiced.
VO
Date
Description
Price
Margin
Billed
Status
Material availability — this session
demand vs Library stock
Cutting list & sheet yield — this session
board area needed vs. sheets bought — where offcuts come from
Issue invoice
pulls priced items from the session log
What are you billing? — each button sets the form up for you; you can still edit everything below.
From (issuer)
Pre-filled from General settings (click the HEX logo in the header) — editable here just for this document.
To (client)
No priced items in the session log yet.
Per item type: Door — front view only. Cabinet & Kitchen — front, side & top. Cladding — front & top. Only items priced since this option existed carry a captured drawing; older items are skipped.
Preview
not issued
Fill in the form and press "Issue invoice" to generate the document.
Invoice drafts — one per session
–
Created automatically from the Shop Floor: an item or kitchen marked Ready drafts an invoice for 80% of its quoted value, Delivered drafts 100% — each less everything already invoiced (advance and progress). Press "Create invoice" to open it pre-filled on the Invoice page.
Document log
–
Every invoice and quotation ever issued, across all session logs. Filter and re-download any historical document.
–
No invoices or quotations issued yet.
Accounts receivable
what's actually been collected — not what's been billed
Quotations aren't included — they're not billed yet. Balance and days-overdue come from real payment entries logged against each invoice and that invoice's own due-days; nothing here is estimated or assumed.
Number
Client
Date
Due
Total
Paid
Balance
Aging
Receivables log
invoices, payments and receipts together — partial payments included
Business overview
Margin and volume across every session log — all figures are in the base currency so they're comparable regardless of what currency any given invoice was issued in.
⚠ Needs attention
surfaced automatically — nothing here needed asking HEX-IQ
Shop floor & capacity
now its own page
The full production schedule — Gantt, weekly capacity heatmap (with its color key), the backlog table, completed work and the site look-ahead — moved to its own Shop Floor tab, since it's the page that actually controls what's on the shop floor. Quick read below; open the tab to change a status, override a start date, or see the full explanation.
Cash flow forecast
next 90 days
Inflows are real — the balance due on open invoices, bucketed by each one's own due date. Outflows are an estimate: open purchase orders' ordered quantity × each material's current Library price (a PO carries no locked price of its own) — treat them as a planning figure, not a committed amount. Overdue AR and POs with no expected date are called out separately.
By project type
kitchen modules break out from standalone cabinets
By client
Grouped by the Client field set on each session log (Session Log tab). Sessions with no client set are grouped under "Unassigned". Click a row for details.
Invoicing by project / session
invoiced vs drafted vs still to bill
By team member
Grouped by who priced each item ("Working as", Session Log tab). Items with no attribution recorded are grouped under "Unassigned". Click a row for details.
Currency exposure
revenue (billed) + purchasing (owed), where recorded
Detail
Sessions
Invoices & quotations issued
Shop floor & capacity
the live production plan — what's on each line, and how booked the weeks ahead are
This page is the schedule that actually controls production — every priced item not yet marked Ready/Delivered, laid out across your production lines. It's the same live schedule everywhere else in the app points to (the Session Log's per-item note, the Overview summary card): change a status or start date here and everything updates together.
How an item gets scheduled: items already In production claim a line first; then Queued items fill in behind them, oldest-priced first. Each item's line runs one job at a time — the moment a job's estimated ready date passes, that line is free for the next one. Setting a Start date by hand (blank = auto-scheduled) overrides where an item lands on its line, but never pulls a later item on the same line earlier. Lead time (shop days to build) is set per item on its Session Log row, not here — nothing with a lead time appears on the Gantt or heatmap below, since there's no window to plot.
Line
Item
Client
Status
Start
Lead time
Est. ready
Actual ready
Delay
Missing item
QC
Photos
Hours
Lead time is set on the item's row in the Session Log tab; status and start date are set right here (leave Start blank to auto-schedule); production lines and the working week are set in Library, under Shop capacity.
Completed work
everything marked Ready or Delivered, filterable by when
Item
Client
Status
Completed
Actual ready
Delay
Sell
Photos
Hours
Look-ahead
what's happening between two dates, whatever its status
A site look-ahead: every item whose production window falls inside the dates below, however far along it is — queued, in production, or already ready/delivered — all in one list.
Item
Client
Status
Window
Project Gantt
every awarded project, live — five phases per project
One row per Won quotation. Set the start date and phase durations once after award (✎ or "set start date"); then drag a bar to move it, or drag the edge of a phase to change its length. A project short of material turns red until the material arrives.
Project phases — gates, logs & delays
Engineering → Procurement → Shop floor, each passed with a signature
⚠This is your editable price book. Everything here drives the calculators — nothing is invented at calculation time. Rows marked unverified are placeholder estimates (fire-core tiers beyond what was in HEX's own cost sheet) and should be confirmed against a real supplier quote before you rely on them.
Shop capacity
drives the Shop Floor page
The only two shop-wide assumptions the backlog queue makes. Each item's own lead time and production status are set on its own row in the Session Log — these settings only turn that into a real schedule with real dates.
Production lines is how many items the shop can actually be working on at the same time (lines, stations, crews — whatever splits your concurrent capacity). Set it above 1 and several items marked "In production" will start together instead of queuing one after another.
Machines
one entry per physical machine — it can serve up to two lines
Log the shop's actual machines against whichever line(s) they run on. Capacity is per 8-hour shift/day, in that machine type's own unit — take it from the machine's own spec sheet or your own measured output, never a guess. This is a capacity record for your own planning; nothing here changes how the Shop Floor queue schedules an item yet.
Serves line(s) — pick 1 or 2:
Type
Name
Daily capacity
Line(s)
Material stock & reorder levels
on-hand qty vs reorder threshold — every board, veneer, wood and hardware line in one place
On hand and Reorder at are both in that item's own unit (m³ for frame/jamb stock, m² for veneers, sheets for boards, whatever's shown for hardware). Left at 0 until you set real counts — a 0 reorder threshold means "not tracked yet", not "out of stock".
A new item is added with price 0 (and, for boards/hardware, a default unit/sheet size) — set its real price in the matching table below. Size is editable here for boards (e.g. "2440x1220") — other categories don't have a sheet size, so they show N/A. Delete a row here to remove that item from the whole Library (it stops appearing everywhere it's used, including past cost breakdowns that reference it by name).
Code
Item
Unit
Size
On hand
Reorder at
Sync tol. %
Status
Shortage
Stock ledger
every logged movement — newest first
This is the audit trail behind the "On hand" numbers above. Adding a priced door/cabinet item to a session logs a consumption here (and lowers stock) for its board-sheet / solid-wood demand — the same demand the session's Material availability check computes; removing an item logs a matching reversal. Use "+ Receive" above to log stock coming in, or edit "On hand" directly to log a manual adjustment. Melamine-faced trim, veneer facing and hardware aren't moved automatically yet — only board and solid-wood demand is.
Date
Item
Type
Qty
Delivery note
Note
Weekly stock sync (Odoo)
reconcile the factory's actual counts against this Library — deny a line below if something looks wrong, otherwise "End sync session" approves everything left and closes it out
Upload the weekly factory stock-count sheet — columns Code, Article, Unit, Size, Color, Quantity, Unit Price, Remark (download this week's starting sheet — every Library item pre-filled with today's actual on-hand quantity and price, so the factory only has to overwrite Quantity, and Unit Price/Remark where something actually changed). Every matched item with a quantity difference lands in Quantity variances below, however small — approving one logs it as a normal Stock ledger adjustment, same as a manual on-hand edit. A quantity difference within that item's own tolerance % (set per item in Material stock & reorder levels above — 0% by default, meaning every difference is flagged) is skipped automatically. Any price on the sheet that differs from the item's current price lands in Price changes, always, however small — approving updates that item's standing price going forward and logs the change; it never touches quotations/invoices already issued. A Size or Color cell that's filled in and differs from what's on file lands in Size/color changes — a blank cell is left alone, it's never treated as "clear this field". A row whose code is blank or not recognized lands in New items, where you set its category, confirm its details and set its starting price before it enters the Library.
Sync log
every approved or denied line from every weekly stock sync — the dated audit trail
Date
Ref
Type
Code
Article
Detail
Outcome
Sync archive
past weekly stock syncs you've formally closed out, grouped by the date you ended them — reopen the report any time
Click "End sync session" above once you've worked through a sync (or decided to leave what's left for later) — it archives that sync's log lines here under today's date, downloads the report automatically, and clears the working queue so the next upload starts fresh. Nothing here is ever re-applied; it's a record, not a queue.
Closed
Ref
Approved
Denied
Material demand — approved quotations
materials still short of what every "Won" quotation needs
Rolls up the board-sheet / solid-wood demand (same calculation as the session Material availability check — melamine trim, veneer facing and hardware aren't covered) across every quotation currently marked Won, and shows only what's still short of on-hand stock — a material fully covered by stock (or once a PO for it is received) drops off this list. Not invoices — once a quotation becomes an invoice its demand is already committed. Status mirrors Purchase orders below: raise a PO from Material stock & reorder levels and it shows here as "Ordered". Click a row to see which quotation needs how much.
Material
Needed
On hand
Status
Purchase orders
what a Low/Out flag actually triggers
Raised from a Low/Out row in Material stock & reorder levels above (the "+ PO" button) — a supplier, expected-arrival date, and now the currency and unit price actually agreed with the supplier, all real fields you set and locked at order time (never recomputed from a later Library price change). "Receive" here logs the actual delivered quantity as a normal stock receipt in the ledger above and closes the PO out; "Cancel" just closes it without touching stock.
PO
Item
Qty
Value
Supplier
Expected
Status
Note
Remnants & offcuts
leftover cut pieces worth keeping instead of scrapping
Log a piece cut from a board that's big enough to reuse on a future small job — a drawer bottom, a shelf, a small door back. Dimensions are entered by hand (this app doesn't do real cut-layout nesting, so there's no way to derive them automatically). "Use 1" draws one piece down when it gets used; delete a row once a piece is gone or too small to bother tracking.
Board
Size (mm)
Area
Qty
Note
Rework & defects
panels/leaves that had to be remade — and why
A shop-wide QC record, not tied to one session — log every remake with its cause so a recurring supplier defect or machine problem shows up as a pattern instead of staying invisible one incident at a time. Cost impact (optional) is the dry cost of the remake itself, for your own tracking — it's never billed to a client.
Date
Item
Cause
Description
Cost impact
Frame / jamb stock (solid & melamine)
price / m³
Species / stock
Price/m³
Currency
Mel.
Veneers
price / m²
Veneer
Price/m²
Currency
Boards (melamine / MDF / plywood)
price + cutting service / board
Board
Sheet mm
mm
Price
Service
Currency
Mel.
Used for melamine facing/frame/jamb/architrave and for plywood jamb — add a new board (give it a real thickness in mm so it shows up in the right picker):
Fire-rating tiers
core / seal / compliance
Tier
Core
Seal
Compl.
Leaf mm
Add a tier:
Door hardware
unit prices
Item
Unit
Price
Currency
Cabinet hardware & services
unit prices
Item
Unit
Price
Currency
Man-hour / machine rates
per hour
Role / machine
Rate/hr
Currency
Door assumptions
real values from HEX's own cost sheet — editable
Cabinet assumptions
waste factors & per-m² rates
Cladding hardware
unit prices — fixing clips/screws
Item
Unit
Price
Currency
Cladding slat/batten profiles
slat width + gap sets the wood coverage ratio
Profile
Slat mm
Gap mm
Depth mm
Coverage
No profiles yet? You can still enter slat width/gap/depth by hand on the Cladding tab — profiles here just save you re-typing the same one repeatedly.
Cladding assumptions
geometry/practice defaults, not prices — see Cladding tab for real costs
Costing defaults
Overhead %/Profit % pre-filled on each page when it loads — still fully editable per item on every costing
QC / snag checklist templates
per item type — Shop Floor blocks an item from going "Ready" until every checked-off item for its type is ticked. A type with no checklist here is never gated.
Team members
for attribution on priced items & documents
Name
Role
Department access
PIN
Move all data between the artifact and the hosted app:
Hold points — who signs
approvals to pass from stage to stage, by role
Currencies
base currency is what everything above is priced in
Currency
Rate (per 1 base unit)
Add a currency an invoice/quotation can be issued in — rate starts unset (0) until you supply a real exchange rate; it's never invented.
Title
Document
Revise quotation
Adjust a line's quantity or unit price, or the discount/tax rate, below — everything else on the quotation stays as issued. A reason is required; it's saved to this quotation's history exactly as you write it.
Waiting for your approval
Inbox — decisions & messages
Quotation validation
Revision history
General settings — HEX Consultancy
These apply to every document generated from now on (invoices, quotations, cost summaries, cut lists).
Documents already issued keep exactly what they were issued with — changing anything here never rewrites them.
Shown in the header and on every new document's PDF/Excel export. PNG or JPEG.
Drawn faintly behind the content of new invoice/quotation PDFs, if set. PNG or JPEG.
Receive payment
Timeline
Shifts Manufacturing, Shipping and Installation later. While today is before Manufacturing starts, the project's items are Queued and take no shop capacity.
Cost loading — share of the contract value earned in each phase
Phases run one after another in calendar days. The first save becomes the baseline; later changes show against it.
Drawing
QC checklist
Photo log
Photos are resized to keep the file small.
Client view
⚠ For screen-sharing or an in-person walkthrough only — this is not a securely shareable link. Anyone who opens this artifact's own link can see everything on every page, regardless of which view happens to be showing.
HEX-IQthis HEX Grain only
Ask me about this tool's own Library prices, the current session, margins, AR, stock, or the shop backlog — I only see what's actually in here, nothing invented. You can also just tell me where to go — "go to library", "open purchase orders", "leave and go to overview" — by typing or, if your browser supports it, tapping the mic and talking.