Case study · SDF Group · White-label platform

Seven years, six brands, one codebase.

SDF Group - the Italian manufacturer behind Deutz-Fahr, SAME, and Lamborghini Trattori - needed its farmers connected to their tractors, their dealers, and the factory. Our engineers built and ran the answer: mySAME and myDeutz-Fahr, two branded apps from a single white-label codebase, plus the CMS and API that power them.

7 yrscontinuous delivery, 2018–2025
3,200+commits across the platform
2branded apps, one codebase
13European markets
10languages, app and push
3products: app · CMS · API

The client

SDF Group is one of the world's largest agricultural machinery manufacturers, selling tractors across Europe under the Deutz-Fahr, SAME, Lamborghini Trattori, and Hürlimann brands. Its customers are farmers; its channel is a network of national subsidiaries and independent dealers. Between the factory in Treviglio and a farmer in a field in Poland sit a dozen intermediaries - which meant the manufacturer had almost no direct relationship with the people driving its machines.

The brief: put SDF in the farmer's pocket. Let owners register their tractors, find their dealer, receive recalls and promotions, track maintenance - and give SDF's marketing and after-sales teams the controls to run all of it themselves, per brand, per market, per language.

The problem: one product, many faces

The obvious approach - build an app for one brand, then fork it for the next - is how white-label projects die. Every fork doubles the maintenance surface; within a year the forks disagree, and every bug is fixed twice or not at all.

The constraint we set instead: branding, content, and even layout must live in data, not code. One codebase, one release pipeline, any number of branded apps.

What we built

The farmer app (Ionic + Capacitor)

  • Tractor registration by VIN - typed, scanned from a QR code, or read straight off the chassis plate with camera OCR, validated against the factory VIN registry
  • "My garage" - the owner's machines with model data, maintenance schedules, and service reminders
  • Dealer network - nearest-dealer lookup by geodistance, with the farmer's assigned dealer surfaced first
  • Campaigns - spare-part and machine promotions, recall notices targeted by VIN list, extended-warranty enrolment with photo upload
  • Live telemetry - a Bluetooth connection to the tractor's telematics module streaming engine speed, torque, coolant temperature, and fuel rate into in-app gauges - no cell signal required
  • News, videos, and surveys - localized per market, in 10 languages

The back-office CMS (Angular)

The larger half of the system by code volume. SDF's own staff - not developers - run the platform day to day: a campaign builder with a draft → subsidiary-approval → published workflow, recall management, news and video publishing, survey authoring, email and push templates, per-market privacy-policy versioning, and reporting with CSV export for every market and dealer.

The API (Node.js)

An Express and MongoDB backend with Redis caching, SMS one-time-password verification, transactional email, and a scheduler running the platform's heartbeat: campaign push notifications firing at nine each morning in the right language for each market, service reminders, staged onboarding emails, and nightly data exports to the client's BI dashboards.

Stack: Ionic + Capacitor + Angular (farmer app) · Angular + Material (CMS) · Node.js + Express + MongoDB + Redis (API) · S3 · Twilio · SendGrid · Firebase push across five app targets · Docker

The white-label architecture

This is the part other teams ask us about. Four decisions made one codebase serve six brands:

  1. Theming as data. Each branded app reads its primary, accent, background, and text colours plus its logo from an app-setup record at runtime. mySAME and myDeutz-Fahr are the same binary logic wearing different clothes.
  2. Server-driven home screens. The app's home is a grid of tiles delivered by the API - each tile carries its feature type, colours, position, and a market allow-list. Marketing can reorder a market's home screen without an app release.
  3. Language and market as first-class models. Every content type is a base entity plus per-language sibling records, and every piece of content declares which markets may see it. Push notifications resolve language from the user's market - 13 markets mapped to 10 locales, automatically.
  4. One API, many app identities. The backend addresses each branded app and environment as a separately configured push target, so a single service pushes to every brand's iOS and Android apps without cross-contamination.
The lesson that generalizes: in white-label work, every "just hardcode it for now" is a future fork. The discipline of pushing brand, market, and language into data is what let two apps - and potentially six - ride one release train for seven years.

Talking to a factory: integration without APIs

SDF's enterprise systems exchange data the way large manufacturers actually do: in batch. We built a two-way bridge over S3 - inbound CSV drops from the factory (VIN registries, maintenance schedules) streamed and imported in 50,000-row batches with automatic archiving and error reporting, and a nightly export of denormalized platform data feeding the client's Tableau dashboards. Unglamorous, bulletproof, and running untouched for years.

Keeping it alive for seven years

A consumer app that lives seven years crosses more platform churn than most products ever see: new iOS privacy rules, Android permission overhauls, deprecated plugins, retired social-login SDKs. The platform absorbed all of it - including a full modernization from Angular 8 and Capacitor 2 to Angular 19 and Capacitor 7, carried out on a live production app without a rewrite.

That longevity is the real credential. Anyone can demo an app. Keeping one healthy in production across seven years of platform change, for a manufacturer whose brand is on every screen, is what enterprise mobile work actually is.

Frequently asked questions

What is white-label app development?

Building one product that ships under multiple brands. Done properly, the branding - colours, logo, features, even the home screen layout - lives in data rather than code, so a new branded app is a configuration exercise, not a fork. That is how one codebase served both mySAME and myDeutz-Fahr for SDF Group.

How do you support 13 markets and 10 languages in one app?

Treat language and market as first-class data. Every content type - campaigns, news, surveys, notifications, even home-screen tiles - is stored as a base entity plus per-language translations, and every item carries a market allow-list. Push notifications resolve the user's language from their market automatically.

Can Lumetha take over or extend an existing enterprise mobile app?

Yes - this platform is proof. Our engineers carried it across seven years of iOS and Android platform changes, including a full modernization from Angular 8 and Capacitor 2 to Angular 19 and Capacitor 7 while the app kept shipping.

What does a platform like this involve beyond the mobile app?

The visible app is roughly a third of the system. Behind it sit a REST API with scheduled jobs, caching, and push infrastructure, a back-office CMS where marketing and after-sales teams run campaigns and content, and batch integrations with the manufacturer's enterprise systems and BI tooling.

Work with Lumetha

Need one product to wear many brands?

Lumetha builds and runs white-label platforms for manufacturers and agencies: one codebase, data-driven branding, and a team that stays for the years after launch. Start with a two-week paid pilot on your real roadmap.

Book a 30-minute call →

Related: white-label development for agencies · how we modernized this app from Angular 8 to 19 · streaming live tractor telemetry over Bluetooth LE · how one fractional CTO shipped a fleet-ops platform in six months