Skip to main content

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 controllers
  • controller/ — Business logic, calls into models and services
  • model/ — 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​

FilePurpose
demo-server/.env.exampleAll backend environment variables
demo-client/vite.config.jsFrontend dev server config
demo-server/knexfile.jsDatabase connection config