Skip to main

Case study · Automotive · E-commerce

ZipIt — auto-parts marketplace and seller CRM

Published · Updated · By YuSMP Group Engineering

How we shipped a production two-sided auto-parts marketplace — Flutter buyer apps on iOS and Android, a web buyer surface, and a multi-tenant seller CRM — built on Symfony with Laximo-backed VIN search, per-location inventory across many branches, integrated delivery handoff, and an audit-ready posture that holds up to GDPR and CCPA expectations for buyers and sellers across the United States and the European Union.

IndustryAutomotive · E-commerce
Project year2024
EngagementFixed price + support
ZipIt — auto-parts marketplace with VIN search, multi-location inventory, US and EU automotive e-commerce

The brief — a fragmented procurement experience that needed one platform

A car rental operator kept struggling to source spare parts from scattered, disconnected suppliers. Every purchase required hunting across vendors, price-checking by phone, and reconciling deliveries that arrived from different addresses on different days. The team needed a single procurement layer — a buyer-facing marketplace that consolidated parts catalogs from multiple sellers, with VIN-based search so a mechanic could find compatible parts without flipping through paper microfiches, and a seller-facing CRM that gave parts retailers a credible reason to migrate their inventory off spreadsheets. The platform also had to hold up under buyer and seller expectations in the United States and the European Union: GDPR for European users, CCPA for California users, and audit-ready records for operators serving fleets across multiple jurisdictions. We built the platform as a Flutter buyer app on iOS and Android, a React web buyer surface, and a multi-tenant seller CRM on a shared Symfony backend, with Laximo-backed VIN search and integrated delivery handoff. The result is a production marketplace that closes the loop from VIN lookup to part delivery, and is positioned for compliant operation across the US and EU.

Project highlights

Flutter buyer iOS & Android React web buyer surface Multi-tenant seller CRM Symfony + PostgreSQL backend Laximo-backed VIN search Per-location inventory Integrated delivery handoff Seller-side analytics · US & EU

By the numbers

A snapshot of what the ZipIt build delivered across Flutter buyer apps, a React web surface, and a multi-tenant Symfony seller CRM.

4surfaces — Flutter iOS, Flutter Android, React web buyer, React web seller CRM
VINsearch wired to a Laximo-style automotive catalog with server-side reconciliation
Nper-seller branches as first-class tenants in the data model — configuration-only adds
100%of orders written to an immutable audit log for buyer and seller reconciliation
2app stores live — Apple App Store and Google Play across US and EU storefronts
14–22 wktypical delivery window for a comparable two-sided auto-parts marketplace MVP
ZipIt catalog — Opel Astra K Cooling system parts, 12 results with seller ratings and Add to cart

Why Flutter over native iOS + Android or a Magento storefront wrapper

The platform decision dominates the iteration speed of a two-sided marketplace. We chose Flutter on the buyer side over a native iOS + Android pair and over a Magento storefront wrapper because the trade-offs line up cleanly with what an auto-parts marketplace actually needs. Magento is a solid e-commerce platform for single-seller catalogs but pays a steep tax when you try to multi-tenant it, and a "Magento + mobile wrapper" stack adds a WebView layer that buyers and the App Store reviewer can both spot immediately. Native iOS + Android would deliver fractional value for a forms-and-catalog product, at twice the engineering cost of a Flutter codebase.

The build leans on Flutter's official documentation patterns for state management and platform channels, the Symfony framework on the backend, and PostgreSQL row-level security for tenant isolation in the multi-tenant seller CRM — open, citable primitives that give us a maintainable cross-platform marketplace without locking the operator into a vendor SaaS.

