{"id":107,"date":"2026-09-05T09:00:00","date_gmt":"2026-09-05T12:00:00","guid":{"rendered":"https:\/\/dcoder.io\/blog\/um-codigo-cinco-cidades-marketplace\/"},"modified":"2026-09-20T20:44:20","modified_gmt":"2026-09-20T23:44:20","slug":"um-codigo-cinco-cidades-marketplace","status":"publish","type":"post","link":"https:\/\/dcoder.io\/blog\/um-codigo-cinco-cidades-marketplace\/","title":{"rendered":"Um c\u00f3digo, cinco cidades: o que muda quando um sistema vira produto"},"content":{"rendered":"<p>Existe um marketplace de bairro rodando em cinco cidades brasileiras: Mau\u00e1, Capanema, Vinhedo, Itariri e Palmas. Todas rodam <strong>o mesmo commit<\/strong>. O que muda de uma para outra s\u00e3o vari\u00e1veis de ambiente e o que o administrador salva no painel.<\/p>\n<p>N\u00e3o come\u00e7ou assim. Come\u00e7ou como o marketplace de uma cidade s\u00f3. A vers\u00e3o que virou base foi extra\u00edda em 6 de agosto de 2026, e de l\u00e1 at\u00e9 15 de setembro a plataforma recebeu <strong>104 commits<\/strong>.<\/p>\n<h2>A regra que fez a diferen\u00e7a<\/h2>\n<p>Uma s\u00f3, e ela cabe em sete palavras: o c\u00f3digo n\u00e3o conhece nenhuma cidade. Nome, estado, dom\u00ednio, contatos, logotipo e textos legais saem todos da configura\u00e7\u00e3o. N\u00e3o existe um <code>if<\/code> de cidade em lugar nenhum, e quando aparece a vontade de escrever um, o que est\u00e1 faltando \u00e9 um campo de configura\u00e7\u00e3o.<\/p>\n<p>A segunda regra \u00e9 de sentido. Toda melhoria nasce na plataforma e depois \u00e9 levada ao deploy mais antigo, nunca o contr\u00e1rio. Sem isso, em tr\u00eas meses voc\u00ea tem cinco sistemas parecidos e nenhum produto.<\/p>\n<h2>O dinheiro n\u00e3o passa por aqui<\/h2>\n<p>A decis\u00e3o mais importante da arquitetura n\u00e3o foi t\u00e9cnica. Cada venda cai <strong>direto na conta do vendedor<\/strong>, por uma conex\u00e3o que ele mesmo autoriza. N\u00e3o existe comiss\u00e3o, taxa, reten\u00e7\u00e3o, repasse nem saque. Sem essa conex\u00e3o o vendedor simplesmente n\u00e3o vende, porque a cobran\u00e7a \u00e9 recusada.<\/p>\n<p>Isso tira da plataforma a obriga\u00e7\u00e3o de guardar dinheiro de terceiro, com tudo o que vem junto. Tem um pre\u00e7o vis\u00edvel: o carrinho aceita uma loja por vez, j\u00e1 que um pagamento n\u00e3o pode cair em duas contas. Preferimos explicar essa limita\u00e7\u00e3o a administrar repasse.<\/p>\n<h2>A d\u00edvida que a padroniza\u00e7\u00e3o cobra<\/h2>\n<p>Consolidar cinco sistemas num s\u00f3 revela as decis\u00f5es que nunca foram tomadas. O caso que me marcou: existiam <strong>seis defini\u00e7\u00f5es diferentes de &#8220;vendedor com pagamento conectado&#8221;<\/strong>, espalhadas pelo c\u00f3digo, e elas discordavam entre si. O mesmo vendedor podia aparecer apto numa tela e inapto na seguinte.<\/p>\n<p>Hoje h\u00e1 uma, num arquivo s\u00f3. Junto com ela sa\u00edram, de prop\u00f3sito, o c\u00e1lculo de taxa, o repasse autom\u00e1tico e o saque. Existiam pela metade e ningu\u00e9m usava.<\/p>\n<h2>O que eu diria para quem est\u00e1 no primeiro cliente<\/h2>\n<p>N\u00e3o construa para cinco cidades no dia um. Construa para uma, e mantenha a disciplina de n\u00e3o escrever o nome dela dentro do c\u00f3digo. \u00c9 uma regra barata no come\u00e7o e muito cara de aplicar depois que o segundo cliente j\u00e1 est\u00e1 no ar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O marketplace de uma cidade virou a base de cinco. A diferen\u00e7a entre um sistema e um produto est\u00e1 menos no c\u00f3digo que voc\u00ea escreve e mais no que voc\u00ea se recusa a escrever de novo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-107","post","type-post","status-publish","format-standard","hentry","category-sem-categoria"],"_links":{"self":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":1,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions"}],"predecessor-version":[{"id":117,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions\/117"}],"wp:attachment":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/media?parent=107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/categories?post=107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/tags?post=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}