New customer order → shipped, cleaned up.
Six steps, six flags. About $10,920 a year comes back in hours alone, plus two invoices a quarter that quietly go unpaid.
Written in plain language on purpose. If anything in here needs a dictionary, that's my mistake, tell me. The technical version lives in the appendix, for whoever builds it.
Open chat →It pays for itself in month 8.3, and keeps paying after that.
Six steps, six flags. The retyping and the chasing go to software; Dana keeps only the judgment calls. The hours go back into the work that brings money in.
Every month this sits unapproved costs about $871, roughly $201 a week, already net of running the build. If it hasn't paid for itself inside 12 months, your $997 comes back.
- Squarespace
- QuickBooks Online
- Your inventory system
- The warehouse inbox
- The master spreadsheet (goes away in the build)
- Google Sheets
- Squarespace
- QuickBooks Online
- Your inventory system
- The warehouse inbox
- Google Sheets
- Make (new in the build)
Your move, at the bottom: approve it, or ask me anything → Either is fine. Everything below is the proof, open what you want to check.
You don't have six problems.
You have one broken chain creating six symptoms.
You drew six steps. Every one of them is carrying a flag. The pattern is simple: the order arrives clean in your web form, then people spend the rest of the week moving it by hand between a spreadsheet, an inbox, and QuickBooks.
The hours are the easy part to see: this workflow costs the office about 8 hours a week, roughly $12,480 a year at the $30 an hour you gave me. The build gives 7 hours a week of that back, $10,920 a year. The quieter cost is step 5: nobody follows up unpaid invoices, and you told me two went unnoticed last quarter. And one of the fixes isn't a build at all: QuickBooks can already chase unpaid invoices, it's just switched off.
What I did not find
No software gap. You own an order form, an inventory system, and QuickBooks, and none of them talk to each other. That's why this is a wiring job and not a systems replacement, and it's why a full ERP system is marked skip in the build / use what you own / skip table.
02 — Your map, and where it sticksBefore
6 steps · 4 handoffs · 6 flags. Open any flagged step for what it costs and the fix.
Your map, redrawn so the whole team can read it. Every step carrying a flag opens: click its number for what that one costs you, and what I'd do about it.
Before
6 steps · 4 handoffs · 6 flags. Open any flagged step for what it costs and the fix.
Your map, redrawn so the whole team can read it. Every step carrying a flag opens: click its number for what that one costs you, and what I'd do about it.
01The master spreadsheet is the real system of record, and only Sam fully understands it. If Sam is out, orders stop.
02A hand-written email per order, asking a question the inventory system already knows the answer to.
03Orders placed Friday afternoon sit until Monday. Nothing moves until someone checks the inbox.
04The same order details, typed a second time. This is where the wrong-amount invoices come from.
05No reminder, no alert, no report. Two invoices went unpaid and unnoticed last quarter.
06The warehouse waits for Dana to forward a payment confirmation the payment system could send itself.
- SquarespaceYour order form
- QuickBooks Online
- Your inventory system
- The warehouse inbox
- The master spreadsheet
- Google Sheets
| Tool | verdict | why |
|---|---|---|
| Your order form | wire up | The details arrive clean, then Sam re-types them. It becomes the front door of the whole chain. |
| QuickBooks | wire up | Good software doing half its job. Invoices and reminders can run themselves from the order data. |
| Your inventory system | wire up | It already knows the stock answer the warehouse email is asking for. |
| The piece that connects them | add | The one new thing you'd pay for: it carries orders between the form, the list and QuickBooks. $39/mo. |
| The warehouse inbox | demote | Stops being the queue, becomes an archive. Pick tickets arrive on their own. |
| The master spreadsheet | retire | Archived as-is on switch day, findable but frozen. Its job moves to one shared order list. |
| Google Sheets | keep | The sheet software stays and does more: the shared order list is built here, written by the system and read by everyone. |
| keep | Unchanged. It carries the summaries and reminders, it stops being the workflow. |
03 — The clean pathAfter
The same job in five steps, one straight line, with the same software you already pay for.
Same job, same start, same finish, same software you already pay for. Software carries the information. Your people keep the judgment.
After
The same job in five steps, one straight line, with the same software you already pay for.
Same job, same start, same finish, same software you already pay for. Software carries the information. Your people keep the judgment.
- SquarespaceYour order form
- QuickBooks Online
- Your inventory system
- MakeThe piece that connects themnew
- The warehouse inbox
- Google Sheets
- The master spreadsheetretired
01was 01The form writes the order straight into one shared list. No spreadsheet.
02was 02 · 03Checked against live inventory the moment the order lands. Nobody emails the warehouse and nobody waits on the inbox reply.
03was 04 · 05Created and sent the same minute instead of typed into QuickBooks, chased politely until paid, stopped the moment payment lands.
04newNew step, on purpose: big orders and flagged customers wait for a person.
05was 06Payment tells the warehouse itself, no forwarded email. You get one summary of every order at 5pm.
Can it actually do this? One of the four automatic steps above is backed by the makers' own documentation. Where I could not confirm something, it says so: that is the honest state, and confirming it is the first thing the build does.
- 01Order lands in the order listnot confirmed · A1 Type it onceNot confirmed against documentation yet. I check this first, before anything is built on it.
- 02Stock answers itselfnot confirmed · A2 Stock answers itselfNot confirmed against documentation yet. I check this first, before anything is built on it.
- 03Invoices send themselvesnot confirmed · A3 Invoices send themselvesNot confirmed against documentation yet. I check this first, before anything is built on it.
- 05Paid → shipped → daily summaryone limit · A4 Retire the master spreadsheetThe limit: One account can make 60 changes a minute to the shared list. At about 25 orders a week you will never reach it; a one-off bulk import of thousands of rows would queue and take a few minutes rather than fail.Google Sheets API, Usage limits
04 — The numbersWhat the build gives back
$10,920 a year back. The arithmetic, fix by fix.
Here's what each piece gives back, in the currency that's easiest to check: hours. The strongest number pays back on top, and I've deliberately kept it out of the totals.
What the build gives back
$10,920 a year back. The arithmetic, fix by fix.
Here's what each piece gives back, in the currency that's easiest to check: hours. The strongest number pays back on top, and I've deliberately kept it out of the totals.
What 7 hours a week is worth
$24,156 is what it has handed back after three years of still running, after everything it cost to build and everything it cost to keep going. estimate
That number is not part of the promise above. I guarantee the first year because the first year is what I'll refund against. The build doesn't stop working at month twelve.
That's the boring version of the payback story, using hours only, at the pay figure you gave me. The invoices that stop going unpaid sit on top of this, and I've kept them out of every number on this page on purpose. If the boring version already clears the bar, the decision is made.
| Fix | Time saved | What you'll notice |
|---|---|---|
| The reminder switch Already in QuickBooks, switch it on | — | Unpaid invoices get chased this week, before you spend anything with me. |
| Type it once→ step 01 The form becomes the order record | 3.0 | Nobody re-types an order again. Wrong-amount invoices stop. |
| Stock answers itself→ step 02 Live inventory check, instant pick ticket | 2.0 | The overnight stock wait becomes seconds, Friday orders included. |
| Invoices send themselves→ step 03 Sent on order, chased day 3 and 7 | 1.5 | Dana stops typing invoices, and no invoice goes quiet again. |
| Retire the master spreadsheet→ step 05 One shared order list replaces it | 0.5 | One answer to "where's that order?", always current. |
| Together | 7.0 | Nearly a full working day, every week, back. |
Hours are estimates from your map and interview, not measurements. We measure for real after launch, on the status page.
The two invoices, on their own
Two unpaid invoices went unnoticed last quarter, by your own count. At your average order size, catching just those two pays for a quarter of this build, every quarter, forever.
I've kept that out of the payback numbers on purpose. It's the strongest number on this page and the one built on the fewest data points. I'd rather you approve this on the hours and be pleasantly surprised.
05 — Build / use what you own / skipNot everything here is mine to build
five built, one you already own, two I'm telling you not to buy.
Some of these lines make me no money. They're still the right call.
Not everything here is mine to build
five built, one you already own, two I'm telling you not to buy.
Some of these lines make me no money. They're still the right call.
Three of the eight lines here are yours to switch on or not worth buying. I'd rather tell you that now than have you find it after the invoice.
06 — SequenceThe build order
five fixes over about three weeks, the fastest payback first.
Ordered by impact over effort, not by what's satisfying to build. Each week you'll see something working.
The build order
five fixes over about three weeks, the fastest payback first.
Ordered by impact over effort, not by what's satisfying to build. Each week you'll see something working.
- yours, free
Flip the reminder switch, this week, without me
QuickBooks → Payments → Reminders. Ten minutes. The silent leak stops before you approve anything.
Do it before you approve anything - in the build
Build the invoice sender: raised on order, chased on day 3 and 7→ step 03
When an order lands, its invoice goes out with it, and the chase emails follow on day 3 and day 7 on their own. I also build the alert no product ships with: a flag when an invoice has no next reminder scheduled. Smallest build on the list, and first because it is the one attached to revenue.
The revenue fix ships first - in the build
Build the order record: the form feeds the list and QuickBooks→ step 01
An order arrives once, through your form, and lands everywhere it is needed: the shared order list and QuickBooks, carried by the rented piece that connects them. It goes in before the stock check because that fix reads its orders from the list, so what the record holds decides what the stock check has to handle.
The record the other fixes read · runs into week 2
By Friday: Nobody re-types an order again. Wrong-amount invoices stop.
- in the build
Wire up the stock check: the order asks, the inventory system answers→ step 02
When an order lands on the list, the inventory system is asked about each line and the answer comes straight back, with the pick ticket made up at the same time. Your system already holds the answer; this is the piece that finally asks it the question. Straightforward once orders land in a system instead of a sheet.
Needs the order record in place · runs into week 3
By Friday: The overnight stock wait becomes seconds, Friday orders included.
- in the build
Retire the master spreadsheet→ step 05
The sheet is exported and archived read-only, findable forever, never deleted. By this point the shared list already holds everything the sheet was tracking, so the job left is small: point the last lookups at the list, and keep both running side by side until you have seen them agree.
Usually shrinks by the time we get here
By Friday: One answer to "where's that order?", always current.
Watched for 30 days, fixes included. You don't file anything, I'm looking. On day 30 you get a scorecard putting the real numbers next to the ones on this page.
07 — The switchNothing turns off until the new way has proven itself
The old way keeps running beside the new one, and every switch has a way back.
The part most plans skip: what happens to your business while I build. Short version, your team keeps working exactly as they do now, and every switch is reversible.
Nothing turns off until the new way has proven itself
The old way keeps running beside the new one, and every switch has a way back.
The part most plans skip: what happens to your business while I build. Short version, your team keeps working exactly as they do now, and every switch is reversible.
If a new connection fails, that step falls back to the way you work today, visibly, instead of disappearing. The appendix spells this out fix by fix.
Built beside, not on top
Everything is built alongside the current process. Sam keeps the sheet, Dana keeps invoicing. Nobody learns anything new while I build.
weeks 1–2 · zero change to how your team worksOld way and new way, side by side
Each fix runs beside the old way on live orders until you've seen it be right. You compare, you call it.
a few days per fix · you decide when it's provenSwitch one step at a time, with a way back
The old way isn't deleted, it's retired. If anything feels off, we switch back in minutes while I fix it. The sheet is archived, never destroyed.
going back takes minutes, not a rebuildThirty days of me watching it
After launch I watch it run for 30 days. Anything that breaks in that window, I fix, included in the price. Then the handoff: docs, passwords, every account already in your name.
included · you own all of it from day one
08 — How we'll know it workedThe targets, written down before I build
three numbers agreed now, measured for real on day 30.
Agreed now, measured after launch on your build-status page. Not a testimonial, a scoreboard. If we miss them, you'll see that too.
The targets, written down before I build
three numbers agreed now, measured for real on day 30.
Agreed now, measured after launch on your build-status page. Not a testimonial, a scoreboard. If we miss them, you'll see that too.
The "today" column is estimates and your own reports. Part of week 1 is measuring the real baselines, so the after numbers mean something.
Approve, or ask
Two ways this can go, and the Clean Plan is yours either way.
What this costs
One build, one fixed price. The $997 for this plan comes off it in full.
- the price and the fix list don't change
- 30 days of me watching it run after launch, fixes included
- every account in your name, you own all of it · adds about $39/mo of new software, everything else runs on what you already pay for
How you'd like to proceed
This is one build, not a menu, the fixes depend on each other and I stand behind the numbers as a whole. Nothing here expires quietly: the pricing holds until September 19, 2026; after that I'd want to re-check the volumes before I'd stand behind them.
Appendix A — for whoever builds thisThe spec
The one technical section on this page, written for whoever builds it. You never need to open it. Inside: every rule each fix follows, written out, four claims quoted from the makers' own documentation.
This plan is yours, whoever implements it. If that's your IT person or another builder, this section is for them and it's the one place on this page where their language is allowed. Each fix keeps its plain name from above, with the technical translation underneath. If I build it, this is what I hold myself to. Every fix is written out rule by rule, including what happens when something goes wrong, so nothing about how it behaves is left to be discovered later. Where a fix depends on one of your systems being able to do something, I've quoted the makers' own documentation and linked it, so nobody has to take my word for it.
The spec
The one technical section on this page, written for whoever builds it. You never need to open it. Inside: every rule each fix follows, written out, four claims quoted from the makers' own documentation.
This plan is yours, whoever implements it. If that's your IT person or another builder, this section is for them and it's the one place on this page where their language is allowed. Each fix keeps its plain name from above, with the technical translation underneath. If I build it, this is what I hold myself to. Every fix is written out rule by rule, including what happens when something goes wrong, so nothing about how it behaves is left to be discovered later. Where a fix depends on one of your systems being able to do something, I've quoted the makers' own documentation and linked it, so nobody has to take my word for it.
A1 · Type it once
aka: form → order-record capture · systems: order form · shared order list · QuickBooks · behind step 01 of the after mapnot confirmed yet
The request always contains headers, including a signature, and a JSON payload.
Appends values to a spreadsheet.
- The order form's notification is signed. Check the signature against the signing secret from the deploy environment before reading a single field; a bad signature is rejected and logged, never processed.
- Append one row to the shared order list: submitted-at, customer, items, order value, status "new", and an empty invoice id.
- Append, never write to a row number, so two orders arriving in the same second cannot land on top of each other.
- Create the draft invoice in QuickBooks from those same fields, then write its id back to the order's row so the two are tied together.
- Anything malformed (no customer, no items, an unreadable total) goes to an exceptions view and Sam gets one email. Nothing is dropped silently.
- Answer the form immediately, before any of the slow work, so a slow step here can never look to a customer like a failed submission.
- If the list or QuickBooks cannot be reached, keep the submission and retry every 5 minutes for an hour, then alert Paul and Sam.
- The order record → one appended row on the shared order list, never by row numberchecked
- The order form's submission notification → the order fields the record needs (customer, items, quantities, total)confirmed on day 1
- The order fields → the draft invoice's own field names in QuickBooksconfirmed on day 1
A2 · Stock answers itself
aka: live inventory check + pick ticket · systems: shared order list · inventory system · warehouse printer/inbox · behind step 02 of the after mapnot confirmed yet
- A new row in the order list starts the stock check within a minute.
- Check every item and quantity on the order against live stock levels.
- All available: mark the order in-stock and send the warehouse one pick ticket with the order, the items and the address.
- Anything short: mark the whole order backorder and ask Dana to call the customer. A partly available order is a backorder, because a half-right pick ticket is worse than none.
- If inventory cannot be reached, leave the order "new", send no pick ticket, and tell Sam within 5 minutes so the old way (an email to the warehouse) can carry it. The failure mode is the old way, never silence.
- The order record → the inventory system's stock levels for those items and quantitiesconfirmed on day 1
- The stock answer → the warehouse's pick ticket, with the order and the address on itconfirmed on day 1
A3 · Invoices send themselves
aka: invoice automation + reminder sequence + miss alert · systems: QuickBooks · email · behind step 03 of the after mapnot confirmed yet
- When an order is confirmed, send the draft invoice that was created with it. Flagged customers and orders over Dana's threshold wait for her review first.
- Reminders go out on business day 3 and business day 7 after sending, from the templates Jane approves in week 2. Weekends are skipped.
- Check both conditions at SEND time, not when the reminder is queued: an invoice paid overnight must not be chased in the morning.
- Record a reminder only after the send succeeds, so re-running the morning job can never double-send.
- When payment lands, mark the order's row in the shared list paid the same minute. That row is what tells the warehouse to ship (the shared list's own rules take it from there) and what stops the reminders.
- An invoice that is unpaid with no reminder left to send becomes an alert to Dana. That silence is the thing that cost you two invoices last quarter.
- Customer replies go to Dana, a person, not to an automated inbox.
- The order record → the QuickBooks invoice it belongs to, tied by the invoice id written back to the order's rowconfirmed on day 1
- A QuickBooks payment → the order's row marked paid on the shared order listconfirmed on day 1
A4 · Retire the master spreadsheet
aka: shared order list + read-only board · systems: shared order list · behind step 05 of the after mapchecked, with one limit
The limit. One account can make 60 changes a minute to the shared list. At about 25 orders a week you will never reach it; a one-off bulk import of thousands of rows would queue and take a few minutes rather than fail.
Write requests: Per minute per project: 300
Write requests: Per minute per user per project: 60
- The shared order list is the record. Every status change is written there, by whatever made the change.
- Statuses are a fixed set: new, picking, invoiced, paid, shipped. Anything else is rejected, so the board can't drift into free text.
- Every change stamps what changed it and when, which is how "where is that order?" gets answered without asking Sam.
- A row turning paid sends the warehouse its ship notice itself, and the 5pm daily summary is one email built from the list, so neither depends on a person forwarding anything.
- The board is a read-only view of that list, so it cannot be edited by accident and can only ever go stale, which its "last updated" stamp says out loud.
- Bulk changes are written in batches of 50 with a pause between them, to stay under the 60-a-minute ceiling noted in the limit above.
- On switch day the old sheet is exported and archived read-only. It is kept and findable, never migrated.
The $0 reminder switch isn't specced, it's a setting inside QuickBooks: Payments → Reminders. Turn it on this week.



