Skip to content
Innovation

How a Maine Marketing Agency Built the Software That Runs Its Clients' Businesses

Acadia Marketing of Maine launched its Limn platform in July. Three months later it runs leads, calls, booking, invoicing and video for dozens of businesses, with AI agents that act only inside limits a person approves.

John Phair

John Phair Courtesy of John Phair

Acadia Marketing of Maine sells a simple promise to the heating contractors, electricians, roofers and landscapers it works for: the same marketing reach the national franchises take for granted. Keeping that promise for dozens of small businesses at once takes more than websites and ads. It takes the machinery that answers the phone, books the job, sends the invoice and asks for the review.

So the Portland agency, founded by John Phair (profiled by Maine Business Wire), built that machinery itself. Its platform, Limn, went live on July 15, 2026. Three months later it handles leads, booking, calls, ad reporting, invoicing, social publishing and video for Acadia's clients, and other agencies can run their own clients on it, on plans from $97 to $497 a month.

By the numbers

Limn by the numbers: more than 900,000 lines of code; 974 code changes since the July 15 launch; 17,213 automated tests before every release; 252 database tables, each scoped to its owner; 192 screens designed for phones first; 87 AI capabilities, each labelled safe or world-changing.
Figures read from the codebase on Oct. 7, 2026. Boston Business Watch

Software like this usually grows by stacking features. Limn's engineering has spent as much effort on what stops those features from failing quietly.

The boundary that matters most

A platform that serves many businesses keeps all of their customers in one system. The failure that matters most is not a crash. It is one business's records showing up in another's account.

Diagram: a request from one business passes through a scoped session; the database returns that business's rows and withholds every other organization's.
How Limn keeps one business's records out of another's account. Boston Business Watch

Limn enforces that boundary in the database itself rather than trusting the application to remember. Each ordinary request runs inside a scoped session, and the database withholds another organization's rows even if the application asks for them. Staff who work on a single business sit behind a second, business-level fence. The application's own database identity can read and write records but cannot change the structure; structural changes run under a separate owner identity, one reviewed migration at a time. There have been more than 400 so far.

An AI that needs permission

Limn runs two standing AI agents, and they are unequal by design. The observer notices patterns and proposes ideas. It cannot act, and it writes to exactly one place: a list of ideas. The operator plans and carries out work, but only inside an authority envelope a person has approved.

Flow chart: the observer writes an idea, a person accepts it, the operator drafts a plan, a person approves its authority, and only then does the operator act inside that envelope.
Every AI idea passes through a person twice before anything changes. Boston Business Watch

An idea moves in one direction and passes through a person twice. The observer writes it, a person accepts or rejects it, the operator drafts a plan, a person approves the authority, and only then does the operator act, inside that envelope only.

The controls are specific. The operator's identity is rebuilt from the database at the moment it runs, never carried over from a saved plan, and every write it makes passes through the same isolation a human's would. Each of its 87 capabilities carries a required label saying whether it changes anything in the world, and the executor accepts only capabilities positively marked safe, so a missing or misspelled label is refused. Any action that could message a real person sits behind three independent switches. Tests check the source code itself, because the failure they guard against is a deleted line, and an ordinary test cannot see a line that is gone.

Four gates on every release

No change reaches production without passing a full type check, lint rules that include the React compiler's purity checks, the complete 17,213-test suite and a production build. That build refuses to start if any text-and-background pair in the design system fails the WCAG AA contrast standard. Accessibility is a build failure, not a ticket.

Diagram of four release gates: type check, lint, 17,213 tests and a production build with a contrast check, then ship.
Nothing reaches production until all four pass. Boston Business Watch

The release tool records the exact source tree that passed the gates and refuses to ship anything they did not see. It also refuses to deploy ahead of database changes that haven't been applied. When a bug turns up that compiled cleanly and only appeared on a live request, the fix ships with a guard test that scans the whole codebase for the same pattern.

Work that reports whether it worked

Much of Limn runs when nobody is watching: appointment reminders, review requests, scheduled posts, campaign sends, mailbox syncs and ad data pulls. Every job writes a heartbeat that says whether it worked, not just that it ran, and a job that tried nothing reports "unknown," never "healthy." A separate watch alerts staff when a business goes unusually quiet, because the most dangerous outage is the one that throws no error. Test deployments are blocked from running the live schedule, so a preview build can never text a real customer.

Example job heartbeat table: appointment reminders healthy, mailbox sync degraded with one failure, review requests with no work yet.
Illustrative rows from the job heartbeat. Boston Business Watch

Built for people running a crew

Most of Limn's users are on a job site, not at a desk, so every screen is designed at 390 pixels wide first, as its own layout. Automated audits open each screen in phone-sized browsers, measure sideways overflow and the real tappable area of every control, and flag form fields small enough to make an iPhone zoom the page. The audits get checked too: the first one reported 66 gaps, and two thirds turned out to be the tool misreading the design system. The team fixed the tool first.

Voice, video and payments

AI phone agents have answered real customer calls for client businesses since Sept. 1. Studio, a video editor built into the platform, lets a business edit a clip by deleting words from its transcript, strips filler words and dead air, adds word-timed captions and lowers music under speech, with clients approving cuts through review links. Payments run as two separate systems: agencies pay Limn through one, and each business's invoices, payment links and estimates run through that business's own merchant account. The platform never holds a client's money.

What's left undone

Limn also keeps a register of everything knowingly left undone, recording what each item is, why it was parked and what parking it costs. It is the least glamorous file in the codebase, and the reason the rest can be trusted.

For Acadia, the point of all of it is the same as the point of the agency: a small trades business that answers every call, books every job and gets paid on time, without hiring a back office to do it.

More from Boston Business Watch

Most read this week

  1. 1Blackstone Ice Cream Shop Goes Viral After Backing Teen Worker
  2. 2Marlborough Cleaning Firm Pushes Into Hartford, Providence Markets
  3. 3Seacoast Home Listings Hit Multiyear High As Sales Cool
  4. 4BD Marks 65 Years In Canaan, Pours $34M Into Syringe Plant
  5. 5Loon Mountain Pitches Fourth Peak On National Forest Land

Comments

Comments are reviewed before they appear. Read our comment policy.