PPC International — Butler
An operations platform for a distributor running Odoo ERP against several Shopify storefronts. It reads widely, drafts the work, and writes back only into the ERP, only after a person approves.
PPC International is not an arm's-length client. It sits inside the same ownership group as Brdy AI, and the person who signed off this work is a partner here. Vendor and customer are the same people.
So treat what follows as a work sample, not as a reference. The engineering is real and inspectable. The business outcomes are self-reported by us about us, and we say so at each one rather than once at the bottom.
The client
PPC International, LLC (dba PPC International). Founded 2015.
Distribution. Headquarters in Irvine, California. Distribution sites in San Marcos, CA and Mount Dora, FL. House Plant Resource is one of its projects.
Odoo as the ERP and system of record, with several Shopify storefronts selling against it.
Internal. No arm's-length contract value is published, because there is none to publish.
The baseline
No before-state time study was taken. We know which processes Butler now covers — purchase planning, end-of-day reporting, wholesale shipping, order intake and first-line support — because we automated them. We do not have an hours-per-week figure for what those cost before, because nobody counted, and we are not going to reconstruct one after the fact.
This is the single biggest gap in this case study, and it is the first thing we will fix on the next engagement: the baseline gets measured before anything is built.
What we built
"Butler reads widely and writes narrowly, always into the system of record, always through a human. It never writes a storefront directly — every price and every listing goes into Odoo, and Odoo's existing connector exports it."
Butler's design doctrine, from the project's own architecture notes
Scheduled automations
Thirteen automations run on a scheduler, covering purchase planning, end-of-day reporting, wholesale shipping and order intake.
A support desk where the model never acts
The language model drafts replies. It does not place, amend or cancel orders. Those are executed deterministically by Butler's own code, and a person approves the send. If the model is wrong, the cost is a bad draft, not a bad order.
A merchant API
Partners pull inventory and push sales orders that create and confirm real Odoo sale.order records and deduct real stock. Idempotent on order reference, so a retried request cannot double-book, and fail-closed on error, so an ambiguous response does not become an invented order.
The stack
FastAPI and APScheduler on Python 3.12. Postgres with raw SQL migrations and no ORM. pgvector for retrieval. React, Vite and TypeScript on the front end. Docker Compose for deployment.
Integrations
Butler integrates with the following. None of these is a partnership, a certification or an endorsement, and we do not describe them as one.
Size of the system
Counts from the Butler repository and its migration history, taken by the engineering team that wrote it. These measure how much was built. They are not a claim about business value.
HTTP routes
routers
Postgres tables
idempotent migrations
backend tests
dashboard pages
external connectors
automations live
Approximate, and they move with every release.
The result, and its limits
Everything in this section was reported by PPC International about its own deployment, to people who own PPC International. Nobody independent has checked it.
of manual ERP and ecommerce operations work automated, as estimated by PPC International after Butler went live.
No task inventory, no before-and-after time study, no measurement window, no raw data. It is one team's estimate of its own work. One deployment is not an industry benchmark, and we would rather say so than round it up into a claim.
A company update records that the customer service bot was deployed and adopted into the support workflow, and that the ticket resolution rate held high with most tickets cleared on time.
No number was given for either statement, and we are not going to supply one.
We have previously quoted roughly 70% less manual effort on reordering and purchase-order work.
It was asserted once, with no baseline, no period and no method. We are not repeating it until it has all three.
Timeframe
We are not publishing a start date, a go-live date or a build duration for this engagement, because none was recorded at the time. The only dates we can stand behind are the ones in version control and in the incident below.
What went wrong
Any vendor who shows you only successes is showing you an edited record. Here is the one real incident on this deployment.
A staging stack had been left holding production Slack credentials. For nine days it posted duplicate end-of-day report drafts into real channels, once a day.
Because of the write rule. What escaped was a draft message into a channel. A staging stack with production credentials could not place an order, change a price or touch the ERP, because nothing in Butler writes without a person approving it.
Nine days of noise in a working channel, and a credential-separation rule we should have had on day one. We would rather you read it here than discover it later.
What we do not claim
No independent verification
Nothing on this page has been checked by anyone outside the ownership group. No third-party audit of this deployment exists.
Attribution, not a unified audit log
Butler attributes approvals to a configured operator identity across five action types. That is what we will say it does. It is not yet a per-user audit trail across the whole system, and we will not call it one until it is.
Single tenancy is architecture, not a metric
Data staying in a dedicated, encrypted instance is a property of how the system is deployed. It is verifiable by inspection, and it is never something we will put a percentage on.
No certification
We hold no security certification today and will not claim one before an audit is complete. What we do hold is described on the security page, and what we do not hold is described there too.
The quote we are not printing
A case study is supposed to end with a customer saying it worked. The only testimonial attached to this system is attributed to Andy B., CEO of PPC International, who is also a partner at Brdy AI. It is the principal of this business praising a system built for a company he owns.
We could print it and let you assume it came from a client. We would rather tell you what it is and leave the space empty until someone outside this ownership group fills it.
What the next one gets that this one did not
A measured baseline
Hours counted before anything is built, by the people doing the work, over a stated window.
Dates on the record
Start, go-live and each milestone, written down when they happen rather than reconstructed for a website.
A result someone else can attest to
An engagement outside this ownership group, so that the next page like this one is evidence rather than a work sample.