# QA Report: PRECON Takeoff Tool

Reviewer: Mike Henderson, Mechanical Estimator — Henderson Mechanical LLC
Date: March 15, 2026
Environment: http://localhost:5173 (local dev; https://app.local had auth failures — see below)

────────────────────────────────────────────────────────────────────────────────

## First Impression

 The page loads fast, it's clean, and I could tell immediately what it was for. Not overwhelming. "Register → Upload → Takeoff" — that 3-step
 stepper at the bottom actually tells me exactly what I'm supposed to do. Good start.

 Then I hit the invite code field and almost stopped right there.

 ────────────────────────────────────────────────────────────────────────────────

## What Works

 Profile-based project setup is the standout feature. When I clicked "New Project," the dialog showed me a dropdown with "HVAC Starter
 (Default)" already selected — and it pre-populated 10 spiral duct assemblies (14"–32") plus 12 automation rules for elbows, reducers, and
 T-junctions. That is a legitimate time saver. In OST I'd spend 20 minutes building assemblies from scratch on every job. If this actually
 carries across jobs, that's the thing that could make me switch.

 Keyboard shortcuts are exactly right. L for Line, R for Rectangle, C for Count, V for Select — that's the standard pattern. ⌘+←/→ for page
 navigation is smart. ? for the help dialog. Undo with ⌘Z. This is a contractor who actually measures with a keyboard. The [ and ] shortcuts to
 cycle assemblies within a group are something I didn't expect and would actually use.

 Terminology is sensible. "Linear (length)," "Area (sq ft)," "Count (quantity)" — I know what those mean immediately. Unit locked to ft — no
 arguing with it, no unit switching confusion. Good call.

 Assembly grouping is clean. "Spiral Duct (10)" collapses to show all 10 ducts in one bucket. Each shows running footage and item count (0 ft ·
 0 items before measuring). That's the structure I'd want.

 The "Save as Profile" path makes sense. Overflow menu on "Assemblies" → "Save as Profile." That's exactly where I'd go looking for it. Once I
 build out a job with my full assembly list — spiral, rectangular, flex, VAV boxes, hangers — I want to be able to save that and apply it to the
 next school bid without rebuilding.

 Error handling on missing project. Hit /takeoff.html with no project ID — got "No Project Selected" with a clear button back to the dashboard.
 Not a dead end, not a white screen. Handled right.

 "Report a bug" in the header. That tells me the company is listening. I'd use it.

 ────────────────────────────────────────────────────────────────────────────────

## What's Confusing

 ### 1. The Invite Code — Who Gets One? How?

 There's a field on registration called "Invite Code" with placeholder "Enter your invite code." No explanation anywhere on the page about what
 this is, how to get one, or who to contact. I submitted the form without it. The form appeared to succeed — it bounced me to the login page.
 Then login failed with "Unable to sign in. Please check your credentials and try again."

 So as a new user, I'd think: was it my email? My password? Did the account not get created? I have no idea. I'd give up here. This is a hard
 stop for anyone not already briefed on the invite code.

 Fix needed: Either show a helper text like "Request an invite at sales@precon.com" or display a proper error when the invite code is missing or
 wrong — not a silent redirect.

 ### 2. The "Profiles" Button Is Easy to Miss

 On the dashboard, "Profiles" and "New Project" sit side by side. "New Project" is blue (primary). "Profiles" is secondary weight, small text.
 The "Profiles" feature is important enough that it deserves more prominence. I almost didn't see it.

 ### 3. "Manage Profiles" Says "No profiles yet" — But There Are Profiles

 Before clicking the Profiles button, the dialog has placeholder text: "No profiles yet. Save a project setup as a profile from the takeoff
 editor." That reads like I have no profiles. In reality there are 3 profiles (HVAC Starter, Commercial HVAC Standard, QA Test Profile) stored
 in the system. It's just the lazy-load pre-state. A spinner or empty loading state would be less misleading.

 ### 4. Project Name Defaulting to "Untitled Project"

 New Project dialog hits Enter without filling the name → it creates "Untitled Project." I'd prefer it require at minimum a name, or warn me.
 I've got 3 "QA Test Project" duplicates in the list now. Projects need to be named like job sites — "Lincoln Elementary," "Mercy Hospital
 Expansion" — and duplicates cause confusion.

 ### 5. The HVAC Starter Profile Is Missing Half of What I Need

 Ten spiral duct sizes is fine for round duct work. But on a real mechanical takeoff I also need:
 - Rectangular duct (area measurement — sq ft sheet metal)
 - Flex duct (linear)
 - VAV boxes / diffusers / registers (count)
 - Insulation (area)
 - Sheet metal (area)
 - Hangers (count)

 The starter profile gives me the skeleton of a spiral duct job but nothing else. I'd have to build from scratch for any rectangular ductwork,
 which is most commercial jobs. "HVAC Starter" promises more than it delivers.

 ────────────────────────────────────────────────────────────────────────────────

