Skip to content
What we do

Seven ways to take work off your plate.

Most engagements start with one of these and grow into the next. If you are not sure which you need, tell us what keeps going wrong and we will say where we would start. When the trouble is time lost to repeated work, the free audit measures it first.

One order desk, one person, one week, 40 hoursBEFORE9.2 reading email15.3 keying orders5.4 stock7.7 invoicing + errors2.4 talking to customersAFTER32.1 hours handed back to the person0h10h20h30h40hCoral is the time that always needed a human. It is the one block that did not shrink.One order desk, one weekbeforeafterreading email9.2 h1.1 hkeying orders15.3 h1.8 hchasing stock5.4 h0.9 hinvoicing + errors7.7 h1.7 htalking to customers2.4 h2.4 h32.1 hours handed backTalking to customers did not move.It is the one row that did not shrink.
fig. 00 · one order desk, measured over two weeks
31engagements since 2019
7 momedian payback across all of them
82%median share handled without a person
0clients locked in. You own the code and the data
Which one do you need

Start from the symptom, not the service name.

Nobody wakes up wanting workflow automation. They wake up because the same thing went wrong again on Friday. Find the sentence that sounds like your week.

What you actually saidWhat is going onWhere we would start
“We rekey the same order into three systems.”Integration gap being paid for in salary. Usually 10 to 18 hours a week per person.Business Automation$8,000 to $14,000
“Two people do nothing but answer the same forty questions.”The answers exist in your records already. Nobody has connected them to the inbox.AI Solutions$12,000 to $22,000
“Everything runs off one spreadsheet and I am scared of it.”Single point of failure with no audit trail. This is the one that ends badly.App DevelopmentBusiness Automation$18,000 to $40,000 · $8,000 to $14,000
“Our site looks fine but nobody ever fills the form.”Usually load time on mobile, sometimes a form asking for nine fields when three would do.Web Development$9,000 to $24,000
“We tried an off-the-shelf tool and abandoned it.”The tool assumed a process you do not have. The fix is rarely another tool.ConsultingBusiness Automation$1,500 · $8,000 to $14,000
“I do not know where the time goes, honestly.”Most common answer, and the reason every engagement starts by measuring rather than proposing.Free audit firstfree audit first
The arithmetic

One real engagement, with every number shown.

This is the parts distributor from the top of the page: the same order desk, the same week, orders arriving as email attachments. We shadowed it for two weeks before quoting, which is where these figures come from.

Before
Orders arriving by email each weekcounted212
Average handling time per ordertimed4 min 20 s
Hours a week spent on order entry212 × 4.33 min15.3 h
Loaded hourly costpayroll + 22%$38.00
Annual cost of the manual path15.3 × 38 × 52$30,233
After
Orders handled without a person187 of 21288%
Exceptions still reviewed by hand25 × 4.33 min1.8 h
Annual cost of the remaining human time1.8 × 38 × 52$3,557
Annual cloud and model spendmetered$4,800
One-time buildfixed price$9,800
Saved every year, from year one30,233 − 3,557 − 4,800$21,876
Payback on the build9,800 ÷ (21,876 ÷ 12)5.4 months

Nobody was let go. The same person still sits at that desk, doing the parts of the job that needed a person. That is the honest version, and it is also why the saving is real rather than a headcount line we drew on a slide.

What it looks like built

Four things we shipped, drawn to scale.

Names are changed and the figures are rounded, but the timings, the percentages and the failure paths are the ones we measured. If a diagram here has a number on it, that number came from a log.

Business Automation

The four minutes a person spends being glue.

A document arrives. Six systems need to agree about it. Somebody opens five tabs and retypes the same twelve fields, and by now that is simply the job. We replace it with a pipeline that runs in about four seconds and escalates only the cases it is not sure about.

ONE ORDER, END TO END4.34 s machine time · replaces 4 min 20 s of human timeEmail landsinbox webhook40 msParse the PDFlayout model0.4 sMatch the SKUfuzzy + history1.1 sPrice and termscontract lookup0.3 sCredit checkledger read0.9 sWrite to the ERPBusiness Central1.4 sConfirm to buyertemplated reply0.2 sHuman review queue12% of orders · 25 per week · Slackno confident matchone keystroke returns it to the pipelineONE ORDER, END TO END4.34 s machine timereplaces 4 min 20 s of human timeEmail landsinbox webhook40 msParse the PDFlayout model0.4 sMatch the SKUfuzzy + history1.1 sPrice and termscontract lookup0.3 sCredit checkledger read0.9 sWrite to the ERPBusiness Central1.4 sConfirm to buyertemplated reply0.2 sHuman review queue12% of orders · 25 a week · Slackno confident match, so a person decidesone keystroke returns it to the run

