Digital Goods Store
E-commerce · React + Node (Express) · 17 @molecule/* packages
Gumroad-like digital downloads with license keys, download links, and analytics — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (17)
- Landing
/ - Storefront
/shop - ProductDetail
/shop/:slug - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Dashboard
/dashboard(signed in) - Products
/products(signed in) - Sales
/sales(signed in) - Settings
/settings(signed in) - Cart
/cart - Checkout
/checkout - OrderConfirm
/order/:id/confirm - CustomerLibrary
/library(signed in) - OrderHistory
/orders(signed in) - ProductEditor
/products/:id/edit(signed in)
Data model (11 tables)
- carts — id, user_id, items, coupon_code, created_at, updated_at
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- download_logs — id, user_id, product_id, license_id, ip_address, user_agent, signed_url, expires_at, …
- licenses — id, purchase_id, product_id, user_id, license_key, status, activations, max_activations, …
- order_events — id, orderId, status, metadata, createdAt
- order_items — id, orderId, productId, variantId, name, price, quantity, image
- orders — id, userId, status, subtotal, tax, shipping, discount, total, …
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- product_variants — id, productId, name, sku, price, inventory, createdAt, updatedAt
- products — id, name, slug, description, price, currency, status, imageUrl, …
- purchases — id, user_id, product_id, amount, currency, status, payment_id, refunded_at, …
API (10 handlers)
- analytics
api/src/handlers/analytics.ts - checkout
api/src/handlers/checkout.ts - downloads
api/src/handlers/downloads.ts - library
api/src/handlers/library.ts - licenses
api/src/handlers/licenses.ts - orders
api/src/handlers/orders.ts - products
api/src/handlers/products.ts - profile
api/src/handlers/profile.ts - purchases
api/src/handlers/purchases.ts - sales
api/src/handlers/sales.ts
Subscription tiers
free / pro / team — gated by: maxAnalytics, maxDownloads, maxLicenses, maxProducts, maxPurchases, advancedFeatures, canExport, retentionDays
Built from 17 @molecule/* packages
@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-reporting-database@molecule/api-resource-order@molecule/api-resource-payment@molecule/api-resource-product@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-data-table@molecule/app-file-upload@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringSTRIPE_SECRET_KEYStripe secret API keySTRIPE_PUBLISHABLE_KEYStripe publishable keySTRIPE_WEBHOOK_SECRETStripe webhook signing secretS3_BUCKETS3 bucket for digital assetsAWS_ACCESS_KEY_IDAWS access keyAWS_SECRET_ACCESS_KEYAWS secret keyMAILGUN_API_KEYMailgun API keyMAILGUN_DOMAINMailgun domainMEILISEARCH_API_KEYMeiliSearch API key
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing