---
title: "E-Commerce Site Generator with Customization CMS (MyEasyWeb)"
description: "Multi-tenant SaaS platform generating custom e-commerce sites for 400+ resellers in the European promotional products industry - 108K lines of code, 7 languages, 32 currencies, 1,506 commits over ~3 years."
locale: "en"
canonical: "https://portfolio.josedacosta.info/en/achievements/generateur-sites-ecommerce-avec-cms"
source: "https://portfolio.josedacosta.info/en/achievements/generateur-sites-ecommerce-avec-cms.md"
html_source: "https://portfolio.josedacosta.info/en/achievements/generateur-sites-ecommerce-avec-cms"
author: "José DA COSTA"
date: "2012"
type: "achievement"
slug: "generateur-sites-ecommerce-avec-cms"
tags: ["PHP 5.3+", "Symfony 2.4", "Symfony 3.1", "Silex 2.0", "MySQL", "Doctrine ORM", "Apache Solr", "ElasticSearch", "Memcached", "Twig", "Amazon SES", "jQuery", "REST API (FOS)"]
generated_at: "2026-04-23T15:46:46.633Z"
---

# E-Commerce Site Generator with Customization CMS (MyEasyWeb)

Multi-tenant SaaS platform generating custom e-commerce sites for 400+ resellers in the European promotional products industry - 108K lines of code, 7 languages, 32 currencies, 1,506 commits over ~3 years.

**Date:** 2013 - 2016  
**Duration:** ~3 years  
**Role:** Senior Software Engineer  
**Technologies:** PHP 5.3+, Symfony 2.4, Symfony 3.1, Silex 2.0, MySQL, Doctrine ORM, Apache Solr, ElasticSearch, Memcached, Twig, Amazon SES, jQuery, REST API (FOS)

### Key Metrics

- Lines of Code: **-** - PHP, CSS, JS, Twig across 3 applications
- Client Sites: **-** - Active reseller sites with custom domains
- Languages: **-** - FR, EN, ES, DE, IT, NL, PT
- Currencies: **-** - ECB exchange rates, auto-updated

## Project Overview

_What MyEasyWeb is and why it exists_

- MyEasyWeb is a **multi-tenant SaaS platform** that generates white-label e-commerce websites for resellers of promotional products. Developed by **Medialeads** for **European Sourcing**, the European leader in promotional product databases, the platform allows each reseller (distributor) to have their own branded website - with their logo, colors, domain name, and customized catalog - while being automatically fed by the centralized European Sourcing database of over **520,000 products** from 800+ suppliers.
- The system is composed of **three distinct applications**: the main front-end and reseller back-office (myeasyweb.net, Symfony 2.4), an internal administration back-office for European Sourcing staff (bo.myeasyweb.pro, Symfony 3.1), and a showcase/product search site (myeasyweb.pro, Silex 2.0). Each reseller site is identified by its domain name, and the application dynamically loads the corresponding configuration (theme, languages, suppliers, margins) on every request.
- Dashboard with recent orders, contacts, products, and newsletter statistics
- Full site customization: themes, colors, fonts, logos, header docs, CSS overrides
- Product catalog with Solr/ElasticSearch full-text search and supplier filtering
- Quote request system with configurable minimum amounts and email notifications (Amazon SES)
- Complete advertising system: slideshows, banners, skyscrapers, category ads
- Statistics dashboards: quotes, contacts, product views, search queries
- Corporate pages, custom menus, and downloads module for free editorial content
- Advanced SEO: custom SEO categories, meta-data, XML sitemap, and Google Analytics integration
- Internationalization: 7 languages (FR, EN, ES, DE, IT, NL, PT) and 32 currencies with automated ECB rates

**App1 Name:** myeasyweb.net

**App1 Desc:** Main application: public catalog front-end + reseller back-office (Symfony 2.4)

**App2 Name:** bo.myeasyweb.pro

**App2 Desc:** Internal administration back-office for European Sourcing staff (Symfony 3.1)

**App3 Name:** myeasyweb.pro

**App3 Desc:** Showcase website and product search engine (Silex 2.0)

## Objectives, Context & Risks

_Strategic vision and challenges behind the platform_

### Obj Turnkey

Professional sites for resellers with zero technical skills

### Obj Multi Lang

FR, EN, ES, DE, IT, NL, PT coverage

### Obj Currency

ECB exchange rates, automatic daily updates

### Obj Catalog

Centralized database from 800+ suppliers

### Obj Custom

Fully customizable branding per reseller

**Objectives Intro:** MyEasyWeb was built with a clear B2B monetization objective: give every promotional product reseller in Europe a turnkey website that connects to the European Sourcing database, generating recurring revenue and locking resellers into the ecosystem.

**Obj Turnkey Label:** Turnkey Sites

**Obj Turnkey Value:** 400+ live

**Obj Multi Lang Label:** Multi-Language

**Obj Multi Lang Value:** 7 languages

**Obj Currency Label:** Multi-Currency

**Obj Currency Value:** 32 currencies

**Obj Catalog Label:** Product Catalog

**Obj Catalog Value:** 520K+ products

**Obj Custom Label:** Customization

**Obj Custom Value:** 3 themes

**Context Text:** The project sits within a **larger ecosystem** at Medialeads/European Sourcing, which includes the main European Sourcing marketplace, reseller extranet, translation tools, data import pipelines, and other B2B products. The existing infrastructure already had a **centralized MySQL database**, an **Apache Solr search engine**, and an internal API system. Development started under **SVN** before migrating to **GitHub** in 2016.

