Every proposal Axera Flow sends to a prospect comes out of a tool the company built for itself — a 10-minute brief in, a 9-page editorial PDF out, in under a minute.
The challenge
Solo consultancies live and die by their pipeline. For Axera Flow’s first year, every proposal was a manual Google Doc — copy a template, swap names, rewrite the executive summary, tune the scope, get the formatting right, export to PDF. Two to four hours per quote on a good day, more if the deal was unusual.
The bottleneck wasn’t the writing itself. It was the editorial work: making each proposal feel on-brand, specific to that prospect, technically credible without sounding like a template. Templates kill the voice. Bespoke writing eats the day.
By early 2026, the Canadian pipeline was warming up and the math stopped working. José needed to quote faster without sounding generic, and a flat templating tool wasn’t going to clear the bar — the proposal is the work sample for an AI consultancy. If the doc looks like Word art, the prospect already has the answer.
The approach
Off-the-shelf proposal software (PandaDoc, Proposify, GetAccept) was the obvious move, and the obvious wrong move: they’re built for sales teams that need e-signature workflows, not for a solo founder whose differentiator is the prose. Their editors fight you on typography, lock you out of custom PDF rendering, and produce documents that look like every other proposal in the prospect’s inbox.
So the decision was to build, with three non-negotiables. First, multi-tenant from the start — even though Axera Flow is the only tenant today, the data model couldn’t have brand colors and signatories baked into globals. Second, AI does the first draft of every narrative section, but the brand voice has to be enforced in the prompt — no generic “in today’s fast-paced world” filler ever ships. Third, the web preview and the PDF have to be visually identical, so the operator sees exactly what the prospect will see.
The tier this work would have landed in if a client had asked for it: Scale. The reason it landed as an internal build is that the cost of not having it was already higher than the cost of building it.
What we built
A Next.js app, deployed on a VPS via Docker and GitHub Actions, with Postgres + Prisma underneath and Auth.js handling sessions.
The data model is multi-tenant end-to-end. A tenant owns its users, clients, proposals, and every AI generation log (denormalized so per-tenant cost queries are single-trip). A separate status-change table writes an append-only audit row inside the same transaction as every status update — DRAFT → SENT → ACCEPTED never silently overwrites history.
Six narrative sections per proposal (executive summary, approach, scope, investment rationale, timeline, next steps) are drafted by Claude, in either English or Portuguese, against a structured brief the operator fills in once. The prompts carry the Axera Flow voice rules — short sentences, concrete metrics, no filler vocabulary, mandatory callouts for payment terms and out-of-scope work. The operator can regenerate any single section, edit by hand, or both.
The PDF render uses Puppeteer driving a headless Chromium against a hand-tuned HTML template — same Tailwind tokens as the web preview, so the dashboard view and the downloadable PDF are pixel-for-pixel the same editorial document. The signature treatment, the pullquote box, the numbered timeline rail, the cover stats card — all rendered once, in CSS, used in both surfaces.
Around all of that: a dashboard for status at a glance, a self-serve password screen, a per-tenant AI cost report endpoint, a Playwright E2E suite that exercises the happy path (login → create client → create proposal → download PDF) and the audit log, and an autonomous-session workflow where Claude can execute 8+ hours of work overnight against a handoff doc and the founder reviews the morning’s commits.
What we deliberately didn’t build: e-signature, payment collection, CRM sync, prospect portal. Each of those is its own product. This tool’s job is to get a brand-correct proposal in front of a human in under a minute. Everything else happens in conversation.
The outcome
Every proposal Axera Flow has sent since the v1 milestone came out of this system. Time-from-brief-to-signed-PDF dropped from “an afternoon” to “a coffee break.” The visual quality went up, not down — the editorial design language is more consistent because it lives in one Tailwind tokens file, not in a Google Doc someone forgot to update.
Less visible but more important: the audit log + cost tracking mean every proposal that goes out has a full history (who changed what, when) and known unit economics (~$0.10 of AI cost per generated section, tracked per tenant). Six months from now when Axera Flow has to decide whether to add a second tenant or open the tool up to other consultants, the data to make that decision exists.
The tool is in daily use and continues to evolve — recent sessions added a settings index, loading skeletons across every route, dashboard greeting personalization, and a tightened-up PDF italic treatment after a prospect noted the gradient looked amateur.
Lessons learned
Editorial AI is mostly prompt engineering, not model selection. The first version of every section came back as confident marketing fluff — “leveraging cutting-edge automation to drive transformational outcomes.” Getting Claude to write like a thoughtful engineer instead of a LinkedIn post took more iteration than any other part of the build. The model isn’t the moat; the prompt is.
The “boring” infrastructure — Puppeteer reliability, audit log transactionality, deploy hooks, migration safety on a live VPS — ate as much engineering time as the AI features. Plan for it from day one. Solo founders who scope their AI projects as “just wire up the model” routinely ship something that works on localhost and quietly breaks in production.