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/.
jekyll-sitemap ainda NÃO instalado (instalar via bundle install).data-pt/data-en (pt é o default no HTML).assets/2026-06-12 - 02h05m.png nem assets/auriuminitium.png (órfãs, decisão do usuário).scripts/generate_resume.rb.index.html) mantém nav “Projetos” com scroll para /#projetos; demais páginas apontam para /projetos/._config.yml já exclui Gemfile/Gemfile.lock da build via exclude — não remover.author: Kaylon Souza, github_username: kaaylooon, linkedin_username: kaylonsouza (não inventar handles).git commit.Files:
Gemfile_config.yml (adicionar author, github_username, linkedin_username, plugins)sitemap.xml (manual, substituído pelo plugin)AGENTS.md (seção “Build, Test, and Development Commands”)Interfaces:
Produces: site.author, site.github_username, site.linkedin_username, site.plugins — usados pela Task 2 (site-head.html). bundle exec jekyll build — usado por todas as tasks seguintes. _site/sitemap.xml gerado automaticamente.
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.
_config.ymlAdicionar 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).
AGENTS.md — seção “Build, Test, and Development Commands”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.)
site-head.html — Open Graph por página e SEOFiles:
_includes/site-head.html (bloco OG + JSON-LD)Interfaces:
site.github_username, site.linkedin_username (Task 1); page.image, page.image_alt, page.description, page.date, page.lang, page.og_type (front matter das páginas).Produces: og:image/twitter:image por página, og:image:alt, og:locale dinâmico, article:published_time/article:modified_time quando og_type == article.
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">
twitter:imageSubstituir 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">
sameAs do JSON-LD para o configNo 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"
Files:
assets/2026-06-12 - 02h08m.png → assets/capa-aurum-initium.pngassets/capa-aurum-initium.webp (convertido)Interfaces:
Produces: assets/capa-aurum-initium.webp — referenciado na Task 4 (front matter do post).
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"
Files:
_posts/2026-08-15-aurum-initium.md_posts/2026-06-26-journal.mdInterfaces:
assets/capa-aurum-initium.webp (Task 3).Produces: page.description/page.image/page.image_alt nos posts — consumidos pela Task 2 no site-head.html.
_posts/2026-08-15-aurum-initium.mdSubstituir 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):

_posts/2026-06-26-journal.mdAdicionar 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"
/projetos/ (cópia de /posts/) + navegaçãoFiles:
projetos/index.html (usa o layout archive existente — padronização com posts/index.html)_layouts/archive.html (parametrizar meta de contagem via page.archive_projects)_includes/site-nav.html (link “Projetos” → projetos_href)index.html (passar projetos_href="/#projetos" no include do nav)_layouts/projeto.html (back-link → /projetos/)Interfaces:
_includes/project-card.html (include existente, usado na home); layout archive (usado por posts/index.html).Produces: site.projetos listados em /projetos/; variável projetos_href do nav (default /projetos/); flag page.archive_projects consumida por _layouts/archive.html.
_layouts/archive.htmlInserir 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>
projetos/index.html (espelha posts/index.html)---
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>
_includes/site-nav.htmlAdicionar 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.)
index.html — nav com scroll na homeNa 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>
_layouts/projeto.html — back-linkSubstituir 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"
Files:
_layouts/posts.html (inserir bloco antes do <nav class="page-pager">, linha 51)_layouts/projeto.html (inserir bloco antes do <nav class="page-pager">, linha 107)Interfaces:
contact-section, contact-panel, contact-card, contact-links, section-heading) — todas já usadas em index.html e definidas em assets/site.css.Produces: CTA bilíngue de contato no fim de cada post e projeto.
_layouts/posts.htmlInserir 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>
_layouts/projeto.htmlInserir 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"
bundle exec jekyll build exit 0, sem warnings._site/sitemap.xml contém: /, /about.html, /posts/, /projetos/, 2 posts (/2026/...), 6 projetos (/projetos/<slug>/).aurum-initium tem og:image = /assets/capa-aurum-initium.webp e article:published_time.journal tem og:description; og:image fallback = /assets/particles.png com width/height./projetos/ renderiza os 6 projetos; nav da home mantém /#projetos; nav das demais páginas aponta /projetos/; back-link dos projetos aponta /projetos/.git status: apenas arquivos pretendidos (HTML, Markdown, CSS/asset, Gemfile, AGENTS.md). assets/capa-aurum-initium.png/.webp rastreados; 2026-06-12 - 02h08m.png removido; órfãs intactas.