Samuel Carson · Murfreesboro, Tennessee

I ran the money inside a general contractor. Then I built the software I wished I’d had.

Director of finance at a regional GC until early 2026: draws, job costing, sub compliance and cash flow across millions in active work. Since February I’ve built that whole lifecycle as software, a construction ERP running in production, an estimating and change-order engine, call-coverage portals and 151 automations.

Open to project manager roles · Middle Tennessee or remote · available now

Plymouth ERP · command center (demo company)

5,198

Commits

One every 70 minutes, day and night, for 251 days.

687,993

Lines of code

55 printed pages a day, every day, since February.

6,511

Test functions

About 26 new automated tests a day.

1,575

Pull requests merged

One merged every 3.8 hours, around the clock.

Counted across 27 private repositories on October 28, 2026. Client names stay out on purpose.

I didn’t learn construction from software. I learned software from construction.

SAMUEL CARSON · TWO YEARS IN THE BACK OFFICE, EIGHT MONTHS IN A REPO

The story

Both sides of the job.

Left side is what I lived running finance for a general contractor. Right side is what I built because of it. Same problems, now in software.

ON THE JOB · 2019 → 2026

WHAT I BUILT FROM IT · 2026

01

Chasing the draw.

Pay apps, schedules of values, lien waivers, and a lender who wants every line tied out before a dollar moves. I owned that cycle every month.

Draw and payment flow in the ERP.

Draw requests, lien waivers and insurance checked before a payment can release. The approval is the gate, not a spreadsheet.

02

Job costing after the fact.

Cost codes kept by hand, committed vs. actual chased down at month end, and the job that lost money only showing it once it closed.

Job costing, P&L by job, profit fade.

Cost codes, budgets and period close in one place, so a job going sideways shows up while there is still time to do something.

03

Sub paperwork blocking pay.

COIs expiring mid-job, W-9s missing, and a check that cannot go out until someone finds the certificate.

Compliance gates on every payment.

Insurance, waivers and vendor documents tracked on the sub, and a release that blocks itself when something is expired.

04

Numbers that drifted.

A price quoted on a call, a change order nobody signed, and a contract that no longer matched the scope in the field.

Estimating and change-order engine.

An estimate stays blocked until every line is priced. Approvals bind to a version. Change orders stay pending until signed.

05

Thirteen weeks of cash.

Payroll and material buys forecast against receivables that may or may not land on time.

Cash flow forecast and 151 automations.

A 13-week forecast off real AR and AP, and automations that move the paperwork so the forecast is not built by hand.

06

The phone nobody answered.

Leads calling at 6pm, a voicemail box that filled up, and jobs lost before anyone knew they existed.

Call-coverage portals.

Every call answered, logged and handed to a person, with a dashboard the owner actually reads.

The lifecycle

Every step of the job exists as working software

Ten steps from a stranger calling to the final check, built four times at different sizes: a production ERP, a seven-day estimating engine, three client portals and an automation stack. Every step is a real screen. Click one to see it full size.

01

Lead

Captured from a call, a form or an import. Scored only with a stated basis.

ERP · Portals · Automation

02

Call answered

An AI answers the phone; every call becomes a record with transcript and recording.

Portals · Automation

03

Estimate

Measurements in, priced by the contractor’s own rate table. A missing price blocks it.

ERP · Engine

04

Proposal

Six‑page packet in the client’s brand, generated from the estimate. Nothing sends unapproved.

ERP · Engine

05

Accepted

Customer accepts on a link. Edits lock, a repeat accept is refused.

ERP · Engine

06

Job

One conversion creates the client and the project. Cost codes, budgets, schedule of values.

ERP

07

Field

Photos tied to the job, daily logs that fill in the weather, crew routes, purchase orders.

ERP · Engine

08

Change orders

Versioned, approved, hashed. A changed number is a new version with a new approval.

Engine · ERP

09

Invoice & draw

