<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: João Ramajo</title>
    <description>The latest articles on DEV Community by João Ramajo (@joao-ramajo).</description>
    <link>https://dev.to/joao-ramajo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3340582%2F70cde6ff-67d6-465b-aa15-f055b4f6efa6.jpg</url>
      <title>DEV Community: João Ramajo</title>
      <link>https://dev.to/joao-ramajo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joao-ramajo"/>
    <language>en</language>
    <item>
      <title>Do desenvolvimento local ao deploy: o que aprendi criando o Kado</title>
      <dc:creator>João Ramajo</dc:creator>
      <pubDate>Sat, 30 May 2026 08:00:30 +0000</pubDate>
      <link>https://dev.to/joao-ramajo/do-desenvolvimento-local-ao-deploy-o-que-aprendi-criando-o-kado-ipc</link>
      <guid>https://dev.to/joao-ramajo/do-desenvolvimento-local-ao-deploy-o-que-aprendi-criando-o-kado-ipc</guid>
      <description>&lt;p&gt;Nos últimos meses, tenho desenvolvido, para uso pessoal, uma plataforma para gerenciar meu dinheiro de uma maneira mais consciente. Não gosto de planilhas e também queria estudar algo novo. Essa união de fatores me levou inicialmente ao Filament PHP e, depois, a uma arquitetura com frontend e backend independentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes de tudo
&lt;/h2&gt;

&lt;p&gt;Kado é um projeto de gestão de finanças pessoais. Com certeza, existem poucos por aí e nem deve existir um subreddit sobre isso. Mas, enfim, minha intenção nunca foi criar um produto, e sim resolver dois problemas: controle de gastos e falta de ideias para projetos de estudo. Então, comecei a desenvolver este projeto com o objetivo de estudar conceitos mais complexos, como: proxy reverso, integração entre front e back, pipelines de automação de deploy, configuração de Nginx, certificados SSL, projetos em produção e alguns outros conceitos nos quais não pretendo me aprofundar muito.&lt;/p&gt;

&lt;p&gt;No fim, cheguei a um MVP que atende à minha necessidade de maneira satisfatória. Consigo registrar o que ganho e o que gasto, com categorização e controle de fontes de entrada e saída, o que me ajuda a realmente ter um panorama de para onde meu dinheiro está indo.&lt;/p&gt;

&lt;p&gt;Meu intuito aqui não é explicar a fundo os conceitos, deixo isso para outro momento, mas sim compartilhar um pouco do que fiz até aqui.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o Filament tem a ver?
&lt;/h2&gt;

&lt;p&gt;Minha ideia inicial era apenas desenvolver algo localmente em cima da biblioteca de painéis administrativos Filament, e assim segui por um tempo. Estudei a documentação, comecei a criar resources e as telas foram tomando forma, com tabelas de despesas e métricas de entrada e saída de dinheiro. Estava tudo indo bem, mas chegou um momento em que senti que não era o suficiente.&lt;/p&gt;

&lt;p&gt;Talvez por limitação de não conhecer bem a ferramenta, certas coisas acabaram me limitando: tipos de interação que eu queria fazer, designs diferentes, entre outras coisas.&lt;/p&gt;

&lt;p&gt;Esses foram fatores que me levaram a quebrar o projeto em duas frentes: o backend como uma API Laravel e o frontend como uma aplicação React + TypeScript com Vite e MUI (Material UI), que também veio como um laboratório de estudos para o frontend, já que eu havia acabado de entrar em um projeto que utiliza essa biblioteca de componentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu aprendi
&lt;/h2&gt;

&lt;p&gt;Trabalhando neste projeto tive a oportunidade de entender melhor ferramentas e conceitos usados no ciclo de vida de projetos reais, como:&lt;/p&gt;

&lt;h3&gt;
  
  
  Proxy Reverso
&lt;/h3&gt;

&lt;p&gt;Tenho uma VPS que rodava outro projeto de maneira simples: Nginx e PHP-FPM rodando sem containers na porta 80, e uma linda história feliz, até o momento em que eu quis subir outro projeto nessa mesma VPS e não tive ideia de como fazer.&lt;/p&gt;

