<?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: Carlos Victor dos Santos Nascimento</title>
    <description>The latest articles on DEV Community by Carlos Victor dos Santos Nascimento (@dantewolfy).</description>
    <link>https://dev.to/dantewolfy</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1851351%2Fd008c0d1-4b2c-4700-8d65-ce163e43174a.jpg</url>
      <title>DEV Community: Carlos Victor dos Santos Nascimento</title>
      <link>https://dev.to/dantewolfy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dantewolfy"/>
    <language>en</language>
    <item>
      <title>Como uma planilha bagunçada virou o Nero: aprendendo PHP ao resolver um problema de verdade</title>
      <dc:creator>Carlos Victor dos Santos Nascimento</dc:creator>
      <pubDate>Sat, 08 Aug 2026 00:16:50 +0000</pubDate>
      <link>https://dev.to/dantewolfy/como-uma-planilha-baguncada-virou-o-nero-aprendendo-php-ao-resolver-um-problema-de-verdade-16g9</link>
      <guid>https://dev.to/dantewolfy/como-uma-planilha-baguncada-virou-o-nero-aprendendo-php-ao-resolver-um-problema-de-verdade-16g9</guid>
      <description>&lt;h2&gt;
  
  
  O problema não era meu
&lt;/h2&gt;

&lt;p&gt;Minha esposa organiza as notas e os certificados dos cursos livres em uma planilha. Funciona, mas é aquele tipo de "funciona" que exige lembrar em qual aba está cada coisa, recalcular médias manualmente sempre que sai uma nota nova e vasculhar uma pasta cheia de PDFs quando alguém pede um certificado.&lt;/p&gt;

&lt;p&gt;Não era algo quebrado o suficiente para virar prioridade. Era apenas um atrito pequeno e constante.&lt;/p&gt;

&lt;p&gt;Até que, em um belo dia, ela lançou um: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Poxa, queria que fosse mais fácil organizar tudo isso.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;sutileza nunca foi o forte da minha digníssima e após isso eu fiquei com uma pulga atrás da minha orelha:&lt;/p&gt;

&lt;p&gt;Eu tinha três opções.&lt;/p&gt;

&lt;p&gt;A primeira era ajustar a planilha dela no Excel, organizando as fórmulas para que tudo fosse calculado automaticamente. Funcional, porém sem graça.&lt;/p&gt;

&lt;p&gt;A segunda era procurar uma solução pronta. Talvez fosse a melhor opção, considerando que provavelmente existem várias ferramentas por aí que fazem algo parecido.&lt;/p&gt;

&lt;p&gt;A terceira, e talvez a pior de todas, pensando de forma puramente lógica,  era criar um aplicativo do zero, exatamente do jeito que ela queria. Seria a opção mais difícil e demorada.&lt;/p&gt;

&lt;p&gt;Adivinha qual eu escolhi? Kkk.&lt;/p&gt;

&lt;p&gt;Eu já queria aprender PHP na prática, sem framework, e agora tinha uma ótima desculpa. Foi então que percebi que aquele era o problema certo para isso.&lt;/p&gt;

&lt;p&gt;Eu não precisava inventar um projeto de brinquedo. Bastava resolver algo que já incomodava uma pessoa que eu conhecia bem.&lt;/p&gt;

&lt;p&gt;Foi assim que nasceu o Nero. Estou assistindo a Black Clover e achei o nome apropriado. Podem me julgar.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o Nero faz
&lt;/h2&gt;

&lt;p&gt;Nada revolucionário. Ele faz o básico:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6nkb3zqbhktdcwyfmsws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6nkb3zqbhktdcwyfmsws.png" alt="Interface inicial" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cadastra o curso, incluindo instituição, nome, quantidade de períodos e período atual. Os períodos são gerados automaticamente, sem que o usuário precise criar um por um.&lt;/li&gt;
&lt;li&gt;Cada período possui disciplinas, e cada disciplina possui avaliações.&lt;/li&gt;
&lt;li&gt;Calcula quanto o aluno precisa tirar nas avaliações restantes para ser aprovado, considerando as notas que já obteve.&lt;/li&gt;
&lt;li&gt;Permite cadastrar cursos livres e atividades extracurriculares, com upload do certificado em PDF, resolvendo exatamente uma das dores da planilha: não precisar mais vasculhar pastas em busca de arquivos.&lt;/li&gt;
&lt;li&gt;Exibe um dashboard com média geral, disciplinas pendentes e próximas avaliações.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A conta de "quanto falta" é a parte de que mais me orgulho, porque, no fundo, é uma regra de três disfarçada de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;calcularRestante&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$disciplina&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nv"&gt;$usaPeso&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nv"&gt;$notaMinima&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nv"&gt;$somaNotaPeso&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nv"&gt;$somaPeso&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$quantidadeFeitas&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ... (versão com peso omitida)&lt;/span&gt;

    &lt;span class="nv"&gt;$qtdPrevista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$disciplina&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'qtd_avaliacoes_previstas'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$qtdPrevista&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// ainda não configurado&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nv"&gt;$restantes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$qtdPrevista&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;$quantidadeFeitas&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$restantes&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$restantes&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// as avaliações já acabaram&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nv"&gt;$necessaria&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;$notaMinima&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$qtdPrevista&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;$somaNotaPeso&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;$restantes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$necessaria&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$restantes&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É simples: pega a média mínima, multiplica pela quantidade total de avaliações, subtrai o que já foi somado e divide pela quantidade de avaliações restantes.&lt;/p&gt;

&lt;p&gt;O primeiro rascunho dessa função, feito sem pensar muito, misturava esse cálculo com uma simulação hipotética de "e se eu tirasse a nota X?", sem qualquer vínculo com as avaliações que realmente faltavam.&lt;/p&gt;

&lt;p&gt;O resultado ficou confuso.&lt;/p&gt;

&lt;p&gt;Precisei voltar para o mundo das ideais até que a lógica correspondesse à pergunta que a pessoa realmente faz:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quanto eu preciso tirar para passar?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O perrengue técnico
&lt;/h2&gt;

&lt;p&gt;Esse tipo de problema técnico não é exatamente novidade para mim. Mesmo assim, por alguma razão, minha mente demorou um pouco para identificar a causa.&lt;/p&gt;

&lt;h3&gt;
  
  
  O banco "sumiu" — spoiler: era IPv6
&lt;/h3&gt;

&lt;p&gt;Primeiro deploy, primeira tentativa de login:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQLSTATE[08006] connection to server at "db.xxxxx.supabase.co"
(2600:1f11:...) port 5432 failed: Network is unreachable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O host de conexão direta do Supabase resolvia apenas para IPv6.&lt;/p&gt;

&lt;p&gt;Quando o ambiente em que a aplicação está rodando não possui saída IPv6, algo comum em containers e em vários provedores, a conexão simplesmente não acontece, mesmo que o usuário e a senha estejam corretos.&lt;/p&gt;

&lt;p&gt;Isso causava um erro bastante curioso: eu conseguia fazer login, mas logo em seguida recebia uma tela branca de erro.&lt;/p&gt;

&lt;p&gt;A solução foi trocar a conexão direta pelo connection pooler, o Supavisor, que é compatível com IPv4:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# antes: conexão direta, apenas IPv6&lt;/span&gt;
&lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db.xxxxxxxxxxxxxxxx.supabase.co&lt;/span&gt;

&lt;span class="c1"&gt;# depois: pooler, compatível com IPv4&lt;/span&gt;
&lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-0-&amp;lt;região&amp;gt;.pooler.supabase.com&lt;/span&gt;
&lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6543&lt;/span&gt;   &lt;span class="c1"&gt;# transaction mode, ou 5432 para session mode&lt;/span&gt;
&lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres.&amp;lt;project-ref&amp;gt;&lt;/span&gt;   &lt;span class="c1"&gt;# repare no sufixo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outro detalhe que me pegou: no pooler, o usuário precisa incluir o identificador do projeto.&lt;/p&gt;

&lt;p&gt;Apenas trocar o host não foi suficiente. A autenticação começou a falhar de uma maneira completamente diferente, até que percebi a ausência desse sufixo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onde o Nero está agora
&lt;/h2&gt;

&lt;p&gt;Hoje, o Nero tem um único usuário real utilizando o sistema no dia a dia: minha esposa.&lt;/p&gt;

&lt;p&gt;São as notas dela, os certificados dela e o histórico dela.&lt;/p&gt;

&lt;p&gt;Pode parecer pouco, mas é exatamente por isso que o projeto tem mais cara de produto do que de exercício. Cada decisão de experiência do usuário nasce de uma reclamação real:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Isso ficou estranho.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Não é assim que eu penso essa conta.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As decisões não vêm apenas de suposições minhas.&lt;/p&gt;

&lt;p&gt;O projeto começou como uma desculpa para aprender PHP sem trocar de tecnologia no meio do caminho. Ele continua sendo isso.&lt;/p&gt;

&lt;p&gt;Mas agora também é uma ferramenta que resolve um problema de verdade para uma pessoa de verdade.&lt;/p&gt;

&lt;p&gt;No fim das contas, isso me ensinou muito mais sobre construir software do que qualquer tutorial teria ensinado sozinho.&lt;/p&gt;




&lt;p&gt;*Stack: PHP puro, sem framework; PostgreSQL via Supabase; deploy no Render.&lt;/p&gt;

</description>
      <category>php</category>
      <category>postgres</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Como uma dificuldade pessoal virou um projeto para aprender APIs</title>
      <dc:creator>Carlos Victor dos Santos Nascimento</dc:creator>
      <pubDate>Tue, 30 Jun 2026 15:30:57 +0000</pubDate>
      <link>https://dev.to/dantewolfy/como-uma-dificuldade-pessoal-virou-um-projeto-para-aprender-apis-178k</link>
      <guid>https://dev.to/dantewolfy/como-uma-dificuldade-pessoal-virou-um-projeto-para-aprender-apis-178k</guid>
      <description>&lt;p&gt;Recentemente percebi uma coisa meio curiosa: eu simplesmente tinha um problema ao consumir o conteúdo do &lt;strong&gt;4noobs&lt;/strong&gt; do jeito que ele é organizado hoje. &lt;/p&gt;

&lt;p&gt;Não porque a organização seja ruim — muito pelo contrário. Acho que a comunidade fez um trabalho incrível organizando o projeto. O ponto é que eu percebi que meu jeito de estudar é diferente: tenho muito mais facilidade quando consigo seguir listas, trilhas ou um caminho de aprendizado mais visual.&lt;/p&gt;

&lt;p&gt;Foi aí que pensei:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Se esse problema existe para mim, talvez exista para mais alguém. E se, de quebra, eu aproveitar isso para praticar consumo de APIs?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Foi assim que nasceu a &lt;strong&gt;Central 4noobs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A proposta era simples: consumir todo o conteúdo disponível no GitHub do &lt;strong&gt;4noobs&lt;/strong&gt; e apresentá-lo de uma forma que fizesse mais sentido para o meu jeito de estudar, organizando os materiais em listas e trilhas de aprendizado.&lt;/p&gt;

&lt;p&gt;A ideia nunca foi substituir a organização do projeto original, mas oferecer uma forma diferente de navegar pelo mesmo conteúdo.&lt;/p&gt;

&lt;p&gt;Essa era a ideia inicial... mas, como acontece com praticamente todo projeto pessoal, ela foi crescendo conforme o desenvolvimento avançava.&lt;/p&gt;

&lt;p&gt;Mas ainda é uma &lt;strong&gt;alternativa&lt;/strong&gt;. Tenham em mente isso. :)&lt;/p&gt;




&lt;h2&gt;
  
  
  O que aprendi durante o projeto
&lt;/h2&gt;

&lt;p&gt;O projeto foi desenvolvido utilizando &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;Drizzle ORM&lt;/strong&gt; e &lt;strong&gt;Supabase&lt;/strong&gt; como banco de dados (e hoje já não tenho tanta certeza se essa foi a escolha mais inteligente 😅).&lt;/p&gt;

&lt;p&gt;O maior aprendizado foi entender melhor como funciona o consumo de APIs.&lt;/p&gt;

&lt;p&gt;Antes eu entendia o conceito na teoria (com o próprio &lt;strong&gt;4noobs&lt;/strong&gt;, inclusive), mas foi durante o desenvolvimento da Central que realmente comecei a compreender como tudo se conecta.&lt;/p&gt;

&lt;p&gt;Depois desse projeto, passei a enxergar melhor como uma API é estruturada e, principalmente, como consumir seus dados sem simplesmente despejar tudo na tela.&lt;/p&gt;

&lt;p&gt;Outra parte interessante foi aprender a tratar os dados recebidos.&lt;/p&gt;

