Product · 2025 · 06 / 10
1899RP Scripts Store.
A RedM scripts marketplace with full Stripe commerce, per-purchase licensing, and a complete admin dashboard, shipped solo in a week.
- Context
1899RP Scripts Store is a marketplace for RedM roleplay scripts. The storefront lets server owners browse curated packages, read feature lists and FAQ, watch a preview video, add items to a cart, and check out through hosted Stripe Checkout. Every paid item mints a License row with its own key, a KeyMaster product id, a status, and an expiry, and the buyer gets a personal library with downloads and license keys on file. The admin side is the real surface: categories, scripts, users, purchases, statistics, settings, and a diagnostic page, all behind one admin layout. The visual identity leans into the Red Dead Redemption 2 frontier: rich reds, rustic earth tones, and a western display face sit over an otherwise modern React interface.
- Approach
I treated the admin dashboard as the product and the storefront as a polished view over it. The Package entity carries everything a listing needs in one TypeORM row: slug, short and full description, price and sale window, gallery, video URL, features and FAQ JSON, requirements, version, compatibility, KeyMaster product id. A published flag and a status enum gate visibility so a category can be unpublished without deleting it, and a sale can be scheduled ahead of time and expire on its own. Stripe Checkout owns the payment surface and the webhook owns truth: when Stripe fires checkout.session.completed the server marks the purchase paid, writes a PurchaseItem per line, and generates License rows keyed to the buyer. The download route reads the license before it ever touches the file system.
- Outcome
The store runs end to end. A server owner can register, fill a cart, pay through Stripe, land on a success page that clears the cart, and pull their files and license keys from their purchases library. The admin can create scripts, toggle featured and published, schedule sales, manage users and purchases, and read sales-over-time and top-selling charts from the statistics page. The code is an honest ledger of a week's sprint: real payments, real webhooks, real licensing, scoped to one niche that most marketplaces ignore.
- Process
- 01
Niche first, stack second
RedM server owners buy scripts the way developers buy fonts. I built the store around that habit first, then picked the calmest stack that could carry it: React on the front, Express and TypeORM on the back, Postgres in the middle.
- 02
Packages as a first-class entity
Every script is a Package row with its own slug, sale window, features JSON, FAQ JSON, gallery, video URL, version, and KeyMaster product id. The admin form writes straight into that shape so a new listing is a form submit, not a deploy.
- 03
Stripe Checkout + webhooks
Hosted Stripe Checkout handles the payment surface. A webhook controller marks the purchase paid, spawns license rows per item, and fills a personal library. The only secret the client ever sees is a session id.
- 04
Licensing that survives refunds
Each paid item mints a License with its own key, a KeyMaster id, status, and expiry. Revoke flips the status, download routes check it, and the same license can be moved between dev and prod servers without reissuing.
- 05
Admin dashboard as the product
Categories, scripts, users, purchases, statistics, settings, and a diagnostic page all live under one admin layout. Most of the shipping happened in the dashboard; the storefront is just a polished view over it.
- Credits
- Product & build
- Salah Boussettah
- Next
→ Wisey
Product · 2025