Kaylon Souza

SEO, Conteúdo e Manutenção do Site — Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Aplicar as melhorias validadas de uma revisão do site: Open Graph por página, sitemap via jekyll-sitemap (com Gemfile), página /projetos/, CTAs em posts/projetos e renomeação da imagem do post do livro.

Architecture: Site Jekyll estático com layouts por tipo de página (_layouts/) e includes compartilhadas (_includes/). Mudanças concentram-se em _config.yml, _includes/site-head.html, _includes/site-nav.html, layouts de posts/projetos e front matter de conteúdo. O sitemap passa a ser gerado pelo plugin jekyll-sitemap em vez de um arquivo manual.

Tech Stack: Jekyll 4.4 (Ruby 3.1), jekyll-sitemap via Bundler, ImageMagick (convert) para WebP. Sem framework de testes — verificação é por bundle exec jekyll build + inspeção do HTML gerado em _site/.

Global Constraints


Task 1: Gemfile, config e sitemap via plugin

Files:

Interfaces:

source "https://rubygems.org"

gem "jekyll", "~> 4.4"
gem "jekyll-sitemap"
gem "webrick"

Run: bundle install Expected: instala jekyll-sitemap (e dependências); cria Gemfile.lock. webrick é necessário para bundle exec jekyll serve em Ruby ≥ 3.0.

Adicionar ao topo (após description), mantendo indentação de 2 espaços:

author: Kaylon Souza
github_username: kaaylooon
linkedin_username: kaylonsouza

E adicionar na raiz do arquivo:

plugins:
  - jekyll-sitemap

Run: git rm sitemap.xml Expected: sitemap.xml removido do working tree e do índice. O plugin gera _site/sitemap.xml na build (nunca commitar um sitemap manual).

Substituir o texto atual (que afirma não existir Gemfile e usa jekyll direto) por:

## Build, Test, and Development Commands
The repo uses Bundler (Gemfile committed). Install dependencies and build with:
- `bundle install` - install Jekyll and the jekyll-sitemap plugin.
- `bundle exec jekyll serve` - start a local preview server with live rebuilds.
- `bundle exec jekyll build` - generate the static site output for a final check.
- `git status` - verify only the intended HTML, Markdown, CSS, and asset files changed.

`sitemap.xml` is generated automatically by the jekyll-sitemap plugin at build time — do not edit or commit a manual sitemap. Open the HTML directly only for a quick sanity check, and prefer a Jekyll preview for content that uses layouts or collections.

Run:

bundle exec jekyll build

Expected: exit 0, sem warnings de plugin faltando.

Run: grep -o '/2026/' _site/sitemap.xml | wc -l && grep -c '/projetos/' _site/sitemap.xml Expected: contagem de posts /2026/... ≥ 2 (os dois posts do _posts/), e /projetos/ presente (coleção). Confirmar também que /, /about.html, /posts/ e /projetos/ estão no sitemap.

git add Gemfile Gemfile.lock _config.yml AGENTS.md
git commit -m "feat: add jekyll-sitemap and bundler support"

(A deleção de sitemap.xml já está staged pelo git rm do Step 4.)


Task 2: site-head.html — Open Graph por página e SEO

Files:

Interfaces:

Após a linha 5 (``), inserir:




Substituir as linhas 32-38 por:


<meta property="og:image" content="https://kaaylooon.github.io/assets/particles.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">

<meta property="og:image:alt" content="">
<meta property="og:locale" content="pt_BR">

Substituir a linha 38 (<meta name="twitter:image" content="https://kaaylooon.github.io/assets/particles.png">) por:

<meta name="twitter:image" content="https://kaaylooon.github.io/assets/particles.png">

No bloco application/ld+json (linhas 61-64), substituir:

"sameAs": [
  "https://github.com/kaaylooon",
  "https://linkedin.com/in/kaylonsouza"
]

por:

"sameAs": [
  "https://github.com/kaaylooon",
  "https://linkedin.com/in/kaylonsouza"
]

Run: bundle exec jekyll build && grep -o 'og:image[^>]*' _site/2026/08/15/aurum-initium.html Expected: og:image = fallback /assets/particles.png COM width/height (a página ainda não tem page.image nesta task — a imagem própria entra na Task 4).

Run: grep -c 'article:published_time' _site/2026/08/15/aurum-initium.html && grep -o 'og:locale[^>]*' _site/2026/08/15/aurum-initium.html Expected: article:published_time presente; og:locale com pt_BR.

Run: grep -A 3 '"sameAs"' _site/index.html Expected: github.com/kaaylooon e linkedin.com/in/kaylonsouza (valores vindos do config). (JSON-LD é multi-linha; um grep -o 'sameAs[^]]*]' não captura.)

git add _includes/site-head.html
git commit -m "feat: per-page open graph and locale metadata"

