// About
I build software that holds up.
Six years of full-stack work on field-service platforms, fintech wallets and learning tools, with teams around the world. Most of it is TypeScript and Node.js. All of it runs in production.
- years shipping
- 6+
- products shipped
- 8
- languages, EN & FR
- 2
// The story
Six years, in three parts.
01
I started by shipping websites on a deadline.
My first job was websites and landing pages for agency clients. Freelance work came next: the EduSkillUp learning platform, the Roudio media product and a book read-along app, each one built and shipped end to end.
02Until 2025
Then a wallet, from the API to the screens.
At Elivate I built the Elivate Wallet across web and mobile: the API, the data model and the screens people tap. With money on the line, the details that nobody sees are the ones that matter most.
032025 to now
Now I lead the platforms an install company runs on.
At Quality Installs Co. I lead QPIMS, QPAS and QP Invoicing: jobs, crews, installs and invoices in one place that the field and the office both use every day. Alongside it, I take on one outside project at a time.

// Principles
Six rules I work by.
None of them are original. All of them were learned by getting it wrong first.
01
Model the data first
The schema is the product. Get the tables and constraints right, and most of the bugs never get written.
02
Ship every week
A real deploy every week, however small. A demo that runs on my laptop is not progress.
03
Types end to end
One set of types from the database to the screen. When the API changes, the build says so before a user does.
04
Build for the field
Crews use this software on a slow phone with one bar of signal. If it works there, it works everywhere.
05
Write it down
Decisions go in the repository, next to the code they explain. Chat threads are where reasons go to disappear.
06
Say no early
If a deadline or a tool is wrong for the job, you hear it in week one, with the reason.
// Start a project
Tell me what you are building.
Three quick picks so the first reply is useful. You finish the message on the contact page.