&lt;p&gt;Para resolver esse problema, optei por utilizar um servidor Nginx instalado direto na VPS como servidor principal, configurado para apontar para diferentes projetos rodando dentro de containers Docker, cada um com seu próprio Nginx e subdomínio configurado para acessá-los.&lt;/p&gt;

&lt;p&gt;Assim, resolvo o problema de ter múltiplos projetos em uma mesma VPS de maneira simples.&lt;/p&gt;

&lt;p&gt;Mas fico pensando se não existia alguma maneira mais simples, foi um ponto excelente para estudar sobre Docker e servidores mas foi uma dor de cabeça entender como tudo isso deveria funcionar e me rendeu com certeza alguns dias testando maneiras diferentes de fazer isso funcionar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Domínios e SSL
&lt;/h3&gt;

&lt;p&gt;Fica feio ter um projeto rodando e, na hora de mandar para um amigo, a URL ser o IP do servidor, além de, claro, não ser nada seguro.&lt;/p&gt;

&lt;p&gt;Com isso, comecei a ver como eu poderia configurar um domínio e subdomínios para utilizar nos meus projetos. Usando a própria plataforma de hospedagem, peguei um domínio e comecei a configurar o DNS para permitir o uso de subdomínios.&lt;/p&gt;

&lt;p&gt;Com isso, tendo um único domínio eu posso ter vários projetos em seus subdomínios, o que se encaixa bem com a estratégia que utilizei para configurar o proxy reverso.&lt;/p&gt;

&lt;p&gt;Mas isso não resolve um problema: segurança mínima. Requisições HTTP geralmente podem servir em casos simples, para quem não quer muito trabalho, mas configurar um certificado SSL para permitir tráfego em HTTPS hoje em dia está bem simples e é uma camada a mais de segurança que você adiciona ao seu projeto.&lt;/p&gt;

&lt;p&gt;Basta utilizar o Certbot para gerar os certificados e, junto da configuração correta do Nginx, podemos ter isso funcionando bem rápido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy e CI/CD
&lt;/h3&gt;

&lt;p&gt;Rodar o projeto localmente é fácil: basta dar um &lt;code&gt;php artisan serve&lt;/code&gt; ou &lt;code&gt;npm run dev&lt;/code&gt;, mas, ao fazer o deploy de um projeto real, a história muda.&lt;/p&gt;

&lt;p&gt;Você precisa se preocupar com configuração do ambiente, acessos e permissões de pastas. Muita atenção aqui, porque muitos erros que você pode encontrar acontecem justamente nesse ponto.&lt;/p&gt;

&lt;p&gt;Tive vários problemas relacionados à forma como o deploy automatizado rodava alguns comandos, o que causava erros de permissão nas pastas de logs ou cache. Esse é um problema que encontro com certa frequência ao tentar rodar projetos Laravel em containers.&lt;/p&gt;

&lt;p&gt;Além disso, ninguém gosta de ficar acessando o SSH do servidor a cada alteração que fazemos no projeto, né? Aí que entra o GitHub Actions.&lt;/p&gt;

&lt;p&gt;Com o GitHub Actions, conseguimos configurar uma pipeline de deploy dentro de um evento no GitHub, como a criação de uma nova release. Assim, podemos definir as etapas de acesso ao servidor, atualização do código, execução das migrations, entre outras etapas necessárias.&lt;/p&gt;

&lt;p&gt;Foi assim que configurei o deploy da API do Kado, já que a Vercel disponibiliza isso de maneira simplificada para projetos em React, sendo necessário apenas configurar o projeto dentro da própria Vercel uma única vez. Após isso, ela irá realizar o deploy a cada push que você fizer na &lt;code&gt;main&lt;/code&gt; ou na branch especificada.&lt;/p&gt;

&lt;p&gt;Também podemos configurar etapas de segurança para PRs, como execução de testes, linters ou alguma outra ação. Optei por não configurar, pois somente eu desenvolvo atualmente no código do Kado e não há necessidade desse nível de complexidade para algo simples, que só eu trabalho ou utilizo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrando Frontend com Backend
&lt;/h2&gt;

