Users guide

A practical how-to for the people who use the app day to day. Live at https://idp.ethanseow.com. For a reference on any single page see Screens; for the why, see Architecture.


1. Signing in

  1. Go to https://idp.ethanseow.com. You land on a sign-in card.
  2. Enter your email + password. If you've turned on 2FA, you'll be asked for the 6-digit code next.
  3. After sign-in you see the home launcher — tiles grouped into Sales · Carpentry/Warehouse · Procurement/Pricing · Admin. Click any tile, or use the top nav (always visible).

First-time housekeeping - Security (2FA): the Security tile (or /ui/mfa_setup) enrols an authenticator app — scan the QR, confirm a code, save the recovery codes. (Optional — leave it off if you prefer.) - Theme: the 🌙 / ☀️ button (far right of the nav) flips light/dark; your choice is remembered in that browser. - Workspace: if you belong to more than one workspace, a Workspace switcher appears in the nav.

The nav: Quotes · Builder · SOWs · Procurement▾ · P&L · Forecast · Carpentry▾ · Team · Admin.


2. The headline workflow — a quote from a BOQ

The fastest path from a document to a structured, sendable quote.

2a. Drop a BOQ PDF → grouped quote

  1. Quotes (nav) → scroll to "Import a BOQ → grouped quote".
  2. (Optional) type a Project name.
  3. Under Drop a BOQ PDF, choose the PDF and click Extract from PDF.
  4. The app sends each page to Gemini, which transcribes the line items; they're then auto-classified onto the trade taxonomy and rolled up into Section → Group → Line with sub-totals. You land on the BOQ view.

Prefer a spreadsheet? Use the "…or paste CSV" box instead — columns section,group,item,description,qty,unit,rate,amount — and click Build from CSV.

2b. Verify the auto-classified lines (human-in-the-loop)

On the BOQ view, the subtitle shows e.g. "33 priced · 5 included · 2 TBC · 5 to verify". - Lines the classifier is unsure about are highlighted and show a "verify trade" badge with a dropdown. - Pick the correct trade — it saves instantly and the badge turns to ✓ verified. (This only sets the classification; it never changes the price.) - Most lines need no attention; you're only confirming the handful the app flagged. Each confirmation is learned per workspace, so the same line auto-classifies (unflagged) next time.

2c. Review totals & export

  • The Summary table shows each section total and the Grand Total (it always reconciles to the source).
  • "Included" = bundled (no separate price); "TBC" = provisional, excluded from the total.
  • Download PDF produces a branded BOQ; Print opens the browser print dialog.

2d. Send & accept

  1. Quotes → click a quote's Open →.
  2. Send to client (enabled while the quote is draft) marks it sent and freezes the lines.
  3. When the client agrees, Mark accepted — this converts the quote into a SOW (see §4).

3. Quote builder (editing lines by hand)

Builder (nav) is the editable grid for building or tweaking a quote line by line. - Add line — search the catalog (type a term; bilingual 中⇄EN works, e.g. hinge finds 铰链) and pick a SKU; the cost suggestion fills from price history. - Recommend from a materials list — paste a list of materials; the app matches SKUs and proposes lines with costs; review and add the ones you want. - Templates — save a set of lines (e.g. a standard Preliminaries bundle) and apply it to future quotes. - Lines are editable while the quote is draft; sending freezes them.


4. SOWs & milestones

SOWs (nav) lists every Statement of Work (created when a quote is accepted). 1. Open a SOW to see its milestones (name · % · amount), scheduled invoices, and variation orders. 2. Schedule invoices generates the draft client invoices from the milestone schedule. 3. Generate POs drafts purchase orders for the job (grouped by vendor).


5. Procurement (the Procurement▾ menu)

  • Purchase orders & bills — every PO with its vendor, status, GRN/bill counts. Open one to see line items, goods receipts and vendor bills; Send to vendor issues a draft PO.
  • RFQ — request quotes from suppliers: 1. New RFQ (title + project) → Open. 2. Invite a vendor by email — the app issues a magic link; the supplier fills in their prices without needing an account. 3. As quotes arrive they appear under Supplier quotes. 4. Compare → opens the side-by-side matrix.
  • Supplier comparison — line-by-line across suppliers, with the cheapest cell marked ✓. Accept a supplier's quote and it drafts a PO automatically.
  • Historical import — upload past quotes/bills (CSV/Excel/PDF) to seed the pricing intelligence: each line lands as a price observation, and you confirm fuzzy SKU matches (Link / New SKU). This is what makes future cost suggestions smarter.

6. Carpentry & warehouse (the Carpentry▾ menu)

  • Warehouse — stock levels derived from an append-only ledger.
  • Record event (receive / consume / adjust …) to move stock.
  • Low stock lists items under their reorder point; Draft reorder POs turns those into draft purchase orders.
  • Inventory dashboard — the visual at-a-glance view: total stock value, value by material type (hardware · tools · lighting · boards · …) and by location, plus the most-urgent low-stock items. If a SKU's auto-assigned material type is wrong, set Material type on the SKU (Catalog) to correct it.
  • Job board — work-orders (fabrication jobs) by status (cutting → assembly → finishing → done). Open one for its cutting-list BOM; reserve/consume materials against the ledger.
  • Approvals — the draft-and-approve queue. Anything outward-facing or irreversible (a reorder PO, a customer reply) is parked here as a draft; approve to execute, reject to discard. Internal stock moves apply automatically.
  • Catalog & locations — manage SKUs (with bilingual aliases) and stock locations, and set reorder thresholds and material type overrides.

Agentic intake: messages from the shop floor / customers (via the unified inbox or the webform) are classified and turned into stock events, job updates, or CRM notes — with external actions routed to Approvals first.


7. Dashboards

  • P&L (nav) — pick a project to see revenue (contract) vs cost (committed POs / actual bills), gross margin, and the cost variance.
  • Forecast (nav) — the weighted sales pipeline (win-probability × value) with expected margin.
  • Inventory dashboard (Carpentry▾) — stock value, spread by material type & location, and low-stock alerts.

8. Team & admin

  • Team (nav) — members and their roles (owner / admin / manager / member / staff / viewer). Invite a teammate by email; they accept via a link. Roles map to granular permissions (who can write quotes, act on approvals, manage the warehouse, etc.).
  • Admin — bulk catalog management; the webhook outbox inspector; the margin tracker.

9. Good habits

  • Quotes are sell-side. Margins only become real once you upload supplier costs (Historical import / supplier bills) — that's the pricing moat; the more you feed it, the better the cost suggestions.
  • Draft-first. Outward actions (client emails, reorder POs) are drafts until a human approves — check Approvals regularly.
  • Verify the flagged BOQ lines. Auto-classification is ~95% right; the "to verify" badges are the few the app wants you to confirm. A minute there keeps the trade data clean.
  • One source of truth. Don't keep quotes in spreadsheets and here — import the spreadsheet (CSV/PDF) so everything downstream (SOW, POs, P&L) flows from one record.

Something not behaving? The API is self-documenting at /docs. For a per-page reference see Screens.