Own product, 2025–26. Founder, architect, sole engineer. Live.
MantelMarketing
I'm building a platform that offers small-business websites at a fixed monthly price.

Scroll inside the screen to read the whole site. Or open the live site in a new tab.
What happened.
283,295
lines of code written and shipped by one person
MantelMarketing, measured at commit 8deebfd
119s to 58s
wait time for a site audit, before and after the fix
MantelMarketing, verified live
95.9%
how alike 25 city pages were before a check caught it
MantelMarketing, first client build
- 67 marketing pages and 25 working example sites, all public
- Google's Lighthouse tool scores the site 100 for accessibility and for search readiness on mobile
Where it started
I used to build client websites in Webflow, one at a time, by hand. That worked until the business model didn't. The twentieth site cost as much to build as the first, and nothing got cheaper with practice. You can't sell websites at a fixed monthly price if every build starts from zero.
Moving off Webflow fixed the economics and broke the thing Webflow was there for. A client can edit a Webflow site themselves; they can't edit code. That objection came straight back and needed a new answer.
What made it hard
- No outside client and no deadline at the start, so nothing forced me to limit the scope.
- I worked alone, directing several AI coding sessions at once. Two of them once worked on the same code at the same time and work was lost.
- Payments through Stripe were live from day one, so any billing bug reaches a customer immediately.
- Delivery times are published by plan, which makes them a promise to customers and shapes every tooling decision behind them.
What I built
A factory with checkpoints, not a page generator
Generating pages was never the expensive part. The expensive parts were knowing what a business is legally allowed to claim, checking the work, and getting one person's eyes on what the automated builders queue up. The product is built to make those three cheap, not to make generation fast.
The client answers the questions that stall the build
Every multi-day stall on the first real client was a fact question, not a build question. A contractor license subcode. Whether "insured" could be claimed. Nothing built from the client's confirmed facts ever shipped wrong, so the list of questions waiting on the client became part of the product. They answer it through their own login.
Twenty-five city pages that were nearly identical, and the check that missed it
The first client's twenty-five city pages sat at 95.9% similar to one another for weeks. A check was supposed to catch that, and it was reporting green, because it was scoring fields that never appeared on any page. Four smaller versions of the same problem followed. Now, before I trust a new check, I plant the defect it exists to catch and watch it fail first.
Pages choose from a reviewed library instead of writing themselves
When each page draws its content independently, the pages drift into near-copies of each other. Three approaches failed before the one that worked. One pass assigns content to every page and refuses to hand out the same selection twice. The two most similar pages went from 88% alike to 64%, and the rule is checked where content is assigned, not on each finished page.
What isn't measured
- No traffic, sign-up, revenue, conversion, or retention figures exist yet.
- Revenue from customers is zero by design. The one client so far isn't paying for the first twelve months.
- How long the sign-up form was broken before anyone noticed. It could be worked out from the deploy history; it never has been.
- No client testimonial on record.
Built with
See for yourself
25 example sites, public at /examples
Notes
The failure worth reading about happened on 8 September 2026. The free site audit is the sign-up form for the whole business: a prospect enters their web address, clicks scan, and gets a report. For some stretch of time, clicking scan did nothing. Just a spinner, forever.
The cause was small. The form uses Cloudflare’s Turnstile to keep bots out, and Cloudflare had removed a setting the form relied on to keep that check invisible. Starting the check threw an error, and because of how the code was written, the error escaped without ever reporting itself. No token, no rejection, no message. Every page still loaded. Every server-side test still passed. The one form that brings in customers was off, and nothing noticed.
The fix reports that kind of failure, gives up after a timeout instead of waiting forever, and ships with seven test cases that plant both problems and prove they’re caught.
For scale, the repository is 1,940 tracked files, with 135 server routes and 466 files of automated checks.

Tell me what you're working on.
Send me a little about your project or the role you're hiring for. I'll tell you whether it sounds like a fit.