Numoni
Loyalty, rewards, and payments — merchant portal and admin platform in production.
problem
Merchants and operators needed separate, reliable surfaces for the same loyalty ecosystem: merchants running branches, rewards, POS, and transactions day to day; admins overseeing KYC, customers, charities, roles, settlements, and support without sharing one overloaded UI.
role
Architected and built both Next.js apps — merchant (merchant.numoni.io) and admin (admin.numoni.io) — including auth, dashboard UX, TanStack Query data layer, Zustand UI state, and form-heavy flows with React Hook Form + Zod.
decisions
Split merchant and admin into dedicated apps that share the same frontend patterns (Next.js, TanStack Query for server state, Zustand for local UI) so each surface can evolve independently while staying consistent for the loyalty/rewards domain.
metrics
- SurfacesMerchant + Admin
- Merchantmerchant.numoni.io
- Adminadmin.numoni.io
- StackNext.js · TanStack Query · Zustand
outcome
Two production portals: merchants manage branches (incl. maps), reward tables, deals, POS, and transaction history; admins run merchant/customer/charity ops, RBAC, bonuses, reports, alerts, support, and e-commerce admin.
notes
Merchant and admin platforms for Numoni’s loyalty, rewards, and payments ecosystem — Next.js, React, Zustand, TanStack Query, Tailwind CSS, and shadcn.
stack
ZustandNext.jsTailwind CSSTanStack QueryTypeScriptReactshadcnReact Hook FormZod