• Written by Rob Kleiman

Learning a Production Stack by Shipping a Paid Directory

I wanted a local business directory where businesses could submit and pay for listings. More than that, I wanted to learn a production stack by actually shipping one, not by following a tutorial.

The challenge

Build and deploy a working platform with payments, user accounts and admin controls, the parts most side projects skip.

What I did

I wrote the spec first, then built it with Claude Code on Astro and Supabase:

  • Postgres with row-level security, so each business only sees its own data, plus Edge Functions that send draft-reminder emails through Brevo.
  • Stripe subscriptions with Standard and Featured tiers and promo codes.
  • Idempotent webhooks. Every Stripe event is logged to a processed-events table, so a retry can never double-process a payment.
  • An admin approval workflow, refunds and click analytics.
  • Business data pulled in through Apify, with vector embeddings for “similar listings” search.

It’s deployed on Vercel with API and end-to-end tests, across about 100 commits.

What changed

I came out with a working product and first-hand knowledge of how subscriptions and webhooks behave in the real world, including all the ways a payment event can arrive twice.

What I took away

The fastest way to learn a stack is to ship something with money in it. The edge cases teach you more than the happy path.