RouteMaster is the generic parent pattern for the Bloom Steward app. It keeps the same core architecture, but uses generic branding and placeholder copy/assets.
- Technician check-ins and task tracking
- Quality control reporting
- Work Summary Report with per-visit mileage legs, per-tech mileage totals, visit date, notes, contact, and geo validation
- Data persistence with PostgreSQL
- Secure user authentication
- Responsive React front-end
- React, Redux, Axios
- Node.js, Express
- PostgreSQL
- Heroku deployment
- Clone the repository
- Install dependencies with
npm install(root) andnpm installinmobile/ - Create environment files
- Server: values from your local setup (optional for MVP)
- Mobile:
mobile/.envwithEXPO_PUBLIC_API_URL=http://localhost:5100
- Build the server with
npm run build(Heroku runs this automatically) - Run the API locally with
npm run dev(TypeScript) ornpm run server(compiled) - Run the mobile app from
mobile/withnpm start
GET /health– liveness check (returns version + uptime)GET /metrics– Prometheus metrics (counters + duration histogram)POST /api/auth/login– returns a demo token and userPOST /api/auth/refresh– returns a fresh token for a valid sessionGET /api/routes/today– requiresAuthorization: Bearer <token>GET /api/visits/:id– requires authPOST /api/visits/:id/submit– requires auth
- The API uses Postgres when
DATABASE_URLis set; otherwise it serves demo data in-memory. - To provision locally, create a DB and run:
psql "$DATABASE_URL" -f server/sql/schema.sqlpsql "$DATABASE_URL" -f server/sql/seed.sql
- Demo credentials (override via env):
DEMO_EMAIL=demo@example.comDEMO_PASSWORD=password
VISIT_STATE_READ_MODE—db|memory|shadowdb: read visit flags fromvisit_statetable.memory: read visit flags from in-memory map (Phase A).shadow: read from DB but log a one-time comparison against in-memory for the day.
- Staging default: when
STAGING=1(orNODE_ENVincludesstaging), the server defaults toshadowif DB is present.
- Type check:
npm run typecheck - Lint:
npm run lint(fix withnpm run lint:fix)
- Terminal A:
npm run dev - Terminal B:
printf "EXPO_PUBLIC_API_URL=http://localhost:5100\n" > mobile/.envcd mobile && npx expo start -c --ios
- Configure your own deployment target and
EXPO_PUBLIC_API_URL.
cd mobile
npm install
npm run build:android:prod
npm run build:ios:prodSee the detailed guides in docs/release/ANDROID_BETA.md and docs/release/STORE_BUILD_SUBMIT.md for submission steps (replace identifiers/credentials first).
This project was developed as part of Prime Digital Academy and is maintained by Tom Pinataro.