Home/ Case Studies/ D2C Fashion App
D2C · Mobile App · E-Commerce

D2C Fashion App — Cut Mobile CAC by 38% and Lifted Repeat Rate to 41%

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.

38%CAC Reduction
41%Repeat-Order Rate
Rs 4.2 CrApp-Channel GMV (Year 1)
4.7 Play Store Rating

Project at a glance

Industry
D2C · premium fashion / apparel
Scope
Customer app (Flutter), Shopify Storefront integration, push + WhatsApp re-engagement
Team size
5 engineers + 1 PM + 1 designer
Timeline
3 months to v1 · 6 months to scale
Channels
Native iOS + Android · Shopify Storefront backend
Status
Live · ITD owns app roadmap on retainer

The client & the problem

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.

  • Mobile-web conversion ceiling: 1.6% on mobile web; everything they did to push it went sideways. Pushy banners hurt brand. Trimming steps hurt accuracy.
  • Repeat-rate floor: 22% repeat in 60 days. Email was a noisy channel; WhatsApp Business was unmanaged.
  • Re-engagement gap: No push notifications, no abandoned-cart that actually worked, no tier/loyalty surface.
  • Performance budget: Founders refused to compromise on the brand experience. Time-to-product-image had to be under 1 second on 4G.
  • Shopify lock-in tradeoff: Migrating off Shopify was off the table. The solution had to live alongside Shopify, not replace it.

The solution

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.

1. Customer app (Flutter)

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.

2. Catalog cache layer

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.

3. CRM / re-engagement service

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.

4. Admin web (React)

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.

5. Analytics & observability

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.

Tech stack & why

We picked the stack for fit, performance under realistic load, and operational simplicity. Here is the breakdown:

Flutter 3.x Dart Node.js TypeScript PostgreSQL Redis Shopify Storefront API Shopify Checkout Klaviyo WhatsApp Cloud API FCM AWS Mixpanel Sentry

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.

The hardest technical problem we solved

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%.

Go-to-market & ramp

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.

Results

38%Lower CAC vs Mobile Web
41%60-day Repeat-Order Rate
Rs 4.2 CrApp GMV (Year 1)
4.7 ★Play Store Rating
0.8sTime-to-First-Image (from 3.4s)
91%WhatsApp Open Rate
3.8%App Conversion Rate (vs 1.6% web)
28%Of Total GMV (Year 1)

“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

What we would do differently

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.

Building a D2C app on top of Shopify or another commerce platform?

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

Get Digital Growth Tips in Your Inbox

Weekly insights on app development, web design, SEO, and marketing. No spam — just actionable advice.

Join 2,500+ business owners. Unsubscribe anytime.