Draw requests, AR drill‑down, lien waivers, commissions, QuickBooks connection.

ERP

10

Paid & closeout

Payments recorded, closeout items checked off, the audit log is append‑only.

ERP · Engine

Underneath each step

The parts a job actually runs on.

Thirty-three screens from the ERP and its portals, in three lanes. Each one names the lifecycle step it feeds. Click any to enlarge.

SELL & ESTIMATE

From a stranger to a priced, signed proposal.

FEEDS STEP 01

County prospecting map

Public parcel and permit mirror on a map: oldest roofs, recent permits, absentee owners, highest value.

FEEDS STEP 01

Territory prospects

Scored addresses with storm swath and owner of record. Knock the hot ones first.

FEEDS STEP 01

Land scout

GIS layers, zoning and active projects on one dark map for the next job.

FEEDS STEP 01

Lead funnel

Speed to lead, contact rate, appointment rate, close rate, pipeline value.

FEEDS STEP 02

Outbound call center

Storm follow-up queue with an AI caller and a human fallback, calling windows and DNC enforced.

FEEDS STEP 02

AI agent activity

What the answering agent did today: calls, bookings, escalations, follow-ups.

FEEDS STEP 03

Measurements

Order a verified roof report or read the one you already paid for.

FEEDS STEP 03

Takeoff builder

Plans in, quantities out, sheet by sheet, with a bid summary at the end.

FEEDS STEP 03

Estimate review

Every line priced from the rate book. An unpriced line blocks the total.

FEEDS STEP 04

Proposal designer

The customer-facing packet, built from the estimate in the contractor’s brand.

FEEDS STEP 03

Material pricing

Supplier quotes side by side per item, with the spread and savings captured.

BUILD & FIELD

Materials, subs, crews, trucks and the weather that moves all of them.

FEEDS STEP 06

Material orders

Every PO on the account, its supplier, its job and where it is in delivery.

FEEDS STEP 06

Suppliers

Pricing, terms, reliability and rebates per supplier, scored on real orders.

FEEDS STEP 06

Procurement optimizer

Single-supplier, split or availability-first plans for one job’s whole list.

FEEDS STEP 07

Sub pool

Who is clear to work, who has an expired COI, who is missing paperwork.

FEEDS STEP 07

Sub marketplace

Find, verify and invite qualified subcontractors to bid on a job.

FEEDS STEP 07

Permits & inspections

Permits by project and authority, with fees, status and failed inspections.

FEEDS STEP 01

Permit radar

A live city permit feed on a map, staged from issued to CO, pushed into leads.

FEEDS STEP 07

Work orders

Repair and crew work raised on a job, booked, assigned and closed with photos.

FEEDS STEP 07

Smart crew routes

Yard to job on Google Routes, with ETA, truck and a confirmed route per crew.

FEEDS STEP 07

Fleet tracking

Every unit, its driver, mileage, maintenance alerts and trip log.

FEEDS STEP 07

Weather intel

Seven-day trade feasibility per job: go, caution or stop for roof work.

FEEDS STEP 07

Time clock

GPS-verified clock-ins, hours by project, approvals pending.

FEEDS STEP 07

Safety

Incidents, toolbox talks, certifications and the days-since counter.

MONEY & RISK

Turns out the fastest way to get the draw approved was to write the approval system myself.

FEEDS STEP 09

AR & invoices

Aging buckets, who owes what, and the invoices behind each number.

FEEDS STEP 09

AP & AR overview

Cash, receivables, payables and the profit and loss by month.

FEEDS STEP 09

13-week cash flow

Inflows against outflows, week by week, with the running balance.

FEEDS STEP 10

Accounting sync

QuickBooks, payroll and bank feeds, with sync status and reconciliation.

FEEDS STEP 09

Sub draw queue

Subcontractor draws reviewed against compliance before a cheque is cut.

FEEDS STEP 05

Bonding