&lt;p&gt;Uma coisa é receber uma resposta gigantesca da API.&lt;/p&gt;

&lt;p&gt;Outra completamente diferente é filtrar apenas as informações que realmente importam e reorganizar tudo da forma que faz sentido para a aplicação.&lt;/p&gt;

&lt;p&gt;Na teoria parecia simples. Afinal, não era a primeira vez que eu trabalhava com APIs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Me respeita... eu já fiz uma Pokédex. 😅&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mas seguir um tutorial é bem diferente de construir algo utilizando dados reais.&lt;/p&gt;

&lt;p&gt;Então, com uma ajudinha do ChatGPT, comecei os trabalhos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Foi quando a ideia inicial começou a crescer
&lt;/h2&gt;

&lt;p&gt;No começo o plano era extremamente simples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consumir a API;&lt;/li&gt;
&lt;li&gt;Mostrar os cursos;&lt;/li&gt;
&lt;li&gt;Pronto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Só que, conforme o projeto foi evoluindo, comecei a enxergar várias possibilidades interessantes.&lt;/p&gt;

&lt;p&gt;A principal delas foram as &lt;strong&gt;trilhas de aprendizado&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Minha primeira ideia era criar um roadmap visual para cada trilha.&lt;/p&gt;

&lt;p&gt;Parecia incrível... até chegar a hora de implementar.&lt;/p&gt;

&lt;p&gt;Naquele momento percebi que aquela solução estava um pouco acima da minha capacidade técnica atual — pelo menos da forma como eu havia imaginado.&lt;/p&gt;

&lt;p&gt;Em vez de insistir até travar completamente o projeto, resolvi seguir outro caminho.&lt;/p&gt;

&lt;p&gt;Como gosto de brincar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Se eu não consigo derrubar a parede agora, vou cavar por baixo."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Foi daí que surgiu o filtro por trilhas.&lt;/p&gt;

&lt;p&gt;Não era exatamente o roadmap que eu imaginava inicialmente, mas já permitia organizar o conteúdo de uma forma que fazia sentido para mim — e talvez para outras pessoas que também prefiram estudar seguindo um caminho mais guiado.&lt;/p&gt;

&lt;p&gt;E eu realmente não queria cair naquele ciclo de:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Ainda não está perfeito... então vou deixar o projeto parado até um dia terminar."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Então tomei uma decisão:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"É melhor feito do que perfeito."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Foi isso que me permitiu continuar evoluindo o projeto.&lt;/p&gt;

&lt;p&gt;E o melhor: a ideia do roadmap continua viva. Ela só precisa de um pouco mais de prática antes de sair do papel, de forma viável. já consegui uma versão inicial, porém ela ainda precisa de um carinho.&lt;/p&gt;




&lt;h2&gt;
  
  
  Uma ideia para o futuro
&lt;/h2&gt;

&lt;p&gt;Uma funcionalidade que ainda quero implementar é um sistema de usuários.&lt;/p&gt;

&lt;p&gt;A ideia seria permitir que qualquer pessoa pudesse criar suas próprias trilhas de estudo e compartilhá-las com a comunidade.&lt;/p&gt;

&lt;p&gt;Acho que isso seria especialmente útil para quem está começando na área, já que pessoas diferentes possuem experiências diferentes e podem montar caminhos interessantes para quem vem depois.&lt;/p&gt;

&lt;p&gt;Um sonho seria escalar isso para uma "escola" escola he4rts ou hearts edu, soa incrível na minha cabeça, eu conversei com algumas pessoas da comunidade e vi que a reformulação está nos planos da he4rts, então provavelmente eles devem ter um plano já estruturado para esse crescimento, contudo gostaria de deixar meus tostões de contribuição aqui também :D&lt;/p&gt;

&lt;p&gt;No fim, seria uma forma de transformar a Central em um espaço colaborativo, onde diferentes formas de aprender pudessem coexistir.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trabalhando com IA durante o desenvolvimento
&lt;/h2&gt;

&lt;p&gt;Outra experiência interessante foi utilizar o ChatGPT durante o desenvolvimento.&lt;/p&gt;

&lt;p&gt;Na maior parte do tempo ele acelerou bastante o trabalho.&lt;/p&gt;

