Skip to content

Calgary, Alberta · Software & AI consulting

Custom software for the way your company actually works.

I build the tools small and mid-sized companies can't buy off the shelf — and then put AI to work on the parts of the week still being done by hand. It starts with one task, not a strategy deck.

web apps merged into one deploy
4 → 1web apps merged into one deploy
intake channels, one record
5intake channels, one record
vendor accounts in one directory
1,309vendor accounts in one directory
languages from one codebase
3languages from one codebase

01The premise

Most AI projects fail
at the first step, not the last.

The pitch is usually a platform, chosen at the top, arriving as a pilot. It demos well and is quietly abandoned within two quarters — because the work it was meant to automate had never been written down in the first place.

The version that works is smaller and starts lower. Find one task a person does by hand every week, that follows the same steps every time, and that somebody else is waiting on. Automate that one. Then let what you learn choose the next.

Done in that order, AI stops being a project and becomes a property of how the company runs. That's what people mean when they say they want it at the centre.

The whole argument, in four rungs

02How it goes

The rungs are not optional.

Every engagement moves up this in order. Skipping to the interesting part is exactly what produces the pilot nobody uses.

  1. Rung 1

    One shape

    Every way work arrives becomes the same record. Until that's true, nothing downstream can be automated, because there's nothing consistent to automate.

    At Innova, five intake channels now produce one indistinguishable service request.

  2. Rung 2

    One source

    Pull the systems you already pay for into one place, attach them to your real records, and never let a sync silently overwrite a person.

    Innova's contact list holds our phone number and their email on the same person, on purpose.

  3. Rung 3

    One bounded job for the model

    AI enters here — doing a narrow, checkable task inside a workflow you already run, not making decisions you'd have to audit.

    Innova's phone agent calls a model once per turn to fill one field. The script stays a script.

  4. Rung 4

    Ask the business questions

    Once the record is complete and the history is in one place, you can ask it things the original tools were never able to answer.

    Ingesting Innova's mailbox through Graph backfills five years of history, not just today onward.

03What I do

Five kinds of work, one thread running through them.

Getting the work into one shape

Requests arrive by phone, text, email, a portal you don't control and a person walking up. Each one becomes the same record, so it can be triaged, measured and chased.

  • Web and QR-code intake forms
  • Inbound SMS and phone handling
  • Scrapers and syncs for portals you can't change
  • Triage rules written down instead of held in someone's head

AI on the parts that cost an afternoon

Not a chatbot bolted to the homepage. A model doing one bounded job inside a workflow you already run — reading, extracting, drafting, classifying — with a person still holding the decision.

  • Phone agents that fill in a form, not hold a conversation
  • Mail and document ingest that attaches to your real records
  • Extraction and classification with a human check on the way out
  • Drafting that leaves the sending to you

Internal tools that fit how you work

The scheduling board, the contact list, the tender package, the report nobody wants to assemble by hand. Built around your actual process rather than around a product's opinion of it.

  • Scheduling and booking systems
  • Directories that sync with your system of record
  • Admin dashboards for people who aren't technical
  • One-off tools that retire a spreadsheet

Consolidation and rescue

Four apps that should be one. A WordPress install doing an application's job. Three copies of the same logic drifting apart. Usually the fix is smaller than it looks, and finding that out is the first week.

  • Merging separate apps into one deploy
  • Rebuilds that keep every existing URL working
  • Untangling shared accounts, keys and databases
  • Taking over a codebase someone else left

Sites that do a job

Fast, accessible, and built so the copy can be changed without calling me. Multilingual where your customers need it, and honest when a form fails to send.

  • Marketing sites with a real contact path
  • Multilingual sites from one set of components
  • Client portals with login and document exchange
  • Content in one place, never buried in components

04Selected work

Three companies, none of them software companies.

A construction firm, a thrift shop and an accounting practice. The problems rhyme more than you'd expect.

2026 — ongoing

Innova Developments

Construction & property development

Four disconnected apps became one, then the phone learned to take a service request.

Innova had four separate web apps, three copies of the same database client, and a service desk that ran on whoever happened to answer. The work started as a merge and turned into the thing this studio is actually about: getting every way a job arrives into one shape, then letting AI handle the parts that were costing a person an afternoon.

  • Next.js
  • Neon Postgres
  • Twilio Voice & SMS
  • Claude API
  • Microsoft Graph

2026

Scavenger

Retail — thrift shop, Calgary

A shift board for a shop staffed by volunteers, where the database refuses to double-book.

A thrift shop was scheduling its floor staff through a signup page built for a single weekend. It became an open-ended calendar that keeps working month after month — with the opening hours as data rather than code, and the fairness rules the owner ran informally written into the software.

  • Next.js
  • Postgres
  • Twilio SMS
  • Vercel

2026

Dynasty Advisory

Accounting & financial advisory

A WordPress marketing site rebuilt as an application, with the client portal already designed into it.

An accounting firm's site was a WordPress install doing a brochure's job slowly. The rebuild kept the brand exactly — colours and type lifted from the live stylesheet rather than reinterpreted — and made the next two phases, client login and document exchange, an extension rather than a second rewrite.

  • Next.js
  • TypeScript
  • Tailwind
  • Server Actions
  • Zod

There is probably one task in your week that shouldn't be yours.

Tell me what it is and roughly how often it happens. If it's a fit I'll say what I'd build and what it costs. If it isn't, I'll say that too.