Surety capacity, active bonds, premiums and the bond schedule by project.

FEEDS STEP 09

Insurance & COIs

Policies, certificates and claims tracked against the jobs they cover.

FEEDS STEP 09

Credit lines

Facilities, limits, drawn and available, maturity and covenants.

FEEDS STEP 10

Profit fade

Bid margin against forecast on every job, with the root causes named.

FEEDS STEP 06

Savings

Identified, realized and pending savings by initiative and category.

FEEDS STEP 06

Vendor scorecard

Quality, timeliness, communication and price, ranked across vendors.

Eight months, side by side

Nothing here was built one after another.

Every project ran alongside the ERP, not after it. Each bar is first commit to last, from the same git history as the numbers above.

FEB

MAR

APR

MAY

JUN

JUL

AUG

SEP

OCT

Plymouth ERP

Feb → now · 4,232 commits · 480K lines

Automation stack

May → Jul · 151 workflows, 776 nodes

Call-coverage portals

Aug → Oct · 3 portals, 270 commits

Estimating & change-order engine

Oct 21 → 27 · 34K lines in 7 days

The engine bar is widened to stay visible: seven days on a nine-month axis.

Work

Four projects

Each card says what it is and what it does. Screens and walkthroughs use a demo company, never a client’s data.

In production

Plymouth ERP

Construction finance and operations for a contractor, from the first estimate to the paid invoice.

01

Feb 2026 to now

Feb 2026 to now

4,232

Commits

480K

Lines of code

5,277

Test functions

800+

API routes

Command center: backlog, margin, cash, the day’s board

Draws: every request, its status and its aging

13-week cash flow off real AR and AP

What it does

Proposal to job. The customer picks options on a link and accepts. Edits lock, a repeat accept is refused, and one conversion creates the client and the project. Tests cover the whole lifecycle, including tamper attempts.

Measurements. Order an EagleView report through the API, or upload a measurement report you already paid for. Labor is priced by roof pitch band from the contractor’s own rate table, so a steep section doesn’t get billed at the pitch of the biggest one.

Nothing reaches a customer unapproved. Every call, text and email goes through one guard that fails closed. Each send needs an approval for that recipient and a fresh password check.

A six‑page proposal packet. Cover, scope, materials, pricing, warranty and signature, in the contractor’s brand. A page drops out when it has no data.

One codebase, many contractors. Brand, vocabulary and feature set are per tenant, and row‑level security is forced on tenant tables.

Stack

React 19

Vite

Tailwind 4

FastAPI

PostgreSQL

99 migrations

Status

Running in production for a roofing contractor: estimating, proposals, job costing, field capture and a QuickBooks connection on one multi‑tenant codebase. New contractors get their own brand, vocabulary and feature set without a fork.

Built · live demo

Estimating and change‑order engine

Proposals that match the measured scope, and change orders that can’t drift, for multifamily and general contractors.

02

7

Days, first to last commit

89

Commits

34K

Lines of code

757

Test functions

Job overview: money by lane, nothing inferred

Change orders stay pending until signed

Walkthrough: proposal to signed contract (1 min, muted)

What it does

Reads a scope file. Quantities come in as unverified measurements, and lines it can’t match stay on the estimate as blockers instead of disappearing. No model call, and nothing in the file counts as a price.

Verified by evidence. A line counts as verified only when checked measurements add up to its quantity. The person who recorded a measurement can’t verify it.

Approvals bind to a version. Approve, change a number, and it becomes a new version. Issued proposals keep their hash.

Imports with a preview. Apply row by row after reviewing the preview. Amounts, dates and statuses in an import file are never imported.

Field side. A CompanyCam connection for projects and photos, and National Weather Service forecasts on each property.

Stack

FastAPI

Python 3.11

PostgreSQL (Neon)

React

TypeScript

Cloudflare Workers

LibreOffice

Status

