PageVow: case study
AI-built personal pages that never publish unchecked.
600+pages, made by 123 people
79requests for team-made pages
$0spent on marketing
01
The problem, and who it’s for
PageVow makes personal pages for life’s big moments: birthdays, proposals, graduations and weddings. A customer gets an animated letter, a photo album or an invitation with RSVPs, shared with one link or a QR code on a printed card.
They choose a page built with AI or one made by the PageVow team, and it comes in five languages.
02
Why I built it
I wanted to own a product end to end, with real customers, real payments and real feedback. At PageVow every decision is mine: what to build, what to charge, and what to fix when a customer writes in.
03
What I built
All of it, as founder and the only engineer: 640+ commits since March 2026. The spine is a five-step pipeline. Click through it.
- A TypeScript Turborepo: a Next.js web app, and a NestJS API that owns the payment boundary.
- 373 test files: 252 for the web app, 69 API integration tests against a real Postgres, and 52 Playwright journeys. Every change ships with its tests.
- The generate → validate → review → pay → publish pipeline.
- Validation and optional human review for every piece of model output.
- Hardened Paystack payments: signed checkout tokens, idempotent webhooks, replay fingerprinting, server-set amounts and a persistent security audit trail.
- Published pages with QR sharing, RSVPs, media and analytics.
- A WhatsApp share button wherever a page is ready to send, with each link tagged (via=wa) so I can see what WhatsApp brings in.
- Generate
- A model writes the page from the customer’s own notes, or the PageVow team makes it.
- Validate
- The output is checked before anyone sees it. Unchecked model output never goes straight to publish.
- Review
- An optional human review. Pages made by the team are approved before payment.
- Pay
- Paystack checkout with a signed token. The server sets the amount; webhooks are idempotent and replay-fingerprinted; every event is in the audit trail.
- Publish
- The page goes live behind one link and a QR code, with RSVPs, media and analytics.
Click a step, or use the arrow keys.
04
The hard parts, and the decisions
- Charge from day one.Paystack checkout was part of the first day’s commits, so every page since has been a real test of whether people will pay.
- Model output never goes straight to publish.Every generated page is validated, and can go to a human for review, before it can be published.
- AI writes only from the customer’s notes.Captions and pages are written from what the customer told us, so a page says what they meant, not what a model invented.
- Try first, pay to publish.A free, watermarked 24-hour preview, no card needed. Each page is a single purchase, with no subscription to explain or support.
- The server sets the price.Amounts are enforced on the server, so the browser never decides what a customer pays.
- A webhook can arrive twice. Nothing happens twice.Webhooks are idempotent and replay-fingerprinted, and checkout tokens are signed. Every payment event lands in a persistent audit trail.
05
What happened
With zero marketing:
123users
600+pages, about five each
79requests for team-made pages
$200first organic revenue
06
What I’d do next
- Charge international buyers in their own currency. Today everyone pays in Kenyan shillings.
- Give invitations real guest management, with sending, tracking and reminders per guest. It’s why weddings still pay specialists $60 to $170.
- Put reviews and usage numbers on the site, so new buyers can see the 600+ pages that already exist.