&lt;p&gt;Mas também aconteceram situações em que ele tentou tomar decisões arquiteturais ou de usabilidade que não estavam alinhadas com aquilo que eu imaginava para o projeto ou tentou implementar soluções que eu ainda não entendi muito bem, portanto foi exercício de humildade bem grande para o meu conhecimento kk.&lt;/p&gt;

&lt;p&gt;Isso acabou reforçando uma coisa importante para mim:&lt;/p&gt;

&lt;p&gt;Ferramentas de IA ajudam muito, mas continuam sendo ferramentas. Mais importante que bater com o martelo no prego é saber onde aquele prego tem que estar pra funcionar fixar melhor.&lt;/p&gt;

&lt;p&gt;Ainda é responsabilidade do desenvolvedor entender o projeto, avaliar as sugestões e decidir quais soluções realmente fazem sentido para o longo prazo.&lt;/p&gt;

&lt;p&gt;Para mim, esse foi um aprendizado tão importante quanto qualquer conhecimento técnico adquirido durante o desenvolvimento.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que ainda precisa melhorar
&lt;/h2&gt;

&lt;p&gt;Apesar de estar funcionando, esse projeto ainda precisa de bastante carinho.&lt;/p&gt;

&lt;p&gt;Hoje eu faria várias coisas de forma diferente.&lt;/p&gt;

&lt;p&gt;Alguns pontos que quero melhorar são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modelagem e organização dos dados;&lt;/li&gt;
&lt;li&gt;Arquitetura para autenticação e controle de acesso;&lt;/li&gt;
&lt;li&gt;UX/UI (que definitivamente não é meu ponto mais forte);&lt;/li&gt;
&lt;li&gt;Estrutura para facilitar futuras funcionalidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No fim das contas, esse projeto serviu muito mais para aprender do que para entregar uma aplicação perfeita.&lt;/p&gt;

&lt;p&gt;E acho que esse é justamente o papel de um projeto pessoal.&lt;/p&gt;




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

&lt;p&gt;Este não é um artigo técnico explicando cada decisão de implementação.&lt;/p&gt;

&lt;p&gt;A ideia foi compartilhar o processo por trás do projeto: como uma preferência pessoal acabou se transformando em uma oportunidade para estudar APIs, praticar arquitetura, lidar com dados reais e aprender muito durante o caminho.&lt;/p&gt;

&lt;p&gt;A Central 4noobs nunca teve a intenção de reinventar o projeto original.&lt;/p&gt;

&lt;p&gt;Muito pelo contrário. Ela nasceu porque existe um conteúdo excelente disponível e porque eu queria experimentar uma forma diferente de consumi-lo, enquanto aprendia mais sobre desenvolvimento.&lt;/p&gt;

&lt;p&gt;Ainda existe muito espaço para evoluir a Central.&lt;/p&gt;

&lt;p&gt;Mas, olhando para trás, acho que ela já cumpriu seu principal objetivo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me ensinar muito mais do que eu imaginava quando comecei.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como diz uma frase que gostei bastante e que ouvi do Guto da he4rts no ultimo evento que participei:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Não há ninguém grande o bastante que não possa aprender e ninguém pequeno o bastante que não possa ensinar."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;_PS: Eu Particularmente acho que me encaixo no segundo grupo :D&lt;/p&gt;

&lt;p&gt;Também gostaria de deixar um agradecimento especial à &lt;strong&gt;Cherry&lt;/strong&gt; e ao &lt;strong&gt;Daniel&lt;/strong&gt;, da &lt;strong&gt;he4rts&lt;/strong&gt;, que foram os responsáveis por me incentivar a escrever este microartigo.&lt;/p&gt;

&lt;p&gt;E, principalmente, ao projeto &lt;strong&gt;4noobs&lt;/strong&gt; e a toda a comunidade que mantém esse material vivo. A Central só existe porque existe um conteúdo tão rico para consumir. Boa parte do que aprendi como desenvolvedor começou justamente ali.&lt;/p&gt;

&lt;p&gt;Se você também já transformou uma dificuldade ou uma preferência pessoal em um projeto, compartilha aí. Sempre é interessante conhecer como essas ideias nasceram.&lt;/p&gt;

&lt;p&gt;E, se quiser contribuir com o &lt;strong&gt;4noobs&lt;/strong&gt; ou com a &lt;strong&gt;Central 4noobs&lt;/strong&gt;, cola na comunidade. Tem muita coisa legal acontecendo por lá. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
