I was on hold with HubSpot support for 47 minutes last March, trying to figure out why a Calendly link inside a sequence email kept rendering as raw HTML to half my contacts, when I opened a new tab and started a fresh Cloudflare Worker project. By the time the support rep came back, I had a working contact form posting to a Postgres table on my own infrastructure. That was the moment.
Here is the math that pushed me over. HubSpot Starter for two seats: $90/mo. Calendly Teams: $20/mo. Loom Business: $30/mo. ChatGPT Team for the agency: $50/mo. A Stripe-billed lead-scoring add-on I never opened: $39/mo. A separate proposal tool: $45/mo. An audit/Lighthouse SaaS we tried for six weeks: $79/mo. A transactional email service: $35/mo. Zapier to glue half of it together: $29/mo. That is $417/mo, $5,004/year, and I was using maybe ten percent of any of it. The CRM held names. The scheduler held a calendar. The proposal tool held two templates. The rest was dead weight I was paying to host my own data inside.
What I actually needed was four things, and nothing on the market did all four under one roof:
- Widgets that ship and stay shipped. A booking widget, a contact form, a quote builder — embedded with one
<script>tag, themable to match the site, and not rate-limited into uselessness on the free tier. - Multi-site by default. I run my studio brand, a tools brand, and a handful of client sites I host. Every CRM I tried treated multiple domains as an enterprise-only feature behind a $300/mo gate.
- Audit tools built in. Lighthouse, schema validation, broken-link checks. I was paying a separate SaaS for what is essentially a wrapped CLI.
- Ownership of the data. When the renewal email came each year, I wanted to be able to say no without losing five years of contacts.
I started the build the week after that support call. The stack is Cloudflare Workers for the API, Hyperdrive in front of Neon Postgres for the data, Better Auth for sessions and passkeys, and a TanStack Start app for the dashboard. Eight weeks of nights and weekends to a working alpha. Another twelve weeks to the version I run my own client work on today. Nothing exotic — the boring choices are deliberate. Workers because the latency is honest globally, Neon because branching the database to test a migration costs nothing, Better Auth because I was done paying per-MAU for something the framework should ship in the box.
Here is what VertaFlow actually does today, no promised features:
- Contacts, companies, deals, tasks. The CRM table-stakes, with custom fields and tag-based segmentation.
- Embeddable widgets. Booking, contact form, quote builder, audit request — drop in a script tag, theme via CSS variables, posts straight to your CRM.
- Multi-site from the start. One account, unlimited domains. Tag every lead by which site it came from.
- Built-in audit tools. Lighthouse, broken-link checking, schema validator — run on demand or scheduled per site.
- Transactional email + sequences. Through Resend on our end, your domain on the from line. No separate Mailchimp.
- Stripe-native billing. Invoice clients, run subscriptions, take deposits on quotes — without bolting on a second tool.
What it is not: enterprise. I have not built SOC 2 attestation. There is no SSO for a 200-seat marketing team. There is no full marketing automation suite with branching journeys across twelve channels. If that is what you need, HubSpot Enterprise is sitting right there and they will be happy to sell it to you.
The hardest part of the build was not the code. The hardest part was deciding what to leave out. Every CRM I have ever used is a graveyard of half-shipped features — the lead-scoring panel nobody opens, the predictive AI tab that returns an error every time you click it, the integrations marketplace where two-thirds of the logos go to a “Coming soon” page. I made a rule early: nothing ships until I use it on my own client work for a month. That rule killed three different features I was excited about and saved me from shipping a fourth that did not survive the first real invoice cycle.
A few of the small choices that I keep getting asked about. Passkeys before passwords — the first time you sign in, you set a passkey, and most users never type a password into the product. Magic links as the fallback. No social login because the only thing worse than building auth is being on call for an OAuth provider’s outage at 11pm on a Sunday. The CRM widgets ship from a separate origin so a slow client site cannot block the booking iframe — the widget loads even if the host page is still doing its third-party-script ballet.
Try it
Start your free 60-day VertaFlow trial — no credit card
Two months on the house when you buy a site, or sign up directly. Pro plan is $19/mo (one site, full widget kit, pipelines, invoices). Multi-Site plan with white-label widgets is $199/mo (up to 25 client sites). Same product I run my own studio on.
See VertaFlow →Who it is for: a solo operator running a service business who is tired of duct-taping five SaaS tools together, and a small agency — two to ten seats — who wants one platform across every client site without paying enterprise per-seat pricing. If you run more than one site, the math gets ridiculous fast in your favor. If you run exactly one site and you live inside Gmail and a spreadsheet today, you probably do not need a CRM yet, and I would rather tell you that than sell you one.
The thing I did not expect, building this in public over the last few months, is how many other operators were quietly frustrated by the same stack. Web designers, photographers, small construction firms, a couple of bookkeepers. Same story, slightly different tool names. Everyone paying four-figures-a-year to hold their own customer list inside someone else’s database.
You can have the customer list back. That is the whole pitch.