Sales-floor discovery & threat model
Consultant-flow interviews across pilot stores, multi-criteria query design, role-based access mapping, GDPR + CCPA posture, 1C-load assessment.
Case study · Retail · Fashion
How we shipped a production retail consultant app — native Swift on iOS, native Kotlin on Android, backed by a Symfony service and an ElasticSearch index synchronized with the chain's 1C inventory — so sales consultants across an international multi-brand boutique network can find any SKU, in any size, in any store, in seconds.
The SuperStep international multi-brand boutique chain arrived with a clear sales-floor friction point: a customer asks a consultant for a specific sneaker, in a specific size, and the consultant has to either pull a hardcover binder of partner-store rosters, walk to the back office to phone another store, or ask a colleague who happens to remember. Manual stock checks slowed customer service across the entire network and produced consultation errors that hurt conversion. The existing inventory ran on 1C, a robust system of record but one without a real-time consumer search surface of its own. The product brief was to give every consultant a hand-held surface that returns any SKU, in any size, in any store, in seconds — and to do it without forcing 1C to expose a query workload it was not designed to serve. We built native Swift and Kotlin clients for the sales floor, backed by a Symfony service that owns the search surface, with ElasticSearch as the index and a streaming adapter against 1C so the index never drifts. The MVP is being tested with staff in real stores across the US and EU pilot regions, with a warehouse remainders module on the roadmap.
A snapshot of what the SuperStep build delivered across iOS, Android, the Symfony backend, and a streaming 1C integration in its first production cycle.

The platform decision dominated every other lever in the build. We chose native iOS and Android over Flutter and a web-only POS companion because the trade-offs lined up with a sales-floor consultant standing next to a customer on a hard deadline. Native clients win on three dimensions that matter most: search latency on the older devices most stores actually carry, predictable offline behavior when the store Wi-Fi drops mid-shift, and the deploy cadence the retailer's IT team can sustain across hundreds of devices in a multi-brand boutique chain. Flutter is a strong choice for many products but adds an engine layer between the search result and the screen, which a consultant feels as friction in the moment that matters.
A web-only POS companion was eliminated for a different reason — it ties consultant productivity to network reliability inside the store, which was exactly the failure mode we were hired to remove. Going with native plus an ElasticSearch index meant the entire search surface — composite queries across brand, size, store, region — is one round trip from the device to the index, and the 1C adapter keeps the index honest in near real time without forcing the sales floor to query the system of record directly. The cross-store query engine becomes a filter, not a chain of round trips.
| Dimension | Native + ElasticSearch (SuperStep) | Flutter MVP | Web-only POS companion |
|---|---|---|---|
| Search latency on store devices | Direct native render — no engine layer | Engine layer adds frames on older hardware | Network round-trip plus browser parse |
| 1C-integration honesty | Streaming adapter — index always in sync | Same adapter possible — agnostic | Same adapter possible — agnostic |
| Offline behavior on store-Wi-Fi drop | Cached query results survive disconnects | Cached query results survive disconnects | Goes blank on network failure |
| Deploy cadence across hundreds of devices | MDM-managed app updates | MDM-managed app updates | Browser-cache invalidation challenges |
| Multi-criteria filter UX | Native pickers per platform | Cross-platform widgets, less native feel | Browser-form ergonomics |
| Cross-store availability query | One composite ElasticSearch query | Same backend — same query | Same backend — same query |
| Vendor / SDK lock-in | Platform SDKs — long-supported | Flutter engine — vendor-supported | Browser engine — fragmented |
References: ElasticSearch reference documentation, Symfony framework documentation, Apple Swift documentation.

The iOS client is built in Swift with a UIKit core and SwiftUI for the newer search surfaces. The home screen collapses to one large search field and a recent-query strip, because a consultant typically returns to the same handful of brand-and-size queries across a shift. Filter pickers are native: brand uses a wheel picker, size is a numeric pad with quick-pick chips, store and region are searchable lists scoped to the consultant's role. A query fires the moment the consultant taps "search," and the result list paginates by store with cross-store availability shown as a chip on each SKU card.
Local caching keeps recent queries snappy across a Wi-Fi blip — a consultant looking up the same SKU twice in a five-minute window gets the second result instantly while the network reconnects, and a stale-indicator chip surfaces the moment the index has fresher data so the consultant knows to refresh before quoting the customer. Phone-number employee login removes the shared-workstation password rotation overhead the chain previously battled, and role-based access controls which stores a consultant can read. The end-to-end iOS surface is delivered as part of our mobile app development practice.
The Android client is written in Kotlin with Jetpack Compose for the newer search surfaces and a stable RecyclerView spine for the result list where vertical performance matters. The filter UX mirrors iOS one-for-one — brand wheel, size pad, store and region lists — adapted to Material 3 idioms so a consultant moving between an iOS and an Android device on the same shift never has to relearn the flow. WorkManager handles the periodic refresh of the consultant's home-store catalog snapshot, the role-based store list, and the warehouse remainders module that surfaces stock sitting in central warehouses rather than in any store.
The warehouse remainders module is on the active roadmap and is structured so a query already returns "no store has this, the central warehouse has 12" rather than ending in a dead "out of stock" answer. The same ElasticSearch index covers warehouse stock as a virtual store with an explicit lead-time annotation, so the consultant can quote the customer honestly — "I can have it in your size at this store by Tuesday" — rather than discovering the warehouse pool only when the customer has already left. The same engineering team carries iOS and Android in lockstep as part of our iOS and Android engineering practice.

