Dashboard
KMI Construction bid pipeline
Recent bid opportunities
Bid decisions
Monthly opportunities
Activity feed
My projects
Projects you're assigned to
Project
Submittals
Across all my projects
Submittal
Procurement
Open on desktop
This feature isn't available on mobile yet
Mobile is currently focused on T&M ticket capture, submittal review, and project directory access. For everything else, please open the CRM on a desktop or laptop.
Bid Opportunities
Track and manage all incoming bid opportunities
New bid opportunity
Opportunity details
Vendor assignments
Assign vendors and (optionally) a vendor contact to this bid. Pick a vendor first; the contact dropdown then filters to that vendor's contacts. Multiple vendors and contacts allowed.
Addenda
Scope checklist
Create proposal
Project details
Project inclusions
Project exclusions
Cost breakdown
Description
Qty
Unit
Bid Amount
Total Bid Proposal$0
Alternate pricing
Optional additions the customer can accept \u00b7 priced separately, not part of the base bid total
Description
Bid Amount
VE pricing
Value-engineering alternatives that could replace scope in the base bid \u00b7 priced separately
Description
Bid Amount
Projects
Awarded and active construction projects
New project
Project Details
Project Directory
Submittals
PO's & Subs
Procurement
T&M Tickets
Change Orders
Project details
Foundation set-up
Fields used when exporting this project's Job File CSV to Foundation Software. Additional fields (geographical area, project class, retainage, etc.) will be added here as needed.
Pulled from the Foundation customer master imported on the Templates page. Required for CSV export.
When checked, the Job File CSV writes "Y" for A/P Tax Exempt; otherwise "N". You can also toggle this from the Send Project Kickoff modal.
Default cost codes for Change Order exports
All labor on a CO posts to this code, class 1.
Fallback for materials not in the project list. Class 2.
Fallback for subs not in the project budget. Class 3.
Labor rate template
Change Order settings
COR form template, Overhead & Profit percentages, and Bond rate for this project. Labor doesn't get marked up.
Some customers require their own COR form. Pick "Hunzinger Construction" for Hunzinger projects — the COR PDF will be rendered in their format with their layout, labels, Reg/T&H/DT columns, and Added/Omitted scope sections.
Applied to the COR subtotal as a separate "Bond Cost" line. Leave at 0 if not bonded.
Project material list
Project parameters
Answers reused to auto-fill submittal forms (block sizes, finishes, wire sizes, etc.)
Attached files
Vendor quotes, drawings, photos — anything you want kept with the project
New purchase order
Purchase order header
Auto-generated as
{projectNumber}-NNN. Editable if needed.Short vendor code (optional). Auto-fills from vendor record if set.
Project informationPulled from the project record — edit on the Project Details tab
Line items
| Qty | Unit | Description | Item # | Class | Unit price | Line total |
|---|
Totals
Default 0%. Enter the rate applicable to the delivery location.
Subtotal:$0.00
Sales tax:$0.00
Total:$0.00
Customers
Construction companies and organizations
Project Managers
KMI project team directory
Vendors
Subcontractors, suppliers, and other vendor companies
Vendor Contacts
People at vendor companies
Analytics
Bid pipeline and proposal performance
Overview
By customer
By project type
Bid decisions
Outcome pipeline
Users
KMI internal staff — estimators and team members
Templates
Manage clarifications, exclusions, and cost templates
Company types
Project types
Project roles
Vendor types
Spec sections
Master list used by Submittals and Product Library — edits propagate everywhere
Project parameters
Questions answered once per project — drive auto-fill on submittal forms
Inclusions
Exclusions
Clarification groups
Cost item templates
Labor rates
Material templates
Global libraries of common materials, applied to projects as snapshots
Build named libraries (e.g. "KMI Standard Masonry 2026") that can be applied to a project's material list with one click. Each row references a Foundation cost code (only
isBudgetable codes are selectable). Templates are snapshotted when applied — editing a template later does not disturb projects already using it. Multiple templates can be applied to the same project.
Foundation master dataUsed by the budget feature for CSV exports back to Foundation Software
Upload exports from Foundation to keep cost codes, cost classes, and the customer master in sync.
Each upload replaces the corresponding table after a confirmation prompt.
The budgetable flag on cost codes — which controls whether a code is selectable in the budget UI — is preserved when re-importing.
Cost codes
Required columns:
cost_code_no, description. Other columns are ignored.
Cost classes
Required columns:
cost_class_no, description. Other columns are ignored.
Customer list
Required:
customer_no, name. Optional: address_1, address_2, city, state, zip_code, sort_name.
BPR Classification → Cost Code MapPre-fills the cost code when importing procurement items from a Bid Price Report
Each entry maps a BPR classification (and optionally a specific material code within it) to a Foundation cost code.
When the picker resolves a row, project overrides beat global, and material-specific entries beat class-only entries.
Entries are usually populated automatically via the "Remember these cost codes?" prompt after a BPR import — use the manual editor below only when you want to set defaults up-front.
Budget template linesThe default 31-row skeleton populated when extracting a bid price report
Each line maps a Foundation cost-code/class to a source on the bid price report.
manual lines start at zero and stay there unless the user enters a value.
Inline editing of source mappings will be added in a follow-on chunk.
Budget settings
Equipment cost split (%)
PDF equipment total is divided into these four cost classes. Should sum to 100. Class 4 (Small tools) defaults to zero per current procedure.
Quantity conversions
Convert PDF raw units into Foundation budget quantities.
Auto-routing rules
When a PDF extraction includes an item that doesn't match a configured budget template line, these rules try to route it to a known cost code/class.
Items that match a rule are added to the budget automatically; items that don't match appear in the unmapped panel for manual review.
Two match types: classification matches a 2-3 letter classification code on the PDF (DEM, PA, etc.); misc_other matches a case-insensitive substring in the misc-line label (e.g. matching "sealant" catches "Joint Sealants").
Two match types: classification matches a 2-3 letter classification code on the PDF (DEM, PA, etc.); misc_other matches a case-insensitive substring in the misc-line label (e.g. matching "sealant" catches "Joint Sealants").
Budget
Project budgets — upload bid price reports, generate Foundation CSV exports
T&M Tickets
Daily Time & Material field tickets — captured by foremen, signed by customer superintendents, rolled into Change Order Requests
New T&M ticket
Ticket details
Labor / Personnel
One row per worker. Hours captured in three buckets: ST (straight time), OT (1.5×), and DT (2.0×). Premium-time CORs will use the OT and DT columns; standard T&M CORs use all three.
| Name | Classification | ST hrs | OT hrs | DT hrs |
|---|
Equipment used
| Type / Manufacturer / Capacity | Hours |
|---|
Materials used
Free-text entry for now. In Round 2, the Description field will become a dropdown sourced from the project's material list (Material Templates on the Templates page).
| Description | Quantity |
|---|
Construction Manager comments
Change Order Requests
Roll up approved T&M tickets, capture premium time and fixed fee changes, and send formal change orders to your customers
New Change Order Request
COR header
Set this when the customer issues their own CO number against this COR.
Date the customer issued their formal CO. Fill in when you receive the actual CO from the customer.
Rolled-up T&M tickets
Labor breakdown
Materials
Equipment
Subcontractors
Unit Pricing
Grand total
Email log
Audit history of emails sent through the CRM
Email settings
Configure outbound email behavior
Product Library
Manufacturers, products, and the data sheets / test reports we submit
Products
Manufacturers
Add product
New product in the master library
Product details
Configure form
Detected PDF fields
Questions
Group PDF fields into questions the user answers per submittal
Submittals
Per-project tracking list — what we owe the customer and where each item stands
Add submittal
New submittal item
Submittal details
Import Data
Upload CSV files to import customers, project managers, users, or opportunities
How to use: Download the template CSV for each record type, fill in your data following the column format, then upload the file below. Existing records will not be duplicated if the same company name / email already exists.
Customers
Required: Company Name. Optional: Contact Name, Type, Address, City/State/ZIP, Email, Phone.
Columns:
Company Name, Contact Name, Company Type, Street Address, City State ZIP, Email, Phone
Project managers
Required: First Name, Last Name, Company Name. Company must already exist in the CRM.
Columns:
First Name, Last Name, Title, Company Name, Email, Cell Phone, Office Phone
Users
Required: First Name, Last Name, Email, Role. Role must be: Estimator, Project Manager, Project Executive, Superintendent, Admin, or Other.
Columns:
First Name, Last Name, Email, Phone, Role
Bid opportunities
Required: Project Name, Customer Company Name. Customer must already exist. Estimator matched by email. PM matched by first + last name.
Columns:
Opportunity ID, Project Name, Customer Company Name, Project Type, Bid Due Date, Estimated Value, Assigned Estimator Email, Customer PM First Name, Customer PM Last Name, Project Address, City, State, Zip Code, Notes, Decision, No-Bid Reason
Import log
No imports yet.
Supabase Connection
Connect to a shared database so all team members see the same data
Connection status
Not connected
How to set up
- Go to supabase.com and create a free project
- In the SQL Editor, run the kmi_crm_supabase_schema.sql file
- Go to Project Settings → API
- Copy your Project URL and anon public key
- Paste them below and click Connect & sync
Connection settings
Data migration
After connecting for the first time, click Push local data to cloud to upload any data you already entered.
Once connected, all saves happen automatically in real time — any team member opening the app will see the same data.
Once connected, all saves happen automatically in real time — any team member opening the app will see the same data.