Skip to content

Repository files navigation

outbid — pay-to-rank board template

Give an AI agent this one line:

Build me outbid for SEO products using https://github.com/kendrekaran/outbit

Swap the niche (AI tools, developer tools, agencies, …). The agent reads AGENTS.md, specializes site.config.ts, then goes live with Supabase and one payment gateway (Stripe or Dodo — it will ask). Same board, new topic, real listings, real checkout.

npm install
cp .env.example .env.local
npm run dev

Open http://localhost:3000. Without Supabase and payment keys the board still runs on a local JSON file with demo checkout. A setup banner stays on the home page. That is not a finished board.

Go live (required)

Database — listings

Paid products are rows in Postgres. Local data/board.json is only a laptop fallback.

Fastest path: connect Supabase MCP (https://mcp.supabase.com/mcp), then say “Go live with Supabase.” The agent creates (or reuses) a project, applies supabase/schema.sql, seeds categories from site.config.ts, and writes:

NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
USE_SUPABASE=1

The anon key is public and SELECT-only. Writes use SUPABASE_SERVICE_ROLE_KEY (never NEXT_PUBLIC_*). Or paste those from Project Settings → API after you run schema.sql and seed.sql yourself. Do not seed listings.

Payments

Pick one: Stripe (cards, USD) or Dodo (UPI and cards, INR). Do not add both. The agent will ask before writing keys.

Fastest path: say Stripe or Dodo, connect that MCP, paste that secret API key, tell the agent to continue.

  1. Stripe — Cursor Settings → MCP → add https://mcp.stripe.com and sign in. Put STRIPE_SECRET_KEY in .env.local. Say “Go live with Stripe.”
  2. Dodo — Cursor Settings → MCP → add the Dodo Payments MCP, sign in, put DODO_PAYMENTS_API_KEY in .env.local. Say “Go live with Dodo.” The agent creates the Pay What You Want product and webhook.

Or paste keys for the one you picked (see .env.example):

Provider Env Where
Stripe STRIPE_SECRET_KEY Dashboard → Developers → API keys
Stripe STRIPE_WEBHOOK_SECRET Webhook on /api/webhooks/stripe (checkout.session.completed). Local: stripe listen --forward-to localhost:3000/api/webhooks/stripe
Dodo DODO_PAYMENTS_API_KEY Dashboard → Developer → API
Dodo DODO_PAYMENTS_PRODUCT_ID One-time product with Pay What You Want / dynamic amount
Dodo DODO_PAYMENTS_WEBHOOK_KEY Webhook on /api/webhooks/dodo (payment.succeeded)

Set NEXT_PUBLIC_APP_URL to your public URL before creating webhooks.

Confirm: GET /api/setup returns "ready": true (Supabase + exactly one gateway). Checkout should say Checkout, not Demo checkout.

What you get

A public leaderboard. People bid to keep their product on top. Rank is the bid — nothing else.

  • Submit a product URL or @handle and a dollar amount
  • Taking #1 costs at least $5 more than the current top
  • Board amounts stay in USD. Dodo charges INR at site.payments.inrPerUsd. Stripe charges USD.

Database

Listings, payments, activity, and visitor counts belong in Supabase (outbid_listings, outbid_payments, and the rest). The board starts empty — seed categories only. data/board.json is the local fallback when USE_SUPABASE is not 1.

About

Pay-to-rank leaderboard template. India pays with Dodo, everyone else with Stripe.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages