All work

ContiStyles, a fashion marketplace selling into the EU. 2024

A product catalogue built around each category’s EU rules

ContiStyles sells fashion into the EU, and each kind of product needs its own compliance data. I replaced a hard-coded product form with an attribute engine: the client’s spec becomes seed data, rules decide what each form asks for, and the server checks every save against the same rules.

Attribute codes, seeded from the client’s spec
~342
Input types in one data model
15
Rule effects, from require to disable, stored as data
5

How the attribute engine works

The problem

About 30 categories, each with its own EU rules

Some products need CE marking and a declaration of conformity, clothing needs fabric-composition percentages, and perfume needs allergen and batch data. The old product form hard-coded a variation table and Livewire steps for each category, so every new category meant new code.

Step one

One data model for every category

I replaced the variation tables with a typed entity–attribute–value (EAV) catalogue. It has 15 input types, from selects to composition breakdowns and documents, and option groups up to three levels deep. Categories inherit their parents’ attributes, and a child can override one. Every saved value also keeps its text, so renaming or deleting an option never rewrites an old product.

Step two

Rules as data, not code

Each category’s rules are stored as JSON and read by a pure PHP rules engine, with 10 predicates and 5 effects: require, show, hide, warning and disable others. A category 4 sunglasses lens shows a “not suitable for driving” warning, and a belt with no buckle disables the buckle fields. The server runs the rules again on every save and every wizard step, and a parity test runs a JavaScript port of the engine in Node against the same 42 fixtures as the PHP one.

Step three

The client’s spec as seed data, and a wizard for vendors

I encoded the client’s Word spec as 81 PHP spec files, about 342 attribute codes. One command, spec:seed --prune, seeds them in a transaction, is safe to run again, and reports drift between the women’s and men’s branches. Vendors add products in a 5-step wizard: identity, specifications, media, pricing and review. The draft lives in the session, uploads wait in a temp folder until submit moves them into the media library in one transaction, and size and colour axes give one SKU per combination.

The result

Filters for free, and rules admins can edit

Storefront filters come straight from the model. Each filter’s counts ignore its own selection, the filter data is cached for 5 minutes, and model hooks bump a version key to clear it when the data changes. Admins manage attributes and option trees in their own screens, and each category’s rules in a visual rule builder.

How it fits together

Written once

  • 81 spec filesThe client’s Word spec, encoded in PHP
  • spec:seed --pruneSafe to re-run, reports women’s and men’s drift
  • Admin rule builderWrites the same JSON shape as the seeder

One model

  • Attribute catalogue15 input types, option groups up to 3 deep
  • Category treeChildren inherit attributes and can override them
  • Rules as JSON10 predicates and 5 effects

Used everywhere

  • Vendor wizard5 steps, with the draft kept in the session
  • Server checksRules run again on every save and step
  • Storefront filtersDrill-down counts, cached for 5 minutes

PHP rules engineRuns on the server

42 shared fixturesA parity test runs both engines on the same cases

JavaScript portRun in Node against the same cases

What the client said

I had a very positive experience working with this freelancer on the development of my marketplace platform from scratch. The project involved building core functionality, structuring the technical foundation, and translating business requirements into a working product, and the freelancer handled these responsibilities professionally throughout the engagement.

Communication was clear and consistent, deadlines were respected, and any challenges that arose during development were addressed proactively with practical solutions. The freelancer demonstrated strong technical competence, good problem-solving skills, and a solid understanding of marketplace architecture and scalability considerations.

What I particularly appreciated was the willingness to incorporate feedback, explain technical decisions when needed, and maintain a structured approach to development. The collaboration was reliable and efficient, which is especially important for early-stage product development.

I would recommend this freelancer to anyone looking for a dependable developer for marketplace or custom platform development and would be happy to work together again on future enhancements.

ContiStyles Development of Multi-Country Marketplace from Scratch August 2024 to December 2024

Endorsed by the client for

  • Reliable
  • Collaborative
  • Committed to Quality
  • Solution Oriented
  • Clear Communicator

The work

Client
ContiStyles, a fashion marketplace start-up selling into the EU
Role
One of two developers on the codebase, from August 2024
My part
The attribute engine, plus Stripe Checkout orders, guest account claiming, membership tiers on Laravel Cashier and the core support-ticket system. A teammate built the billing-cycle anchoring, ticket escalation, vendor-manager scoping and discount codes.
  • Laravel
  • PHP
  • MySQL
  • JavaScript
  • Node.js
  • Stripe
  • Laravel Cashier
  • Bootstrap