# How to build a bidding website

This site is one vertical: best reads. The product underneath is a pay-to-rank board. Same engine works for best SaaS, best YouTube video, best Mac app, best CMS — you only change the noun, the rules, and the theme.

HTML: https://www.ihatereading.lol/build
Markdown: https://www.ihatereading.lol/build.md
LLM index: https://www.ihatereading.lol/llms.txt

## The idea

Attention is ranked by money, in public. No accounts. No likes. The listing with the most paid bids sits on top until someone pays more. That is the whole loop.

1. Someone drops a thing — a URL, an app, a video, a CMS. You preview it so the board looks real.
2. They bid money — minimum $1. The input can start at the current #1 bid.
3. They pay — pending checkout, then Stripe / Polar / Dodo, fulfill only after payment succeeds.
4. The board re-ranks — rank is cumulative. A second person can bid on the same listing and the total stacks.

## Rules that make it work

- Minimum bid $1. Store money as integer cents.
- Same URL = same listing. New submit of a duplicate must stack, not clone.
- Fulfill on the server. Webhook plus a success-page poll so a missed webhook still ranks.
- Idempotent payments. One payment_id creates one bid.
- Increment totals in a transaction. Do not read-then-write the rank.
- Vertical rules (block videos, allow only Product Hunt, etc.) sit in config — not in the payment code.

Every prompt below assumes Next.js App Router, TypeScript, Tailwind, and shadcn/ui. Paste it into Cursor, Claude, or Codex.

## Stack prompts

- [Firebase + Stripe](https://www.ihatereading.lol/build/firebase-stripe) ([markdown](https://www.ihatereading.lol/build/firebase-stripe.md)) — Fastest Google stack. Use Admin SDK on the server only.
- [Firebase + Polar](https://www.ihatereading.lol/build/firebase-polar) ([markdown](https://www.ihatereading.lol/build/firebase-polar.md)) — Indie-friendly billing. Polar checkout + Firestore.
- [Firebase + Dodo](https://www.ihatereading.lol/build/firebase-dodo) ([markdown](https://www.ihatereading.lol/build/firebase-dodo.md)) — Same payments as ihatereading.lol. Closest clone.
- [Supabase + Stripe](https://www.ihatereading.lol/build/supabase-stripe) ([markdown](https://www.ihatereading.lol/build/supabase-stripe.md)) — Best default for most buyers. SQL ranking + Stripe.
- [Supabase + Polar](https://www.ihatereading.lol/build/supabase-polar) ([markdown](https://www.ihatereading.lol/build/supabase-polar.md)) — Postgres board with Polar for indie SaaS payments.
- [Supabase + Dodo](https://www.ihatereading.lol/build/supabase-dodo) ([markdown](https://www.ihatereading.lol/build/supabase-dodo.md)) — SQL source of truth, Dodo for global cards.
- [Prisma + Stripe](https://www.ihatereading.lol/build/prisma-stripe) ([markdown](https://www.ihatereading.lol/build/prisma-stripe.md)) — Classic Next.js SaaS stack. Prisma schema you can own.
- [Prisma + Polar](https://www.ihatereading.lol/build/prisma-polar) ([markdown](https://www.ihatereading.lol/build/prisma-polar.md)) — Prisma schema with Polar checkout for creator tools.
- [Prisma + Dodo](https://www.ihatereading.lol/build/prisma-dodo) ([markdown](https://www.ihatereading.lol/build/prisma-dodo.md)) — Prisma + the same payment provider as this live site.
- [Convex + Stripe](https://www.ihatereading.lol/build/convex-stripe) ([markdown](https://www.ihatereading.lol/build/convex-stripe.md)) — Realtime board without rolling your own sockets.
- [Upstash + Stripe](https://www.ihatereading.lol/build/upstash-stripe) ([markdown](https://www.ihatereading.lol/build/upstash-stripe.md)) — Tiny deploy. Sorted set for the leaderboard.

## Keys and official links

- [Next.js + shadcn + Tailwind](https://www.ihatereading.lol/build/platforms/next.md) (app)
- [Firebase / Firestore](https://www.ihatereading.lol/build/platforms/firebase.md) (database)
- [Supabase](https://www.ihatereading.lol/build/platforms/supabase.md) (database)
- [Prisma + PostgreSQL](https://www.ihatereading.lol/build/platforms/prisma.md) (database)
- [Convex](https://www.ihatereading.lol/build/platforms/convex.md) (database)
- [Upstash Redis](https://www.ihatereading.lol/build/platforms/upstash.md) (database)
- [Stripe](https://www.ihatereading.lol/build/platforms/stripe.md) (payments)
- [Polar](https://www.ihatereading.lol/build/platforms/polar.md) (payments)
- [Dodo Payments](https://www.ihatereading.lol/build/platforms/dodo.md) (payments)
