case study · project

PageVow: case study

AI-built personal pages that never publish unchecked.

role
Founder and solo engineer
status
Live at pagevow.com
since
March 2026 · 640+ commits
stack
TypeScript Turborepo · Next.js · NestJS · Drizzle · PostgreSQL · Cloudflare R2 · Paystack
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.
pagevow / publishing pipeline
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.
04

The hard parts, and the decisions

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. The server sets the price.Amounts are enforced on the server, so the browser never decides what a customer pays.
  6. 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.
want to talk about it?desirekaleba@gmail.com