Bloom Steward, a RouteMaster app by TixPy
Deployed to Heroku: https://bloom-steward-2a872c497756.herokuapp.com/#/home
SCOPE Doc ⇒ TxP Bloom Steward Scope .pdf
PRESO ⇒ Bloom Steward Solo Preso.pdf
Bloom Steward meets business needs with a web application designed to provide a mobile timeclock for accountability and real-time communications between clients and field technicians.
Bloom Steward showcases technical skills:
- Build intuitive frontend interfaces: JavaScript, React, Redux‑Saga
- Develop scalable backend systems: Node.js, Express, PostgreSQL
- Custom, user‑focused design: Figma, Miro, Excalidraw
Key Features: Routes, timestamps, timely notes, and PostgreSQL database.
Watch the Live Demo 🎥 — Live Demo (pending)
- 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
- Heroku app: https://bloom-steward-2a872c497756.herokuapp.com/#/home
- Release script applies schema/seed when
DATABASE_URLis set.
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.
This project was developed as part of Prime Digital Academy and is maintained by Tom Pinataro.