Contact
Vamos trabalhar juntos
European Sourcing - Plataforma B2B de Produtos Promocionais

European Sourcing - Plataforma B2B de Produtos Promocionais

Uma feira profissional europeia permanente online para a industria de produtos promocionais - 15+ aplicacoes interconectadas, 9M+ linhas de codigo, 7 idiomas, 8 anos de desenvolvimento.

2010 - 2016
~6 anos
Software Engineer depois Senior Software Engineer
PHP 5.xSymfony 2/3MySQLElasticsearchAngularJSPropel ORMDoctrine ORMZend FrameworkMemcacheRabbitMQApacheProxmox VEAWS SESChefCoffeeScriptjQuery MobilePhoneGap/CordovaExtJS

Linhas de codigo

~9.2M

PHP, JS, Twig, CSS, HTML

Tabelas no banco

97

MySQL (master-slave)

Sub-aplicacoes

15+

Ecossistema de microsservicos

Idiomas suportados

7

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

Servidores dedicados

9

OVH Proxmox VE

Conectores de fornecedores

26+

Importacao automatizada de dados

Entradas de versionamento

1,234

836 Git + 398 SVN

Sites revendedores

~60

CMS hospedado MyEasyWeb

Apresentacao e definicao do projeto

Uma feira profissional europeia permanente online para produtos promocionais

European Sourcing e uma plataforma B2B de sourcing de produtos promocionais em escala europeia. O projeto constitui um ecossistema completo de aplicacoes composto por quinze sub-aplicacoes interconectadas, desenvolvidas ao longo de mais de 6 anos (2010-2017).

A plataforma conecta tres tipos de atores no mercado de produtos promocionais:

  • Fornecedores (fabricantes/atacadistas) que listam seus catalogos de produtos
  • Revendedores/Distribuidores (agencias de comunicacao) que buscam produtos para seus clientes
  • Visitantes que navegam pelo catalogo online

O sistema funciona como uma feira profissional permanente online ("The European Online Tradeshow"), oferecendo aos fornecedores uma vitrine multicanal (catalogo online, newsletters, banners publicitarios, guidebook anual, Google Ads) e aos revendedores um motor de busca de produtos multilingue cobrindo 7 idiomas europeus.

Dominio de negocios

Comunicacao por objeto B2B - conectando fornecedores, revendedores e agencias europeias na industria de produtos promocionais.

Usuarios-alvo

Profissionais B2B em toda a Europa - ~60 agencias revendedoras hospedadas, fornecedores europeus importantes (Midocean, PF Concept, BIC, Paul Stricker, Topico, Inspirion, Makito, TopTex).

Escopo funcional
Catalogo de produtos multilingue (7 idiomas)
Busca full-text (Elasticsearch)
Back-office fornecedores/revendedores
Importacao automatizada de dados (26+ conectores)
API REST com autenticacao WSSE
Sistema de traducao centralizado
Pagamento online (Sogenactif)
CMS mini-sites revendedores (MyEasyWeb)
Aplicacoes moveis (PhoneGap/Cordova)

Objetivos, contexto, desafios e riscos

Digitalizando o mercado europeu de produtos promocionais

Objetivos
  • Criar a **primeira feira profissional permanente online** para o mercado europeu de produtos promocionais
  • Construir um **catalogo de produtos multilingue** (7 idiomas) agregando catalogos de dezenas de fornecedores
  • Fornecer aos revendedores um **motor de busca avancado** com filtros por categoria, marca, preco, atributos, marcacao
  • Automatizar a **importacao de feeds de dados** de fornecedores (precos, estoques, imagens, descricoes) de 26+ fornecedores
  • Oferecer aos revendedores uma solucao **pronta de mini-sites e-commerce** (MyEasyWeb) com ~60 sites hospedados
  • Gerar **estatisticas de consulta** detalhadas para fornecedores (visualizacoes de produtos, buscas, cliques)
Contexto

O projeto inicial (v1/v2) foi desenvolvido pela SQLI, uma empresa francesa de servicos de TI, com um framework PHP customizado e templates Smarty. O codigo legado continha 398 revisoes SVN cobrindo 2010-2013.

A partir de 2014-2016, a equipe Medialeads realizou uma reescrita completa da plataforma (apelidada de "Phoenix" para a API e "Rebirth" para o extranet), migrando progressivamente do framework customizado para Symfony 2/3 enquanto mantinha o site publico em um framework MVC customizado mais leve.