## What's Missing

 1. Page thumbnail strip. When I'm working a 40-page mechanical set, I need to see thumbnails to jump to the right sheet fast. I see a "Pages"
 tab that says "No documents uploaded yet" — so I can't evaluate this yet — but it needs to be more than a flat list. Bluebeam has a thumbnail
 panel I rely on heavily.

 2. Overall project totals visible without digging. I can see per-assembly running totals (0 ft · 0 items) but where's the project summary? I
 need to glance at the full takeoff: Total 14" spiral = 342 LF, Total 16" = 218 LF, etc. If I have to export to see that, that's too many
 clicks.

 3. Calibration feedback on the canvas. The calibration dialog exists, but the canvas just says "Select a page to view." I need to know at all
 times whether a page is calibrated and what scale it's set to. In OST, the scale badge is always visible next to the page. If you forget to
 calibrate a page and start measuring, your numbers are garbage. That warning needs to be front-and-center, not buried in a dialog.

 4. Assembly total column. The assembly list shows "0 ft · 0 items" but doesn't show the scale or break down measurements by page. When I'm on
 page 3 of a 20-page job and I see 180 LF for 14" spiral, I don't know which pages have been done. I want a per-page subtotal or at least a page
 progress indicator.

 5. Copy/duplicate assemblies. I'll have 5-6 nearly identical Spiral Duct sizes in a job. If I want to add "12" Spiral Duct," I should be able
 to duplicate "14" Spiral Duct" and change the name/color. Rebuilding from scratch every time is friction.

 6. Upload page is disconnected from project context. /upload.html (the onboarding page) has no project association — it's floating. The
 project-specific upload works from within the takeoff editor (drag-drop or the upload button in the Pages tab), but the standalone upload page
 doesn't connect to anything.

 ────────────────────────────────────────────────────────────────────────────────

 What's Broken

 1. Silent registration failure / misleading redirect.
 Submitted registration with no invite code → redirected to login page (looks like success) → login fails → no clear error. The account was
 never created. As a user, I'm stuck with no path forward.

 2. "Save as Profile" dialog shows "0 assemblies / 0 rules"
 The dialog is pre-rendered with zero counts before it loads actual project data. This is a cosmetic bug but it's alarming — I click "Save as
 Profile" and it tells me my project has 0 assemblies when I can see 10 right there in the panel. This damages trust.

 3. auth.local connection failure on https://app.local
 The https://app.local environment can't connect to local Supabase at http://127.0.0.1:54321 — mixed content block. Every login attempt from
 that URL fails with the same generic "Unable to sign in" error regardless of whether credentials are correct. This isn't a user issue but it's
 an infrastructure gap in the dev/staging setup that would hide real bugs.

 4. Button labels missing in accessibility tree
 The "Profiles" and "New Project" header buttons don't expose their accessible names correctly. button → sl-button in the tree is just labeled
 "button." This matters for keyboard-only users and screen readers. Also made automated browser testing harder — tools can't click them by
 label.

 ────────────────────────────────────────────────────────────────────────────────

## Would You Switch?

 Not yet, but it's closer than anything else I've seen.

 The profile system is genuinely innovative for HVAC takeoff. The idea that I set up my standard assemblies once and apply them to every new
 school bid with one click — that's real time savings. My current tools require me to rebuild from scratch or copy assemblies manually
 project-to-project.

 The keyboard shortcut system is well-designed for someone who's doing 100+ measurements a session. The hotkeys are obvious, documented, and
 match what I already use mentally.

 But there are things I can't get around yet:

 1. I can't evaluate actual measurement accuracy without uploading a real PDF with a known dimension and testing the calibration math. That's
 the most important thing for a contractor — my numbers have to be right, or I overbid and lose the job or underbid and lose my shirt.
 2. The starter profile needs rectangular duct. Most of my commercial work is a mix of spiral and rectangular. Rectangular alone could be 40% of
 a job.
 3. Registration is broken for new users. The invite code wall with no explanation would turn away any contractor I send this to.

 What would make me switch: Upload a 20-page mechanical set, calibrate a few pages, measure a duct run, verify the footage against a manual
 measurement, export to Excel. If that workflow is accurate and faster than OST, I'm switching. Right now I can't get that far in testing
 because I can't upload a real PDF through the browser-based test environment.

 The bones are there. The profile feature is real. Fix registration, fix the starter profile, show me accurate calibrated measurements, and I'm
 having a serious conversation with my boss about this.
