Sari la conținut
Toate studiile de caz
Tehnologie retail alimentar
Tehnologie retail alimentar European retail-technology vendor (confidential) Angajament pe termen lung · rollout multi-țară iulie 2026

Self-scan pentru retail alimentar european: Flutter whitelabel pe dispozitive Zebra pentru 10+ branduri

Un monorepo Flutter pentru o platformă self-scan whitelabel — clienții scanează pe dispozitive Zebra din magazin, personalul rulează rescan și prevenirea pierderilor dintr-o aplicație Attendant dedicată, live în mai multe lanțuri alimentare din UE.

Rezultate

  • Un singur codebase alimentează peste 10 branduri retail în NL, UK, DE și IE
  • Rollout național în producție pentru un retailer tier-1 UE (50+ magazine)
  • Flux rescan / prevenire pierderi integrat, cu aplicație Attendant dedicată
  • Integrare enterprise Zebra cu coș tolerant la offline
  • CI/CD automat multi-brand dintr-un singur monorepo

Stack tehnic

Flutter 3.35 / Dart 3.9Melos monorepoflutter_bloc + BlocMachineChopper REST + OpenAPI Device APIOAuth2 client-credentialsMQTT / Socket.IO / SignalRZebra EMDK / DataWedgeHiveFirebase CrashlyticsGitHub Actions + Fastlane
+

branduri retail

+

magazine live

piețe UE

aplicații produse

Clientul

Un furnizor european de tehnologie retail de top, a cărui platformă alimentează fluxurile de self-scan în magazin, attendant și management terminal pentru unele dintre cele mai mari lanțuri alimentare de pe continent. Clienții scanează și își pun produsele în sac pe dispozitive Zebra deținute de magazin, apoi finalizează fără casier. Personalul magazinului folosește o aplicație Attendant separată pentru sesiuni de rescan, supervizarea dispozitivelor și recuperarea terminalelor abandonate.

Milannial a contribuit cu inginerie Flutter pe termen lung la platformă — aplicațiile self-scan pentru clienți, experiența attendant și pachetele partajate care mențin peste zece branduri retail pe același motor.

Este software retail critic, legat de hardware. Când vine aglomerația de duminică seară și un scanner nu se eliberează de pe perete, echipa are minute — nu zile.

Provocarea

Retailerii tier-1 vor brandul lor, fluxurile lor și hardware-ul lor — în ziua lansării. Să construiești o aplicație per retailer este un marș al morții. Să construiești o aplicație generică și să forțezi fiecare lanț să trăiască cu ea este un killer de vânzări.

Pe deasupra, mediul din magazin este ostil aplicațiilor mobile obișnuite: dispozitive Zebra PS20 / MC17 / MC18 partajate, andocare în cradle și pe perete, pipeline-uri de scanare DataWedge, Wi‑Fi instabil în magazin și fluxuri de prevenire a pierderilor care trebuie să coexiste cu o experiență de cumpărare fără fricțiune.

Ce am construit

01 · Predare

Ridică și mergi

Dispozitivul iese din screensaver, se autentifică pe perete și se eliberează în mâna clientului.

02 · Coș

Scanează în timp ce cumperi

Produsele ajung într-un coș live cu total curent — procesorul hibrid tolerează zone moarte în culoar.

03 · Checkout

Finalizează cursa

Clientul scanează codul de final de cursă sau re-dockează; coșul se finalizează și plata se face la stație.

04 · Rescan

Prevenire pierderi

Personalul alege o cursă marcată din coadă, rulează un rescan parțial sau complet și revizuiește diferența de articole.

gata de predare

terminal portabil

coș€24.80
1Lapte organic
2Pâine cu maia
3Boabe de cafea
scanează produs

terminal portabil

total cursă

€24.80

scanează pentru checkout

terminal portabil

coadă rescan

!Cursă #1842
Cursă #1847

terminal portabil

01 · Cumpărare

Scanează în timp ce cumperi

Clientul scanează produsele pe handheld; coșul se actualizează live, tolerând căderile de rețea prin procesorul hibrid.

02 · Start

Ridică și pleacă

Dispozitivul se trezește din screensaver, se autentifică și este predat clientului după eliberarea din cradle sau de pe perete.

03 · Checkout

Finalizează și plătește

Clientul scanează codul de bare de final de călătorie sau re-andochează; coșul este finalizat și plata se face la stație.

04 · Verificare

Tichete rescan

Personalul alege un client marcat din coadă și rulează un rescan parțial sau complet, apoi revizuiește diferența de articole.

05 · Control

Operațiuni magazin

Forțează sau blochează rescan, setează modul de confirmare și eliberează terminalele înapoi pe perete.

06 · Recuperare

Dispozitive abandonate

Attendant-ul vede scanerele lăsate la mijlocul călătoriei prin feed-ul MQTT și le eliberează înapoi pe perete.

Aplicații self-scan whitelabel

Un monorepo Flutter alimentează aplicații pentru clienți, specifice brandului, pentru peste 10 retaileri alimentari în Olanda, Regatul Unit, Germania și Irlanda — fiecare cu propria temă, configurație de aplicație și pipeline CI, toate partajând același motor self-scan.

Călătoria principală de cumpărare: predare dispozitiv → onboarding și termeni → coș live → checkout de final de călătorie. Un procesor hibrid de coș online/offline pune acțiunile în coadă când conectivitatea scade, astfel încât un culoar fără semnal să nu blocheze călătoria.

