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:
- Removed Mombasa: I deleted Mombasa from geofencing bounds, city configurations, bottom navigation, and service lists.
- Built Courier Feature: I created
CourierPage.tsxwith vehicle selectors, pricing, checkout sheets, and database integrations. - Mapped Hub Routes: I registered the
/courierroute and added direct links for both Courier and Tickets insideHubSwitcher.tsx.
| Task | Status |
|---|---|
| Remove Mombasa imports & bounds | Done |
| Create Courier & Moving page | Done |
Register /courier path in App router | Done |
| Add Tickets and Courier cards to Kampala hub grid | Done |
Fix useEffect structure in MyOrdersPage | Done |
| Verify production build output | Done |
The Kampala hub now serves all eight active service verticals.