Classic Trip is a Node.js + Express + MongoDB + Mongoose + EJS monolith for a multi-tenant travel marketplace. Public booking, company operations, employee/driver tools, customer accounts, promoter workflows, and super-admin controls now run through one production dashboard system with role-scoped data and actions.
/ marketplace/search backend-filtered listings/services all service categories/routes route directory/companies partner directory/companies/:slug partner profile/promoters promoter program, links and marketing assets/listings/:serviceType/:slug listing detail/book/:serviceType/:slug guest checkout/booking/success/:bookingRef/tickets guest ticket lookup/tickets/:bookingRef/tickets/:bookingRef.pdf/blogs/health/admin/company/dashboard/employee/dashboard/driver/dashboard/account/promoter/dashboardpublic.js, auth.js, customer.js, company.js, employee.js, promoter.js, admin.js.ENABLE_JOBS=true.cd classic-trip-platform
cp .env.example .env
npm install
npm run lint
npm test
npm run dev
Open:
http://localhost:5000
Use the password below for every demo account:
Password123
Accounts:
admin@classictrip.test -> /admin
company@classictrip.test -> /company/dashboard
employee@classictrip.test -> /employee/dashboard
customer@classictrip.test -> /account
promoter@classictrip.test -> /promoter/dashboard
The old in-memory demo store has been removed from runtime. The app expects MongoDB as the system of record when DEMO_MODE=false. For local development, start MongoDB, seed the reference data, then run the app:
npm run seed:local
npm run seed:counts
npm run dev
Use AUTO_SEED_MONGO=true only for local/dev bootstrapping when the database is empty.
Real production values are required for:
MONGO_URISESSION_SECRETCLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_CALLBACK_URLSMS_API_URLSMS_API_TOKENWHATSAPP_API_URLWHATSAPP_API_TOKENENABLE_JOBSProduction ticket PDFs are generated with PDFKit at /tickets/:bookingRef.pdf. Cloudinary upload support is available in the PDF service once Cloudinary credentials are configured.
The implementation is MongoDB-first with seeded platform records, transaction-style checkout persistence, seat and hotel room-night locking, signed/idempotent webhook processing, scoped dashboard routes, support/partner onboarding, refund and wallet reversal flows, scheduled cleanup jobs, configurable payment providers, and locally generated ticket PDFs with Cloudinary upload support when production credentials are present.
Recommended release checks:
npm run check
npm run check:dashboards
npm run check:dashboard-smoke-static
npm run acceptance:matrix
npm run test:acceptance
npm test
Tests and audit evidence stay in the repository so the platform remains verifiable. They are excluded from production deploy/package payloads through .slugignore, .npmignore, and .dockerignore.
Runtime-required folders are:
src/ application code, views, models, routes, services, seeds, jobs, config, and middleware.public/ active CSS/JS assets served by Express.package.json, package-lock.json, Procfile, .env.example, and runtime config files.