Inspiration

Existence of mountains of mixed waste, leaking pickup schedules, and zero feedback for households and SMEs it felt like all the pieces existed (drivers, recyclers, councils) but nothing stitched them together. We wanted something practical, role-aware, and mobile-first that turns ad-hoc waste collection into a transparent, data-driven loop. The spark: make waste logistics feel as simple as ordering a ride while giving municipalities real-time visibility and recyclers actionable intake data.

What it does

  • Role-based dashboards
    • Households/SMEs: request pickups, attach photos, track status, view history & insights.
    • Drivers: claim available jobs, view assigned pickups on a map, mark picked-up and completed with proof.
    • Recyclers: accept/reject completed loads, record received weight, attach proof, and mark processed.
    • Councils: monitor live activity, hotspots, contamination trends, and AI insights.
  • Smart notifications with an in-app unread badge (new assignments, status updates).
  • AI assist
    • Contamination scoring on uploaded images.
    • Household analytics powered by Gemini for personalized waste-reduction tips.
  • Geo-aware queries to surface nearby opportunities and measure coverage.

How we built it

Frontend

  • Expo + React Native with expo-router for file-based navigation.
  • Screens by role under /app/(tabs): household.tsx, driver.tsx, recycler.tsx, council.tsx.
  • Detail views: /app/driver/[id].tsx and /app/recycler/[id].tsx.
  • Auth & RBAC via AuthContext + a RoleGuard, conditionally hiding tabs.
  • Mapping with react-native-maps (native fallback for web).
  • Reliable uploads using FormData and platform-aware image handling (JPEG coercion, HEIC safe paths).

Backend

  • NestJS + MongoDB (Mongoose).
  • JWT auth, role guards, and event emitters for lifecycle events (pickup.created|assigned|picked_up|completed|processed|rejected).
  • Uploads via a dedicated UploadsService (e.g., Cloudinary) with strict validation.
  • Contamination scoring service that accepts either remote URL or image buffer (resilient to transient failures).
  • Gemini integration for household analytics summaries and tailored recommendations.
  • GeoJSON ({ type: "Point", coordinates: [lng, lat] }) for radius and proximity queries.

DevOps & Config

  • Deployment on Azure web services.
  • Environment-aware API base URL resolver (device vs emulator vs web).
  • Defensive Axios interceptors (token refresh, replay requests).
  • Polling for notifications with graceful degradation when logged out.

Challenges we ran into

Technical Implementation Challenges

  • Mobile multipart uploads: HEIC on iOS and boundary issues on Android. We fixed this by:
  • Allowing heic|heif on the server,
  • GeoJSON correctness: caught a subtle [lat, lat] bug must be [lng, lat].
  • RBAC in tabs: preventing roles from seeing other dashboards while keeping deep links working.
  • Route mismatches: ensuring detail screens (/driver/[id], /recycler/[id]) matched router.push() calls.

Other Challenges

  • Most models on Azure Foundry unavailable for students subscriptions

Accomplishments that we're proud of

-Great Collaboration between team members; had a lot of fun and got to know each other well during late night coding sessions.

  • A clean, role-aware UX that actually reflects real waste-management flows end-to-end.
  • Tight mobile–server handshake for uploads no more “works in Swagger, fails on device.”
  • AI-assisted guidance that doesn’t feel gimmicky: actionable, personalized suggestions for households.
  • A tidy event model that councils can later plug into dashboards and alerts.

What we learned

  • Steps of Implementing an Idea practically
  • Teamwork and collaboration and using collaborative tools such as github
  • Keep RBAC at two layers: UI (hide) and API (enforce) prevents both confusion and misuse.
  • Favor idempotent, explicit state transitions (e.g., assigned → picked_up → completed → processed) for clarity and auditing.

What's next for Waste Vortex

  • Routing optimization for drivers (multi-stop, traffic-aware).
  • Dynamic pricing/credits to incentivize low-contamination loads.
  • Public insights for councils: neighborhood scorecards, hotspot maps, seasonal trends.
  • Offline mode for drivers (queue updates, background sync).
  • Expanded and more custom contamination scoring AI: on-device pre-checks, image quality nudges, and generative “how-to sort this” guides.
Share this project:

Updates