&lt;p&gt;Em projetos monolíticos, muitas vezes não precisamos lidar com questões como CORS, autenticação via tokens, entre outros problemas que podemos encontrar durante o desenvolvimento, mas isso muda quando você separa o front do back.&lt;/p&gt;

&lt;p&gt;Neste projeto a separação foi proposital. Para mim, fazia muito mais sentido trabalhar em cima de um projeto em React com deploy feito na Vercel, pela praticidade de visualizar as alterações e pela simplicidade de publicá-las. Essa foi uma das maiores vantagens que isso pode trazer para um projeto, mas nem tudo são vantagens.&lt;/p&gt;

&lt;p&gt;Quando se tem uma arquitetura com backend e frontend separados, devemos ter noção de que um contrato bem definido é o caminho para a felicidade. Uma pena que eu não entendia isso muito bem até sentir na pele, porque até mesmo a menor alteração pode causar grandes mudanças na base de código e aumentar o espaço para novos bugs ao longo do tempo.&lt;/p&gt;

&lt;p&gt;Com isso, posso garantir uma coisa: não existe aliado maior do desenvolvedor do que testes automatizados e linters.&lt;/p&gt;

&lt;p&gt;Para o frontend, não criei efetivamente testes automatizados por questão de praticidade, mas configurar o Biome (linter) para padronização de estilo de código e sugestões de refatoração foi essencial para garantir qualidade no código e, assim, evitar possíveis problemas que encontrei.&lt;/p&gt;

&lt;p&gt;No backend, fui mais a fundo: montei testes automatizados utilizando o Pest, análise estática de código com o PHPStan, ajustes de estilo com o Laravel Pint e refatoração com o Rector. E de uma coisa tenho certeza, você com certeza deveria conhecer essas bibliotecas se trabalha em projetos PHP.&lt;/p&gt;

&lt;p&gt;Qualidade de código não resolve todos os problemas, mas aumenta bastante as chances de você encerrar a sexta-feira com mais tranquilidade, sem medo de ser acionado no fim de semana porque esqueceu de retirar um &lt;code&gt;dd()&lt;/code&gt; em produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu faria diferente hoje
&lt;/h2&gt;

&lt;p&gt;Olhando agora, vejo que tenho um projeto bem legal como laboratório de estudos, mas existem, sim, coisas que eu faria diferente se pudesse.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planejamento antes do código: mesmo sendo um projeto pessoal, gostaria de ter planejado melhor e montado os fluxos de maneira mais estruturada no começo. Isso teria evitado muito retrabalho e dor de cabeça.&lt;/li&gt;
&lt;li&gt;Linters e testes desde o começo: no começo do projeto, eu fui bem no estilo "moda da casa", então acabei fazendo bastante coisa que tive que reescrever para passar nas ferramentas de qualidade, e testes nem se fala.&lt;/li&gt;
&lt;li&gt;Publicar sobre o processo de desenvolvimento: se eu pudesse, teria dado um pouco mais de atenção a documentar melhor (seja no LinkedIn ou no Dev.to) o processo de desenvolvimento deste projeto. Expressar ideias e conhecimento é a base de um bom profissional em meio a tantas incertezas na área.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas não é porque eu faria diferente hoje que não gostei do resultado atual. Ter um projeto feito de ponta a ponta é realmente algo muito bom de se ter, é uma prova de que você é capaz de realizar coisas que antes nem fazia ideia de por onde começar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;No fim, o Kado pode ser só mais um aplicativo de gestão financeira entre os muitos que existem, mas, para mim, ele é a prova de que eu evoluí como desenvolvedor no último ano, tanto em código quanto em visão de produto.&lt;/p&gt;

&lt;p&gt;Fico feliz com a situação atual dele, mas claro que não vou parar de trabalhar nele. Sempre há o que inventar, e agora, pelo menos eu sei por onde começar.&lt;/p&gt;

&lt;p&gt;Link do projeto: &lt;a href="https://kado-tan.vercel.app/inicio" rel="noopener noreferrer"&gt;https://kado-tan.vercel.app/inicio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>braziliandevs</category>
      <category>laravel</category>
      <category>php</category>
    </item>
  </channel>
</rss>