**Stakes Text:** MyEasyWeb directly impacts European Sourcing's **revenue model**: each reseller site generates business volume for platform suppliers. Beyond revenue, the platform serves as a **client retention tool** - by providing a free, professional website, European Sourcing keeps resellers locked into its ecosystem rather than competing alternatives.

**Risk1 Title:** Multi-Tenant Complexity

**Risk1 Desc:** 400+ sites driven from a single codebase with per-tenant customization - a pattern consistent with the SaaS engineering practices of the 2008-2014 decade.

**Risk2 Title:** Password Hashing (state of the art 2012)

**Risk2 Desc:** MD5-based hashing was the state of the art across mainstream PHP ecosystems of the early 2010s - a reflection of the era's technical constraints. Modern standards (bcrypt/argon2) generalized later.

**Risk3 Title:** Search Engine Concentration

**Risk3 Desc:** Single Solr instance feeding the catalog - state of the art at the time, consistent with 2008-2014 practices, before multi-node ElasticSearch clusters became the standard for high-availability search.

**Risk4 Title:** Shared Database Pattern

**Risk4 Desc:** Multi-application access to a shared relational schema - state of the art at the time, consistent with the pragmatic architectures of the 2008-2014 decade, before microservices and bounded-context APIs generalized.

## Implementation Phases

_Four years of development from foundation to maturity_

- Phase 1
- Phase 2
- Phase 3
- Phase 4

**Phase1 Title:** Foundation & Multi-Tenant Architecture

**Phase1 Period:** 2012 - 2013

**Phase2 Title:** Feature Enrichment & Scale

**Phase2 Period:** 2014 - 2015

**Phase3 Title:** Modernization & New Back-Office

**Phase3 Period:** 2016 (Q3)

**Phase4 Title:** Showcase Site & Search

**Phase4 Period:** 2016 (Q4)

## Actors & Interactions

_A team of 5 developers across 1,506 commits_

- The project was built within **Medialeads**, a software company developing products for **European Sourcing** - the European leader in promotional product databases. The team of **5 developers** worked across 3 repositories, with José Da Costa as the **lead developer** responsible for **~65% of all commits**.

**Table Developer:** Developer

**Table Role:** Role

**Table Commits:** Commits

**Table Percent:** %

**Table Scope:** Scope

**Stakeholders Text:** Beyond the core team, the project involved multiple external actors: **promotional product suppliers** (whose catalogs fed the platform via the European Sourcing API), **resellers** (direct users of the MyEasyWeb back-office), **OVH** (dedicated server hosting), **Amazon Web Services** (SES email delivery), and **GitHub** (code hosting under the medialeads organization).

## Results & Deliverables

_What was achieved over 4+ years of development_

### Metric Entities

41 (main) + 10 (ES) + 10 (BO) + 6 (shared)

### Metric Controllers

44 (main) + 13 (BO admin)

### Metric Routes

On myeasyweb.net alone

### Metric Commits

Across 3 repositories, 5 developers

### Metric Themes

Fully customizable per reseller

### Metric Tests

Supplier statistics files (2012-2015)

- **Multi-tenant SaaS architecture** - designed and maintained a single codebase serving 400+ independently branded sites, a pattern I've applied to every SaaS project since
- **Full-stack PHP expertise** - deep mastery of Symfony 2.x ecosystem (Doctrine, Twig, security, translations, bundles) under real production constraints
- **Search engine integration** - hands-on experience with **Apache Solr** and **ElasticSearch** for full-text product search across massive catalogs
- **B2B e-commerce domain** - deep understanding of catalog management, pricing/margins, quote workflows, supplier data synchronization, and multi-currency handling
- **Database architecture** - worked with MySQL master/slave replication, Memcached caching, and cross-application shared databases
- **Technical leadership** - coordinated development across 3 repositories with 4 other developers using branch-based workflows, from SVN to Git

**Metric Entities:** Database Entities

**Metric Entities Value:** 67

**Metric Controllers:** Controllers

**Metric Controllers Value:** 57

**Metric Routes:** API Routes/Endpoints

**Metric Routes Value:** 136

**Metric Commits:** Total Commits

**Metric Commits Value:** 1,506

**Metric Themes:** Visual Themes

**Metric Themes Value:** 3 + common

**Metric Tests:** Stat Files

**Metric Tests Value:** 1,355

**For Business:** For the Business

**Business Text:** MyEasyWeb allowed European Sourcing to **retain its network of 400+ resellers** by offering them a free, professional, branded website directly connected to the product database. Each reseller site **indirectly generates business volume** for the platform's suppliers.

**For Me:** For Me Personally

**For Me Text:** As lead developer responsible for nearly two-thirds of the codebase, this project was a defining professional experience:

## What Came After

_Evolution and legacy of the platform_

**Current Text:** By the end of my involvement, the platform had reached **operational maturity** and demonstrated the viability of multi-tenant approaches for B2B niche markets - a durable architecture built to outlast multiple technology generations.

## Critical Reflection

_Honest assessment with the benefit of hindsight_

- **Multi-tenancy is a value multiplier**: one codebase serving 400+ clients generates far higher ROI than custom builds, provided the customization layer is well-structured
- **Technical debt grows with success**: the more clients and features, the higher the risk of CSS/test/security debt if quality is not measured continuously
- **Operational documentation** (wiki with URLs, commands, crontabs) is just as critical as architectural documentation for a project's long-term survival