Aplicația Attendant

O aplicație separată pentru personal gestionează cozile de tichete rescan, rescanări parțiale și complete cu diferențe de articole, căutare în catalog, controale de magazin (forțare/blocare rescan, moduri de confirmare) și recuperarea terminalelor inactive prin MQTT.

Un attendant poate superviza multe dispozitive self-scan — fluxul de prevenire a pierderilor este integrat, nu adăugat ulterior.

Integrare hardware nativă Zebra

Captura codurilor de bare trece prin plugin-uri native Zebra EMDK / DataWedge într-o abstracție partajată a motorului de scanare. Andocarea în cradle, evenimentele de predare de pe perete și integrarea cu terminal manager (eliberare dispozitiv, comutare aplicații între self-scan și attendant pentru rescan pe dispozitiv) sunt de primă clasă — nu gânduri ulterioare.

Cum a scalat

  1. FUNDAȚIE · 01 / 07

    Motor whitelabel

    Am construit un monorepo Flutter modular (apps, modules, packages, plugins) astfel încât un singur motor self-scan poate fi rebranduit per retailer.

  2. HARDWARE · 02 / 07

    Integrare Zebra

    Am făcut legătura între scanarea Zebra EMDK/DataWedge, andocarea în cradle și evenimentele de perete/predare prin plugin-uri native.

  3. SELF-SCAN · 03 / 07

    Flux călătorie de cumpărare

    Am livrat predare, onboarding, coș live și checkout de final de călătorie cu un coș hibrid tolerant la offline.

  4. PREVENIRE PIERDERI · 04 / 07

    Attendant și rescan

    Am adăugat aplicația Attendant pentru personal cu rescan parțial/complet, căutare în catalog și controale de magazin.

  5. BACKEND · 05 / 07

    Securizat și configurabil

    Am conectat autentificare OAuth2 client-credentials, configurare runtime per magazin și bus-uri de comenzi MQTT/Socket.IO pentru terminale nesupravegheate.

  6. SCALARE · 06 / 07

    Rollout multi-brand

    CI/CD automat per brand și aplicații de producție livrate în mai multe lanțuri alimentare europene — inclusiv un rollout național la peste 50 de magazine pentru un retailer tier-1.

  7. URMĂTORUL · 07 / 07

    Plăți pe dispozitiv

    Am prototipat tap-to-pay NFC pe Zebra PS30 pentru checkout în aplicație.

Arhitectură

Dispozitivele Zebra deținute de magazin rulează aplicații Flutter specifice brandului, construite dintr-un motor partajat. Aplicațiile se autentifică prin OAuth2 client-credentials (terminale nesupravegheate), preiau configurarea per magazin la pornire și comunică cu backend-ul prin Chopper REST plus un client API pentru dispozitive generat din OpenAPI.

Controlul în timp real folosește topicuri MQTT, un server de comenzi TCP/Socket.IO și integrare cu terminal manager pentru evenimente cradle/perete. Aplicația Attendant se conectează la backend-uri rescan selectabile la runtime (plugin legacy vs serviciu modern vs audit), plus autentificare card pe perete scanner și mesagerie prin MQTT / SignalR.

Multi-tenancy este per magazin prin configurare runtime; diferențierea de brand este la compile-time (temă și configurație aplicație). Deployment-ul este per brand GitHub Actions + Fastlane → Firebase App Distribution, cu secrete în Google Cloud Secret Manager — distribuție MDM enterprise, nu app store-uri consumer.

Graf force-directed al platformei self-scan whitelabel: aplicații Flutter, hardware Zebra, OAuth, MQTT și deploy multi-brand.

Deciziile care au contat

  • Monorepo whitelabel (Melos + pub workspaces, un singur lockfile) pentru peste 10 branduri — un motor, modificări atomice cross-app, la costul unei raze mari de impact partajat care cere disciplină strictă de scope.
  • Configurare runtime per magazin în loc de flag-uri la compile-time — același APK se comportă per magazin fără rebuild-uri, la costul unei suprafețe grele de configurare și a unei matrici de testare.
  • Pod nativ Zebra vs pachete scanner off-the-shelf — performanță enterprise la scanare și evenimente de andocare, la costul mentenanței native Android-first.
  • Abstracție backend rescan aleasă la runtime — migrare plugin legacy → serviciu modern fără fork al aplicației, la costul mai multor căi de cod.
  • Coș hibrid tolerant la offline — golurile de conectivitate din magazin nu trebuie să blocheze cumpărarea, la costul complexității de sincronizare.
  • OAuth2 client-credentials pentru dispozitive partajate nesupravegheate — fără login interactiv pe un scanner montat pe perete, la costul provisionării de secrete per aplicație.

Rezultate

  • Peste 10 branduri retail pe un singur codebase Flutter în Olanda, UK, Germania și Irlanda
  • Rollout național în producție pentru un retailer tier-1 UE (peste 50 de magazine live)
  • Flux integrat de rescan pentru prevenirea pierderilor cu o aplicație dedicată pentru personal
  • Integrare profundă hardware enterprise Zebra cu gestionare de coș tolerantă la offline
  • CI/CD multi-aplicație automat care livrează peste 10 build-uri branduite dintr-un singur monorepo

Dacă afacerea ta rulează pe hardware în magazine, ai nevoie de o platformă — nu de o aplicație. Așa arată una la scară de retail alimentar.