Laptop Harbor is a mobile app for purchasing laptops & related accessories.
Accomplishments
Built a cross-platform (Android, iOS, Web) laptop & accessories e-commerce app in Flutter/Dart using Provider for reactive state across four global controllers (AuthProvider, CartProvider, ProductProvider, WishlistProvider) injected via MultiProvider at the app root.
Implemented Firebase email/password authentication plus a forgot-password flow using Firebase Phone OTP with an international phone picker and SMS verify/resend.
Designed a per-user Firestore data model (users/{uid} with cart, wishlist, addresses, orders, reviews, notifications, and fcmTokens subcollections) secured with Firestore security rules scoped to request.auth.uid.
Built product discovery: category browsing (Laptop, Mouse, Keyboard, Charger, Bag), a search screen with price-range filtering, persistent recent searches, and randomized home suggestions.
Integrated the TechSpecs API (TechSpecsService) to enrich laptop products with detailed hardware specifications.
Implemented a persistent Firestore-backed shopping cart with quantity controls, add-to-cart from product details/search/wishlist, live cart badge counts, and consistent order totals (shipping ₦5000, tax ₦2000).
Added a per-user wishlist with add/remove toggles from product cards and details, category chip filters with counts, and inline search.
Built a product review system stored both per-product (products/{id}/reviews/{uid}) and mirrored per-user (users/{uid}/reviews/{id}), with star ratings, a "My Reviews" screen, star-rating filter chips, latest-first ordering, and a backfill step for legacy reviews.
Implemented saved shipping addresses per user (create/edit/delete, set default) and passed the selected address into checkout.
Integrated Paystack payments (flutter_paystack_plus) initiated from the order review screen; on success creates an immutable order snapshot (items, totals, shipping) in Firestore, clears the cart, and routes to order confirmation.
Built order management and package tracking: My Orders with chip filters and counts (All/Active/Completed/Cancelled), order details from the snapshot, and a tracking screen with delivery address and createdAt-based ETA (placed time +2h window, arrival on day 3).
Wrote a scheduled Firebase Cloud Function (dailyOrderStatusUpdate, runs 08:00 Africa/Lagos) that derives order status over time (processing → shipped → in_transit → delivered) and notifies users only when the status changes.
Delivered multi-channel order notifications gated by per-user preferences (emailNotificationsEnabled / appNotificationsEnabled): SMTP HTML emails via nodemailer, in-app Firestore notifications, and FCM push, including stale-token cleanup and app-side FCM token sync.
Built a support system: a support screen writes tickets to Firestore and an authenticated HTTPS Cloud Function (sendSupportEmail) verifies the Firebase ID token and relays the message via Gmail SMTP.
Added Cloudinary unsigned image upload for user profile photos, plus profile/settings/edit-password screens and dynamic profile stats.
Handled Nigerian localization: converted product prices to NGN, formatted currency with comma separators (no decimals), generated unique short product descriptions, and rendered category-specific specs.