Drag to follow the run

fig. 01 · order intake for a parts distributor · 4.34 s machine time

What it touches

InboundEmail, EDI, portal scrape, SFTP drop, webhook
SystemsBusiness Central, NetSuite, QuickBooks, Shopify
Runs onYour AWS or GCP account, Temporal for the state

How we prove it

Shadow runTwo weeks beside the humans, no writes
Gate to go live95% agreement with the person, or we do not ship
RollbackOne flag, reverts to manual in seconds

What it costs

Build$8,000 to $14,000 typical
Running$180 to $400 a month in cloud
AI Solutions

A model is only worth having if it knows when to stop.

Anyone can wire a model to an inbox. What decides whether you can leave it running unattended is the confidence threshold on each branch, tuned against your own labelled history, so the thing hands over instead of guessing.

It reads your history, not the internet

We fine-tune on eighteen months of your own resolved tickets. The model learns your SKUs, your abbreviations, the way your customers actually write.

Every answer carries its receipt

Each reply links the three source records it drew from. A person can check the work in four seconds without leaving the thread.

The threshold is yours to move

One slider per branch. Start at 0.97 and almost nothing auto-sends. Most clients settle near 0.92 after the first month of watching it.

ONE WEEK OF INBOUND1,840 messages arriveemail 1,402 · web form 311 · SMS 127Classifierf1 0.94 on held-out weekQuote request41%Prices it from the contract, drafts the replyauto-sent above 0.93Order status28%Reads the ERP, answers with a tracking linkauto-sent above 0.90Return or claim17%Opens an RMA, attaches the photosalways shown to a person firstEverything else14%Summarised, tagged, put in the right queuenever auto-sentBelow threshold → a person166 messages · 9% · median wait 11 minNothing is deleted. Every branch keeps the raw message.ONE WEEK OF INBOUND1,840 messages arriveemail 1,402 · web 311 · SMS 127Classifierf1 0.94 held-outQuote request41%Prices it from the contractauto-sent above 0.93Order status28%Reads the ERP, sends trackingauto-sent above 0.90Return or claim17%Opens an RMA with the photosalways seen by a personEverything else14%Summarised, tagged, queuednever auto-sentBelow threshold → a person166 msgs · 9% · waits 11 minNothing is deleted. Every branchkeeps the raw message.
fig. 02 · one week of inbound at a wholesale supplier
ModelsClaude for reasoning, a small local classifier for routing
Your dataStays in your tenant. No training on it by the vendor
EvaluationA held-out week, rerun on every prompt change
Drift watchWeekly agreement report, alert under 0.90
Build$12,000 to $22,000
Running$0.004 per message at current volumes
App Development

The spreadsheet the whole operation quietly depends on.

Every company we meet has one workbook that the whole operation depends on, that one person understands, and that breaks when two people open it. We turn that workbook into something with accounts, an audit trail, and a phone layout the crews will actually use.

dispatch.yourcompany.ca · Tuesday 17 Feb
Northline Mech.4 crews · 6 jobs todayTodayDispatch boardCrewsInventoryInvoicesPhotosSettingsJOBCUSTOMERCREWWINDOWSTATUSDispatch board2 jobs need attentionD-4471Blackcakes BakeryCrew 208:00 - 10:00On siteD-4472Riverdale DentalCrew 109:30 - 11:00TravellingD-4473Hanlon FreightCrew 410:00 - 13:00Parts missingD-4474Kensington GrocerCrew 211:15 - 12:00ScheduledD-4475Etobicoke AutoCrew 313:00 - 16:30ScheduledD-4476Leslieville Cafe-14:00 - 15:00UnassignedLast write 14 s ago by dispatch@northline · every change is versioned

Drag to see the rest of the board

09:14OfflineD-4473 · Crew 4Hanlon Freight2280 Dixie Rd · 10:00 - 13:00Parts missing, flagged 08:51ArriveAdd photoClose jobQueued: 2 photos, 1 note.Syncs when signal returns.
fig. 03b · the same job, in a van · arrive, photograph, close

