Multi-modal hyper-local routing engine that computes road-accurate routes around AUST, adapts to anomalies in real time, and uses a dedicated ML microservice for asynchronous route traffic risk prediction.
- Live URLs: Section 16
- Judge demo steps: Section 17
- ML-first feature showcase: Section 14
- API contracts and payloads: Section 6
- Setup and run instructions: Section 7, Section 8
- Architecture and system design: Section 3, Section 4
- API behavior and payload examples: Section 6
- Setup and execution: Section 7, Section 8
- Design decisions and assumptions: Section 9, Section 10
- Performance and scalability: Section 11
- Full feature inventory for showcase: Section 14
- CI/CD and deployment implementation: Section 15
- Authentication endpoints exist in code, but the primary judged flow is routing, anomaly adaptation, and ML-based traffic prediction.
GoliTransit is a full-stack intelligent routing system built for urban mobility scenarios where cars, rickshaws, bikes, walking, and transit need to coexist inside one routing workflow.
Dhaka-like city mobility is not a single-mode problem. Users frequently switch between walking, rickshaw, bike, car, and transit depending on road type, congestion, and local constraints.
Traditional route systems fail in three important ways for this context:
- They treat all roads as equally accessible for all vehicles.
- They do not react quickly to dynamic incidents (closures, flooding, congestion, VIP movement).
- They do not expose judge-friendly transparency on how route decisions are made.
GoliTransit addresses this by combining:
- OSM road graph constraints by transport mode,
- Dynamic anomaly-driven edge weight updates,
- Multi-modal state-space shortest path search,
- Frontend map visualization with route comparison and mode-color interpretation.
Real-world relevance:
- Emergency rerouting during accidents/waterlogging,
- Better first/last-mile decisions,
- Explainable mobility planning for mixed-transport cities.
The backend is a service-layered FastAPI application.
Core modules:
routes/: thin HTTP controllersservices/: routing, graph, anomaly, traffic, ML integration logicmodels/: Pydantic and SQLAlchemy schemasdatabase.py: SQLAlchemy session/engine
Startup pipeline in backend/main.py:
- Create DB tables.
- Load and normalize OSM graph around AUST center.
- Initialize traffic dummy dataset + model.
- Start async traffic workers.
Frontend is a React SPA with two main pages:
HomePage(landing)MapPage(interactive route planning + anomaly injection)
Key components:
MapView: route rendering, overlap handling, node overlays, anomaly overlaysRoutePanel: route compute controls + metricsRouteSelectionPanel: fastest vs shortest multimodal selectorModeSelector,AnomalyModal,AnomalyAlert
SQLAlchemy models currently include:
road_traffic_observations(hourly per-edge dummy traffic labels)
Default runtime DB is MySQL (from config.json and Docker Compose).
Graph source and processing:
- OSMnx graph extraction (
network_type: all) around configured center/radius - NetworkX MultiDiGraph in memory
- Mode constraints per edge (
car_allowed,bike_allowed, etc.) - Mode-specific travel time weights (
{mode}_travel_time) - Current working graph size: 2,741 nodes and 6,169 edges
Routing paths:
- Single-modal shortest path
- Multi-modal state-space Dijkstra (
(node, mode)states) - Sequential fallback if state-space fails
- Anomaly Service: applies dynamic weight multipliers and mode disabling on affected edges.
- Traffic Jam Service: async queue-based route-level risk prediction with retry and worker pool.
- ML Integration (Core Differentiator): backend route responses return fast while a decoupled ML pipeline computes per-edge traversal risk and route-level congestion probability.
- Fallback Safety: if ML is unavailable, routing stays functional with deterministic fallback estimates so the UX remains stable.
User Action (Frontend)
-> FastAPI Route API
-> RoutingEngine
-> GraphService + MultiModalDijkstra
-> (Optional) Anomaly effects + Traffic prediction job
-> Response + route_id
-> Frontend map render + async traffic polling
/routereturns route geometry androute_idquickly.TrafficJamServiceenqueues ML prediction work without blocking route computation.- Worker threads call ML
/predictwith batched edge features. - Predictions are aggregated into route risk metrics and confidence.
- Frontend polls
/traffic/{route_id}to render final ML-enhanced traffic status. - If the ML service is down, fallback logic keeps routing and anomaly adaptation available.
GoliTransit uses one OSM truth graph with layered semantics:
- Base Layer: geometry, length, road type
- Constraint Layer: per-mode allowed/disallowed flags
- Weight Layer: base and dynamic travel-time weights
- Runtime Layer: anomaly multipliers, ML-predicted updates
Why this design:
- Preserves road topology integrity,
- Allows safe dynamic behavior without mutating graph structure,
- Keeps routing explainable (weights + constraints are observable).
React local state with explicit routing/anomaly state slices in MapPage:
- origin/destination,
- route mode (single vs multimodal),
- selected comparison route,
- anomalies,
- async traffic status per route.
Why this design:
- Minimal overhead for hackathon scope,
- Predictable and easy to demo,
- No external state framework required.
Traffic prediction pipeline is decoupled from route computation:
- route request returns quickly with
route_id, - prediction jobs are queued,
- worker pool processes jobs concurrently,
- retry with backoff for transient failures,
- frontend polls
/traffic/{route_id}.
Why this design:
- Keeps
/routelatency stable, - Prevents blocking request threads,
- Scales with worker count.
Anomaly POST
-> AnomalyService validates + resolves edge targets
-> Graph edge weights updated (and optional mode disabling)
-> graph version incremented
-> next route requests automatically adapt
Implemented caches:
- Route response cache with TTL in
RoutingEngine - Single-source shortest-tree LRU cache in
RoutingEngine - Mode-subgraph cache in
GraphService - KDTree spatial index for nearest-node lookup
- Edge prediction cache + route prediction lifecycle cache in
TrafficJamService
Why this design:
- Reduces repeated graph traversals,
- Accelerates hot-path route requests,
- Supports interactive frontend usage.
This section is intentionally concise to avoid repeating details already documented in the dedicated showcase.
- Full feature showcase (single source of truth): Section 14
- Routing and anomalies: Section 14.1, Section 14.2
- ML prediction and training functionality: Section 14.3, Section 14.7, Section 14.8
- API endpoint surface: Section 14.5
Description: Service health check.
Request body:
nullResponse:
{
"status": "ok"
}Description: Compute single-modal or multi-modal optimal route.
Request:
{
"origin": { "lat": 23.7639, "lng": 90.4066 },
"destination": { "lat": 23.7725, "lng": 90.415 },
"modes": ["walk", "transit", "car"],
"optimize": "time",
"avoid_anomalies": true,
"include_multimodal": true,
"traffic_hour_of_day": 9,
"max_alternatives": 3
}Response:
{
"legs": [
{
"mode": "walk",
"geometry": [{ "lat": 23.7639, "lng": 90.4066 }],
"distance_m": 210.5,
"duration_s": 155.2,
"cost": 0,
"instructions": ["Start...", "Arrive..."]
}
],
"mode_switches": [
{
"from_mode": "walk",
"to_mode": "transit",
"location": { "lat": 23.765, "lng": 90.408 },
"penalty_time_s": 60,
"penalty_cost": 0.2
}
],
"total_distance_m": 3200.4,
"total_duration_s": 820.6,
"total_cost": 1.4,
"anomalies_avoided": 2,
"alternatives": [],
"multimodal_suggestions": [],
"traffic_jam_prediction": null,
"route_id": "route_ab12cd34ef56",
"traffic_status": "loading"
}Description: Get asynchronous traffic prediction status for an existing route.
Request body:
nullResponse:
{
"route_id": "route_ab12cd34ef56",
"status": "ready",
"job_status": "completed",
"retry_count": 0,
"max_retries": 3,
"updated_at": 1712833000.42,
"data": {
"hour_of_day": 9,
"route_jam_chance_pct": 34.8,
"edges_analyzed": 41,
"heavy_edges": 4,
"moderate_edges": 12,
"low_edges": 25,
"confidence": 0.92
}
}Description: Inject anomaly and apply dynamic graph effects.
Request:
{
"type": "waterlogging",
"severity": "high",
"edge_ids": ["123->456"],
"vehicle_types": ["car", "bike"],
"description": "Road submerged after rain",
"duration_minutes": 45
}Response:
{
"anomaly_id": "anomaly_9f31e7b1d4a2",
"status": "accepted",
"affected_edges": 1,
"edge_ids": ["123->456"],
"vehicle_types": ["bike", "car"],
"severity": 3
}Description: List active anomalies.
Request body:
nullResponse:
{
"anomalies": [
{
"anomaly_id": "anomaly_9f31e7b1d4a2",
"edge_ids": ["123->456"],
"severity": 3,
"type": "waterlogging",
"description": "Road submerged after rain",
"weight_multiplier": 3,
"created_at": "2026-04-11T10:10:00Z",
"expires_at": "2026-04-11T10:55:00Z"
}
],
"count": 1
}Description: Clear all active anomalies and reset effects.
Request body:
nullResponse:
{
"status": "cleared",
"count": 3
}Description: Return graph snapshot for visualization/debugging.
Query params:
include_edges(bool)bbox=south,west,north,east(optional)mode=car|bike|walk|transit|rickshaw(optional)
Response:
{
"node_count": 2741,
"edge_count": 6169,
"nodes": [
{
"id": "123456",
"lat": 23.7631,
"lng": 90.4058,
"accessible_modes": ["car", "walk", "rickshaw"]
}
],
"edges": [],
"anomaly_affected_edges": []
}Description: Multi-modal state-space Dijkstra by source/destination node IDs.
Request:
{
"source": 123456,
"destination": 789012,
"allowed_modes": ["car", "rickshaw", "walk"],
"mode_switch_penalty": 5
}Response:
{
"computation_time_ms": 312.8,
"node_path": [123456, 223344, 789012],
"coordinate_path": [{ "node_id": 123456, "lat": 23.7639, "lng": 90.4066 }],
"path": [{ "from": 123456, "to": 223344, "mode": "walk" }],
"geometry": [
[23.7639, 90.4066],
[23.7645, 90.4074]
],
"total_cost": 189.4,
"num_steps": 2,
"modes_used": ["walk", "car"],
"justification": "Multi-modal optimal route computed..."
}Description: Multi-modal state-space Dijkstra by lat/lng with nearest-node or edge snap.
Request:
{
"source_lat": 23.7639,
"source_lng": 90.4066,
"dest_lat": 23.7725,
"dest_lng": 90.415,
"allowed_modes": ["walk", "transit", "car"],
"mode_switch_penalty": 5
}Response:
{
"computation_time_ms": 341.2,
"source_node": 123456,
"destination_node": 789012,
"source_snap_distance_m": 8.7,
"dest_snap_distance_m": 11.3,
"node_path": [123456, 223344, 789012],
"coordinate_path": [],
"path": [],
"geometry": [],
"total_cost": 205.9,
"num_steps": 2,
"modes_used": ["walk", "transit"],
"justification": "Multi-modal optimal route computed..."
}Description: Directly modify v2 graph edge weights by severity.
Request:
{
"affected_edges": [
[123456, 223344],
[223344, 789012]
],
"severity": 4
}Response:
{
"status": "updated",
"edges_affected": 2,
"cars_blocked": 2,
"severity": 4,
"multiplier_applied": 3
}Description: Debug graph sample for v2 engine.
Query params:
limit(default 100)include_weights(default false)
Response:
{
"total_nodes": 2741,
"total_edges": 6169,
"nodes_sample": [123456],
"edges_sample": [
{
"from": 123456,
"to": 223344
}
]
}Description: Validate graph constraints and integrity for audit/judging.
Response:
{
"valid": true,
"issues": [],
"stats": {
"total_nodes": 2741,
"total_edges": 6169,
"negative_weight_edges": 0,
"connected_components": 1
},
"design_rules": {
"edges_from_osm": true,
"no_negative_weights": true,
"graph_connected": true,
"road_geometry_available": true
}
}Description: ML service and model-load status.
Response:
{
"status": "healthy",
"service": "GoliTransit ML Prediction",
"model_type": "random_forest",
"model_loaded": true
}Description: Batch edge traversal time prediction endpoint used by backend integration.
Request:
{
"edges": [
{
"source": "123",
"target": "456",
"features": {
"hour_of_day": 8,
"day_of_week": 2,
"road_type": 3,
"road_length_m": 120.0,
"speed_limit": 40,
"historical_avg_time": 11.8
}
}
]
}Response:
{
"predictions": [
{
"source": "123",
"target": "456",
"predicted_time_s": 14.7
}
],
"model_type": "random_forest",
"model_version": "v1"
}- Python 3.11 (recommended)
- Node.js 20.x (recommended)
- MySQL 8.x
- Docker + Docker Compose (recommended for judges)
- Clone repository:
git clone https://github.com/md-sazid9089/Aust_hackathon_26.git
cd Aust_hackathon_26- Start full stack:
docker compose up --build- Access services:
- Frontend:
http://localhost:5174 - Backend API:
http://localhost:8000 - Backend Docs:
http://localhost:8000/docs - ML API:
http://localhost:8001
- Production-style compose (optional):
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildcd backend
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activate
pip install -r requirements.txtImportant:
- Ensure MySQL is running and reachable.
- Update root
config.jsondatabase section for your local DB host/user/password. - From
backend/, run:
uvicorn main:app --host 0.0.0.0 --port 8000 --reloadcd ml
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activate
pip install -r requirements.txt
python predict.pycd frontend
npm install
npm run devFrontend dev server defaults to Vite and proxies /api to backend.
CONFIG_PATH(path to root config JSON)PORT(backend port)DATABASE_URL(optional full SQLAlchemy DSN override)ML_PREDICTION_URL(ML endpoint)REDIS_URL(Redis connection)TESTING(1|trueto skip heavy startup operations in tests)
VITE_PROXY_TARGETVITE_API_BASE_URLVITE_HMR_CLIENT_PORTVITE_DEV_SERVER_PORTDOCKER
MYSQL_ROOT_PASSWORDDB_NAMEDB_USERDB_PASSWORD
Note: Do not commit real credentials. Use secure environment-specific values.
Docker:
docker compose up backend mysql redis mlLocal:
cd backend
uvicorn main:app --host 0.0.0.0 --port 8000 --reloadDocker:
docker compose up frontendLocal:
cd frontend
npm run devHealth check:
curl http://localhost:8000/healthRoute compute:
curl -X POST http://localhost:8000/route \
-H "Content-Type: application/json" \
-d '{
"origin": {"lat": 23.7639, "lng": 90.4066},
"destination": {"lat": 23.7725, "lng": 90.4150},
"modes": ["car"],
"optimize": "time",
"avoid_anomalies": true
}'docker compose up --buildThen open frontend and execute route scenarios from UI.
- Deterministic shortest path behavior with weighted graph semantics.
- State-space extension enables multi-modal switching during traversal (not only pre-defined segmented legs).
- Fits dynamic edge weight updates from anomalies.
- Real road geometry and topology.
- Tag-level transport restrictions (
footway,motorway,service=alley) can be encoded as hard constraints.
- Traffic prediction is non-critical-path relative to route geometry.
- Returning
route_idquickly improves UX and API responsiveness.
- Shortest tree cache for repeated origins.
- Route response cache for repeated requests.
- Mode subgraph cache and KDTree for geospatial efficiency.
- Prediction cache to avoid repeated per-edge inference.
- In-memory anomaly state is fast but not durable across restarts.
- Current ML integration has functional fallback and stubs in training pipeline.
- Locality-focused graph radius improves latency but limits geographic coverage.
- Graph is built around configured AUST center with a finite radius (2 km by default).
- OSM tags are available and sufficiently accurate for transport constraints.
- Input coordinates are near graph coverage; far points may require nearest-edge snap.
modeslist in route request is ordered and intentional.- Anomaly reports supply valid edge references, location, or bbox target definitions.
- MySQL is available for traffic observation persistence.
- ML service may be unavailable; routing still works via fallback strategy.
- Judge flow is currently focused on routing, anomaly adaptation, and ML traffic prediction (no authentication dependency).
- Single-modal shortest path (Dijkstra):
O((V + E) log V) - Multi-modal state-space Dijkstra:
- states:
|V| * |M| - transitions:
|E| * |M| - overall approx:
O((|V||M| + |E||M|) log(|V||M|))
- states:
- Anomalies adjust edge weights in-place and increment graph version.
- New route calls consume updated weights immediately.
- FastAPI async request handling.
- Route traffic prediction queue with multiple workers and retry backoff.
- Production compose backend configured with multiple Uvicorn workers.
- KDTree nearest-node lookup.
- Mode-subgraph caching.
- Shortest-path tree LRU cache.
- Route response TTL cache.
- Edge-level prediction cache.
- Practical target for judge demos on local AUST graph: p95 route response under 1s.
- Profiling logs in service output commonly show ~300-350 ms algorithm time for multimodal state-space runs on the current graph size.
- Current scope is single-instance in-memory graph.
- Horizontal scale requires shared anomaly/prediction state and graph sharding/partitioning strategy.
Aust_hackathon_26/
|- backend/
| |- main.py
| |- config.py
| |- database.py
| |- routes/
| | |- health.py
| | |- auth.py
| | |- route.py
| | |- traffic.py
| | |- anomaly.py
| | |- graph.py
| | '- v2.py
| |- services/
| | |- graph_service.py
| | |- routing_engine.py
| | |- multimodal_dijkstra.py
| | |- anomaly_service.py
| | |- traffic_jam_service.py
| | |- ml_integration.py
| | '- auth_service.py
| |- models/
| | |- route_models.py
| | |- anomaly_models.py
| | |- graph_models.py
| | |- auth_schemas.py
| | |- user_models.py
| | '- traffic_models.py
| |- utils/
| | '- osm_graph_builder.py
| |- tests/
| '- Dockerfile
|- frontend/
| |- src/
| | |- App.jsx
| | |- pages/
| | | |- HomePage.jsx
| | | '- MapPage.jsx
| | |- components/
| | | |- MapView.jsx
| | | |- RoutePanel.jsx
| | | |- RouteSelectionPanel.jsx
| | | |- ModeSelector.jsx
| | | |- AnomalyModal.jsx
| | | '- AnomalyAlert.jsx
| | '- services/
| | |- api.js
| | '- routeService.js
| |- package.json
| |- vite.config.js
| '- Dockerfile
|- ml/
| |- predict.py
| |- preprocess.py
| |- train.py
| |- model_registry.py
| |- requirements.txt
| '- Dockerfile
|- config.json
|- docker-compose.yml
|- docker-compose.prod.yml
|- render.yaml
|- setup-local.sh
'- test-render-readiness.sh
- Replace ML stubs with fully trained and deployed traffic model pipeline.
- Persist anomaly and async job state in Redis/MySQL for restart durability.
- Add WebSocket push for real-time route traffic status instead of polling.
- Add distributed/partitioned graph processing for city-scale expansion.
- Introduce historical anomaly analytics and incident replay.
- Add role-based admin moderation for anomaly ingestion.
- Implement mobile client and offline route snapshot support.
- OSM-based graph extraction around AUST and normalization into an in-memory NetworkX MultiDiGraph.
- Single-modal and multi-modal routing from the same graph source.
- State-space Dijkstra (
(node, mode)) for true in-path mode switching. - Sequential multimodal fallback strategy when state-space pathing cannot be resolved.
- Config-driven mode-switch penalties and mode constraints.
- Geometry-preserving route rendering (road-following coordinates, no synthetic straight-line jumps when graph path exists).
- Coordinate-to-graph snapping support (nearest-node and nearest-edge fallback in v2 coordinate routing).
- Live anomaly ingestion with severity (
low,medium,high,critical). - Edge targeting by direct edge IDs or by map-selected bounding box (frontend-assisted targeting).
- Severity-driven edge weight multiplication and optional mode blocking behavior for high-severity incidents.
- Active anomaly lifecycle management (list, clear, expiry reconciliation).
- Graph version tracking so new route computations adapt immediately after anomaly updates.
- Route response returns immediately with
route_id. - Non-blocking traffic prediction pipeline with internal queue, worker pool, and retry with backoff.
- Route traffic lifecycle endpoint (
loading,ready,failed) for frontend polling. - Edge-level prediction cache and route-level lifecycle cache with TTL-based eviction.
- ML prediction microservice endpoint integration (
/predict) and graceful fallback behavior when ML is unavailable. - Service-level dataset generation/training utilities for traffic model bootstrapping.
- Health-aware landing page with engine status indicator.
- Full-screen interactive map planner.
- Origin/destination selection via map click and draggable markers.
- Single-mode route flow and multimodal compare flow.
- Fastest vs shortest comparison selector with overlap-aware rendering.
- Segment-level vehicle coloring plus persistent vehicle color legend.
- Anomaly injection UI for edge mode and bbox mode.
- Live anomaly overlay rendering and anomaly panel controls.
- Progressive traffic status UX (
loading -> ready/failed) tied to backend polling. - Graph overlay visualization support (nodes/edges snapshot rendering paths).
- Core:
GET /health,POST /route,GET /traffic/{route_id} - Anomalies:
POST /anomaly,GET /anomaly,DELETE /anomaly - Graph:
GET /graph/snapshot - V2 engine:
POST /v2/route,POST /v2/route/coords,POST /v2/anomaly,GET /v2/graph/snapshot,GET /v2/graph/validate - Auth module exists in code (
/auth/register,/auth/login) but is not part of the current hackathon judge flow.
- MySQL persistence for road traffic observation records.
- Redis integration for runtime caching support.
- Route caching, shortest-tree caching, mode subgraph caching, and KDTree nearest-node acceleration.
- Automated startup initialization pipeline (DB table ensure, graph load, traffic service bootstrap, worker start).
- Test suite coverage across routing, anomaly, graph, and multimodal logic (
backend/tests).
- Frontend sends local-time context (
traffic_hour_of_day = new Date().getHours()) in route requests. - Backend responds quickly with route geometry and
traffic_status: loading. TrafficJamServiceworkers process route edges in background and update status toready.- Response includes:
route_jam_chance_pctedges_analyzedheavy_edges,moderate_edges,low_edgesconfidence
- If prediction fails or ML endpoint is unavailable, route computation still succeeds (graceful degradation).
- Startup bootstraps ML traffic model from graph data via
TrafficJamService.initialize_from_graph(...). - Dataset generation covers every edge across all 24 hours and persists to DB/CSV.
- Training uses
RandomForestClassifierover engineered features:- hour of day
- deterministic edge hash
- encoded road type
- road-length bucket
- Model is used to classify edge jam levels and aggregate route-level jam probability.
- Caching + retry logic improves stability and responsiveness under repeated queries.
- Separate ML FastAPI microservice exposes
/healthand/predict. - Model registry supports save/load/version metadata for trained artifacts.
- Current predictor includes fallback inference logic when no trained artifact is present.
ml/preprocess.pyandml/train.pydefine the training pipeline contract for production-grade model evolution.- This separation keeps routing API reliable while allowing independent ML iteration.
- Compute a multimodal route and show segment-level vehicle colors.
- Inject a high-severity anomaly and recompute to show adaptation.
- Observe
/traffic/{route_id}lifecycle fromloadingtoready. - Highlight returned ML fields (
route_jam_chance_pct, heavy/moderate/low distribution, confidence). - Mention resilience behavior: route remains available even if ML prediction path degrades.
- Triggered on push to
devand on pull requests. - Backend test job:
- Python 3.11 setup
- dependency install from
backend/requirements.txt pytestexecution withTESTING=1and in-memory SQLite override for fast deterministic CI
- Frontend build job:
- Node 20 setup
npm ciand production build validation
- Docker validation job:
docker compose configstructural validation
- Triggered on push to
dev, PRs targetingdev, and manual dispatch. - Container publication pipeline (non-PR):
- builds backend, ML, and frontend images
- pushes to GHCR with both
latestand commit-SHA tags
- Frontend Vercel production deployment (non-PR):
- pulls Vercel production env metadata
- builds frontend
- executes
vercel deploy --prod
- Frontend Vercel preview deployment (PR):
- builds preview artifact
- deploys preview and publishes preview URL into workflow summary
- Separate Azure-focused pipeline configured for the
maploactorAzure Web App. - Triggered on push to
devand manual dispatch. - Uploads build artifact and deploys via
azure/webapps-deploy.
render.yamldefines backend service, health checks, auto-deploy, persistent disk for OSM cache, and environment wiring.backend/render-build.shperforms dependency installation and import verification.backend/render-start.shvalidates config and starts Uvicorn with Render-ready settings.
docker-compose.ymlorchestrates local/dev stack: backend, frontend, ML, MySQL, Redis.docker-compose.prod.ymlapplies production overrides (worker count, resource limits, production frontend image target).- Multi-stage Dockerfiles implemented for backend, frontend, and ML services.
-
Frontend (Vercel): https://aust-hackathon-26.vercel.app/
-
Backend (Azure App Service): https://maploactor-eve5e0d5f5h0aqh8.southeastasia-01.azurewebsites.net/
-
Backend (Render): https://aust-hackathon-26.onrender.com/
-
Public live domain: https://www.smartcommutebd.live/
-
Backend is currently not working in deployment due to free tier limit Notes:
-
The same codebase supports multiple backend hosting targets (Azure and Render) and a Vercel-hosted frontend.
-
For hackathon demos, backend target can be switched by frontend environment configuration without changing application logic.
- Open frontend map.
- Set origin and destination.
- Compute single-mode and multimodal routes.
- Inject anomaly on selected edge or bbox.
- Recompute and compare route adaptation.
- Observe asynchronous traffic status transitions (
loading -> ready).
- Md Tayeb Ibne Sayed
- MD Sazid
- Shajedul Kabir Rafi