A premium D2C fashion brand was running 100% on Shopify mobile-web and hitting a CAC ceiling. We shipped a native Flutter app on top of Shopify's Storefront API — CAC dropped 38%, repeat rate climbed from 22% to 41%, and the app became their highest-margin channel within 90 days.
The brand had crossed Rs 12 Cr ARR on Shopify but mobile web conversion was stuck at 1.6% and CAC kept rising as they scaled spend. They had ruled out Shopify's own mobile-app builders (too rigid, no offline cart, slow Storefront API performance) and wanted a real native app — but didn't want to fork their backend or move off Shopify.
Flutter app + Shopify Storefront API + a thin loyalty/CRM layer of our own. The architecture: read-mostly catalog from Shopify (with aggressive caching), write-through cart + checkout via Shopify Checkout API, and a separate Postgres-backed service for everything Shopify doesn't do well — push, WhatsApp, loyalty, custom merchandising.
Brand-first home (editorial-style), category browse, product detail with zoom + 360° + size-guide, cart with offline support, Shopify Checkout in WebView (PCI-safe), order history, wishlist, loyalty tier display, profile.
Shopify Storefront API is rate-limited and slow at 200 RPS. We cache catalog reads in Redis with a 90-second TTL, invalidated by Shopify webhooks. Time-to-first-product-image dropped from 3.4s to 0.8s on 4G.
Postgres + Node.js + a small queue. Owns: push tokens, customer cohort tags, abandoned-cart triggers, WhatsApp templates, Klaviyo sync, loyalty point engine. Sits beside Shopify; talks to it via webhooks + Storefront API.
Marketer-facing: design app banners, push-campaign builder with cohort targeting, WhatsApp template manager (Meta-approved), loyalty rules, A/B-test config, behaviour analytics. The brand team self-serves; we don't ship code for every campaign.
Mixpanel for behaviour, Sentry for errors, Datadog for infra, GA4 for top-of-funnel attribution. We attribute install-to-purchase and surface a CAC-by-channel report the founders look at every Monday.
We picked the stack for fit, performance under realistic load, and operational simplicity. Here is the breakdown:
Why not Shopify Mobile App Builder: Shoptrade et al hit the same Storefront-API performance wall and the templated UX would not have cleared the brand's bar. Building it ourselves cost 1.4× theirs and shipped a product the brand could iterate on for years.
Why Flutter: single codebase, brand-aligned design system, and the 60fps animation budget that the brand team wanted for product-detail interactions. iOS App Store approval was three weeks, Play Store two days.
Why a separate CRM layer: Shopify Flow is fine for simple cart-abandon emails. It cannot do cohort + behaviour-targeted push, loyalty math, or WhatsApp-first journeys. Building a thin CRM service was 6 weeks of work and unlocked four channels.
WhatsApp-first re-engagement that converts.
Email is dying. Push is shrinking. WhatsApp open rates are 90%+. Building a WhatsApp re-engagement loop that does not get the BSP account banned was a 6-week project on its own.
The constraints: only Meta-approved template categories (utility / authentication / marketing) can be sent outside the 24-hour customer-care window. Marketing templates need explicit opt-in. Frequency caps are unforgiving. Get any of this wrong and Meta restricts the WABA.
We modelled WhatsApp like a strict SMTP — every send is template-typed, frequency-capped per cohort, and logged for opt-out. Open rates hit 91%. Click rates 18%. Conversion-from-WhatsApp is 5x email and 2x push.
This single channel moved repeat-rate from 28% (post-app launch) to 41%.
App-launch campaign was a one-week WhatsApp + email blast to existing customers, gating exclusive access to a new collection behind the app install. 14,200 installs in week one with zero ad spend.
Paid acquisition kicked in at month two. Apple Search Ads and Meta App Install ads outperformed mobile-web Meta ads on 60-day LTV by 2.3×. By month four the app was the brand's highest-margin acquisition channel.
“We tried Shoptrade, we tried Tapcart. Both were okay; both hit a ceiling. ITD built us an app that feels like our brand and shifts retention numbers we have been trying to move for two years.”
Co-Founder & Head of Growth
D2C Fashion Brand · Bangalore
Ship the loyalty tier surface in v1, not v1.5. We deferred it for three months; users were asking for 'a way to see my points' on day one. Loyalty visibility is not a feature, it is a retention multiplier.
We have shipped multiple D2C apps that beat templated builders on conversion and brand-fit. Flutter or React Native, Shopify or custom backend, WhatsApp + push + email — get a scoped quote from a senior engineer.
Get a Free Consultation