One thumb, in the rain, with no signal

The office view and the field view are the same records, drawn for two different jobs. The crew never sees a table. Everything they touch is 48px high because they are wearing gloves, and every write is queued locally, so a basement with no bars costs nobody an afternoon of re-entry.

The part nobody demos

Every field keeps its own history. When an invoice is disputed four months later the answer is one click rather than an afternoon in somebody’s sent folder.

What you own at the end

OfflineFull read, queued writes, reconciles on reconnect
Retention7 years, immutable, CSV and Parquet export
Build$18,000 to $40,000, then $60 to $220 a month
Web Development

Built for someone on three bars in a parking lot.

Most agency sites open with a hero video and four seconds of JavaScript. Yours gets opened one-handed, outdoors, by someone deciding whether you are worth a phone call. Everything below follows from that.

6.81s → 1.12s

Largest contentful paint on a mid-range Android over Fast 3G.

2.4MB → 118KB

Total transferred on a first visit to the home page.

+34%

Enquiry form completions in the ninety days after launch.

0s1s2s3s4s5s6s7s8sBEFORE · LCP 6.81sdocument0.40sstyles.css1.20sapp.bundle.js3.10shero.jpg 1.8MB2.40sfonts (4 faces)0.90stagmanager.js4.21sAFTER · LCP 1.12sdocument0.18sapp.js (18KB)0.30shero.avif 94KB0.55sfonts (2 faces)0.24sanalytics, deferred0.42sMoto G4, Fast 3G, cold cache, median of 9 runs. Styles are inlined, so they never appear as a request at all.0s2s4s6s8sBEFORE · LCP 6.81sdocument0.40sstyles.css1.20sapp.bundle.js3.10shero.jpg 1.8MB2.40sfonts (4 faces)0.90stagmanager.js4.21sAFTER · LCP 1.12sdocument0.18sapp.js (18KB)0.30shero.avif 94KB0.55sfonts (2 faces)0.24sanalytics, deferred0.42sMoto G4, Fast 3G, cold cache,median of 9 runs.
fig. 04 · the same home page rebuilt · the tag manager was 62% of it

What it touches

StackNext.js, statically rendered, no client framework on marketing pages
CMSSanity or plain MDX in your repo. Your call, both are fine

How we prove it

Budget enforcedBuild fails over 120KB of JavaScript on any route
AccessibilityWCAG 2.2 AA, checked in CI on every pull request

What it costs

Build$9,000 to $24,000 depending on page count
Questions we get in the first call

The awkward ones, answered first.

Will this let us cut staff?
Sometimes, but we will not build the business case on it and we would rather you did not either. Every engagement we have shipped ended with the same headcount doing work that was actually worth their salary. If your plan depends on redundancies to pay for the build, the arithmetic is usually thinner than it looks once you price the handover and the knowledge you lose.
What happens if we stop working with you?
Everything runs on accounts in your name, billed to your card: your cloud, your database, your repository. We hand over the code, a runbook and a recorded walkthrough. There is no licence to renew and no part of it that phones home to us. This is deliberate, and it is the main reason people pick us over a platform.
Our data is a mess. Is that a problem?
It is the normal starting condition and it is the reason the audit exists. We would rather find the three years of inconsistent SKU naming at the start, when it changes the price, than in week three, when it changes the relationship. A mess is workable. A surprise is not.
Can you work with our existing IT provider?
Yes, and we prefer it. They usually hold credentials and context we need, and they will be there after we leave. We scope the boundary in writing in the first week so nobody is guessing about who owns what at two in the morning.
How much of this is just an API call to a model?
Some of it. The model is maybe a fifth of the work. The rest is the parts nobody demos: getting the data out of the system that has no API, deciding what happens when confidence is low, making failures visible, and making sure the thing can be turned off. If a vendor is quoting you on the model call alone, ask what happens on the day it returns something wrong.
Why fixed price rather than hourly?
Because we measure before quoting, so we are not guessing, and because an hourly rate quietly rewards us for the work taking longer. If we misjudge the estimate, that is our problem to absorb. It has happened twice in thirty-one engagements.

Not sure which one?

Tell us what keeps going wrong and we will say which of these fits, or whether none does. If the trouble is time lost to repeated work, the free audit costs the bottleneck first.