Task 3: Renomear imagem do post + WebP

Files:

Interfaces:

git mv "assets/2026-06-12  -  02h08m.png" assets/capa-aurum-initium.png

Expected: arquivo renomeado, rastreado pelo git.

convert assets/capa-aurum-initium.png -quality 85 assets/capa-aurum-initium.webp

Expected: arquivo capa-aurum-initium.webp criado (ImageMagick 6.9+ com libwebp confirmado no ambiente).

Run: ls -la assets/capa-aurum-initium.png assets/capa-aurum-initium.webp && file assets/capa-aurum-initium.webp Expected: ambos existem; .webp reconhecido como WebP. A imagem órfã assets/2026-06-12 - 02h05m.png e assets/auriuminitium.png permanecem intactas.

git add assets/capa-aurum-initium.png assets/capa-aurum-initium.webp
git commit -m "chore: rename book cover image and add webp"

Task 4: Front matter dos posts (description + image)

Files:

Interfaces:

Substituir o front matter (linhas 1-5) por:

---
layout: posts
title: "O meu livro de matemática: Aurum Initium"
date: 2026-08-15
description: "Um livro de matemática elementar em construção: base sólida, tópicos conectados por intuição e interpretação geométrica."
image: "/assets/capa-aurum-initium.webp"
image_alt: "Captura do livro Aurum Initium"
---

E atualizar a referência da imagem no corpo (linha 7):

![Captura do livro](/assets/capa-aurum-initium.webp)

Adicionar description ao front matter (após date), mantendo as demais linhas:

---
layout: posts
title: "ITA - 2022: z = 5 - 5i, f(n) = |z^(2n+1) + conjugado(z)^(2n+1)|"
date: 2026-06-26
description: "Resolução comentada de uma questão do ITA 2022 sobre números complexos: somatório de f(n) e potências de |z|."
---

(Sem image — cai no fallback particles.png.)

Run: bundle exec jekyll build && grep -o 'og:image[^>]*' _site/2026/08/15/aurum-initium.html Expected: og:image apontando para /assets/capa-aurum-initium.webp, sem width/height (imagem própria definida).

Run: grep -o 'og:description[^>]*' _site/2026/06/26/journal.html Expected: description presente e sem espaços URL-encoded.

Run: grep -o 'src="/assets/capa-aurum-initium.webp"' _site/2026/08/15/aurum-initium.html Expected: imagem do post referencia o WebP.

git add _posts/2026-08-15-aurum-initium.md _posts/2026-06-26-journal.md
git commit -m "feat: add per-post descriptions and open graph image"

Task 5: Página /projetos/ (cópia de /posts/) + navegação

Files:

Interfaces:

Inserir após `

` (linha 16) e ANTES do <main>:



Substituir a linha 26 (meta do post-header) por:

<span class="date"><i class="bi bi-journal-text"></i> 2 <span data-en="posts" data-pt="publicações">publicações</span></span>
---
layout: archive
title: "Projetos"
description: "Projetos desenvolvidos por Kaylon Souza  aplicações web, mobile e desktop."
permalink: /projetos/
archive_projects: true
---
<p data-en="A complete list of projects developed by Kaylon Souza — web, mobile and desktop applications." data-pt="Lista completa de projetos desenvolvidos por Kaylon Souza — aplicações web, mobile e desktop.">Lista completa de projetos desenvolvidos por Kaylon Souza — aplicações web, mobile e desktop.</p>

<div class="project-list">
  
  
  
  
    
<div class="project-card featured">
  <div class="project-header">
    <h3>Katálogo</h3>
    
      <span class="project-badge" aria-label="Destaque">
        <i class="bi bi-star-fill"></i>
      </span>
    
  </div>

  
    <div class="project-image">
      <img src="/assets/katalogo-1.png" alt="Katálogo" loading="lazy" decoding="async">
    </div>
  

  
  
  
  
  <div class="project-status status-done">
    <i class="bi bi-check-circle-fill"></i>
    <span data-en="Completed" data-pt="Concluído">Concluído</span>
  </div>

  <p class="project-description">Serviço web que permite adicionar, listar e remover serviços/negócios locais. O Katálogo tem todos os componentes: comentários, avaliações, localização, informações sobre o negócio e etc.</p>

  
    <div class="project-stack">
      <span class="tech-stack">Python · Flask</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/Katalogo" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/katalogo/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
    
