Skip to main content
Sandbox demo — data resets on the hour. Try the admin at /admin, own the whole thing viathe template →
Get Template — $89

Search AI Directory

Search tools, categories, stacks, and pages

Guides

Monetization

Built-in Stripe revenue: paid fast-track reviews and featured placements.

The template has two revenue features built in — no plugin, no third-party checkout. Both are Stripe Checkout plus a single webhook, and both stay completely hidden until you add Stripe keys, so a fresh clone runs without a Stripe account.

What you can sell

Fast-track reviews

A visitor submits a tool at /submit, then can pay to fast-track it. The price and toggle live in /admin/settings → Monetization (default $99). A paid submission is marked with the fasttrack channel and jumps to the top of the queue in /admin/submissions. Payment buys a guaranteed hands-on review and a fast decision — not acceptance.

Every tool page carries a "Feature this tool" card. The buyer pays, and the tool pins to the top of /tools with a labeled Featured badge for a set number of days (default 30, price default $149, both in settings). Buying again while still featured extends the window rather than resetting it.

Setup

  1. Create a Stripe account and grab your secret key.
  2. Add it to the environment as STRIPE_SECRET_KEY.
  3. Add a webhook endpoint in the Stripe dashboard pointing at https://your-domain/api/webhooks/stripe, subscribed to the checkout.session.completed event.
  4. Copy the signing secret into STRIPE_WEBHOOK_SECRET.
  5. Set your prices in /admin/settings → Monetization and enable the features you want.

Once STRIPE_SECRET_KEY is present the paid options appear on the public pages; without it they never render.

Testing locally

Use the Stripe CLI to forward events to your dev server:

stripe listen --forward-to localhost:3001/api/webhooks/stripe

The CLI prints a webhook signing secret — use that as STRIPE_WEBHOOK_SECRET while testing. Pay with Stripe's test card 4242 4242 4242 4242, any future expiry, any CVC.

How fulfillment works

The webhook at /api/webhooks/stripe is the single fulfillment point. On checkout.session.completed it:

  1. Verifies the Stripe signature (a missing or bad signature is rejected).
  2. Writes an Order row keyed by the Stripe session id. That key is unique, so a redelivered event is a no-op — fulfillment is idempotent.
  3. Flips the target: a fast-track order marks the submission fasttrack and paid; a featured order extends the tool's featuredUntil and revalidates the affected pages.

If fulfillment throws, the endpoint returns 500 so Stripe retries — the idempotency gate makes that safe. Orders on the same Stripe account that aren't one of these two kinds are ignored, so you can run other products through the same account.

Refunds are manual: refund in the Stripe dashboard, then reverse the effect in the admin console (un-feature the tool or re-open the submission).

Editorial integrity

Payment never buys acceptance, a rating, or an unlabeled slot. Fast-track buys a faster review, not a "yes." Featured placements are always shown with a visible Featured badge. Keeping money and editorial judgment separate is what keeps the directory trustworthy.

Selling your own products

Separately from these two features, the Checkout URL setting (/admin/settings → Pricing) points the /template and /pricing buy buttons at any external checkout — a Stripe Payment Link, Polar, Gumroad, or your own flow — so you can sell your copy of the site, or anything else. Leaving it empty points the button at the internal /pricing page. See Configuration.