dharaneesh-r 414ba6dbf2 Fix assistant assign flow, cache staleness, and sweep KPI gloss lines
Assistant — assign:
- Order step is a dropdown, not a typed booking number. Exact bookingid /
  bookingno matches now win across the whole list before any substring
  fallback; row order previously decided the winner, so a short numeric id
  could substring-match a different booking than the one on screen.
- Rider step resolves by id or name, so answering by typing no longer
  leaves __rider undefined and throws inside executeAssign.
- notified now reflects whether the push actually went out. It was
  Boolean(rider.milerprofileid) — "has an id, assume they were told" — so a
  notify returning 400 still reported "The rider has been notified."
- Batch assign removed. /hub/bookings/batch-assign is a hub-console
  endpoint; an admin JWT is refused (403 on an empty body, so the gate is
  on identity). It read as the fast path and could never run.

Assistant — repeat runs:
- Bulk create response is read at data.results, the shape the live endpoint
  returns. Only the two flatter shapes were checked, so every bookingid was
  discarded while the count came out right by accident.
- Repeat carries each order's previous rider and re-assigns on create, one
  admin call per order, one push per rider. Confirm cards say so.
- Message ids are clock-seeded and healed on load; the counter restarted at
  1 each session and overwrote itself, giving duplicate React keys.
- Successful writes invalidate the query cache, so the page behind the panel
  stops serving rows cached before the write.

Date range picker:
- Fields seed from the range already in force instead of opening blank on a
  filtered table.
- Start field takes max={end}; only the end had a bound, so an inverted
  range could be emitted and filtered to nothing.

UI:
- Deliveries filters moved outside the table card.
- Side nav keeps one hairline; the border and box-shadow stacked into a
  heavy edge.
- KPI gloss lines removed across orders, riders, tenants, customers, hubs,
  vehicles, exceptions, app users, orders summary/details, riders summary
  and profitability.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 15:51:32 +05:30
2026-05-13 17:48:36 +05:30
2026-08-19 17:08:45 +05:30
2026-05-13 17:48:36 +05:30
2026-08-19 17:08:45 +05:30
2026-05-13 17:48:36 +05:30
2026-05-13 17:48:36 +05:30
2026-08-19 17:08:45 +05:30
2026-07-29 18:44:19 +05:30
2026-08-12 12:55:18 +05:30
2026-05-13 17:48:36 +05:30
2026-07-29 18:44:19 +05:30
2026-08-17 15:39:46 +05:30

Doormile Express - Operator Dispatch Console & Deliveries Portal

A high-fidelity, real-time dispatcher command center and order-delivery console built using React, React-Leaflet, TanStack Query, and Material UI.

This platform enables real-time visual tracking of delivery partners, responsive slot scheduling adjustments, route matching analysis, and direct order status management from a cohesive operational interface.


🚀 Key Features

📍 1. Real-Time Rider Live GPS Mapping

  • Interactive Leaflet Maps: Displays live geolocated pins for every active and idle rider across Coimbatore.
  • Polished Glassmorphism Popovers: High-fidelity Map Popups loaded with crucial metrics (Active Orders, Contact number, monospaced coordinates, and last-seen timestamps).
  • Dynamic Pulsing Live Indicator: Double-ring animated indicator reflecting current partner connectivity state (pulsing green #16a34a for active, red #dc2626 for idle).
  • Rider Routes & Planned Path Overlay: Parallel Indigo/Emerald rails representing planned paths vs actual tracks side-by-side using perpendicular polyline offsets.

🕒 2. Five-Wave Dispatch Slot Bucketing

  • Flexible Scheduling Boundaries: Segmented timing filters supporting precise fractional-hour offsets (e.g., Slot 1 ends at 12:30 PM, Slot 2 starts at 12:20 PM).
  • Default Operational Waves:
    • Slot 1 (Morning Rush): 8:00 AM → 12:30 PM
    • Slot 2 (Lunch Wave): 12:20 PM → 3:00 PM
    • Slot 3 (Afternoon Wave): 3:00 PM → 7:00 PM
    • Slot 4 (Evening Wave): 7:00 PM → 8:00 PM
    • Slot 5 (Night Wave): 8:00 PM → Midnight
  • State Validation & Caching: Employs an array-length-validated state cache (Key version v6 in LocalStorage) that auto-invalidates older 3-slot schema outputs during reload or hot-deployments to eliminate UI sync race conditions.

📦 3. Live Deliveries Portal & Update Status Modal

  • Dynamic Filter Tabs: Filter deliveries based on active operational states (pending, accepted, on road, completed).
  • Interactive Status Dialog: Positioned directly underneath the Amount inputs, allowing dispatchers to dynamically select and execute delivery state changes rather than submitting hardcoded records.

🛠️ Technology Stack

  • Framework: React 18
  • State Management: Redux Toolkit & React Context
  • Server Cache/Queries: @tanstack/react-query
  • Mapping Libraries: leaflet, react-leaflet, Custom Polyline Offset modules
  • Component Styling: MUI v5 (Material UI) & custom vanilla CSS design systems
  • Date/Time Parsers: dayjs

⚙️ Environment Variables Config (.env)

Configure the following variables in your root .env or .env.development file to supply runtime secrets and API targets:

REACT_APP_VERSION=v2.1.0
GENERATE_SOURCEMAP=false

# Backend Services Endpoint URLs
REACT_APP_DOORMILE_URL=https://api.doormile.com/api/v1

No Maps API key is required — maps and address search run on free Leaflet/OpenStreetMap (Nominatim + OSRM), not Google Maps.


🏃 Getting Started & Local Development

1. Prerequisite Installations

Ensure that Node.js (v16+ recommended) is installed on your computer.

2. Install Project Dependencies

Use either npm or yarn to fetch the required modules defined in the lockfiles:

# If using npm
npm install

# If using yarn
yarn install

3. Run Development Server

Launches the console locally with real-time hot-reloading:

# Start standard environment
npm start

# Start dev configuration (loads .env.development)
npm run start:dev

Open http://localhost:3000 in your web browser to view the console.


📦 Production Builds & Verification

To compile the application down to highly optimized, static production files, perform the following commands:

1. Compile the Bundle

npm run build

(Or yarn build). This compiles all files and outputs them to the build/ directory.

2. Verify static pages locally

To test the production compilation locally before deploying:

npx serve -s build

Click on the output Network addresses (e.g. http://localhost:3000 or the local IP address) to view the compiled pages.

Note

If you run the static build server locally and see a blank white page, ensure you have added "homepage": "." to your package.json to properly configure relative Webpack asset paths.

Description
No description provided
Readme 11 MiB
Languages
JavaScript 87.1%
CSS 12.8%
HTML 0.1%