
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
branduri retail
magazine live
piețe UE
aplicații produse
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.
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.
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
terminal portabil
total cursă
€24.80
scanează pentru checkout
terminal portabil
coadă rescan
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
URMĂTORUL · 07 / 07
Plăți pe dispozitiv
Am prototipat tap-to-pay NFC pe Zebra PS30 pentru checkout în aplicație.
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.
- 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.
- 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.
