Transmission 016 · 2026-06-20

Pausing Mombasa, adding courier logistics, and routing them to the hub

I removed Mombasa from geofencing configurations and active services, built the Courier and Moving vertical with simulated dispatch, and added direct links for tickets and courier deliveries directly inside the Kampala hub page.

Today I cleaned up the codebase to focus entirely on Kampala and Mogadishu. I also built the Courier & Moving feature and integrated both courier and travel tickets into the main Kampala hub grid.


The constraint

Mombasa configurations were cluttering the active service options and causing TypeScript type checks to fail on focus ring colors and cart properties.

Additionally, Courier and Travel Tickets only existed on the landing page, preventing users inside the Kampala city hub from accessing these services.


The proof

Geofencing configuration changes

I changed the city boundaries and active configurations in src/lib/geofencing.ts to restrict the application context to Kampala and Mogadishu.

export const CITY_BOUNDS = {
  mogadishu: {
    latMin: 2.0, latMax: 2.1,
    lngMin: 45.3, lngMax: 45.4
  },
  kampala: {
    latMin: 0.25, latMax: 0.4,
    lngMin: 32.5, lngMax: 32.65
  }
};

Real-time courier subscription and polling

The courier page relies on custom event dispatches from a simulated database to mimic driver matching progress. The page subscribes to updates and shows vehicle states directly.

useEffect(() => {
  if (authLoading) return;
  if (!user && hasSupabase()) { navigate("/login"); return; }

  if (!hasSupabase()) {
    setOrders(MOCK_ORDERS);
    setUsedMock(true);
    return;
  }
  // Real Supabase data fetching and subscription follows...
}, [user, authLoading]);

Grid updates in the hub switcher

I unified the two-row Kampala service grid into a single, auto-wrapping grid to handle the new services.

<div className="grid grid-cols-3 gap-2 mb-4 mt-3">
  {KAMPALA_SERVICES.map((svc, i) => (
    <motion.div key={svc.key} ...>
      {/* Renders Food, Pharmacy, Groceries, Rider, Order Car, Rent a Car, Tickets, and Courier */}
    </motion.div>
  ))}
</div>

Clean build and type check output

I ran TypeScript compiler checks and built the application to verify imports and types.

$ npx tsc --noEmit
$ pnpm run build
 2160 modules transformed.
 built in 11.96s

The resolution

I completed these changes in six hours:

  1. Removed Mombasa: I deleted Mombasa from geofencing bounds, city configurations, bottom navigation, and service lists.
  2. Built Courier Feature: I created CourierPage.tsx with vehicle selectors, pricing, checkout sheets, and database integrations.
  3. Mapped Hub Routes: I registered the /courier route and added direct links for both Courier and Tickets inside HubSwitcher.tsx.
TaskStatus
Remove Mombasa imports & boundsDone
Create Courier & Moving pageDone
Register /courier path in App routerDone
Add Tickets and Courier cards to Kampala hub gridDone
Fix useEffect structure in MyOrdersPageDone
Verify production build outputDone

The Kampala hub now serves all eight active service verticals.