Flutter vs native iOS + Android vs Magento + mobile wrapper — at a glance
Dimension Flutter (ZipIt) Native iOS + Android Magento + mobile wrapper
Multi-tenant CRM fitBackend-agnostic; Symfony multi-tenant nativeSame backend; identical fitMagento multi-tenant is bolt-on, fragile
VIN search latencyDart HTTP + Redis-cached Laximo adapterNative HTTP; same backend latencyMagento plugin or WebView round-trip — visibly slower
Delivery-integration ergonomicsSingle Dart client; shared with webTwo clients to maintain in parallelMagento extensions, fragile upgrades
Seller-side analyticsBackend-owned, Symfony-rendered dashboardsSame backend; identical postureMagento Business Intelligence add-on — costly
Iteration speedOne Dart codebase, hot-reload UXTwo codebases, double the QAExtension compatibility risk per release
App Store review fitFirst-class — buyer app is native binaryFirst-classOften flagged as "web wrapper"
Data residency controlOperator-owned infra in US or EU regionsIdentical postureMagento Commerce Cloud region map only

References: Flutter documentation, Symfony framework documentation, PostgreSQL row-level security reference.

ZipIt parts categories — Original Parts, Aftermarket Parts, Maintenance, Tires top-level selection

Seller CRM — multi-tenant Symfony, per-location inventory, and counterparty verification

The seller CRM is a React single-page application backed by a Symfony multi-tenant backend. Each seller is a top-level tenant; each branch — physical store, regional warehouse — is a child entity inside that tenant. PostgreSQL row-level security enforces tenant isolation so a seller in one tenant cannot read another's inventory, and the buyer-facing search index is tenant-aware so a buyer sees a unified result set without ever seeing the underlying tenant boundary. Goods receipt, per-location inventory, pricing, counterparty verification, and order workflows all live per-branch and roll up to a tenant-wide dashboard so a seller running stores in multiple cities sees one cohesive view.

Counterparty verification gives the operator a defensible posture on who can sell on the marketplace. The CRM ingests business documents during seller onboarding, runs them through a verification queue (document liveness, expiry parsing, OCR confidence) with a human review stage, and writes an immutable audit trail per seller. Records are retained per local commerce-regulation requirements — different in California versus the Netherlands versus the United Kingdom — and encrypted at rest with key rotation. The end-to-end seller surface is delivered as part of our custom software development practice.

ZipIt app home — search by car make and model, VIN lookup and View catalog entry point

Buyer app — Flutter, VIN search, and the cross-location order flow

The buyer client is built in Flutter with a single Dart codebase serving iOS and Android. Passwordless authentication keeps the signup friction low — a buyer enters a phone number or email, receives a one-time code, and is into the catalog within seconds. VIN search is the first-class entry point: the buyer enters a VIN or selects a make and model, and the app hits the VIN adapter service, which calls the Laximo-style catalog and reconciles results against the seller-side inventory across every tenant. The result is a unified list of parts with cross-location availability, per-seller pricing, and a one-tap add-to-cart that respects tenant isolation behind the scenes.

The order flow closes the loop. A buyer reviews the cart, picks a delivery option from the integrated delivery providers, and confirms — the order writes to the immutable audit log, the seller CRM picks up the order across the affected branches, and the buyer gets a push notification when each branch ships. Cross-Atlantic operators can route a buyer in California to a US seller and a buyer in Germany to a Netherlands seller without the buyer ever choosing a region; the data model handles it. The same engineering team delivers the buyer app and the seller CRM in lockstep as part of our mobile app development practice.

ZipIt part detail — gear lever for automatic transmission, 6020₸ price with seller rating, Pickup and Delivery options

Integrated delivery, seller analytics, and audit-ready posture

The delivery integration turns a single-seller order into a multi-leg fulfillment without forcing the buyer to think about it. Each branch hands off to its preferred delivery provider through a thin adapter layer; the backend tracks every leg through the order workflow engine and writes status updates to the immutable audit log. Buyers see a single tracking timeline that aggregates the per-leg status, and sellers see a per-branch fulfillment view inside the CRM. Seller analytics live in the same Symfony backend and surface in the CRM as near-real-time dashboards — units sold per branch, average fulfillment time, top-search-terms by region, and counterparty-verification status across the tenant's branches.