Full lifecycle working end to end: scope file in, blocked‑until‑priced estimate, verified measurements, versioned approval, Word and PDF proposal, change orders and closeout. Every requirement is tracked in a status ledger.

Deployed · three clients

Call coverage portals

A private portal where a local service business sees every call the AI answered and every lead that came from it.

03

Aug 26 to Oct 23, 2026

Aug 26 to Oct 23, 2026

3

Client portals

270

Commits

75K

Lines of code

391

Test functions

Why I’m building this (48 s, captioned, no audio). Owner portal screens are real, client names changed.

What it does

Every call is a record. Summary, transcript, recording, category, sentiment, disposition, and whether it booked.

Scores need a basis. A lead score lists the signals behind it. With no basis the screen says Not scored, never a zero.

Released by an operator. Sourced leads reach the client only after an operator releases them with a written reason. The database enforces it, not the screen.

Errors look like errors. A failed load shows an error. It never shows an empty dashboard that reads as zero calls.

Open to Claude. One portal exposes its book as an MCP endpoint, so Claude can read the day’s brief and the approval queue.

Stack

Next.js 16

React 19

Supabase

Row‑level security

Netlify

Vapi webhooks

Untitled UI PRO

Status

Live for three clients, each on its own repository, database project and site. Every answered call lands as a record with transcript and recording, and operators release leads with a written reason.

Built · 151 workflows

Automation stack

151 n8n workflows that score leads, watch the systems, and set up a new customer when they pay.

04

Backed up May to Jul 2026

Backed up May to Jul 2026

151

Workflows

776

Nodes

98

Scheduled triggers

45

Webhook triggers

What it does

Customer set‑up on payment. A completed Stripe checkout adds the customer, clones the voice agent for them, and sends the welcome and follow‑up emails on a timer.

Calls to records. A voice‑platform webhook parses each call, logs it, and alerts me.

Lead scoring. Every reply gets a score from 1 to 10, and hot ones escalate within hours.

Watchdogs. A daily credential health check, burn‑rate alerts, and a router that sends every agent’s alerts to one inbox.

Stack

n8n

Stripe

Vapi

Twilio

Gmail

PostgreSQL

Airtable

Status

151 workflows across lead scoring, customer set‑up on payment, call ingestion and system watchdogs, with 98 scheduled and 45 webhook triggers. Switched on per client as they come aboard.

Experience

Finance first, then the software finance kept asking for

I spent years on the owner’s side of construction software before I built any. That is why every rule in the Story section is a mistake I have had to explain to an owner.

Feb 2026 — now

Founder and builder, Carson Systems

Designed, built and shipped the construction ERP, the estimating and change‑order engine, three call‑coverage portals, the automation stack and the rollout kit. Product owner, engineer and operator on every one: 5,198 commits, 1,575 merged pull requests, 6,511 tests, all counted from git.

Product

Full‑stack engineering

Operations

Until early 2026

Director of Finance, regional general contractor

Ran finance across $50M of active construction: draws, job costing, subcontractor compliance, cash flow, lender and owner reporting. Owned the systems the office ran on, and the gap between what they showed and what the field was doing.

Draws and job costing

Sub compliance

Cash forecasting

Let’s talk about the role.

I’m happy to walk through any of these systems live, show the code behind a number, or talk through how I’d run a product you already have.

samuel@carson.systems

About

I ran finance for a regional general contractor: draws, job costing, sub compliance, cash across $50M of active work. The software I was handed guessed, rounded and hid things. So I started building the version I wanted, and in eight months it turned into a company. Every rule in the Story section is a mistake I’ve had to explain to an owner.

Location

Murfreesboro, Tennessee

Background

Director of Finance, regional general contractor

Building since

February 19, 2026

Repositories

27, all private

Tools

Claude Code, FastAPI, React, Postgres, n8n

Built with

© 2026 Carson Systems · Samuel Carson

Counted from git on October 28, 2026

Counted from git on October 28, 2026