StarForge

Live at starforgekits.com.
StarForge, the live site

A membership site for people who print miniatures: a catalogue of STL files, a browser modelling tool that does what slicers cannot, and a monthly drip of new things to print.

What it does, step by step
  1. Browse the catalogueHundreds of STL products across categories, each with a rendered four-view sheet, served from a build-time export so a product page makes zero database calls.
  2. Join and log inSign in with Google, Patreon or a six-digit email code. A tier ladder from starter to max; Stripe or Patreon as the billing provider, never both for one email.
  3. Unlock and downloadA member spends monthly picks to unlock files; downloads start silently from Google Drive with no Drive page and no shareable URL.
  4. Model in the browserSplit with pegs, hollow, drain holes, magnet sockets, engraved text, booleans, mirror, bases, undo, autosave, STL and 3MF export. Pure JavaScript; no WebAssembly, by design.
  5. Summon a pictureMembers generate concept images with metered tokens: deduct once, produce, verify the result, keep the charge or refund once.
How it is built

The membership half of the factory canon with StarForge's content, prices and skin on top. The catalogue is a static export; the money paths are webhook-driven with two-phase event claims so a killed handler never loses a payment; token metering is a two-pass ledger.

  • Next.js
  • Supabase Postgres (RPCs for atomic reservations)
  • Stripe subscriptions and webhooks
  • Patreon sync cron
  • Google Drive delivery
  • three-bvh-csg for booleans
  • gpt-image-2 via fal at low quality
  • Vercel Blob
  • Minimum database: public reads come from a generated constants module; the database is for authentication, gating and the ledger only, so the catalogue survives a database outage.
  • Burst-pattern IP bans instead of fixed windows: ten failed logins in one second is a machine, ten in ten minutes might be a person; the punishment scales with the confidence.
  • Every heading is pinned by a guard: rewording an h1 fails the build, because a heading change hides inside a commit about something else.
visitor ──► catalogue (static export, 0 DB calls)
   │
   ├─ login door ─► Google | Patreon | email code ─► signed session
   │
   └─ member ──► picks ledger ──► unlock ──► silent download (Drive)
                 └─ tokens ──► generate ──► verify ──► keep / refund once

all projects