<?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: Clebson</title>
    <description>The latest articles on DEV Community by Clebson (@whoisclebs).</description>
    <link>https://dev.to/whoisclebs</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%2F862456%2Fdcac75f3-8197-45ac-88c3-265daabf1b0c.png</url>
      <title>DEV Community: Clebson</title>
      <link>https://dev.to/whoisclebs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/whoisclebs"/>
    <language>en</language>
    <item>
      <title>#01 - Me reciclando como dev</title>
      <dc:creator>Clebson</dc:creator>
      <pubDate>Tue, 21 Oct 2025 02:55:31 +0000</pubDate>
      <link>https://dev.to/whoisclebs/01-me-reciclando-como-dev-3f8a</link>
      <guid>https://dev.to/whoisclebs/01-me-reciclando-como-dev-3f8a</guid>
      <description>&lt;p&gt;Com o avanço das LLMs, o desenvolvimento de software se tornou mais ágil e acessível. Essas ferramentas aceleram processos e ampliam possibilidades, mas, como certo sábio disse uma vez: “Com grandes poderes vêm grandes responsabilidades.”&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.amazonaws.com%2Fuploads%2Farticles%2Fp9tyvkkiurtztx2ch5ai.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fp9tyvkkiurtztx2ch5ai.jpg" alt="Tio ben" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sim, um Copilot ou um Claude da vida realmente otimizam o tempo, mas também reduzem aquele desafio intelectual que mantém o raciocínio técnico afiado.&lt;/p&gt;

&lt;p&gt;Então não me propus a deixar de utilizar i.a, mas sim, dar ao meu cerebro o devido desafio que ele merece. Esse é o início de uma série de posts documentando essa jornada.&lt;/p&gt;

&lt;p&gt;Comecei com o básico: alguns desafios no chess.com, desafios de xadrez no Duolingo e, claro, o bom e velho LeetCode(mas esse foi um dos ultimos passos na rotina), começar com pequenos desafios e transforma-los em pequenos hobbies tem me ajudado bastante, em nenhum momento eu fiz uma mudança brusca na minha rotina, tanto que só foquei no leetcode um tempo depois.&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.amazonaws.com%2Fuploads%2Farticles%2Fdd0upqakrru60rwpanbv.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.amazonaws.com%2Fuploads%2Farticles%2Fdd0upqakrru60rwpanbv.png" alt="chess.com" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E por mais que o foco tenha sido só depois, foi justamente o LeetCode(ou seu concorrente) que serviu de ponta pé inicial para perceber que eu precisava me reciclar. Em um sábado qualquer, entediado, vi um desafio no hackerrank, um site bem parecido com leetcode, era um do desafios bem simples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Dado um array de inteiros positivos, retorne quantos elementos são maiores que a média de todos os elementos anteriores.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Parece fácil, certo? Pois é, mas nesse sábado minha mente travou completamente.&lt;/p&gt;

&lt;p&gt;Uma semana depois de retomar o hábito de exercitar o raciocínio lógico, consegui resolver o mesmo problema em uns 10 minutos (ok, ainda meio enferrujado :P), para verem com os proprios olhos, essa foi a solução final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;countResponseTimeRegressions&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseTimes&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;cumulativeSum&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;previousAverage&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cumulativeSum&lt;/span&gt;  &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;previousAverage&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;cumulativeSum&lt;/span&gt;  &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;responseTimes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minha dica: encontrem uma forma de exercitar o cérebro, de preferência algo que gostem. E nos próximos posts, vou documentar como está evoluindo essa minha jornada e compartilhar as novas descobertas que forem surgindo.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>leetcode</category>
      <category>chess</category>
    </item>
    <item>
      <title>GitHub Actions: How to Deploy Your React Application with Vite to GitHub Pages</title>
      <dc:creator>Clebson</dc:creator>
      <pubDate>Tue, 11 Mar 2025 00:00:32 +0000</pubDate>
      <link>https://dev.to/whoisclebs/github-actions-how-to-deploy-your-react-application-with-vite-to-github-pages-2cb8</link>
      <guid>https://dev.to/whoisclebs/github-actions-how-to-deploy-your-react-application-with-vite-to-github-pages-2cb8</guid>
      <description>&lt;p&gt;Learn how to automatically deploy a React application created with Vite to GitHub Pages using GitHub Actions. This step-by-step guide covers the entire process, from configuration to publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A React application created with Vite.&lt;/li&gt;
&lt;li&gt;A repository hosted on GitHub.&lt;/li&gt;
&lt;li&gt;Basic familiarity with GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Configure GitHub Actions Workflow
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;code&gt;gh_pages.yml&lt;/code&gt; in the &lt;code&gt;.github/workflows&lt;/code&gt; directory and add the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Deploy React Vite App to GitHub Pages

on:
  push:
    branches:
      - main  # Branch that triggers deployment
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: true

defaults:
  run:
    shell: bash

jobs:
  build:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          submodules: true
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Build with Vite
        run: npm run build

      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v1

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-20.04
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Detailed Workflow Explanation:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;on:&lt;/strong&gt; Specifies the workflow triggers (push to the main branch or manual trigger).&lt;br&gt;
&lt;strong&gt;permissions:&lt;/strong&gt; Grants access to read content, write to Pages, and issue authentication tokens.&lt;br&gt;
&lt;strong&gt;concurrency:&lt;/strong&gt; Prevents simultaneous executions of the workflow.&lt;/p&gt;
&lt;h2&gt;
  
  
  Jobs:
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Job build:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Checkout repository:&lt;/strong&gt; Copies the repository contents to the virtual machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Node.js:&lt;/strong&gt; Installs Node.js version 20.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies:&lt;/strong&gt; Installs dependencies specified in package-lock.json using npm ci.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build with Vite:&lt;/strong&gt; Generates static files for the project using npm run build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Pages:&lt;/strong&gt; Configures GitHub Pages to accept deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload artifact:&lt;/strong&gt; Uploads the contents of the dist folder to GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Job deploy:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deploy to GitHub Pages:&lt;/strong&gt; Deploys the generated files to GitHub Pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Step 2: Adjusting the Build Script for Single Page Applications (SPA)
&lt;/h2&gt;

&lt;p&gt;Because applications created with React and Vite are SPAs, GitHub Pages struggles to handle internal routes. To overcome this, update the build script in your package.json file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "build": "tsc -b &amp;amp;&amp;amp; vite build &amp;amp;&amp;amp; cp dist/index.html dist/404.html"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tsc -b&lt;/code&gt;: Compiles the project if you are using TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vite build&lt;/code&gt;: Builds static files.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cp dist/index.html dist/404.html&lt;/code&gt;: Copies index.html to 404.html, ensuring GitHub Pages correctly redirects all internal routes in your SPA. There are numerous alternative ways to handle this, but this is the quickest and easiest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Enable GitHub Pages in Your Repository
&lt;/h2&gt;

&lt;p&gt;To enable GitHub Actions to deploy your site to GitHub Pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub repository.&lt;/li&gt;
&lt;li&gt;Navigate to Settings → Pages.&lt;/li&gt;
&lt;li&gt;Under Build and deployment, select GitHub Actions as the source.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Deploy
&lt;/h2&gt;

&lt;p&gt;Now, every time you push to the main branch, your site will automatically deploy to GitHub Pages. Access your site using the URL provided by GitHub Pages after deployment (e.g., &lt;code&gt;&amp;lt;your_username&amp;gt;.github.io&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Following these steps, you'll have your React application created with Vite hosted for free on GitHub Pages with full support for internal routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support My Work!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://whoisclebs.com/books" rel="noopener noreferrer"&gt;Check out these recommended books for developers&lt;/a&gt;. All links redirect to Amazon, where you can purchase the books.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Note: Amazon Affiliate Links. If you buy a book through these links, I receive a small commission, helping me maintain my contributions (articles, open-source code, etc.) and produce more quality content. Thank you!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
      <category>vite</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