A plataforma era multilingue (7 idiomas), multi-pais, com alto volume de dados de produtos, e a necessidade de manter compatibilidade com os feeds de dados de fornecedores existentes - tudo hospedado em servidores dedicados OVH autogerenciados.

Desafios

Modelo de negocios

Receita de assinaturas de fornecedores (240-288 EUR/ano) e servicos publicitarios (banners, newsletters, guidebook, Google Ads, planejamento de midia).

Posicao estrategica

European Sourcing se posicionava como a referencia do sourcing de produtos promocionais online na Europa, substituindo catalogos impressos e feiras fisicas tradicionais.

Ecossistema de marcas

A empresa tambem operava TendanceObjet.com, Kadobjet.fr, FranceObjet.com, Omyague.com, GourmetOnline.pro - cada marca visando um segmento especifico do mercado.

Riscos identificados

Divida tecnica

Migracao progressiva de um framework customizado para Symfony, coexistencia de duas arquiteturas (SVN legado + Git moderno), hash MD5 de senhas com uma unica iteracao e sem salt.

Complexidade de integracao

Os feeds de dados de fornecedores eram heterogeneos (CSV, XML, API), exigindo adaptadores especificos por fornecedor - 26+ conectores identificados.

Dependencia de infraestrutura

9 servidores dedicados OVH com virtualizacao Proxmox, replicacao MySQL master/slave, implantacoes manuais via svn up + chmod -R 777.

Bus factor

Apenas 3 desenvolvedores principais para todo o ecossistema de 38 sub-projetos e 9 servidores.

As etapas - O que eu fiz

Do monolito SQLI a arquitetura de microsservicos distribuida

Fase 1
Desenvolvimento SQLI e legado SVN (2008-2013)
2008 - 2013
  • Gerenciamento do codigo legado herdado da SQLI - um monolito PHP com templates Smarty, sob versionamento SVN (398 revisoes)
  • Manutencao e extensao do extranet para fornecedores e revendedores (CRUD de produtos, gestao de imagens, precos, atributos, marcacoes)
  • Operacoes de implantacao em servidores dedicados e coordenacao com a documentacao SQLI (47+ documentos de especificacoes)
  • Desenvolvimento de scripts de correcao de dados para resolver problemas de qualidade (categorias-pai ausentes, cores incorretas, imagens quebradas)
Fase 2
Retomada interna e microsservicos (2014-2016)
Jan 2016 - Dez 2016
  • Lideranca da **migracao de SVN para GitHub** - 13 repositorios criados em janeiro 2016, organizacao medialeads com 8 membros e 20+ repos privados
  • Reescrita do extranet (177 commits) em um framework PHP MVC customizado com acesso direto ao banco MySQL
  • Desenvolvimento da API REST (api.europeansourcing.com) em Symfony 2.4 com Propel ORM e autenticacao WSSE
  • Construcao de conectores automatizados de importacao de fornecedores (15+ conectores: Pixika, Makito, Midocean, BIC, Paul Stricker, TopTex, Cybernecard)
  • Implementacao do Elasticsearch para busca full-text multilingue em 7 indices de idioma
  • Criacao do sistema de traducao centralizado (translate.europeansourcing.com) em Symfony 3.0
Fase 3
Modernizacao "Rebirth" (2016-2017)
Mar 2016 - Nov 2016
  • Inicio da **reescrita arquitetural** com bundles Symfony compartilhados (ESCoreBundle: 143 commits, ESSourcingBundle: 15 commits)
  • Projeto de comportamentos Doctrine: Sluggable, Sortable, Timestampable, Translatable, Blameable, Toggleable, Visible, Overloadable, Tree
  • Implementacao de processamento assincrono com RabbitMQ para importacao de dados e calculos de visibilidade
  • Configuracao de provisionamento de infraestrutura com Chef para o projeto extranet_rebirth
Project Timeline
European Sourcing - 2008-2017
Supplier Data Import Flow
Versioning Activity Timeline

Os atores - As interacoes

Colaboracao em uma equipe reduzida mas altamente produtiva

Equipe de desenvolvimento

3 a 5 desenvolvedores ativos dependendo do periodo, com responsabilidades claramente divididas:

Jose DA COSTA

Desenvolvedor lider - 35,3% do versionamento total (225 Git + 116 SVN). Dominante no extranet (177 commits), flux (15), gestao do legado SVN.

Thomas C.

