Detailed Reference — Sample Project A¶
| Status | Shipped |
|---|---|
| Linear | PIN-6 ↗ PIN-143 ↗ PIN-295 ↗ |
The click-by-click detail behind bid creation, document upload, and running the pipeline through Estimate, all using one real, self-contained test job. New to the app? Start with End-to-End — Preconstruction Lifecycle instead — it tells the whole story (including the Bid Invite step this doc skips) with the business reasoning behind each stage, and links back here for the exact clicks.
One real duct job — E25-1474, WNET 437 Madison Ave 3rd Fl — walked through the whole preconstruction pipeline: create the bid, upload the document set, move it to Estimating, run a takeoff, import the historical spreadsheet, push to Estimate. Every file comes from one self-contained Drive folder, and because this is our benchmark project the correct takeoff counts are known.
Prerequisites¶
- Role: Estimator or Chief Estimator (creates bids, sees the Estimate tab). Assistant PM / Field User can't create bids — that itself is a permission check worth trying.
- Test data: download the whole
sample-project-A/folder from the test-app-files Drive folder. Key files:E25-1474 ME IFB.pdf(plan set),E25-1474 WNET 437 Madison Ave 3rd Fl.xlsx(estimate spreadsheet),Takeoff Drawing.pdf,Full Recap.pdf,Vendor Quotes/(~70 PDFs and Outlook.msgfiles). - Permissions cached? Relogin if a button described below is missing.
1. Create the bid¶
Bids in the left nav (/bids) → New Bid (top-right; hidden without create permission).
Fill the form — required fields are asterisked:
- Bid Number:
E25-1474-QA(suffix avoids clashing with real data) - Project Name:
WNET 437 Madison Ave 3rd Fl — QA - Optionally: Bid Date, Estimated Amount, Project Type. Skip the Drawings (optional) drop zone for now — we'll exercise the Documents tab instead.
Click Create Bid → toast "Bid created", back on the list. Status defaults to New.
Submitting with empty required fields is currently a silent no-op — no toast, no inline error (verified live 2026-07-08). Candidate for a UX bug ticket; don't be confused when nothing happens.
2. Upload the document set¶
Open the bid → Documents tab. With no documents yet you get the "Upload your bid set" hero — drop E25-1474 ME IFB.pdf, Takeoff Drawing.pdf, and Full Recap.pdf there and Pinley AI auto-sorts them into the 10 numbered folders (01 Bid Documents … 10 Reference & Support).
Then exercise targeted upload:
- Expand 05 Vendor Quotes → Upload → select a batch of PDFs from
Vendor Quotes/3-IFB/(uploader caps at 10 files / 100 MB each — a >10 selection must be handled gracefully, not silently dropped). - Try one
.msgfile: the default accept list is documents/images, so the Outlook files should be rejected or filtered by the picker — note exactly what happens. - Create a Subfolder in 05 Vendor Quotes named
IFB round, drag a quote row onto it. (Drag is the only way into a subfolder — the row's Move to folder menu lists just the 10 top-level folders.) - Move a misplaced file between top-level folders via the row's Move to folder button (or drag) and verify counts update.
- Click a PDF row — the right-hand preview renders the PDF inline (iframe/native viewer) with Open in new tab and Open takeoff viewer actions. There is no custom thumbnail strip.
The RFP workflow strip (Approve File Structure → Select RFP Documents → Review Bid List → Send RFP) appears above the folders. For this walkthrough dismiss it (X) — Step 1 kicks off AI scope extraction and Step 4 emails vendors; only touch it when deliberately testing RFP. Never click Send RFP against real vendor contacts.
3. Move the bid to Estimating¶
Status transitions are gated — Estimating is only reachable via Qualifying:
Header → Move to → Qualifying, then Move to → Estimating. Verify a New bid does not offer Estimating directly (New offers only Qualifying / No Bid / Budget / Superseded). Awarded / Lost appear only from Submitted (full path: New → Qualifying → Estimating → Submitted → Awarded/Lost) and open their own confirm modals (Award asks Contract Value / Channel / Date) instead of applying instantly.
4. Run the takeoff¶
Follow the dedicated Takeoff walkthrough using the E25-1474 ME IFB.pdf you uploaded (move it into 06 Takeoff if AI sorted it elsewhere — drag the row onto the folder header).
Benchmark check: this plan set has known-correct equipment counts (it's the project our auto-takeoff is benchmarked on). Ask me (Claude Code) for the expected VAV/equipment numbers and compare against what the viewer detects.
5. Import the historical spreadsheet¶
Follow Excel Imports using E25-1474 WNET 437 Madison Ave 3rd Fl.xlsx: Estimate tab → Takeoff sub-tab → toolbar Import. Cross-check a few imported quantities against Full Recap.pdf — they describe the same job.
6. Push to Estimate¶
In the Takeoff sub-tab, use Push All to Estimate (or per-section Push to Estimate). The preview modal lists sections / scope lines / LBS / budget total — confirm with Push.
Switch to the Estimate sub-tab: pushed rows land as BUDGET values (vendor BID quotes stay untouched). Back on Takeoff, row badges read ✓ Synced; edit a takeoff quantity and the badge must flip to ⚠ Differs.
Verification Checklist¶
- Estimator can create the bid; a read-only role (Assistant PM) sees no New Bid button
- Bulk drop auto-sorts files into sensible folders; misplaced files can be dragged to the right one
- Folder-scoped upload, subfolder creation, and PDF preview all work in 05 Vendor Quotes
-
.msgfiles are rejected/filtered with clear feedback (not a silent failure or a broken row) - Status path New → Qualifying → Estimating enforced; no direct New → Estimating
- Takeoff equipment counts match the known benchmark values
- Excel import quantities match the source spreadsheet
- Push to Estimate produces ✓ Synced badges; later takeoff edits flip them to ⚠ Differs
- No console errors at any step
Known Issues / Current Gaps¶
Every bid load fires a
GetBidOutcome403 in the console — even for Owner on non-awarded bids (verified live 2026-07-08). Recurring noise, candidate for a code ticket; not a functional failure.The RFP Send step emails real addresses from the vendor list — keep the strip dismissed on staging unless coordinating an RFP test.
No xlsx→estimate-line auto-promotion; the import fills the takeoff grid only (see Excel Imports).
Proposal generation from the estimate is covered by its own flow (PIN-134) — out of scope here.
Related docs¶
- Takeoff — step 4 in detail
- Excel Imports — step 5 in detail
- Project Drawings — the post-award drawing pipeline (use
drawings/DWGs there) - Daily Logs — the field side once a project exists
Updating this walkthrough
Run the full flow yourself end-to-end. If it passes, bump last_verified: in the frontmatter to today's date. If any step fails, fix the doc or the code in the same PR — drift is the enemy.