SecurityFirm is a multi-platform security operations system with:
- A Node.js + Express + MongoDB backend API
- An Admin dashboard (
Frontend/Admin) built with React + Vite - A public Website (
Frontend/Website) built with React + Vite - A Mobile app (
Frontend/Mobile) built with Expo + React Native
- Backend:
Node.js,Express,MongoDB,Mongoose,JWT,Cloudinary - Frontend (Admin + Website):
React,Vite - Mobile:
Expo,React Native,expo-router
SecurityFirm/
controllers/
db/
lib/
middleware/
models/
routes/
server.mjs
Frontend/
Admin/
Website/
Mobile/
Node.js18+ (recommended)npm9+- A running MongoDB instance (local or Atlas)
- A Cloudinary account (for upload features)
- Expo Go app (for mobile testing), optional but recommended
Create a .env file in the project root (SecurityFirm/.env) with:
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
NODE_ENV=developmentOpen separate terminals for each service you want to run.
git clone https://github.com/chrishmika/SecurityFirm.git
cd SecurityFirm
npm installnpm run devDefault API base URL:
http://localhost:5000/api
cd Frontend/Admin
npm install
npm run devcd Frontend/Website
npm install
npm run devcd Frontend/Mobile
npm install
npm run startFor platform-specific runs:
npm run android
npm run ios
npm run webFrom the project root:
npm run heroku-postbuildThis builds:
Frontend/Admin/buildFrontend/Website/build
The backend serves:
- Admin app at
/app - Website at
/
Root:
npm run dev- start backend withnodemonnpm run heroku-postbuild- install + build Admin and Website apps
Frontend/Admin:
npm run devnpm run buildnpm run preview
Frontend/Website:
npm run devnpm run buildnpm run preview
Frontend/Mobile:
npm run startnpm run androidnpm run iosnpm run web
- If backend cannot connect to DB, verify
MONGO_URIin.env. - If auth fails, verify
JWT_SECRETis set. - If uploads fail, verify all
CLOUDINARY_*variables. - If mobile cannot reach local API, ensure your phone/emulator can access your machine network.
- CORS is currently configured with
origin: trueandcredentials: trueinserver.mjs. - Backend default port is
5000unless overridden byPORT.