Backend Development · Case study
Nutrifriz Backend System
Developed the complete backend infrastructure powering Nutrifriz — a premium freeze-dried fruit brand. The system handles product and collection management, custom mix configurations, order processing, Flutterwave payments, customer accounts, loyalty points, journal content, and transactional email, all behind a typed REST API with role-based access control.
- Role
- Full Stack Developer
- Timeline
- 10 weeks
- Team
- Solo developer
- Year
- 2026

The process
Problems we hit, and how we solved them
Challenge
Modelling a custom Build Your Mix system where customers pick fruits, set per-fruit gram amounts, and must fill a pack exactly — with server-side validation that can't drift from the client
Solution
Built a modular Express API with clean separation between controllers, services, validators, and models — every layer typed end-to-end with TypeScript and Zod
Challenge
Integrating Flutterwave for payment processing, including signature-verified webhooks, order reconciliation, and keeping pending orders consistent between the checkout redirect and the webhook
Solution
Designed the Build Your Mix system with a rule-driven pricing model where the backend enforces min/max fruits, min grams per fruit, and exact total pack grams — the client can't submit an invalid state
Challenge
Enforcing business rules across many domains — verified-purchase-only reviews, manual orders bypassing payment, role-based access on every admin route, and a loyalty ledger that must never double-count
Solution
Integrated Flutterwave with idempotent verification: the webhook and the verify endpoint both call the same markOrderPaid function, which checks current state before mutating — preventing double stock deduction and duplicate confirmations
Challenge
Designing transactional emails that scale to a dozen different triggers (order paid, processing, shipped, delivered, cancelled, refunded, welcome, password reset) without blocking the business operation on email delivery
Solution
Built a point transaction ledger so every crunch-point earn and spend is auditable; the User.crunchPoints field is a cache that recomputes from the ledger
Challenge
—
Solution
Implemented the Resend + React Email stack with a safe-send wrapper — email failures log but never roll back the order, status change, or account action
Challenge
—
Solution
Enforced RBAC via composable middleware (requireAuth, requireAdmin, requireRole) so every admin route is locked down by default
Challenge
—
Solution
Built dynamic journal categories, product categories, and CMS content — all admin-editable, never hardcoded — with slug auto-generation and conflict handling
Outcome
The results
Delivered a production-grade backend supporting the storefront and admin dashboard with zero shared state bugs across the two clients
Enabled the full commerce flow — browse, build-your-mix, collections, checkout, payment, fulfilment — end to end with a single typed API surface
Established a scalable foundation for loyalty, subscriptions, B2B, and multi-currency expansion without architectural rework
Automated customer communication across 12+ transactional email triggers with retry-safe, non-blocking delivery
Stack
Built with
#Node.js #MongoDB #Express #TypeScript #Flutterwave API #Resend
Visuals
Screens & details



Have a project in mind?
Let's build something with the same care and attention to detail.
Next project
Nutrifriz Admin Portal