Contact
Vamos trabalhar juntos
MyEasyWeb - Plataforma SaaS E-Commerce White-Label

MyEasyWeb - Plataforma SaaS E-Commerce White-Label

Plataforma SaaS multi-tenant gerando sites e-commerce personalizados para 40+ revendedores no mercado europeu de produtos promocionais - 3 aplicacoes interconectadas, 108K linhas de codigo, 7 idiomas, 32 moedas, 1.506 commits em ~3 anos.

2013 - 2016
~3 anos
Senior Software Engineer (64,6% dos commits)
PHP 5.3+Symfony 2.4Symfony 3.1Silex 2.0MySQLDoctrine ORMApache SolrElasticSearchMemcachedTwigAmazon SESjQueryBootstrapApacheREST API (FOS)

Linhas de codigo

~108,000

PHP, CSS, JS, Twig em 3 aplicacoes

Sites clientes

40+

Sites de revendedores ativos com dominios proprios

Idiomas

7

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

Moedas

32

Taxas de cambio BCE, atualizacao automatica

Visao geral do projeto

O que e o MyEasyWeb e por que ele existe

MyEasyWeb e uma plataforma SaaS multi-tenant que gera sites e-commerce white-label para revendedores de produtos promocionais. Desenvolvida pela Medialeads para a European Sourcing, lider europeia em bancos de dados de produtos promocionais, a plataforma permite que cada revendedor (distribuidor) tenha seu proprio site personalizado - com seu logo, cores, dominio e catalogo configurado - alimentado automaticamente pelo banco de dados centralizado da European Sourcing com mais de 200.000 produtos de centenas de fornecedores.

O sistema e composto por tres aplicacoes distintas: o front-end principal e back-office do revendedor (myeasyweb.net, Symfony 2.4), um back-office de administracao interna para a equipe European Sourcing (bo.myeasyweb.pro, Symfony 3.1), e um site vitrine/motor de busca de produtos (myeasyweb.pro, Silex 2.0). Cada site de revendedor e identificado pelo seu dominio, e a aplicacao carrega dinamicamente a configuracao correspondente (tema, idiomas, fornecedores, margens) em cada requisicao.

Tres aplicacoes interconectadas

myeasyweb.net

Aplicacao principal: front catalogo publico + back-office do revendedor (Symfony 2.4)

bo.myeasyweb.pro

Back-office de administracao interna para a equipe European Sourcing (Symfony 3.1)

myeasyweb.pro

Site vitrine e motor de busca de produtos (Silex 2.0)

Funcionalidades do back-office (21 modulos)
Dashboard com pedidos recentes, contatos, produtos e estatisticas de newsletter
Personalizacao completa do site: temas, cores, fontes, logos, imagens de cabecalho, CSS customizado
Catalogo de produtos com busca full-text Solr/ElasticSearch e filtragem por fornecedor
Sistema de orcamentos online com valores minimos configuraveis e notificacoes por email (Amazon SES)
Sistema publicitario completo: slideshows, banners, skyscrapers, anuncios por categoria
Paineis de estatisticas: orcamentos, contatos, visualizacoes de produtos, buscas

Objetivos, contexto e riscos

Visao estrategica e desafios da plataforma

O MyEasyWeb foi construido com um objetivo claro de monetizacao B2B: oferecer a cada revendedor de produtos promocionais na Europa um site pronto conectado ao banco de dados European Sourcing, gerando receita recorrente e fixando os revendedores no ecossistema.

Sites prontos

40+ ativos

Sites profissionais para revendedores sem habilidades tecnicas

Multi-idioma

7 idiomas

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

Multi-moeda

32 moedas

Taxas de cambio BCE, atualizacao diaria automatica

Catalogo de produtos

200K+ produtos

Banco de dados centralizado de centenas de fornecedores

Personalizacao

3 temas

Branding totalmente personalizavel por revendedor

Contexto

O projeto esta inserido em um ecossistema maior na Medialeads/European Sourcing, que inclui o marketplace European Sourcing, a extranet de revendedores, ferramentas de traducao, pipelines de importacao de dados e outros produtos B2B. A infraestrutura existente ja contava com um banco de dados MySQL centralizado, um motor de busca Apache Solr e um sistema de API interno. O desenvolvimento comecou com SVN antes de migrar para o GitHub em 2016.

Desafios

O MyEasyWeb impacta diretamente o modelo de receita da European Sourcing: cada site de revendedor gera volume de negocios para os fornecedores da plataforma. Alem da receita, a plataforma serve como ferramenta de retencao - ao fornecer um site profissional gratuito, a European Sourcing mantem seus revendedores no ecossistema. A cobertura internacional (7 idiomas, 32 moedas) reflete uma ambicao pan-europeia, incluindo um site alemao dedicado (meineasyweb.de).

Riscos identificados

Complexidade multi-tenant

Gerenciar 40+ sites com configuracoes individuais em um unico codigo aumenta a complexidade de manutencao e o risco de implantacao.

Seguranca de senhas (MD5)

Senhas codificadas em MD5 sem salt (iterations: 1) - uma vulnerabilidade conhecida mesmo para a epoca (bcrypt ja era recomendado).

Solr ponto unico de falha

A busca de produtos depende inteiramente do Solr com importacoes cron diarias - uma falha no motor de busca impacta todos os 40+ sites simultaneamente.

Acoplamento de banco de dados

Acesso direto ao banco compartilhado europeansourcing de varias aplicacoes: acoplamento forte e riscos de migracao de schema.

Fases de implementacao

Quatro anos de desenvolvimento, das fundacoes a maturidade

Fase 1
Fundacoes e arquitetura multi-tenant
2012 - 2013
  • Desenvolvimento da aplicacao principal (myeasyweb.net) com Symfony 2.4 no SVN
  • Projeto e implementacao da arquitetura multi-tenant: deteccao de dominio, carregamento dinamico de configuracao
  • Integracao com o banco MySQL European Sourcing existente e o motor de busca Apache Solr
  • Construcao do back-office do revendedor: gestao de conteudo, estatisticas, orcamentos, configuracao de margens
  • Implantacao dos primeiros sites de revendedores com dominios personalizados
Fase 2
Enriquecimento funcional e escala
2014 - 2015
  • Construcao do sistema publicitario completo: slideshows, banners, anuncios 4 posicoes, skyscrapers, anuncios por categoria
  • Implementacao de menus personalizados com suporte a links e paginas incorporadas
  • Desenvolvimento de paineis de estatisticas detalhados: orcamentos, contatos, produtos, buscas
  • Integracao do rastreamento Google Analytics por site de revendedor
  • Adicao de gerenciamento e envio de newsletters
  • Desenvolvimento de funcionalidades SEO: categorias personalizadas, sitemaps XML, gestao de meta-dados
  • Expansao para 3 temas visuais com camada comum compartilhada + fontes web personalizadas
Fase 3
Modernizacao e novo back-office
2016 (T3)
  • Desenvolvimento do bo.myeasyweb.pro com Symfony 3.1 - novo back-office de administracao interna
  • Implementacao de arquitetura API REST (FOSRestBundle + JMSSerializer) para gestao centralizada de sites
  • Construcao do servico de sincronizacao entre bancos interno e de revendedores
  • Adicao do sistema de gestao de traducoes (TranslatableListener, Locale, CategoryTranslation)
  • Migracao do controle de versao de SVN para GitHub (organizacao: medialeads)
Fase 4
Site vitrine e busca
2016 (T4)
  • Desenvolvimento do site vitrine myeasyweb.pro usando o micro-framework Silex 2.0
  • Integracao do ElasticSearch com biblioteca PHP customizada (lib/ElasticSearch/)
  • Construcao das paginas de busca de produtos com templates Twig (Home, Search, Layout)
  • Backup dos 3 repositorios no NAS (ultima atividade documentada: dezembro de 2016)
Evolucao das funcionalidades ao longo do tempo
Metricas tecnicas por aplicacao

Atores e interacoes

Uma equipe de 5 desenvolvedores em 1.506 commits

O projeto foi construido dentro da Medialeads, uma empresa de software desenvolvendo produtos para a European Sourcing - lider europeia em bancos de dados de produtos promocionais. A equipe de 5 desenvolvedores trabalhou em 3 repositorios, com Jose Da Costa como desenvolvedor lead responsavel por 64,6% de todos os commits (974 de 1.506). A equipe compartilhava documentacao atraves de um DokuWiki interno hospedado no servidor de homologacao.

O modelo de colaboracao era baseado em branches: cada desenvolvedor trabalhava em sua propria branch (visivel no historico git: branches `jose`, `fancyweb`, `Amandine-es`). Wamania teve um papel especial como arquiteto da modernizacao de 2016, sendo o unico autor do bo.myeasyweb.pro e do myeasyweb.pro. Thomas C. (`fancyweb`) foi um contribuidor significativo na aplicacao principal, enquanto Amandine focou na localizacao (provavelmente espanhol, dado seu alias `Amandine-es`).

Distribuicao de commits por desenvolvedor
Contribuicoes da equipe
DesenvolvedorFuncaoCommits%
Jose Da CostaLead Developer97464.6%
WamaniaSenior Developer / Architect36324.1%
Thomas C.Developer1298.6%
AmandineDeveloper / Localization291.9%
Bastien B.Developer110.7%
Total1,506100%

Partes interessadas externas

Alem da equipe tecnica, o projeto envolveu multiplos atores externos: fornecedores de produtos promocionais (cujos catalogos alimentavam a plataforma via API European Sourcing), 40+ revendedores (usuarios diretos do back-office MyEasyWeb), OVH (hospedagem em servidores dedicados), Amazon Web Services (envio de emails via SES) e GitHub (hospedagem de codigo na organizacao medialeads).

Resultados e entregas

O que foi alcancado em 4+ anos de desenvolvimento

Para a plataforma

Volume de codigo por linguagem

Entidades no banco

67

41 (principal) + 10 (ES) + 10 (BO) + 6 (compartilhado)

Controllers

57

44 (principal) + 13 (BO admin)

Rotas/Endpoints API

136

Somente no myeasyweb.net

Commits totais

1.506

Em 3 repositorios, 5 desenvolvedores

Temas visuais

3 + common

Totalmente personalizaveis por revendedor

Arquivos de stats

1.355

Estatisticas de fornecedores (2012-2015)

Distribuicao de entidades por banco de dados
Metricas de arquitetura tecnica
Capacidades da plataforma

Para o negocio

O MyEasyWeb permitiu que a European Sourcing retivesse sua rede de 40+ revendedores oferecendo-lhes um site profissional gratuito, personalizado e diretamente conectado ao banco de produtos. Cada site de revendedor gera indiretamente volume de negocios para os fornecedores da plataforma. Os 1.355 arquivos de estatisticas de fornecedores coletados entre 2012 e 2015 comprovam uma atividade comercial sustentada gerada pela plataforma.

Para mim pessoalmente

Como desenvolvedor lead responsavel por quase dois tercos do codigo, este projeto foi uma experiencia profissional marcante:

  • Arquitetura SaaS multi-tenant - projeto e manutencao de um codigo unico servindo 40+ sites de marca independentes, um padrao que apliquei a cada projeto SaaS desde entao
  • Expertise PHP full-stack - dominio profundo do ecossistema Symfony 2.x (Doctrine, Twig, seguranca, traducoes, bundles) sob restricoes de producao reais
  • Integracao de motores de busca - experiencia pratica com Apache Solr e ElasticSearch para busca full-text de produtos em catalogos massivos
  • Dominio e-commerce B2B - compreensao profunda de gestao de catalogos, precificacao/margens, fluxos de orcamentos, sincronizacao de fornecedores e gestao multi-moeda
  • Arquitetura de banco de dados - trabalho com replicacao MySQL master/slave, cache Memcached e bancos compartilhados entre aplicacoes
  • Lideranca tecnica - coordenacao do desenvolvimento em 3 repositorios com 4 outros desenvolvedores em workflow por branches, de SVN a Git

O que veio depois

Evolucao e legado da plataforma

Proximos passos imediatos (2016)

A ultima atividade documentada data de dezembro de 2016 (backup NAS). O projeto estava em plena evolucao naquele momento: o novo back-office interno (bo.myeasyweb.pro, Symfony 3.1) acabara de ser finalizado, o site vitrine (myeasyweb.pro, Silex 2.0) acabara de ser implantado, e a migracao de SVN para GitHub estava completa. A plataforma servia 40+ sites de revendedores ativos por toda a Europa.

Impacto a longo prazo

O MyEasyWeb fazia parte de um ecossistema maior de 30+ aplicacoes interconectadas construidas ao longo de quase uma decada na European Sourcing. Os padroes de arquitetura multi-tenant, a abordagem de integracao Solr e o conhecimento do dominio e-commerce B2B desenvolvidos durante este projeto influenciaram diretamente o design das ferramentas seguintes do ecossistema European Sourcing - incluindo a Extranet (229K linhas), o motor de importacao de dados (120+ tabelas) e a plataforma de sincronizacao de fornecedores (Flux).

Estado atual

Os arquivos analisados foram recuperados de um backup NAS realizado no final de 2016. O projeto muito provavelmente continuou apos essa data, mas a atividade pos-backup nao e acessivel a partir desses arquivos. A arquitetura da plataforma - um codigo PHP unico servindo dezenas de sites e-commerce personalizados - era um modelo SaaS maduro e comprovado que demonstra a viabilidade de abordagens multi-tenant para mercados de nicho B2B.

Reflexao critica

Analise honesta com o beneficio da retrospectiva

Pontos fortes
  • Arquitetura multi-tenant: um codigo para 40+ sites com personalizacoes individuais - um produto SaaS real, nao sites isolados
  • Riqueza funcional: o back-office do revendedor cobria anuncios, estatisticas, SEO, newsletters, margens, downloads, paginas corporativas - muito alem de um CMS simples
  • Infraestrutura escalavel: replicacao MySQL master/slave, Memcached, Solr, Amazon SES - escolhas de escalabilidade bem pensadas
  • Multi-idioma e multi-moeda nativos: 7 idiomas e 32 moedas integrados no modelo de dados desde a concepcao
  • Separacao de responsabilidades: 3 aplicacoes com stacks adaptadas (Symfony 2.4, 3.1, Silex 2.0) para diferentes casos de uso
Pontos de melhoria
  • Seguranca de senhas: MD5 sem salt e uma vulnerabilidade critica, mesmo para 2012 (bcrypt ja era a recomendacao)
  • Cobertura de testes: apenas 4 arquivos de teste no bo.myeasyweb.pro, nenhum visivel no myeasyweb.net - praticamente nenhum teste automatizado para um projeto deste porte
  • Divida tecnica CSS: 38.091 linhas de CSS sugerem acumulo sem refatoracao, provavelmente pela multiplicacao de temas
  • Acoplamento entre aplicacoes: acesso direto ao banco compartilhado europeansourcing cria acoplamento forte e migracoes de schema arriscadas
  • Implantacao manual: um simples script shell (prod.sh) para producao - sem CI/CD, sem testes no pipeline, sem rollback automatico

Licoes-chave aprendidas

  1. O multi-tenant e um multiplicador de valor: um codigo unico servindo 40+ clientes gera ROI muito superior a desenvolvimentos sob medida, desde que a camada de personalizacao esteja bem estruturada
  2. A divida tecnica cresce com o sucesso: quanto mais clientes e funcionalidades, maior o risco de divida CSS/testes/seguranca se a qualidade nao for medida continuamente
  3. A migracao SVN para Git se pagou rapidamente com branches por desenvolvedor e workflow colaborativo - escolhas de controle de versao tem impacto duradouro
  4. A documentacao operacional (wiki com URLs, comandos, crontabs) e tao critica quanto a documentacao arquitetural para a sobrevivencia a longo prazo de um projeto

Arquitetura e diagramas

Arquitetura do sistema
Tres aplicacoes interconectadas com infraestrutura compartilhada
Fluxo de requisicao multi-tenant
Como uma requisicao de visitante em um dominio de revendedor e processada
Modelo de dados (bo.myeasyweb.pro)
Diagrama entidade-relacionamento do banco de administracao interna
Infraestrutura e implantacao
Ambientes de desenvolvimento, homologacao e producao
Modelo de dados completo (41 entidades - Draw.io)
Mapa completo das entidades do BackBundle myeasyweb.net organizado por dominio: Core, Catalogo, Publicidade, Conteudo, Estatisticas

Trajetoria relacionada

Experiencia profissional ligada a esta realizacao

Competencias aplicadas

Competencias tecnicas e humanas aplicadas

Galeria de imagens

Capturas e visuais do projeto

Painel de administracao MyEasyWeb com gestao de revendedores, pedidos e visao geral de estatisticas
Back-office interno (bo.myeasyweb.pro) - Painel de administracao de revendedores
Pagina de login e registro de revendedor com opcoes de personalizacao de marca
Portal de autenticacao de revendedor - Login personalizado com dominios dedicados
Painel de personalizacao marca branca com configuracoes de tema, cores, logo e fontes para sites de revendedores
Painel de personalizacao - Controle completo da identidade visual por site de revendedor
Vitrine de catalogo de produtos com filtros de busca, navegacao por categoria e listagens de produtos promocionais
Vitrine do catalogo - Busca de produtos multilinguagem com filtragem por fornecedor
Brochura de marketing da plataforma SaaS e-commerce marca branca MyEasyWeb com destaques de funcionalidades
Brochura comercial - Funcionalidades da plataforma e proposta de valor para revendedores