Desenvolvedor senior - 36,9% (355 Git + 1 SVN). Dominante no ESCoreBundle (113), translate (88), supplierbo (19).

wamania

Desenvolvedor - 24,2% (226 Git + 8 SVN). Dominante no europeansourcing.com (166 commits), extranet (49).

IronXtreme

Desenvolvedor - 3,0% (29 commits Git no ESCoreBundle).

Contribution Distribution (Git + SVN)
Commits per Repository
Partes interessadas externas

SQLI

Empresa de servicos de TI que desenvolveu v1/v2/v3 (especificacoes, desenvolvimento inicial)

Dolead

Agencia de gestao Google AdWords (MCC 187-710-9091)

Universem

Agencia de SEO (auditorias TendanceObjet e Kadobjet)

OVH

Provedor de hospedagem (9 servidores dedicados, conta LB6978-OVH)

Workflow de desenvolvimento

Organizacao GitHub medialeads (Bordeaux), branches por desenvolvedor (jose, fancyweb, wamania), documentacao interna DokuWiki. Nenhum processo formal de Pull Requests foi identificado - a equipe usava merges diretos de branches e areas de codigo atribuidas a cada desenvolvedor.

Os resultados

Impacto mensuravel para a empresa e para minha carreira

Para mim
  • Dominio do ecossistema Symfony 2/3 em producao em larga escala (Propel, Doctrine, bundles, servicos, seguranca, WSSE)
  • Expertise aprofundada em replicacao MySQL master-slave, indexacao Elasticsearch multilingue e cache Memcache
  • Desenvolvimento de habilidades solidas em migracao de codigo legado - transicao do monolito SVN para microsservicos Git sem interrupcao de servico
  • Aquisicao de conhecimento de dominio em mercado B2B de produtos promocionais, automacao de feeds de dados e e-commerce multi-pais
  • Aprendizado de coordenacao em uma equipe pequena onde cada desenvolvedor possui porcoes significativas do codigo
Para a empresa

Cobertura funcional

Ciclo completo de sourcing B2B coberto: catalogo, busca, importacao, extranet, sites revendedores, traducao, estatisticas, pagamento, SEO

Alcance multilingue

7 idiomas europeus com indices Elasticsearch dedicados e gestao centralizada de traducoes

Escala de automacao

26+ conectores automatizados de dados de fornecedores lidando com formatos heterogeneos (CSV, XML, API) de grandes marcas europeias

Rede de revendedores

~60 mini-sites revendedores hospedados na plataforma CMS MyEasyWeb

Ecossistema de marcas

11+ marcas operadas: europeansourcing.com, tendanceobjet.com, kadobjet.fr, franceobjet.com, omyague.com e mais

Modelo de receita

Modelo de assinatura B2B estavel (240-288 EUR/ano por fornecedor) mais servicos publicitarios multicanal

  • Catalogo de produtos multilingue com busca Elasticsearch em 7 idiomas
  • API REST com autenticacao WSSE stateless
  • 26+ conectores automatizados de importacao de dados de fornecedores
  • Back-office fornecedores/revendedores com gestao completa de produtos
  • Dashboard de fornecedores SPA (AngularJS + CoffeeScript)
  • ~60 mini-sites revendedores hospedados (MyEasyWeb)
  • Sistema de pagamento online (Sogenactif)
  • Back-office SEO/marketing (Zend Framework + ExtJS)
  • Aplicacoes moveis (jQuery Mobile + PhoneGap/Cordova)
Codebase Metrics
Microservices Ecosystem
Technology Distribution

Architecture & Diagrams

Technical architecture visualizations

Architecture Phase 2 (2016) - Draw.io
European Sourcing - Architecture Phase 2 (2016) - 9+ microservices on 9 OVH Proxmox servers
Architectural Évolution - Monolith to Microservices
WSSE Authentication - Inter-Service Communication
Entity-Relationship Diagram (Simplified)

O depois do projeto

O que aconteceu apos o projeto

Os ultimos commits identificados datam de final de 2016 (ESCoreBundle, bo.myeasyweb.pro) com o ultimo arquivo datado sendo uma exportacao do Google AdWords de fevereiro de 2017. A fase de modernizacao "Rebirth" (Fase 3) parece ter sido interrompida antes da conclusao.

Os dados e o codigo da plataforma foram arquivados em um sistema de backup NAS, preservando o historico SVN completo (398 revisoes), todos os 13 repositorios Git (836 commits), a biblioteca completa de documentacao SQLI (47+ documentos), dumps de banco de dados e paginas DokuWiki internas.

