Wishdeal Factory · Storefront
Operator interview · $75/hr · Roll Digital's seat
← Back to Vellum

How Caleb would build Vellum.

First-person from one of our chief operators. What he'd ship and how, AI-amplified. Stack, hour estimate, day-by-day plan, the parts that are hard, and the handoff. Synthesized from the agent spec.

How I'd build Vellum

I'd reach for Next.js on the frontend with FastAPI for a lightweight backend API, Postgres for the database, and Stripe for billing with PDF Kit for invoice generation. The stack is straightforward because invoicing is a straightforward problem - the complexity lives in multi-tenancy, payment logic, and the free-to-paid conversion funnel. I'd estimate 240-280 hours, so roughly three weeks at full focus.

Day-by-day plan

Day 1: Provision auth schema with NextAuth, multi-tenant routing, and basic tenant isolation logic. Day 2: Build invoice schema, line item relationships, and client/project models. Day 3: Wire Stripe integration across three pricing tiers, set up webhook listeners for subscription events, and build usage-tracking counters. Day 4: Template the invoice PDF generator using PDF Kit, build the customization UI so users can tweak branding. Day 5: Build the customer onboarding flow - name, company, client list import, first invoice draft. Day 6: Wire Resend for transactional email (invoice delivery, payment reminders), build a basic email template system. Day 7-8: Polish the core UI, handle edge cases around pro-plan upsell, add error boundaries and retry logic. Day 9: Set up PostHog for analytics, Sentry for error tracking, test the complete free-to-paid path. Day 10: Deploy to Vercel (frontend) and AWS Fargate (backend), write a basic runbook, do a final audit of data access patterns.

What's hard about this build

Multi-tenancy sounds simple until you realize invoice numbering, client lists, and PDF generation all need to respect tenant boundaries. One leaked query or misconfigured middleware and a user sees another user's invoices. PDF generation is deceptively hard - users want custom templates, custom fonts, logo uploads, and once you allow that, debugging rendering bugs becomes a nightmare. Stripe webhook reconciliation is a footgun; you need idempotence, retry logic, and logging to catch race conditions between the frontend optimistically showing "paid" and the backend confirming it. The free-to-paid conversion is the real risk: you're competing against Wave, Invoice Ninja, and PayPal's native invoicing - all free or nearly free. Building enough AI value to justify $15-25 per month is the hard part, not the invoice PDFs. Finally, there's a compliance shadow here: invoicing often touches tax codes, currency rules, and VAT - a full build includes at least a consultant review, which I'd budget separately.

What's fast because of AI

Scaffolding React components for the dashboard, settings, and invoice builder goes 3x faster with Claude - I describe the page structure and it generates the boilerplate with proper hooks, validation, and component boundaries. Writing test suites for Stripe webhooks, PDF generation, and tenant isolation is where AI saves the most time; I outline the test case and Claude generates the setup, mocks, and assertions, leaving me to verify logic instead of typing fixtures. Debugging PDF rendering bugs is fast because I can paste the generated PDF output, describe the visual issue, and Claude suggests layout changes or CSS overrides immediately. Copy for the onboarding flow, pricing page, and in-app CTAs comes faster when AI drafts it; I refine tone and tighten messaging but don't start from blank. Edge-case enumeration - what happens if a user deletes a client mid-invoice, or upgrades mid-billing-cycle - is where Claude prevents me from shipping broken flows.

How I'd hand it off

I'd record a Loom walkthrough of the complete free-tier-to-paid-upgrade flow: creating an account, generating an invoice, customizing it, downloading the PDF, upgrading to Pro, and sending an invoice via email. You get a written runbook with deployment steps, Stripe key rotation instructions, and a Postgres backup strategy. I stay on pager rotation for 30 days; I own the first production incident and fix it same-day. You get all credentials transferred - Stripe dashboard access, Postgres connection strings in your vault, Vercel project ownership, GitHub repo write access. I leave code comments on tricky sections (multi-tenant queries, webhook idempotence logic, PDF template rendering) so your next engineer doesn't rewrite it blind.

Hire Caleb to build this for you.

Vellum is available to own for $200 flat. Or pay $75/hr for a Roll Digital chief operator to build it for you, AI-amplified.

See pricing →