<div class="project-card featured">
  <div class="project-header">
    <h3>Motriz</h3>
    
      <span class="project-badge" aria-label="Destaque">
        <i class="bi bi-star-fill"></i>
      </span>
    
  </div>

  
    <div class="project-image">
      <img src="/assets/motriz1.png" alt="Motriz" loading="lazy" decoding="async">
    </div>
  

  
  
  
  
  <div class="project-status status-progress">
    <i class="bi bi-gear-wide-connected"></i>
    <span data-en="In progress" data-pt="Em progresso">Em progresso</span>
  </div>

  <p class="project-description">Aplicativo mobile para organizar ciclos de estudo e tarefas, combinando distribuição ponderada de disciplinas com uma lista de tarefas inspirada em todo.txt.</p>

  
    <div class="project-stack">
      <span class="tech-stack">TypeScript · Expo · React Native</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/motriz" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/motriz/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
    
<div class="project-card">
  <div class="project-header">
    <h3>Kaappli</h3>
    
  </div>

  

  
  
  
  
  <div class="project-status status-done">
    <i class="bi bi-check-circle-fill"></i>
    <span data-en="Completed" data-pt="Concluído">Concluído</span>
  </div>

  <p class="project-description">Aplicacão web (Electron) interativa para prática de Hiragana e Katakana, com geração dinâmica de caracteres e validação das respostas romanizadas.</p>

  
    <div class="project-stack">
      <span class="tech-stack">JS · Electron</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/Kaappli" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/kaappli/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
    
<div class="project-card">
  <div class="project-header">
    <h3>Kapraxis</h3>
    
  </div>

  
    <div class="project-image">
      <img src="/assets/kapraxis.png" alt="Kapraxis" loading="lazy" decoding="async">
    </div>
  

  
  
  
  
  <div class="project-status status-done">
    <i class="bi bi-check-circle-fill"></i>
    <span data-en="Completed" data-pt="Concluído">Concluído</span>
  </div>

  <p class="project-description">Uma aplicação de estudos com flashcards, revisões, etc. Todos os recursos para fomentar os estudos centralizados.</p>

  
    <div class="project-stack">
      <span class="tech-stack">C++ · QT</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/kapraxis" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/kapraxis/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
    
<div class="project-card">
  <div class="project-header">
    <h3>Kext</h3>
    
  </div>

  
    <div class="project-image">
      <img src="/assets/kext2.png" alt="Kext" loading="lazy" decoding="async">
    </div>
  

  
  
  
  
  <div class="project-status status-progress">
    <i class="bi bi-gear-wide-connected"></i>
    <span data-en="In progress" data-pt="Em progresso">Em progresso</span>
  </div>

  <p class="project-description">Editor de texto vi-based</p>

  
    <div class="project-stack">
      <span class="tech-stack">C</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/kext" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/kext/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
    
<div class="project-card">
  <div class="project-header">
    <h3>Telegram PDF Uploader Bot</h3>
    
  </div>

  
    <div class="project-image">
      <img src="/assets/telegram-bot-pdf-2.png" alt="Telegram PDF Uploader Bot" loading="lazy" decoding="async">
    </div>
  

  
  
  
  
  <div class="project-status status-done">
    <i class="bi bi-check-circle-fill"></i>
    <span data-en="Completed" data-pt="Concluído">Concluído</span>
  </div>

  <p class="project-description">Bot do Telegram em Python para indexar, buscar e enviar arquivos PDF de grandes coleções locais de forma simples e eficiente.</p>

  
    <div class="project-stack">
      <span class="tech-stack">Python · python-telegram-bot</span>
    </div>
  

  <div class="project-footer">
    
      <a href="https://github.com/kaaylooon/telegram-bot-pdf-uploader" target="_blank" rel="noopener noreferrer">
        <i class="bi bi-github" style="padding-right: 0.3rem"></i>
        <span data-pt="Repositório" data-en="Source">Repositório</span>
      </a>
    
    <a href="/projetos/telegram-bot-pdf-uploader/">
      <i class="bi bi-arrow-right-circle" style="padding-right: 0.3rem"></i>
      <span data-pt="Saiba mais" data-en="Read more">Saiba mais</span>
    </a>
  </div>
</div>

  
</div>

Adicionar após a linha 3 (``):


Substituir nas DUAS ocorrências de /#projetos (linha 18 mobile, linha 29 desktop):

<a href="/projetos/" data-en="Projects" data-pt="Projetos">Projetos</a>

(Manter o class="nav-more-nav"/<li> wrappers exatamente como estão.)

Na chamada do include (linha 20), adicionar projetos_href:






<nav class="sticky-nav">
  <div class="nav-shell">
    <a class="nav-brand" href="/">
      <span>Kaylon Souza</span>
    </a>

    <details class="nav-more">
      <summary class="nav-more-toggle" aria-label="Mais seções">
        <i class="bi bi-three-dots" aria-hidden="true"></i>
      </summary>

      <nav class="nav-more-nav" aria-label="Sections navigation">
        <a href="/#home">Home</a>
        <a href="/#projetos" data-en="Projects" data-pt="Projetos">Projetos</a>
        <a href="/#conquistas" data-en="Achievements" data-pt="Distinções">Distinções</a>
        <a href="/#habilidades" data-en="Skills" data-pt="Habilidades">Habilidades</a>
        <a href="/#idiomas" data-en="Languages" data-pt="Idiomas">Idiomas</a>
        <a href="/#posts" data-en="Posts" data-pt="Publicações">Publicações</a>
        <a href="/#contato" data-en="Contact" data-pt="Contato">Contato</a>
      </nav>
    </details>

    <div class="nav-meta">
      <ul class="nav-links">
        <li><a href="/#projetos" data-en="Projects" data-pt="Projetos">Projetos</a></li>
        <li><a href="/#conquistas" data-en="Achievements" data-pt="Distinções">Distinções</a></li>
        <li><a href="/#habilidades" data-en="Skills" data-pt="Habilidades">Habilidades</a></li>
        <li><a href="/#idiomas" data-en="Languages" data-pt="Idiomas">Idiomas</a></li>
        <li><a href="/#posts" data-en="Posts" data-pt="Publicações">Publicações</a></li>
        <li><a href="/#contato" data-en="Contact" data-pt="Contato">Contato</a></li>
      </ul>
    </div>

    <button class="lang-toggle-icon" id="langToggle" type="button" aria-label="Alternar idioma">
      <i class="bi bi-translate" aria-hidden="true"></i>
    </button>
  </div>
</nav>

Substituir na linha 29:

<a href="/#projetos" class="back-link">

por:

<a href="/projetos/" class="back-link">

Run: bundle exec jekyll build && grep -c 'project-card' _site/projetos/index.html Expected: 6 ocorrências (6 projetos via include project-card).

Run: grep -o '6 <span data-en="projects" data-pt="projetos">projetos</span>' _site/projetos/index.html && grep -o 'data-en="posts" data-pt="publicações">publicações' _site/posts/index.html Expected: /projetos/ mostra “6 projetos” (contagem da coleção); /posts/ mantém “publicações” (padronização sem regressão).

Run: grep -o 'href="/#projetos"' _site/index.html | wc -l Expected: ≥ 2 (desktop + mobile mantêm scroll na home).

Run: grep -o 'href="/projetos/"' _site/2026/08/15/aurum-initium.html | wc -l && grep -o 'href="/projetos/"' _site/projetos/kaappli/index.html | wc -l Expected: nav do post aponta para /projetos/ (≥ 2) e back-link do projeto também (≥ 1).

Run: grep -c '/projetos/' _site/sitemap.xml Expected: /projetos/ (a página) e os 6 projetos da coleção presentes no sitemap.

git add projetos/index.html _layouts/archive.html _includes/site-nav.html index.html _layouts/projeto.html
git commit -m "feat: add dedicated projects page"

Task 6: CTA em posts e projetos

Files:

Interfaces:

Inserir entre a linha 49 (</div> do .post-content) e a linha 51 (<nav class="page-pager">):

    <section class="contact-section" aria-label="Contato">
        <div class="section-heading section-heading--left">
            <h2 data-en="Contact" data-pt="Contato">Contato</h2>
        </div>

        <div class="contact-panel contact-panel--featured">
            <div class="contact-intro">
                <div class="contact-status contact-status--centered">
                    <span data-en="Open to opportunities" data-pt="Aberto a oportunidades">Aberto a oportunidades</span>
                </div>
            </div>

            <div class="contact-links">
                <a class="contact-card" href="mailto:kaylon.contact@gmail.com">
                    <i class="bi bi-envelope"></i>
                    <div>
                        <div class="contact-card-label" data-en="Email" data-pt="E-mail">E-mail</div>
                        <div class="contact-card-value">kaylon.contact@gmail.com</div>
                    </div>
                </a>
                <a class="contact-card" href="https://github.com/kaaylooon" target="_blank" rel="noopener noreferrer">
                    <i class="bi bi-github"></i>
                    <div>
                        <div class="contact-card-label" data-en="GitHub" data-pt="GitHub">GitHub</div>
                        <div class="contact-card-value">kaaylooon</div>
                    </div>
                </a>
            </div>
        </div>
    </section>

Inserir o MESMO bloco entre a linha 89 (</section> do .project-content-section) e a linha 91 (``), com indentação de 4 espaços (nível .container).

Run: bundle exec jekyll build && grep -c 'contact-card' _site/2026/08/15/aurum-initium.html _site/projetos/kaappli/index.html Expected: ≥ 2 em cada (e-mail + GitHub).

Run: grep -o 'Aberto a oportunidades' _site/2026/08/15/aurum-initium.html Expected: CTA bilíngue presente (pt default).

git add _layouts/posts.html _layouts/projeto.html
git commit -m "feat: add contact cta to posts and projects"

Verificação final (pós-Task 6)