O projeto demonstra um padrao classico de modernizacao de legado: uma migracao por fases que alcanca progresso significativo (monolito para microsservicos, SVN para Git, framework customizado para Symfony) mas onde a fase final de consolidacao ("Rebirth" com bundles compartilhados) e interrompida por mudancas de negocios ou organizacionais.

As escolhas arquiteturais da Fase 2 - particularmente a abordagem orientada a servicos com subdominios dedicados e autenticacao WSSE - se mostraram solidas e modernas para sua epoca. A integracao do Elasticsearch para busca multilingue e a infraestrutura de conectores automatizados de fornecedores permanecem realizacoes tecnicamente impressionantes.

Minha perspectiva critica

Retrospectiva honesta sobre 8 anos de desenvolvimento

Pontos fortes
  • Arquitetura de microsservicos bem projetada

    A decomposicao do monolito SQLI em servicos especializados (API, busca, flux, traducao, exportacao, estatisticas) demonstra visao arquitetural solida. Cada servico tem uma responsabilidade clara e perimetro funcional bem definido.

  • Cobertura funcional excepcional

    A plataforma cobre todo o ciclo de vida do sourcing B2B: catalogo, busca, importacao automatizada, extranet de fornecedores, mini-sites revendedores, traducao, estatisticas, pagamento, SEO.

  • Internacionalizacao nativa

    Suporte a 7 idiomas com indices Elasticsearch dedicados por idioma e sistema de traducao centralizado demonstra ambicao europeia genuina.

  • Automacao de importacao de fornecedores

    Os 26+ conectores lidando com formatos heterogeneos (CSV, XML, API) representam investimento tecnico consideravel e valor de negocio fundamental.

Areas para melhoria
  • Praticas de seguranca

    Hash MD5 de senhas com uma unica iteracao e sem salt base64 - uma pratica obsoleta e vulneravel mesmo em 2016. Arquivos de configuracao continham senhas em texto plano. Implantacao via chmod -R 777.

  • Ausencia de CI/CD

    Implantacao manual via svn up, sem pipeline de integracao continua, sem testes automatizados no workflow de implantacao.

  • Sem releases ou tags

    Zero tags Git em todos os 13 repositorios - sem gestao formal de versoes, dificultando rollbacks.

  • Fragmentacao tecnologica

    Coexistencia de 4+ frameworks (PHP customizado, Symfony 2.4, 2.8, 3.0, 3.1, Zend Framework 1) e 2 ORMs (Propel, Doctrine) no mesmo ecossistema.

O que eu faria diferente
  • Adotar um unico framework desde o inicio em vez de manter um framework PHP customizado ao lado do Symfony. A migracao poderia ter sido mais radical com um frontend Symfony/Twig unificado.
  • Configurar CI/CD desde a migracao para GitHub (janeiro 2016) - GitHub Actions ainda nao existia, mas Jenkins, Travis CI ou GitLab CI estavam disponiveis.
  • Usar Docker para ambientes de desenvolvimento e implantacao, em vez de VPS Proxmox com configuracao manual.
  • Centralizar o acesso a dados via uma unica API em vez de conectar cada servico diretamente ao banco MySQL.
  • Adotar bcrypt/scrypt para hash de senhas desde a migracao para Symfony.
Licoes duradouras

A migracao de legado e uma maratona

A transicao do monolito SQLI para arquitetura de microsservicos levou 3+ anos e nao foi concluida. Planejar marcos realistas e compromissos temporarios e essencial.

A automacao de importacao de dados e critica

Os 26+ conectores de fornecedores representam valor de negocio consideravel mas tambem divida de manutencao permanente - qualquer fornecedor pode mudar seu formato a qualquer momento.

A internacionalizacao deve ser planejada desde o inicio

O sistema de traducao centralizado e um excelente padrao. Gerenciar 7 idiomas depois teria sido exponencialmente mais caro.

A documentacao de consultoria e preciosa

As especificacoes da SQLI permitiram entender a arquitetura anos apos o fim da prestacao. Investir em documentacao tecnica tem um ROI de longo prazo.

Trajetoria relacionada

Experiencia profissional ligada a esta realizacao

Competencias aplicadas

Competencias tecnicas e humanas aplicadas

Galeria de imagens

Capturas e visuais do projeto