Price Comparison
E-commerce · React + Node (Express) · 16 @molecule/* packages
Google Shopping-like price comparison with multi-source data, price history tracking, and drop alerts — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (18)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Search
/search(signed in) - ProductDetail
/products/:id(signed in) - Alerts
/alerts(signed in) - Deals
/deals(signed in) - Watchlist
/watchlist(signed in) - Settings
/settings(signed in) - Dashboard
/dashboard(signed in) - AlertDetail
/alerts/:id(signed in) - Notifications
/notifications(signed in) - Categories
/categories(signed in) - PriceHistory
/products/:id/history(signed in) - Profile
/profile(signed in) - Billing
/settings/billing(signed in)
Data model (9 tables)
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- notifications — id, user_id, type, payload, read_at, created_at
- price_alerts — id, user_id, product_id, target_price, alert_type, status, channel, last_notified_at, …
- price_entries — id, product_id, source_id, price, currency, url, in_stock, is_current, …
- price_history — id, product_id, source_id, price, currency, in_stock, recorded_at, created_at
- product_variants — id, productId, name, sku, price, inventory, createdAt, updatedAt
- products — id, name, slug, description, price, currency, status, imageUrl, …
- sources — id, name, slug, base_url, logo_url, fetch_config, status, last_fetched_at, …
- watchlist_items — id, user_id, product_id, notes, created_at
API (7 handlers)
- \_test
api/src/handlers/_test.ts - alerts
api/src/handlers/alerts.ts - notifications
api/src/handlers/notifications.ts - prices
api/src/handlers/prices.ts - products
api/src/handlers/products.ts - sources
api/src/handlers/sources.ts - watchlist
api/src/handlers/watchlist.ts
Subscription tiers
free / pro / team — gated by: maxAlerts, maxPrices, maxProducts, maxSources, advancedFeatures, canExport, retentionDays
Built from 16 @molecule/* packages
@molecule/api-cache-redis@molecule/api-cron-node-cron@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-http-axios@molecule/api-payments-stripe@molecule/api-resource-payment@molecule/api-resource-product@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/app-billing-react@molecule/app-charts@molecule/app-data-table@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringMEILISEARCH_API_KEYMeiliSearch admin API keyMAILGUN_API_KEYMailgun API key for alert emailsMAILGUN_DOMAINMailgun sending domain
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing