Pular para o conteúdo
<Dev.Lucas />
Voltar aos projetos

Marketplace · E-commerce · App mobile

Resolvi Desapegar

Marketplace de moda e luxo seminovo, com loja online, painel administrativo, API REST e app para Android e iOS. Busca própria, múltiplos meios de pagamento, frete pelos Correios e notificações push.

Meu papel
Desenvolvedor atual · manutenção e evolução do site, da API e do app
PHPMariaDBIonicAngularCapacitorAWSDocker
Página inicial do Resolvi Desapegar, com o menu de categorias e a campanha Black Friday.

Em números

  • 40+

    telas no app Ionic/Angular

  • 30+

    módulos no painel administrativo

  • 3

    gateways de pagamento integrados

  • ~25 ms

    consulta ao catálogo, antes ~1,5 s

Contexto

O Resolvi Desapegar (resolvidesapegar.com.br) é um marketplace de bolsas, joias, relógios e acessórios de luxo seminovos e originais, vindos de pessoas que decidiram praticar o desapego. São dois repositórios: a plataforma web em PHP 8.2, que serve a loja, o painel administrativo e a API REST a partir de um núcleo compartilhado, e um app Ionic/Angular empacotado com Capacitor para Android e iOS, publicado nas duas lojas. Hoje sou o desenvolvedor responsável por mantê-la e evoluí-la.

O desafio

O catálogo tem peças únicas e de alto valor, então a busca precisa achar o item certo mesmo com marcas de nome curto, como “Miu Miu”, sem despejar o catálogo inteiro. Além disso, três frentes (site, painel e app) precisam usar as mesmas regras de produto, pedido e pagamento, e a operação da loja, do estoque ao envio, tem de ser feita por um painel com permissões.

O que foi construído

  • Três aplicações sobre um núcleo comum: loja, painel administrativo e API REST compartilham models, formulários e helpers de regra de negócio, em vez de duplicar código entre site e app.
  • Busca de produtos própria sobre uma tabela InnoDB com índice FULLTEXT, usada pelo site e pela API. O termo passa pela mesma normalização do índice (sem acento, plural reduzido ao radical) e a busca desce por degraus, do título completo até um LIKE, até achar resultado relevante. O índice é atualizado a cada 5 minutos e reconstruído de madrugada.
  • Desempenho de consulta: ao filtrar na tabela base e consultar a view por uma lista de ids, em vez de filtrar na view, uma consulta caiu de cerca de 1,5 s para cerca de 25 ms.
  • Checkout com vários meios de pagamento (Mercado Pago, PayPal e Braintree), webhooks para confirmar pedidos e dados de cartão tratados por tokenização do gateway, sem passar pelo servidor.
  • Cálculo de frete e serviço de entrega integrados aos Correios, com cupons de desconto, pagamento à vista com desconto e parcelamento em até 10x.
  • Painel administrativo com mais de 30 módulos e controle de acesso por perfis e permissões: produtos, estoque, pedidos, clientes, cupons, banners, autenticação das peças, contas a pagar, relatórios, e-mails e push.
  • Fluxo para quem quer vender: cadastro de peças pelo app, acompanhamento das próprias vendas e das compras, favoritos, reservas e notificações.
  • App mobile com mais de 40 telas, câmera e galeria para fotos dos produtos, leitura de código, push notifications via Firebase e notificações locais.
  • Marketing e mensuração: Meta Pixel com Conversions API, feed para o Google Merchant Center, Google Analytics, newsletter e um blog em WordPress separado da aplicação.
  • Infraestrutura na AWS: containers Docker em EC2 com deploy por CodeDeploy, uploads no S3 atrás do CloudFront, miniaturas geradas por Lambda e uma fila assíncrona com supervisor e cron para tarefas em segundo plano.

Destaque: Busca FULLTEXT própria · 3 gateways de pagamento · deploy na AWS com CodeDeploy

Tecnologias e papel de cada uma

PHP
PHP 8.2 com um framework MVC próprio, roteamento por controller e método, formulários declarativos e camada de dados ActiveModel sobre MariaDB.
MariaDB
Banco do catálogo e dos pedidos, com tabela InnoDB dedicada para a busca FULLTEXT.
Ionic e Angular
App mobile em Ionic 6 e Angular 14, com rotas por página, interceptors de autenticação e armazenamento local.
Capacitor
Empacota o app como Android e iOS e dá acesso à câmera, às notificações push e ao armazenamento de arquivos.
AWS
EC2 e CodeDeploy para o deploy, S3 e CloudFront para as mídias, Lambda para as miniaturas.
Docker
Container do servidor web com nginx e PHP-FPM e um container de cron, iguais no ambiente local e em produção.