The challenge.
The platform matches manufacturers with idle production capacity to buyers who need it, across sectors as different as auto components, pharmaceuticals, textiles, electronics, and specialty chemicals. That meant two separate portals had to work from day one — one for supply-side manufacturers listing capacity, one for demand-side buyers sourcing it — and each industry inside them needed its own forms, fields, and data types. A textile mill and a pharma contract manufacturer don't describe their capacity the same way, and the product had to reflect that without turning into unmaintainable one-off code per vertical.
What we built.
- Two portals, one platform. Separate wholesale (supply) and retail (demand) experiences, each tuned to how that side of the market actually transacts.
- Industry-aware forms. A dynamic form system so each vertical — auto components, pharma, textiles, electronics, specialty chemicals — captures the right fields, data types, and process without a rewrite per sector.
- Frontend to backend. Started on the React frontend, then took over the Django backend as the engagement grew, ending up owning the full stack behind both portals.
- Six-plus months, embedded. Delivered as a white-label extension of Cyret's own delivery team, not a drive-by contractor.
Architecture.
Both portals sit on the same Django API, so the supply and demand sides stay in sync as one marketplace instead of two products bolted together. The piece that made the multi-industry requirement tractable was a form engine that resolves fields, data types, and validation per vertical at request time, rather than hard-coding a form per industry.
Technology stack.
Frontend: React.js.
Backend: Django.
Outcomes.
- A working dual-sided marketplace. Wholesale and retail portals live, each handling their side of the exchange.
- Extensible by design. The industry-specific form system meant new verticals could be added without re-architecting the core.
- Trusted with the full stack. Cyret handed us both frontend and backend ownership as the engagement progressed.