---
title: "Multi-Supplier Product Data Import System"
description: "Critical data import engine for the European Sourcing B2B marketplace - 254+ suppliers, 120+ database tables, 8 CSV import types, 5 languages, 7 years of development (2009-2016)."
locale: "en"
canonical: "https://portfolio.josedacosta.info/en/achievements/import-european-sourcing"
source: "https://portfolio.josedacosta.info/en/achievements/import-european-sourcing.md"
html_source: "https://portfolio.josedacosta.info/en/achievements/import-european-sourcing"
author: "José DA COSTA"
date: "2007"
type: "achievement"
slug: "import-european-sourcing"
tags: ["PHP 5.x", "MySQL", "Symfony 2.x", "Smarty", "jQuery", "Bootstrap", "Docker", "Vagrant", "Apache", "Memcached", "ProxySQL", "FTP", "CSV", "XML"]
generated_at: "2026-04-23T15:46:30.495Z"
---

# Multi-Supplier Product Data Import System

Critical data import engine for the European Sourcing B2B marketplace - 254+ suppliers, 120+ database tables, 8 CSV import types, 5 languages, 7 years of development (2009-2016).

**Date:** 2009 - 2016  
**Duration:** ~7 years  
**Role:** Software Engineer then Senior Software Engineer  
**Technologies:** PHP 5.x, MySQL, Symfony 2.x, Smarty, jQuery, Bootstrap, Docker, Vagrant, Apache, Memcached, ProxySQL, FTP, CSV, XML

### Key Metrics

- Lines of Code: **-** - PHP application code (excl. third-party)
- Suppliers: **-** - 254+ import folders identified
- Database Tables: **-** - 120+ MySQL tables
- Languages: **-** - FR, EN, DE, ES, IT

## Presentation & Definition

_A centralized import engine for the European promotional products market_

### Domain

B2B promotional products & merchandise - an industry connecting European manufacturers of branded goods (pens, textiles, office accessories, gifts) with resellers who customize and sell them to end clients.

### Scope

Bulk import of supplier catalogs (docs, product data, variants, markings, pricing options, stock levels), automated FTP/XML/CSV feed updates, supplier profile management, catalog PDF generation, and subscription management.

**Content:** The **Import European Sourcing** project is the data import and product management backbone of the **European Sourcing** platform - a major B2B marketplace connecting **suppliers** of promotional products (manufacturers, importers) with **distributors/resellers** across Europe.

The system ingests and normalizes product catalogs from **254+ suppliers** spanning heterogeneous formats (CSV, XML, FTP feeds), processes them through validation and transformation pipelines, and writes them into a centralized MySQL database powering a multilingual search engine across 5 European languages.

The import system evolved through two major generations:
- **Legacy (2007-2016)**: A monolithic PHP application built on a custom MVC framework (SQLI), with batch scripts for catalog import and FTP-based auto-update
- **Modern (2016-2019)**: A Symfony-based extranet (v2) introducing asynchronous import queues, structured CSV schemas for 8 import types, and real-time progress tracking

**Domain:** Business Domain

**Scope:** Functional Scope

## Objectives, Context, Stakes & Risks

_Understanding the business drivers behind the technical challenge_

### Context

The project was initially developed by **SQLI** (a French IT services company) on a custom PHP framework with SQL Server, later migrated to MySQL. The initial architecture (circa 2007-2010) relied on a custom MVC pattern with Smarty templating.

The project was owned by **Medialeads** (the company behind European Sourcing), whose GitHub organization is `github.com/medialeads`. Between 2016 and 2019, a modernized extranet (v2) was developed on Symfony with Bootstrap, Docker/Vagrant for development, and an asynchronous import queue system.

The infrastructure relied on a **front/back MySQL architecture** with load balancing: a front MySQL server (192.168.0.103) for the public site and a back MySQL server (192.168.0.102) for the admin extranet, with batch synchronization.

## Steps - What I Did

_A 12-year journey from legacy takeover to modern async imports_

**Phase1 Title:** Initial Development & Migration

**Phase1 Period:** 2007-2010

**Phase2 Title:** Functional Enrichment

**Phase2 Period:** 2010-2016

**Phase3 Title:** Import Automation (FTP/XML)

**Phase3 Period:** 2015-2018

**Phase4 Title:** Extranet v2 & Modern Import

**Phase4 Period:** 2016-2019

## Actors & Interactions

_A multi-generational team of 20+ contributors across 12 years_

**Content:** **20 contributors identified** across PHP source files (@author tags), SVN metadata, Git logs, screenshots, and configuration files.

The project evolved through two distinct team phases:
- **SQLI Phase (2007-2010)**: 3 main developers (jebanquey, bvermeulen, lhuangoc) produced 79.8% of the original codebase
- **Medialeads Phase (2013-2019)**: José DA COSTA took over as primary developer (99.8% of SVN commits), later joined by Thomas C., fancyweb, amandine, bastien for the modernization

**Non-technical stakeholders** included import operators (Rahnia Sadaoui, Anthony Brifouillere, Paul Meyer), commercial managers, and 250+ external suppliers with automated feeds.

The development followed an incremental delivery model (no formal Agile methodology identified), with thematic releases organized in a `livraisons/` directory.

## Results

_Impact for myself and for the company_

## The Aftermath

_What happened after the final deployment_

**Content:** **Immediate aftermath** (2019): The comprehensive backups of March and August 2019 (including bash_history, SSH keys, screenshots, and multiple SQL dumps) suggest a transition phase - likely related to a departure or project archival. The August 2019 backup includes 441 screenshots systematically documenting the entire ecosystem.

**Medium-term**: The last modified file in the backup dates to November 2019. The exhaustive nature of the documentation (wiki pages, process documents, deployment scripts) indicates a conscious effort to ensure knowledge transfer.

**Current state**: The project is archived. The European Sourcing platform continued to operate independently, but the original codebase as documented in these backups represents a snapshot of a mature 12-year system at its final state. The technical choices (Symfony v2, Docker, async queues) demonstrated the team's awareness of the need for modernization.

The longevity of the initial architecture (12 years of production use) validates many of the original design choices, particularly the front/back MySQL separation and the denormalization strategy for multilingual search performance.

## Critical Reflection

_Honest retrospective on a 12-year engineering journey_
