PromoPulse

byGUTTA BHAVANA

You are an expert SaaS product team consisting of: - Product Manager - UI/UX Designer - Frontend Engineer - Backend Engineer - Database Architect - DevOps Engineer - QA Engineer Build a production-ready Micro SaaS. Idea: Competitor promo monitor for SMB brands Requirements: Create: - Beautiful landing page - Dashboard - User authentication - Google Login - Email Login - Stripe subscriptions - Pricing page - Admin dashboard - Database - REST APIs - Responsive design - Dark mode - User settings - Billing page - Analytics - SEO - Error handling - Loading states Generate: - Frontend - Backend - Database schema - APIs - Authentication - Deployment configuration - Environment variables - README - Sample data Use a modern design similar to Linear, Notion or Vercel. Everything should be production-ready.

LandingPricingAnalyticsDashboardAdminDashboardSettingsLogin
Landing

Comments (0)

No comments yet. Be the first!

Architecture

Main System Architecturev98
External Providers
LLM Gateway
Data Stores
Backend Service port 7011
Frontend Service port 7012
Client
REST JSON POST api auth login from routed /login; register endpoint exists but its UI is unrouted
authService getProfile GET and updateProfile PATCH api auth profile from Settings ProfileBasicInfo Bearer
password-reset endpoints exist POST api auth password-reset and confirm but ForgotPassword and ResetPassword pages are UNROUTED so no live call
GET /api/auth/google/login
POST /api/auth/google/callback
redirect back with code and state; GoogleOAuthCallback component unrouted
SSE stream UNROUTED - ChatInterface useChat not imported by any page or route so no live call
analytics fetch
promoService fetchPromotions GET api promos DashboardPromoTable on mount Bearer
eventsService fetchEvents GET api events DashboardActivityTimeline on mount Bearer
notificationsService DashboardNotifications GET api notifications and POST id read and read-all Bearer
alertsService GET and PUT api alerts preferences Bearer
billingService BillingPaymentMethod getConfig on mount startCheckout getSubscription Bearer api billing config checkout subscription
window.location.assign checkout_url redirect to Stripe Hosted Checkout then back to /billing success or cancel
httpx token and userinfo
profile Depends get_current_user
register login profile update and password-reset confirm read and write User bcrypt hashed_password
activity Depends 401 403
activity owner-scoped Event metrics windowDays totalEvents unreadEvents recentEvents eventsByType
summarize_promotions and activity window bounds
Depends
CRUD unique user_id url 409
Depends
manual scan and scheduled sweep
detect-changes diff vs prior snapshot
persist Promotion and Event change alert set last_scanned_at 401 404 502
httpx GET competitor page
delegate parsing
detect-changes email alert if user opted in
Depends
read and update User email_alerts_enabled
is_configured email_configured
smtplib send_change_alert only if SMTP configured
GET weekly-summary ai.summary.generation
read Promotion and Competitor rows trailing 2 weeks
week-over-week digest top_competitors top_discounts
optional httpx POST chat completions only if configured
Depends
fetch event data 404 401 403
owner-scoped Event query newest-first
Depends
fetch system events notifications and single 404 401 403
system-scoped Event query user_id IS NULL newest-first pending count
signature verify construct_event
checkout subscription cancel Depends 401 403
read and provision Subscription plan status customer id 404
checkout and cancel gated by _require_stripe
customer session and subscription mgmt httpx only if key configured
Depends
read and update User username email email_alerts_enabled 409
validate_settings_update and normalize_username
Depends
read provision and change Subscription plan status DB-only 400
PLAN_CATALOGUE plans and validate_plan
PUT plan change notify_subscription_change
Depends
merge user notifications newest-first and mark read read-all
merge system notifications and pending count
email_configured is_configured
persist in-app Event unread reuse Event model
best-effort email when opted in and SMTP configured
seed rows into existing tables scenarios and edge cases
get_password_hash bcrypt for seeded identities
SQLAlchemy ORM
httpx stream
completions
signed webhook events
invoke scheduled jobs entrypoint
dispatch to orchestrator
data sync scan due competitors
reminders detect promotion changes
reminders email owners who opted in
cleanup prune expired data
persist Promotion change alert and monitored system Event user id null and update last scanned at
purge expired Event and canceled Subscription rows
Upstream LLM Provider
Stripe Billing API and Webhooks optional key
Google OAuth accounts.google.com
Competitor Websites
SMTP Email Provider optional
Scheduler cron or Kubernetes CronJob
LiteLLM Proxy port 4000
MariaDB app_db port 3306
Postgres LiteLLM store
Redis cache
FastAPI Server main.py CORS
Auth Router register login JWT with role claim and google login and callback; role via admin_username_prefix; GET and PATCH profile JWT-guarded via get_current_user; POST password-reset enumeration-safe short-lived signed token and POST password-reset confirm rehash bcrypt hashed_password
Google OAuth Service is_configured build_url exchange_code fetch_userinfo
Chat Proxy api chat stream
Meta Router api meta capabilities registry incl google.oauth.integration and backend.conduct.qa.testing health plus capabilities manifest
Health Route health
Webhook Router api webhooks stripe
Billing Router stripe.integration api billing config public plus subscription checkout cancel JWT-guarded 503 config-required when Stripe key absent
Stripe Service is_configured create_customer create_checkout_session retrieve and cancel_subscription optional key
Analytics Router api analytics promotions and summary static public plus activity JWT-guarded user-scoped windowed 1..365 days Event metrics
Competitors Router api competitors CRUD JWT-guarded user-scoped
Alerts Router api alerts preferences GET and PUT email_alerts_enabled JWT-guarded user-scoped
Email Alert Service send_change_alert is_configured smtplib SMTP best-effort
Promos Router api promos scan and scan-all and schedule and history and detect-changes and weekly-summary JWT-guarded user-scoped
Promo Scanning Service fetch_page scan_competitor
Promo Extraction Service extract_promotions offer classification field truncation
Promo Change Detection Service detect_changes summarize_changes
AI Summary Service build_weekly_digest generate_weekly_summary deterministic fallback ai_status
Events Router api events list envelope and api events event_id single fetch.event.data JWT-guarded user-scoped filters event_type unread_only limit 1..200
Event Data Service fetch_events fetch_event count_events owner-scoped newest-first
System Events Router api system events list and notifications unread-only and system events event_id single fetch.system.events JWT-guarded system-scoped user_id IS NULL filters event_type unread_only limit 1..200
System Event Service fetch_system_events fetch_system_event count_system_events fetch_notifications system-scoped newest-first
Settings Router api settings backend.api.endpoints GET and PATCH username email email_alerts_enabled JWT-guarded user-scoped uniqueness 409
Subscriptions Router api subscriptions GET plans and GET current plus PUT change plan backend.api.endpoints JWT-guarded user-scoped DB-only auto-provisions free plan 400 unknown plan; PUT triggers subscription-change notification
Notifications Router api notifications GET unified feed unread badge plus POST notifications id read and POST notifications read-all notification.system JWT-guarded user-scoped merges user and system Events
Notification Service dispatch boundary notify_subscription_change notify_promo_update notify_system_event persists in-app Event plus best-effort email per-user opt-in configurable reuses Event model
Business Rules Service business_rules central rules PLAN_CATALOGUE and quotas validate_plan can_add_competitor summarize_promotions clamp_activity_window validate_settings_update normalize_username; in-process helper business.rules.implementation
Security get_current_user HTTPBearer decode JWT sub and role claim
Subscription Service apply and record event idempotent
Sample Data Service create_sample_data idempotent seed for User Admin Subscription Role UserRole RolePermission data.sample.creation standalone primitive not HTTP-wired
Scheduled Jobs CLI run scheduled jobs entrypoint opens session local dispatches job name all reminders data sync or cleanup exit code zero ok nonzero on error
Scheduled Jobs Service orchestrator run all jobs isolates per job failures run data sync job run reminders job run cleanup job scheduled jobs setup
Retention Service apply retention policies purge expired events and canceled subscriptions
SQLAlchemy Models User with role column Admin Subscription Event Competitor Promotion and RBAC persistence-only Role and UserRole many-to-many secondary and RolePermission not yet consumed at runtime
Alembic Migrations 001 to 007 incl user email_alerts_enabled and user role plus c400a54563fb RBAC roles user_roles role_permissions tables
React 18 SPA react-scripts build/start/test served by Nginx; App shell AuthProvider then ThemeProvider then Router then AppRoutes; AuthContext role isAdmin isLoading; all AppRoutes are plain UNGUARDED Routes / and landing pricing analytics dashboard billing admin-dashboard and AdminDashboard settings profile login; catch-all star Navigate to /; PrivateRoute component exists but is NOT wired into AppRoutes so no route guarding; Registration UNROUTED - RegisterForm useRegisterForm exist but /register /signup /register-success are NOT registered; ForgotPassword and ResetPassword pages exist but /forgot-password and /reset-password are NOT registered in AppRoutes; GoogleOAuthCallback component exists but is NOT registered in AppRoutes
Browser
Landing design preview
Landing: View Info
Login: Sign In
AdminDashboard: View Overview
AdminDashboard: Manage Users
AdminDashboard: Review Analytics
Analytics: View Reports
Settings: Update Profile
Billing: View Billing
Landing design preview
Landing: View Info
Login: Sign In
AdminDashboard: View Overview
AdminDashboard: Manage Users
AdminDashboard: Review Analytics
Analytics: View Reports
Settings: Update Profile
Billing: View Billing