The 1C integration is the architectural heart of the build. 1C is a robust system of record for the chain's inventory but was never designed to serve a real-time consumer search workload at sales-floor concurrency. The Symfony backend sits between 1C and the sales floor: a streaming adapter consumes stock-change events from 1C and projects them into a denormalized ElasticSearch index where SKU, store, size, color, brand, and season live in one document per stock unit. The index is the only thing the consultant apps query; 1C never sees a sales-floor request directly. Role-based access controls which stores a consultant can read, and a stale-data chip on the device tells the consultant honestly when the index is more than a few seconds behind 1C.
Employee privacy is built into the platform from day one. Phone-number login exposes a granular GDPR consent screen for consultants in the European Union and a CCPA / CPRA disclosure for consultants in California in the same flow. Search history is retention-bounded with shorter retention than role-assignment records, role-based access controls which consultant can read which store, and a deletion request — for an employee who leaves the network — is a single backend job that propagates across the user record and the role assignments. The result is a consultant app that holds up to scrutiny across the US & EU without retrofitting compliance later.
Compliance posture: GDPR-aligned · ISO 27001 ready · SOC 2 Type II in progress · HIPAA-capable · CCPA-acknowledged.
A five-phase build that took SuperStep from a sales-floor friction point to a shipping native consultant app on iOS and Android.
Consultant-flow interviews across pilot stores, multi-criteria query design, role-based access mapping, GDPR + CCPA posture, 1C-load assessment.
Symfony backend skeleton, ElasticSearch index design, 1C streaming adapter, denormalized SKU document schema, role-based access, cross-store query engine.
Native Swift iOS client on UIKit + SwiftUI; native Kotlin Android client on Compose + RecyclerView; phone-number employee login, multi-criteria filters, cross-store result list.
Role-based access enforcement, retention policies for search history, stale-data indicators, 1C webhook reliability, third-party readiness assessment scaffolding.
Pilot store rollout across US and EU regions, MDM-managed device deploy, consultant onboarding, first-cycle correction loop, warehouse-remainders module roadmap.
SuperStep's search-analytics layer was built so the chain's merchandising team can see which SKUs are searched and not found across the network. The query stream rolls up into a backend dashboard surfacing "demanded but absent" reports per store, per region, per brand — actionable signals for the next allocation cycle. The knowledge-base surface inside the consultant app holds product care notes, brand training materials, and seasonal positioning that the chain previously distributed through email chains and PDFs; the same Symfony backend serves both the search index and the knowledge base so a consultant can move from a stock lookup to a care answer without leaving the screen. Cross-brand recommendations are on the roadmap: the same ElasticSearch index already knows brand, season, and size correlations, so suggesting "this brand's runner in your size at the next store" when the requested SKU is unavailable is a query rewrite rather than a new system. The whole subsystem is designed so a future loyalty-tier overlay, a B2B contract pricing tier for the United States and the European Union, or a wholesale partner channel is a configuration change against the index and the entitlement service, not a code release.
SuperStep launched on Apple App Store and Google Play with storefronts active across the United States and the European Union — internal-distribution builds for consultants on the chain's MDM-managed devices, plus public-listing builds for partner-store roll-out where the chain's policy allows. The English-language build serves consultants in California, New York, Texas, Florida, and Washington in the US, and consultants in the Netherlands, Germany, France, Ireland, and Sweden in the EU, without a separate codebase per region. Consent flows are region-aware at the client layer: consultants in the EU and EEA receive a GDPR-style granular consent screen with separate toggles for product analytics; consultants in California receive a CCPA-style "Do Not Sell or Share My Personal Information" disclosure in the same flow. Data-handling practices are aligned with GDPR for European employees and with the US state-privacy patchwork — CCPA / CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas), and Oregon CPA. Because the platform stores minimal personal data and search history is retention-bounded, regional compliance reduces to honest disclosure rather than per-jurisdiction data segregation.
The consultant apps were rolled out across US and EU pilot stores in parallel — Netherlands, Germany, France, Sweden, and Ireland for EU coverage; US East and US West pilot regions for North America — with each region's stores provisioned identically against the same Symfony backend. The ElasticSearch cluster runs stateless query workers that can be pinned to EU or US regions independently for future data-residency commitments. The engineering team behind the build sits across CET and runs a CET workday with East-Coast US overlap (9 AM–1 PM ET) for retailer-side standups, store-team coordination, and incident response — the timezone that lets a US merchandising team and an EU engineering team share four hours of live overlap every day.
The active custom software development roadmap for SuperStep includes the warehouse remainders module surfacing central-warehouse stock as a virtual store with explicit lead-time, a cross-brand recommendation overlay reusing the same ElasticSearch index, a wholesale partner channel with separate role boundaries, and a customer-facing reservation surface that lets a consultant hold a SKU at a specific store for a returning customer. A consultant performance dashboard with conversion telemetry is planned, and the entitlement subsystem is already structured for multi-seat assignment. Infrastructure plans include further ElasticSearch index tuning, an internal 1C-adapter regression harness, and a future independent readiness assessment scaffolded into the cloud & DevOps roadmap.
If you are planning a retail consultant app, a POS companion, or any cross-store inventory product where a salesperson on the floor has to find any SKU in any store in seconds for audiences in the US and EU, we have shipped this stack end-to-end and can compress the build timeline meaningfully. The engineering team behind the build sits inside YuSMP Group, and the live product surface remains private at the retailer's request. We work fixed-price for well-scoped MVPs and on dedicated development teams for ongoing delivery, with a CET workday and a guaranteed East-Coast US overlap (9 AM–1 PM ET) window for stand-ups, demos, and incident response.
A focused retail-consultant MVP with native iOS and Android apps, a Symfony backend, ElasticSearch product search, phone-number employee login, and a single-store catalog typically costs $140k–$280k. Adding multi-store stock lookup across an entire boutique network, brand and size and region filters, a warehouse remainders module, deep 1C inventory integration, and a BI export brings a full-featured product to $300k–$620k. The dominant cost drivers are the ElasticSearch index design, the 1C integration adapter, and the cross-store query engine.
Native iOS and Android win on three dimensions that matter for a sales-floor app: search latency on older store devices, predictable offline behavior when the store Wi-Fi drops, and the deploy cadence the retailer's IT team can actually sustain across hundreds of devices. Flutter is a strong choice for many products but adds an engine layer between the search results and the screen, which a consultant standing next to a customer feels as friction. A web-only POS companion ties productivity to network reliability inside the store, which is exactly the failure mode the app was built to remove.
The Symfony backend indexes every SKU, store, size, color, brand, and season into ElasticSearch with denormalized per-store stock counts. A consultant query — brand A, size 42, in stock at this store or the next two — is one ElasticSearch composite query that returns the matching SKUs and the stores carrying them with current stock. The 1C adapter keeps the index honest by streaming stock deltas in near real time. Cross-store availability is a filter, not a separate API call, so the result is one screen rather than a chain of round trips.
A retail consultant app holds employee phone numbers, role assignments, and search history — less sensitive than customer data but still in scope. Employee login exposes a granular GDPR consent screen for users in the European Union and a CCPA / CPRA disclosure for users in California in the same flow. Role-based access controls which consultant can read which store, search history is retention-bounded, and a deletion request — for an employee who leaves the network — is a single backend job across the user record and the role assignments.
A focused MVP with native Swift and Kotlin apps, a Symfony backend, ElasticSearch product search, phone-number employee login, and a single-store catalog typically takes 14–20 weeks. Adding multi-store stock lookup across an entire boutique network, brand and size and region filters, a warehouse remainders module, and deep 1C inventory integration adds 6–10 weeks. The audit-ready hardening pass — role-based access, retention policies, 1C webhook reliability, and stock-index consistency — is frequently underestimated and should be budgeted at 3–5 weeks.
Related cases
Auto-parts marketplace plus seller CRM — VIN search, multi-location inventory, integrated delivery.
View case → Retail · E-commerceLocal marketplace mobile app for an offline children's-goods chain — flexible catalog, online stock sync.
View case → Grocery Delivery · MobileCustomer app, picker app, admin panel for a regional grocery chain.
View case →