Wellness,
with a flex.
The iGrow member's app — farm-fresh produce, a named dietitian, your Health Score, and a membership card that catches the light. Built for Lagos, Abuja, and the inner circle.
Farm-fresh, every week
A dietitian-curated basket of seasonal produce at your door — Abuja, Lagos, and nationwide.
Every screen earns its place.
One primary action per screen. Bottom-tab navigation. Skeletons, not spinners. ₦ pricing always visible. Haptics where they matter. The phone above is fully interactive — tap around.
Greeting, Health Score ring, live delivery, weekly basket, AI tip, one-tap reorder.
Catalog grid, Nigerian-food categories, nutri-score, 3-step Paystack checkout, shareable receipt.
Animated score + 5-dim radar, 4 free screening tools, AI food-log camera, CGM, dietitian chat.
Holographic membership card, basket builder, challenges, city leaderboard, Wrapped-style recap.
Account, language (en/yo/ig/ha), dark mode, biometrics, referrals, WhatsApp linking, support.

Farm-fresh, cold-chain, curated.
Behind the app is a 45-ton cold-chain operation, 20+ smallholder farmer partnerships, and a dietitian who picks your basket by hand. The app makes it feel effortless — the flex is the infrastructure you never see.
One backend. Two front-ends.
The mobile app isn't a separate product — it's a new client over the exact same Next.js + Prisma + Paystack backend that powers igrow.dependifyllc.com. Web customers and app members see the same orders, points, health scores, and membership. Four small additive endpoints are all the backend needs.
igrow.dependifyllc.com
Paystack · Novu · Sentry
iGrow + iGrow Ops
What's shared, unchanged
Every /api/* route the desktop site uses today — products, cart, orders, paystack, health, member/* — is reused verbatim by the app. Zero backend rewrite.
One database. Orders placed on the app show instantly in the web admin; web-only customers see the same membership, points, and health scores in-app.
Same /api/paystack/initialize & verify endpoints. Saved cards sync across web and app via /api/member/payment-methods.
Webhooks fan out to email, WhatsApp, and (new) Expo push tokens. One notification taxonomy, two surfaces.
What's added (4 small endpoints)
additive only · no rewritesThese are the only backend changes the plan requires — everything else is already live.
POST /api/auth/mobile/token issues a JWT + refresh from the existing NextAuth session. Middleware accepts Authorization: Bearer so the app doesn't fight cookie sessions.
POST /api/auth/mobile/tokenSelfies, proof-of-delivery, invoice scans, and food-recognition photos upload via signed-URL endpoints to the same object storage.
GET /api/upload/signGET /api/member/wallet-pass returns a .pkpass (Apple) or Google Wallet JWT generated from membership-card data.
GET /api/member/wallet-pass/api/push/subscribe extended to store Expo tokens with a channel tag (consumer vs ops) for routing.
POST /api/push/subscribeBridging web ↔ app
Deep links make the two surfaces feel like one product — share a basket on web, open it in the app.
igrow.dependifyllc.com/m/... opens the app when installed, falls back to the web page. apple-app-site-association + assetlinks.json.
igrow://basket/IG-9241, igrow://health/score, igrow://refer/ADA24 — Expo Router deep links map straight to screens.
QR codes on physical baskets and receipts deep-link into product detail or the referral flow — bridges offline to app.
Logged-in web session exchanges its cookie for a mobile token on first app sign-in (one-tap), so the app is instantly personalized.
Web today, app tomorrow — zero friction.
- 1Customer signs up on the websiteNextAuth cookie session created in Postgres.
- 2Installs the app, taps 'Continue with email'App calls POST /api/auth/mobile/token with credentials → receives JWT + refresh.
- 3App hydrates with the same profileSame membership tier, points, health score, saved cards, delivery addresses — pulled from the same rows.
- 4Places an order on the appWrites to the same /api/orders table. Web admin sees it instantly. Web receipt and app receipt are identical.
- 5Opens the website laterStill logged in via cookie. Sees the app-placed order in order history. One identity, two surfaces.
From curious to Founders Circle.
Six stages, each engineered around a single emotion and a single friction. The research (Baymard mobile checkout, NN/g, Nigerian fintech conventions) is baked into every transition.
Discover
Instagram hamper · friend's referral card · QR on a basketOnboard
3-swipe value carousel → Apple/Google/email → health quizFirst basket
Dietitian-curated basket · 2-hour slot · Paystack · cold-chainHealth Score reveal
Animated ring fills · 5-dim radar · 'what to do next'Status flex
Tilt the membership card · share score to WhatsApp · leaderboardRefer & recap
Weekly Recap (Wrapped-style) · referral code · leaderboard resetA flex, not just a tool.
Synthesized from Apple Card's milled-titanium reduction, Amex Centurion's invitation-only restraint, Apple Fitness+ rings, Calm's soft motion, and the card-as-hero pattern of Nigerian fintech. Ten principles, every screen.
The card is the product
The membership card isn't a perk — it's the hero. Tilt it, share it, add it to Wallet.
Radical reduction
One primary action per screen. No hamburgers. The bottom third is sacred thumb-zone.
Dark-first, one bold accent
Near-black obsidian surfaces with a single lime-green or gold-foil accent. Restraint reads luxe.
Material honesty via motion
Gyro-driven sheen and holo edges — but only on the card. Glass where it earns its keep.
One hero number, animated
The Health Score ring fills in 1.4s. Confetti at ≥70. The number is the moment.
Tier as identity
Cultivator → Connoisseur → Founders Circle. The tier name is a noun members use about themselves.
Recap as the flex
Weekly Wrapped-style story with one vanity percentile ('top 4% in Lagos') and a 9:16 share card.
Slow where it matters, fast where it doesn't
Score reveals decelerate. Add-to-cart is instant and optimistic with rollback.
Plain language + 'what next' + privacy
Every score has a one-line interpretation, one next action, and an explicit 'your data is private.'
Frictionless redemption
≤3 taps to checkout. Full cost on the first screen. Paystack card, transfer, USSD. Naira always visible.
“Founders Circle isn't a subscription — it's an identity. The card on your lock screen, the dietitian who knows your name, the price locked forever. That's the flex.”
Three circles. One trajectory.
Mirrors the live tiers on igrow.dependifyllc.com. Founders Circle is invitation-only with a founding price locked for life — the status-anchor of the whole app.
Cultivator
Where the journey begins
- Weekly fruit & veg basket
- Free Abuja delivery over ₦10k
- All health-screening tools
- Monthly group dietitian webinar
- AI meal plans · basket swaps
- 1× iGrow Points · ₦2k referral
Connoisseur
Most popular — the gourmand's choice
- Larger basket · swap up to 4 items
- 2-hour delivery window
- Quarterly Health Score
- 1 private dietitian consult / mo
- 7-day AI meal plans · save 5
- 7% shop discount · priority WhatsApp
- Seasonal organic + seed kit
- 2× iGrow Points · family of 5
Founders Circle
By invitation — the inner circle
- 100% custom basket + exotics
- Guaranteed slot · free re-delivery
- Monthly health trend reports
- Unlimited named dietitian (same person)
- 30-day AI meal plans · any restriction
- 12% shop discount · early access drops
- Dedicated concierge line
- 3× points · unlimited family
- Monthly virtual chef · VIP events
- Home-garden starter kit · beta features
- Birthday basket · 4 guest health passes/yr
- Locked-in founding price — forever
Tokens, type, and the building blocks.
One shared packages/ui in the Expo monorepo — same tokens drive the consumer app, the ops app, and the web. Fraunces for display, Geist for UI, tabular figures for every ₦ amount.
Animated SVG ring, 1.4s fill, glow filter, delta badge
5-dimension health radar, polygon scale-in, labelled vertices
Gyro + pointer tilt, holo sheen, tier-specific foil, pseudo-QR
Bottom sheet, frosted blur, spring enter, scrim tap-to-close
5 tabs, layoutId pill, floating cart, iOS blur, safe-area
48 pieces, CSS keyframe fall, fires on ≥70 score & checkout