The data-handling posture aligns with GDPR obligations for buyers and sellers in the European Union and CCPA / CPRA obligations for users in California and the broader United States. Buyer data, seller data, and the order audit log can all be pinned to either US or EU regions for future data-residency commitments, and the multi-tenant model keeps tenant isolation enforced at the database layer rather than at the application layer.

Compliance posture: GDPR-aligned · ISO 27001 ready · SOC 2 Type II in progress · HIPAA-capable · CCPA-acknowledged.

Delivery methodology

A five-phase build that took ZipIt from a fragmented procurement story to a production two-sided marketplace across iOS, Android, web, and a multi-tenant seller CRM.

Phase 1

Discovery & requirements

Buyer journey mapping (procurement-by-phone baseline), seller workflow survey, multi-tenant data model, US and EU commerce-privacy review, VIN-catalog vendor evaluation.

Phase 2

Architecture & data model

Symfony multi-tenant backend, PostgreSQL row-level security, tenant-aware search index, VIN adapter service, delivery-provider adapter spec, immutable order audit log.

Phase 3

Platform builds

Flutter buyer app for iOS and Android, React web buyer surface, React seller CRM, VIN search end-to-end, cart and order flow, seller dashboards.

Phase 4

Audit-ready hardening

Counterparty verification pipeline, encrypted-at-rest data, tenant-isolation testing, delivery-integration QA, multi-tenant load test at projected catalog size, store-review choreography.

Phase 5

Launch & telemetry

App Store + Google Play submission across US and EU storefronts, per-tenant rollout, seller onboarding choreography, on-call runbooks for the VIN and delivery adapters.

Seller-side analytics, the operator handoff, and tenant migration

ZipIt's seller-side analytics turn the CRM into something a seller will keep open all day, not just a place to upload inventory once a week. Symfony-backed dashboards aggregate units sold per branch, average fulfillment time per delivery provider, top search terms per region, and counterparty-verification status across the tenant's branches. The same data backs a per-tenant export so a seller running stores in the Netherlands and Germany can reconcile against their existing accounting workflow without paying for a Magento Business Intelligence add-on. Tenant migration was built in from day one — a new seller can onboard, import inventory from a structured upload, get verified, and be live on the marketplace within hours rather than weeks, and an existing seller can move branches between tenants if their corporate structure changes without losing the per-branch audit trail. Cross-tenant operators can scope their view by region, which is how a single back-office team covers operations across the US and EU during quiet shifts without losing the per-tenant compliance boundary.

Launching across the United States and the European Union

The ZipIt platform was architected for automotive marketplace operators serving buyers and sellers across the United States and the European Union. The English-language build serves users in California, New York, Texas, Florida, and Washington in the US, and users 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: users in the EU and EEA receive a GDPR-style granular consent screen with separate toggles for marketing channels and optional product analytics; users 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 users and with the US state-privacy patchwork — CCPA / CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas), and Oregon CPA. Seller counterparty-verification records are retained per local commerce-regulation requirements, and audit-ready order records make regional compliance an honest-disclosure exercise rather than a per-jurisdiction data segregation problem.

Backend deployment runs across EU and US regions in parallel — Netherlands, Germany, France, Sweden, and Ireland for EU coverage; US East and US West for North America — with Symfony services and PostgreSQL instances provisioned identically through Terraform. The tenant store and the order audit log can be pinned to either US or EU regions for future data-residency commitments, and the VIN and delivery adapters are stateless so they can be scaled independently per region. Both the App Store age rating and the Google Play content rating were calibrated for a marketplace app, and the in-app privacy policy was drafted to document exactly the architecture above, citing GDPR obligations and California CCPA obligations directly. The engineering team behind the build runs a CET workday with East-Coast US overlap (9 AM–1 PM ET) for stand-ups, store-review choreography, and on-call response across cross-Atlantic seller onboarding flows.

