Project Structure
Repository layout
PrimeSaaS/
├── demo-server/ # Node.js/Express backend
│ ├── api/ # Route handlers
│ ├── controller/ # Business logic
│ ├── model/ # Data access layer
│ ├── services/ # External integrations (payments, email)
│ │ └── paymentGateways/ # Lemon Squeezy, Stripe
│ ├── queue/ # BullMQ job definitions
│ ├── migrations/ # Knex database migrations
│ ├── middlewares/ # Auth, rate limiting, error handling
│ ├── emails/ # Email template logic
│ ├── config/ # Environment-based config
│ ├── server.js # Entry point (port 6600)
│ └── .env.example # Environment variable template
│
├── demo-client/ # React 19 + Vite frontend
│ ├── src/
│ │ ├── app/ # App shell, router, theme context
│ │ ├── pages/ # Route-level page components
│ │ ├── components/ # Shared UI components
│ │ └── api/ # API client functions
│ └── vite.config.js # Dev server on port 3300
│
└── demo-client-landing/ # Next.js client landing page
├── src/
│ ├── app/ # App router pages
│ └── components/ # Sections (hero, features, pricing)
└── package.json
Backend structure
The backend uses a layered architecture:
api/— Express route definitions, maps HTTP verbs to controllerscontroller/— Business logic, calls into models and servicesmodel/— Raw SQL via Knex, one file per domain (account, user, payment, etc.)services/— Wrappers around third-party APIs (Mailgun, S3, payment gateways)queue/— BullMQ workers and job producers for async tasks
Frontend structure
The React frontend uses a feature-folder pattern under src/pages/:
- Each page folder maps roughly to a route group (e.g.
/auth/,/account/,/dashboard/) - Shared components live in
src/components/ - Theme and app-level providers are in
src/app/
Key configuration files
| File | Purpose |
|---|---|
demo-server/.env.example | All backend environment variables |
demo-client/vite.config.js | Frontend dev server config |
demo-server/knexfile.js | Database connection config |