Changelog

    • Started this changelog — a plain-English log of what's shipping in Structa.

      New feature

      Backfilled with the major updates from March 15 onward. New entries go up as work ships.

    • AI Estimator now grounds estimates in your portfolio history.

      Improvement

      Every conversation sees a fingerprint of what your company typically builds — project mix, geography, scale, cost band relative to industry. Before showing a number, the Estimator sanity-checks against your portfolio and industry typical ranges; estimates outside that band either get revised or get an explicit note explaining what's driving them.

    • Clarifying questions in the AI Estimator are now keyboard-driven and feel more like Claude.

      Improvement

      Numbered option rows, arrow keys to focus, Enter to submit, 1–9 to quick-pick, and an inline "Something else" option for free-text. Older questions in the same chat collapse to a read-only summary so the active one is always obvious.

    • AI Estimator answers now survive a browser refresh while they're being written.

      New feature

      Refresh mid-response, switch tabs, lose connection — the assistant keeps writing in the background and the page picks up live where it left off.

    • Interrupted AI Estimator messages show a "Stream was interrupted — Retry?" banner.

      New feature

      If a response gets cut off, the broken message gets a clear orange Retry button rather than spinning forever.

    • AI Estimator conversation titles are now AI-generated.

      Improvement

      The sidebar previously showed the first seven words of your first message. It now uses a quick model call to produce a real title — and once you rename a conversation by hand, that title sticks.

    • Clarifying questions in the AI Estimator now always show tappable answer chips when there are obvious choices.

      Bugfix

      The model occasionally forced you to type a free-form answer even when the question had a small set of obvious options. Schema-enforced now.

    • Re-run leveling on a comparison without recreating it.

      New feature

      A "Re-run matching" button on the comparison page wipes the existing matches and re-runs the LLM pipeline. Manual plug overrides survive.

    • Change or clear a bid's assigned project from the bid detail page.

      New feature

      The Project cell stays editable after assignment — you can reassign, create a new project, or unassign entirely.

    • Loading and error states across comparison, bid, and project detail pages are now calm and informative.

      Improvement

      Layout-matching skeletons replace bare "Loading…" text. Failed states surface a cream error card with a Retry button. Trade rows show an inline "Generating…" pill while a comparison is being leveled.

    • Project detail page no longer flashes between states on load, and the export action moved.

      Improvement

      The page lands in its final state in one shot. "Export project workbook" moved into the Bids by Division section as a subtle download icon. Files now download as `<Project> - MM-DD-YYYY.xlsx` instead of a generic name.

    • When one bidder has multiple line items in the same scope row, you can now see all of them.

      Improvement

      Each line item gets its own indented sub-row under the match group, with the parent rolled-up total still on top.

    • The "We may have already discussed this project" card in the AI Estimator stays visible after a page reload.

      Bugfix

      The card used to render during streaming and then vanish on reload. It now persists with both buttons still functional.

    • Cleaner treatment of the awarded-bidder column on the comparison page.

      Improvement

      Removed a confusing sage-green left-border accent that was attaching to the wrong line. The award winner chip now shows just the sub name (with truncation) — the dollar amount was overflowing into the Clear button.

    • Compare trades as soon as two bids come in, even if one is missing a grand total.

      Bugfix
    • Project-wide leveling workbook export.

      New feature

      One Excel workbook per project — a Summary tab with each trade's Low/Median/High/Spread/Gaps plus a project rollup, and one tab per CSI division in the standard GC leveling-workbook shape. Estimator edits to unit prices propagate via formulas.

    • Award a winning bid on each trade comparison.

      New feature

      The comparison page has an "Award winner" control with confirm. Awarded columns get a sage accent end-to-end (header, subtotals, total). The project page gains a "Trades Awarded" tile and the trade list shows the winner inline.

    • AI Estimator now asks one question at a time, with tappable chips on discrete answers.

      Improvement

      The model used to occasionally ask compound questions all at once. Backend now rejects those in-loop so the model self-corrects within the same turn.

    • AI Estimator no longer re-runs the "have we discussed this before" check on every user turn.

      Improvement

      It treats the first lookup as authoritative for the conversation unless the building type, size, or location materially change.

    • AI Estimator starts replying immediately on the first message.

      Performance

      Removed a multi-second pre-flight step that used to delay the first response.

    • Dashboard loads your data on first sign-in instead of briefly showing the empty state.

      Bugfix
    • Dashboard opens on Projects, not Bids.

      Improvement

      Replaced bid-status counters with project-first metrics — Total Bids, Projects With Bids, Trades Covered. Each project card now carries a bid count, trade count, total value, range, and small trade pills.

    • AI Estimator's activity feed shows its work in the order it happened.

      Improvement

      Plan text, prior-estimate lookups, pricing-memory checks, clarifying questions, estimate building, and the final estimate table now appear as ordered semantic parts of the message — fixes the "estimate-building progress disappears immediately" glitch.

    • Auto-fill plug values now use peer bidder totals, not individual line items.

      Bugfix

      When a real bidder had multiple line items in a single scope row, auto-plug math was being computed at half the bidder total.

    • AI Estimator clarifying questions no longer fall back to a generic placeholder.

      Bugfix

      A malformed clarifying question from the model used to surface a generic "What would you like to do?" card. The placeholder is now treated as missing and the question is omitted entirely.

    • Expanded CSI code reference and faster page loads.

      Improvement

      The CSI MasterFormat lookup table now covers the full parsed 2020 list (was a curated subset). The CSI endpoint is gzipped and cached so pages don't re-download it on every navigation.

    • Attach PDF, Excel, or Word documents directly to AI Estimator conversations.

      New feature

      Drop a spec, an existing bid, or a sub's proposal into the chat. The Estimator treats them as authoritative reference material and cites them by filename.

    • Comparison page — denser layout, less clicking.

      Improvement

      Quantity, unit, and unit-price now sit under every cell. Per-bidder clarifications and assumptions appear as inline icons on the cells they apply to. Spread column removed — the summary card up top already has the only spread that matters.

    • Comparison title links back to the project (Project Name / Trade).

      Improvement
    • Auto-filled plug values use the trade average instead of the median.

      Improvement

      Easier to explain to an estimator scanning the column.

    • Subcontractors directory page.

      New feature

      A dense, ratings-driven list of subcontractors derived from your bid data. Each row shows trade coverage, geography, and a 1–5 rating.

    • Cross-conversation detection in the AI Estimator.

      New feature

      When you ask about a project the Estimator has discussed before — same building type, size, location — it surfaces a "We may have already discussed this project" card with a link to the prior conversation, so refining an estimate happens in one place.

    • Auto-fill gaps in comparisons with peer-bidder placeholder prices.

      New feature

      When one bidder didn't price a scope row, Structa drops in a "plug" value (peer mean, italic orange) so the column total is a fair comparison. Editable inline; manual edits are preserved.

    • Comparisons now group by CSI section instead of flat rows.

      Improvement

      Comparison rows roll up under CSI section headers. Bid detail pages got the same treatment.

    • Bid detail page — line items now in a unified table.

      Improvement

      Stacked card-sections (one per CSI division) became one table with section headers inline. Section totals sit in the TOTAL column. Hover-to-reveal row actions appear together. Qualifications expand per-type.

    • Comparison page fills the screen and scrolls horizontally on narrow viewports.

      Improvement

      Removed a min-width constraint that left dead whitespace on the sides; long comparisons now scroll horizontally inside the page rather than overflowing the layout.

    • Comparison detail page no longer 500s on certain bids with qualifications.

      Bugfix
    • Bid extraction now surfaces qualifications, alternates, and ROM line items in the UI.

      Improvement

      The richer extraction schema is now visible end-to-end — qualification chips, a Stated Bid Total card, and a comparison table with separate Base / Alternates / ROM blocks plus a narrative-diff expander.

    • Deleting a project no longer deletes its bids.

      Improvement

      Bids survive when their project is deleted — they stay in the library for the AI Estimator. Comparisons still delete with the project.

    • Bid total card shows one number instead of two competing totals.

      Improvement

      Combined "Total Amount" and "Stated Bid Total" into a single card. The reconciliation warning only fires when both numbers exist and disagree. Lump-sum bids no longer trip a false mismatch.

    • Project detail page no longer 500s under the new extraction schema.

      Bugfix
    • AI Estimator returns confident ROM estimates with interactive tables and Excel/PDF export.

      New feature

      The Estimator now produces a structured estimate — trade breakdown, allowances, notes — rendered as an interactive table you can download as Excel or PDF.

    • Pricing Memory page — historical pricing across your bids, with cross-org aggregates.

      New feature

      Aggregated pricing intelligence — what scopes cost (low / mean / high), how many bids back each number, and how recent it is. Two modes — own org and global (cross-org with a five-bid minimum for anonymization).

    • Brand refresh across auth pages, sidebar, and the in-app UI.

      Improvement

      Auth page redesign with a blueprint-grid backdrop, sidebar overhaul (dark slate, Structa logomark), and a top-to-bottom UI consistency pass.

    • Project deletion now has a confirmation dialog, plus assorted accessibility and navigation cleanup.

      Improvement
    • AI Estimator chat — bug-sweep across the conversation lifecycle.

      Bugfix

      Messages now persist across navigation, the user message commits immediately (no more "did it send?"), streams survive switching conversations, URLs route per conversation, and loading skeletons replaced the empty flash.

    • AI Estimator chat — initial release.

      New feature

      Ask a natural-language pricing question, get a streaming, source-citing reply. The Estimator can query your own bids and an anonymized cross-org pool. Persistent conversations, image attach, suggested questions.

    • Bid Comparison — initial release.

      New feature

      Click "Compare" on a trade with multiple bids; Structa matches line items across bids using CSI grouping plus an LLM fuzzy-matching pass, then renders a dense side-by-side spreadsheet. Excel and PDF export.

    • Bid file downloads now work via signed URLs.

      Bugfix
    • Frontend pages for bid upload, extraction tracking, line-item review, project management, and the dashboard.

      New feature

      The first usable end-to-end UI — upload a bid (PDF, Excel, Word), watch extraction progress, review the extracted line items, manage projects from a dashboard.