Tech stack and roadmap

Flutter Dart React PHP Symfony PostgreSQL Row-level Security Redis Laximo VIN catalog REST API Passwordless auth Delivery adapters Order workflow engine APNs Firebase Cloud Messaging Docker Terraform Prometheus Grafana

The active custom software development roadmap for ZipIt includes a B2B-tier with bring-your-own-domain and SSO for corporate fleet buyers, deeper integration with US and EU accounting and ERP systems, an internal continuous-verification harness for tenant-isolation invariants, and a second-source VIN catalog adapter for redundancy across regions. Infrastructure plans include further per-tenant sharding for projected multi-tenant throughput, and a future independent readiness assessment scaffolded into the cloud & DevOps roadmap.

Build a two-sided marketplace like this — talk to us

If you are planning an auto-parts marketplace, a multi-tenant B2B commerce platform, or any two-sided product where the seller-side CRM has to hold up under a regulator review 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 it sits inside YuSMP Group. 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.

Book a discovery call See mobile development services

Frequently asked questions

How much does it cost to build a two-sided auto-parts marketplace with a seller CRM?

A focused MVP covering a Flutter buyer app on iOS and Android, a web buyer surface, and a multi-tenant seller CRM with goods receipt and per-location inventory typically costs $180k–$340k. Adding VIN-based parts search via a Laximo-style catalog integration, integrated delivery handoff, seller-side analytics, counterparty verification, and audit-ready posture for US and EU operators brings a full platform to $360k–$700k. The dominant cost drivers are the VIN-catalog integration, the multi-tenant data model, and the seller-side analytics that the CRM has to maintain in near real time.

Why Flutter for a two-sided auto-parts marketplace instead of native iOS and Android?

Auto-parts buyer apps are forms-and-catalog products with relatively shallow platform integration, exactly where Flutter is strongest. A single Dart codebase delivers the buyer iOS and Android apps with one engineering pass, shared design tokens with the web buyer surface, and faster iteration on catalog UI than two native teams. Native iOS and Android would add cost without delivering proportional value for VIN search, cart, and order flow. We reserve native builds for cases where continuous location, push reliability, or kernel-level integration dominate the spec.

How does a multi-tenant CRM work for auto-parts sellers with many locations?

A multi-tenant CRM treats each seller as a top-level tenant and each branch as a child entity inside that tenant. Inventory, goods receipts, pricing, and order workflows live per-branch but roll up to a tenant-wide dashboard, so a seller running stores in multiple cities sees one cohesive view. Symfony backs the tenant store; PostgreSQL row-level filtering enforces tenant isolation, and the buyer app reads cross-location availability through a tenant-aware search index so a buyer never sees a part from a seller they cannot transact with.

How is VIN-based parts search wired into the marketplace catalog?

VIN search is implemented as a dedicated adapter service that calls a Laximo-style automotive catalog and reconciles results against the seller-side inventory. The adapter translates a VIN into a structured list of part references, fans those references out to the seller inventory index, and returns a unified result set with cross-location availability and per-seller pricing. The adapter caches frequent VIN lookups in Redis with TTLs sized to the catalog's update cadence, and it writes every lookup to an audit log so the operator can attribute search traffic per buyer for US and EU analytics.

How long does it take to ship an auto-parts marketplace with a seller CRM?

A Flutter buyer app on iOS and Android, a web buyer surface, and a multi-tenant Symfony seller CRM with goods receipt and per-location inventory typically takes 14–22 weeks for the MVP. Adding VIN-based parts search via a Laximo-style catalog, integrated delivery handoff, seller analytics, counterparty verification, and audit-ready posture for US and EU operators adds 8–14 weeks. The VIN-catalog integration is frequently the long pole because real-world catalog APIs return inconsistent part references that need server-side reconciliation.

Share this case

LinkedIn X

Plan a similar build

Book a discovery call