Seamless Point
Turns three separate apps (delivery, bill payments, and finding a technician) into one habit, so users never have a reason to leave for a competitor.

Every one of Seamless Point's services, package delivery, utility and data bill payments, on-demand technicians, already has standalone competitors. The business case for building one platform instead of three is retention: a user who only came to pay a light bill can schedule a delivery in the same session, without downloading another app or trusting another brand. That only works if the experience feels effortless end to end. The platform pre-computes exact delivery and payment fees, including the notoriously fiddly local and international transaction math, before the user commits. No 'wait, how much will this actually cost' hesitation left to kill the conversion.
The application leverages the Next.js App Router for optimal routing and rendering. Next.js Server Actions securely communicate with the external backend API, handling authentication, data fetching, and business logic encapsulation. Global UI state is managed by Zustand, while TanStack Query handles server state, caching, and optimistic updates for dashboard metrics. Payment processing is integrated via Paystack, with a custom mathematics module that accurately pre-computes complex local and international fee structures (kobo math) on the edge. Authentication flows use a mix of local JWTs and Google OAuth.
Architecture
Chose
Decoupled Next.js frontend communicating with an external backend API
Why
Allowed the frontend to focus purely on UI/UX, caching, and client state management, while the backend independently scales to handle heavy transaction loads and third-party webhooks for logistics and utility payments.
Trade-off
Requires strict synchronisation between frontend TypeScript interfaces and backend API contracts, increasing overhead for type sharing.
State Management
Chose
TanStack Query alongside Zustand
Why
Zustand provides a lightweight, boilerplate-free solution for localised UI states (multi-step forms, modals), while TanStack Query exclusively manages asynchronous server state, ensuring efficient caching and reducing redundant network requests.
Trade-off
Introduces two separate state management paradigms, requiring clear architectural boundaries on what state lives where.
Payment Integration
Chose
Custom Paystack fee computation logic on the client
Why
Ensures the UI accurately displays gross and net charges to users in real-time (handling local caps, waivers, and international flat rates) before initiating the transaction with the payment gateway.
Trade-off
Adds computation complexity to the frontend that must be kept precisely in sync with Paystack's official pricing structures to prevent discrepancies.
Implement real-time tracking for logistics and delivery requests using WebSockets
Transition to a strictly typed monorepo (e.g., Turborepo) to natively share TypeScript interfaces between frontend and backend
Expand automated test coverage using Playwright for end-to-end critical user flows