Filter by CSI division
Riverside Office Renovation
You are a construction estimating expert for GCs and subs...
A full-stack Next.js app with CSI line items, division grouping, configurable markups, live bid totals, and an AI estimating agent wired to the Vercel AI Gateway. Fork it and build your estimating workflow on top.
LoadBear · Next.js · AI SDK 6
Editable table of 30+ line items grouped by CSI division. Inline editing for description, quantity, unit, unit cost, and cost type. Auto-calculates row totals and division subtotals.
Chip-style filter bar across all 8 CSI divisions. Single-click to scope the table to one division; click again to deselect and return to all items.
Line items grouped under division header rows with running subtotals. Pre-loaded with Div 01–16: Site Work, Concrete, Structural, MEP, Finishes, and General Requirements.
Every line item tagged as Material, Labor, Equipment, or Subcontractor. Powers the roll-up cost breakdown bars in the Bid Summary.
Configurable overhead %, profit margin, contingency, bond cost, and sales tax on materials. Each field shows the resulting dollar amount next to the percentage input.
Sticky card with cost breakdown progress bars by type, all markup line items, and the final total bid. Updates live on every keystroke.
Editable project info — name, client, estimator, address, estimate date, and bid due date. Launches an edit dialog on click; saves to the reactive store.
Modal form for adding a new line item. Dropdown selectors for division and unit; radio buttons for cost type. Appended to the correct division group on save.
Floating chat panel connected to the Vercel AI Gateway. Five callable tools: updateMarkup, updateLineItemCost, updateLineItemQuantity, addLineItem, deleteLineItem — all execute client-side against the live estimate store.
Settings modal with General and Agent tabs. Swap between Claude, GPT-5 Mini, and Gemini; tune temperature, max tokens, and system prompt. All settings passed to /api/chat on each request.
Zero-dependency state in lib/estimate-store.ts using useSyncExternalStore. Typed actions and derived selectors for direct costs, cost-type subtotals, and markup calculations.