<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Buildando</title><description>Boas práticas de desenvolvimento de software, orientação a objetos e o ofício de escrever bom código.</description><link>https://buildando.com/</link><language>pt-BR</language><item><title>O que é o Buildando</title><link>https://buildando.com/pt/posts/o-que-e-o-buildando/</link><guid isPermaLink="true">https://buildando.com/pt/posts/o-que-e-o-buildando/</guid><description>Um template de blog estático em Astro: conteúdo em markdown, sem backend, SEO forte e integrações plugáveis. Entenda o que é e por que existe.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Buildando&lt;/strong&gt; é um &lt;em&gt;template&lt;/em&gt; de blog: um ponto de partida pronto para você
publicar seu próprio blog em minutos e ir personalizando aos poucos. É o que você
está lendo agora — este site é ao mesmo tempo o blog e o template que qualquer
pessoa pode clonar.&lt;/p&gt;
&lt;p&gt;Se você chegou aqui por causa do template, comece por este post e siga para
&lt;a href=&quot;https://buildando.com/pt/posts/instalando-e-personalizando/&quot;&gt;Instalando e personalizando&lt;/a&gt; e
&lt;a href=&quot;https://buildando.com/pt/posts/criando-posts/&quot;&gt;Criando posts&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;a-ideia-em-uma-frase&quot;&gt;A ideia em uma frase&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Escrever um post é criar uma pasta com um markdown — o resto (SEO, feed, busca,
tema, idiomas) já vem pronto e sem servidor nenhum.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;sem-backend-de-propósito&quot;&gt;Sem backend, de propósito&lt;/h2&gt;
&lt;p&gt;O blog é &lt;strong&gt;totalmente estático&lt;/strong&gt;: no build, tudo que o leitor precisa — páginas,
busca, feeds, dados estruturados — vira arquivos que qualquer hospedagem serve.
Não há banco de dados, painel de administração nem servidor para manter. As duas
funções que normalmente exigiriam um backend são delegadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Busca&lt;/strong&gt; é um índice estático &lt;strong&gt;dos posts&lt;/strong&gt;, gerado no build e rodando no navegador.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comentários&lt;/strong&gt; são o GitHub Discussions (ou outro provedor) embutido na página.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso deixa o site rápido, barato de hospedar e com o conteúdo versionado no git —
onde texto e código já se sentem em casa.&lt;/p&gt;
&lt;h2 id=&quot;o-que-já-vem-pronto&quot;&gt;O que já vem pronto&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conteúdo em markdown&lt;/strong&gt;, um post por pasta, com imagens ao lado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SEO por construção&lt;/strong&gt;: título, descrição, canonical, Open Graph, Twitter Card,
JSON-LD, &lt;code&gt;sitemap.xml&lt;/code&gt;, &lt;code&gt;robots.txt&lt;/code&gt; e RSS — gerados em toda página, sem esforço.
Posts sem capa ganham automaticamente um card social com a sua marca.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tema claro/escuro&lt;/strong&gt; com botão, lembrado entre visitas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-idiomas&lt;/strong&gt; com rotas por idioma, seletor e &lt;code&gt;hreflang&lt;/code&gt; — este post, por
exemplo, tem uma versão em inglês (troque no canto superior).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Busca&lt;/strong&gt; só de posts: preview no modal (tecle &lt;code&gt;/&lt;/code&gt; ou &lt;code&gt;⌘K&lt;/code&gt;) e, no Enter, uma
&lt;strong&gt;página de resultados&lt;/strong&gt; com os mesmos cards do feed. Mais o &lt;strong&gt;filtro&lt;/strong&gt; por
categoria, tag e mês na home.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compartilhar&lt;/strong&gt;, &lt;strong&gt;newsletter&lt;/strong&gt; e &lt;strong&gt;analytics/anúncios&lt;/strong&gt; opcionais, com banner
de consentimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;genérico-e-contribuível&quot;&gt;Genérico e contribuível&lt;/h2&gt;
&lt;p&gt;As integrações (comentários, busca, analytics) ficam atrás de &lt;strong&gt;portas&lt;/strong&gt; com
&lt;strong&gt;adaptadores&lt;/strong&gt; plugáveis: trocar de giscus para outro provedor é mudar uma
palavra na configuração. A ideia é que você — ou qualquer pessoa — consiga adaptar
o template à sua stack e contribuir com novos adaptadores.&lt;/p&gt;
&lt;p&gt;Toda a identidade (nome, cores, redes, domínio) mora em &lt;strong&gt;um único arquivo&lt;/strong&gt;
(&lt;code&gt;src/config/site.ts&lt;/code&gt;), então um fork é editar esse arquivo e trocar o logo.&lt;/p&gt;
&lt;h2 id=&quot;para-quem-é&quot;&gt;Para quem é&lt;/h2&gt;
&lt;p&gt;Para quem quer um blog &lt;strong&gt;rápido, com SEO forte e simples de manter&lt;/strong&gt;, sem lidar
com servidor — e gosta de escrever em markdown com o conteúdo no git. Se é você,
o próximo passo é &lt;a href=&quot;https://buildando.com/pt/posts/instalando-e-personalizando/&quot;&gt;instalar e personalizar&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>template</category><category>astro</category><category>sobre</category></item><item><title>Instalando o Buildando e personalizando</title><link>https://buildando.com/pt/posts/instalando-e-personalizando/</link><guid isPermaLink="true">https://buildando.com/pt/posts/instalando-e-personalizando/</guid><description>Instale, personalize a identidade e ligue as integrações: idiomas, comentários, analytics, anúncios e newsletter — inclusive o que cada uma exige fora do código.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Você já viu &lt;a href=&quot;https://buildando.com/pt/posts/o-que-e-o-buildando/&quot;&gt;o que é o Buildando&lt;/a&gt;. Agora vamos
colocar o seu no ar e deixá-lo com a sua cara.&lt;/p&gt;
&lt;h2 id=&quot;1-pegue-o-template&quot;&gt;1. Pegue o template&lt;/h2&gt;
&lt;p&gt;O template vive em
&lt;a href=&quot;https://github.com/Buildando/template.buildando.com&quot;&gt;github.com/Buildando/template.buildando.com&lt;/a&gt;.
Lá, clique em &lt;strong&gt;“Use this template” → Create a new repository&lt;/strong&gt; (ou faça um fork).
Depois, clone o &lt;strong&gt;seu&lt;/strong&gt; repositório e instale:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#F69D50&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; https://github.com/SEU-USUARIO/SEU-REPO.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; SEU-REPO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#F69D50&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#F69D50&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; dev&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;      # servidor local, com recarga automática&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Abra &lt;code&gt;http://localhost:4321&lt;/code&gt; e você já verá o blog rodando. Requer Node 22+.&lt;/p&gt;
&lt;h2 id=&quot;2-a-única-superfície-de-configuração&quot;&gt;2. A única superfície de configuração&lt;/h2&gt;
&lt;p&gt;Quase tudo que é “seu” mora em &lt;strong&gt;um arquivo&lt;/strong&gt;: &lt;code&gt;src/config/site.ts&lt;/code&gt;. É lá que você
edita nome, domínio, autor, a &lt;strong&gt;skin&lt;/strong&gt; (cores e fontes — veja a seção 5), &lt;strong&gt;redes
sociais&lt;/strong&gt;, navegação, idiomas e as integrações (comentários, busca, analytics).&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; SITE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  name: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;Meu Blog&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  url: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;https://meu-dominio.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  author: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;Seu Nome&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Regra de ouro: se &lt;code&gt;buildando&lt;/code&gt;, o domínio ou o autor aparecerem &lt;strong&gt;fora&lt;/strong&gt; desse
arquivo, é bug. Isso é o que torna o fork tão simples.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Troque também os assets em &lt;code&gt;public/&lt;/code&gt;: o &lt;code&gt;favicon.svg&lt;/code&gt; (logo) e o &lt;code&gt;og-default.svg&lt;/code&gt;
(imagem social padrão).&lt;/p&gt;
&lt;h2 id=&quot;3-o-texto-inicial-da-home-antes-do-feed&quot;&gt;3. O texto inicial da home (antes do feed)&lt;/h2&gt;
&lt;p&gt;Aquele bloco no topo da home — título e frase de boas-vindas, antes da lista de
posts — é &lt;strong&gt;markdown livre&lt;/strong&gt;, um por idioma, em &lt;code&gt;src/content/home/&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/content/home/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pt.md      ← o hero em português&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  en.md      ← o hero em inglês&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edite &lt;code&gt;pt.md&lt;/code&gt; com o que quiser (título, parágrafo, links) — o CSS do site cuida do
visual. Sem esse arquivo, a home cai no nome do site + descrição.&lt;/p&gt;
&lt;h2 id=&quot;4-a-página-sobre-o-autor&quot;&gt;4. A página “Sobre o Autor”&lt;/h2&gt;
&lt;p&gt;A página &lt;strong&gt;Sobre&lt;/strong&gt; vive em &lt;code&gt;src/pages/[lang]/about.astro&lt;/code&gt;. O texto por idioma está
logo no topo do arquivo — troque pelo seu. O link no menu já aponta para ela.&lt;/p&gt;
&lt;h2 id=&quot;5-identidade-visual-skins&quot;&gt;5. Identidade visual (skins)&lt;/h2&gt;
&lt;p&gt;A cara do blog — paletas light/dark, fontes e largura de leitura — é uma &lt;strong&gt;skin&lt;/strong&gt;:
um preset de tokens em &lt;code&gt;src/config/skins.ts&lt;/code&gt;. Trocar de identidade é &lt;strong&gt;uma linha&lt;/strong&gt;
no &lt;code&gt;site.ts&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; ACTIVE_SKIN&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#F69D50&quot;&gt; SkinName&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; &quot;editorial&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Já vêm prontas sete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;terminal&lt;/code&gt;&lt;/strong&gt; — padrão: escuro, acento azul, Inter + Space Grotesk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;editorial&lt;/code&gt;&lt;/strong&gt; — títulos em serifa, papel quente, acento verde&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mono&lt;/code&gt;&lt;/strong&gt; — títulos monoespaçados, alto contraste, acento âmbar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;minimal&lt;/code&gt;&lt;/strong&gt; — quase monocromático, acento lime discreto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;warmDev&lt;/code&gt;&lt;/strong&gt; — a paleta Solarized&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;brutalist&lt;/code&gt;&lt;/strong&gt; — radical: bordas duras, cantos retos, sombras offset, acento violeta&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;berry&lt;/code&gt;&lt;/strong&gt; — magenta/rosa vibrante sobre base ameixa, coluna de leitura mais larga; muda &lt;strong&gt;estrutura&lt;/strong&gt; (o filtro vira uma barra lateral à esquerda na home)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;#x22;src&amp;#x22;:&amp;#x22;./skins.png&amp;#x22;,&amp;#x22;alt&amp;#x22;:&amp;#x22;As sete skins do Buildando, cada uma com tema claro e escuro&amp;#x22;,&amp;#x22;index&amp;#x22;:0}&quot;&gt;&lt;/p&gt;
&lt;p&gt;Cada uma vem com light &lt;strong&gt;e&lt;/strong&gt; dark (o botão de tema alterna). Para criar a sua,
copie um preset em &lt;code&gt;skins.ts&lt;/code&gt; e edite os valores — são CSS puro. Uma skin pode até
mudar &lt;strong&gt;estrutura&lt;/strong&gt; (não só cor): regras escopadas por &lt;code&gt;[data-skin=&quot;nome&quot;]&lt;/code&gt; em
&lt;code&gt;src/styles/skins.css&lt;/code&gt; — a &lt;code&gt;brutalist&lt;/code&gt; e a &lt;code&gt;berry&lt;/code&gt; são os exemplos. Mais detalhes
na seção &lt;strong&gt;Skins&lt;/strong&gt; do &lt;code&gt;README&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;6-um-idioma-ou-vários&quot;&gt;6. Um idioma ou vários&lt;/h2&gt;
&lt;p&gt;O template vem bilíngue (português e inglês), mas isso é configuração, não estrutura.
Quem manda é o bloco &lt;code&gt;I18N&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; I18N&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  defaultLocale: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pt&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  locales: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    { code: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pt&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, label: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;Português&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, htmlLang: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pt-BR&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, ogLocale: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pt_BR&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    { code: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, label: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;English&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,   htmlLang: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,    ogLocale: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;en_US&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Para deixar só um idioma&lt;/strong&gt;, apague a linha do outro. O seletor de idioma some
sozinho do cabeçalho, e todas as URLs continuam prefixadas (&lt;code&gt;/pt/...&lt;/code&gt;). Apague
também o hero do idioma removido em &lt;code&gt;src/content/home/&lt;/code&gt; e os posts escritos nele —
um post com &lt;code&gt;lang:&lt;/code&gt; que não existe mais faz o build falhar, dizendo qual post é.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para adicionar um idioma&lt;/strong&gt;, some uma linha em &lt;code&gt;locales&lt;/code&gt; e traduza as strings em
&lt;code&gt;src/i18n/ui.ts&lt;/code&gt;. Não precisa adivinhar o que falta: rode &lt;code&gt;npm test&lt;/code&gt; e o
&lt;code&gt;config-integrity.test.ts&lt;/code&gt; lista exatamente as chaves que o novo idioma ainda deve.&lt;/p&gt;
&lt;p&gt;Cada post declara o idioma em que está escrito e liga suas traduções — isso é
assunto do post &lt;a href=&quot;https://buildando.com/pt/posts/criando-posts/&quot;&gt;criando posts&lt;/a&gt;. O que vale saber aqui é
que &lt;strong&gt;nada obriga a traduzir tudo&lt;/strong&gt;: um post sem tradução continua acessível nos
outros idiomas, com a interface traduzida e o conteúdo no idioma original.&lt;/p&gt;
&lt;h2 id=&quot;7-logo-favicon-e-imagens-sociais&quot;&gt;7. Logo, favicon e imagens sociais&lt;/h2&gt;
&lt;p&gt;Três arquivos e um campo:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;public/favicon.svg      ← logo do cabeçalho E ícone da aba&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;public/og-default.svg   ← imagem social de páginas sem imagem própria&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/assets/author.jpg   ← foto na página Sobre&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O logo do cabeçalho vem de &lt;code&gt;SITE.logo&lt;/code&gt;, que aponta para &lt;code&gt;/favicon.svg&lt;/code&gt; — troque o
arquivo mantendo o nome, ou mude o campo. Como é SVG, ele fica nítido em qualquer
tamanho e não pesa nada.&lt;/p&gt;
&lt;p&gt;Posts não precisam de imagem: quem não define &lt;code&gt;cover&lt;/code&gt; ganha automaticamente um card
social gerado no build, com a sua marca e as cores da skin.&lt;/p&gt;
&lt;h2 id=&quot;8-redes-sociais-e-compartilhamento&quot;&gt;8. Redes sociais e compartilhamento&lt;/h2&gt;
&lt;p&gt;São dois blocos diferentes. &lt;code&gt;SOCIAL&lt;/code&gt; são os seus perfis, que viram ícones no rodapé:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; SOCIAL&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  { label: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;GitHub&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, href: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;https://github.com/seu-usuario&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, icon: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;github&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  { label: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;LinkedIn&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, href: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;https://linkedin.com/in/voce&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, icon: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;linkedin&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O &lt;code&gt;icon&lt;/code&gt; é um slug do &lt;a href=&quot;https://simple-icons.org&quot;&gt;simple-icons&lt;/a&gt;. Já vêm prontos:
&lt;code&gt;github&lt;/code&gt;, &lt;code&gt;instagram&lt;/code&gt;, &lt;code&gt;threads&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;tiktok&lt;/code&gt;, &lt;code&gt;facebook&lt;/code&gt;, &lt;code&gt;linkedin&lt;/code&gt;, &lt;code&gt;youtube&lt;/code&gt;,
&lt;code&gt;telegram&lt;/code&gt;, &lt;code&gt;whatsapp&lt;/code&gt; e &lt;code&gt;rss&lt;/code&gt;. Um slug desconhecido simplesmente não desenha nada —
para acrescentar outro, edite &lt;code&gt;src/components/Icon.astro&lt;/code&gt;. Lista vazia: rodapé sem
ícones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SHARE&lt;/code&gt; é outra coisa: são os botões de compartilhar &lt;strong&gt;no rodapé de cada post&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; SHARE&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  networks: [&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;x&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;whatsapp&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;telegram&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;linkedin&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;facebook&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  copyLink: &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;// botão de copiar o link&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  native: &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,     &lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;// menu de compartilhar do celular, quando houver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;9-ligando-as-integrações&quot;&gt;9. Ligando as integrações&lt;/h2&gt;
&lt;p&gt;Cada integração é opt-in e &lt;strong&gt;vazio significa desligado&lt;/strong&gt;: o template no estado em que
você o clonou não faz uma única requisição a terceiros. Ligue só o que for usar — e
cada uma que você liga muda o que a política de privacidade declara, automaticamente.&lt;/p&gt;
&lt;h3 id=&quot;91-comentários-com-github-discussions-giscus&quot;&gt;9.1 Comentários com GitHub Discussions (giscus)&lt;/h3&gt;
&lt;p&gt;O giscus exibe uma discussão do GitHub dentro do post. Não há banco de dados: os
comentários vivem no GitHub.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Crie um repositório público só para os comentários&lt;/strong&gt; — por exemplo
&lt;code&gt;seu-usuario/meu-blog-comments&lt;/code&gt;. Ele precisa ser público, mas o repositório do
&lt;strong&gt;blog pode continuar privado&lt;/strong&gt;: são coisas separadas, e é por isso que vale um
repositório dedicado.&lt;/li&gt;
&lt;li&gt;Nesse repositório, vá em &lt;em&gt;Settings → General → Features&lt;/em&gt; e marque &lt;strong&gt;Discussions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Instale o app do giscus nele: &lt;a href=&quot;https://github.com/apps/giscus&quot;&gt;github.com/apps/giscus&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Abra &lt;a href=&quot;https://giscus.app&quot;&gt;giscus.app&lt;/a&gt; e informe &lt;code&gt;dono/repositório&lt;/code&gt;. A página valida
os três pré-requisitos acima e, se estiver tudo certo, devolve &lt;strong&gt;&lt;code&gt;repoId&lt;/code&gt;&lt;/strong&gt; e
&lt;strong&gt;&lt;code&gt;categoryId&lt;/code&gt;&lt;/strong&gt; — escolha a categoria &lt;em&gt;Announcements&lt;/em&gt;, que é de anúncio e evita
que qualquer pessoa abra tópicos soltos.&lt;/li&gt;
&lt;li&gt;Cole no bloco &lt;code&gt;GISCUS&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; GISCUS&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  repo: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;seu-usuario/meu-blog-comments&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  repoId: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;R_kg...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  category: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;Announcements&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  categoryId: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;DIC_kw...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  mapping: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pathname&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#768390&quot;&gt;// cada URL de post vira uma discussão&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  theme: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;site&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;mapping: &quot;pathname&quot;&lt;/code&gt; liga o post à discussão pelo caminho da URL. Isso significa que
&lt;strong&gt;renomear a pasta de um post órfã os comentários dele&lt;/strong&gt; — a discussão antiga continua
lá, apontando para um endereço que não existe mais.&lt;/p&gt;
&lt;p&gt;Deixe &lt;code&gt;theme: &quot;site&quot;&lt;/code&gt; para os comentários seguirem o botão de tema do blog. O padrão
do próprio giscus, &lt;code&gt;preferred_color_scheme&lt;/code&gt;, segue o &lt;strong&gt;sistema operacional&lt;/strong&gt;: quem
puser o site no claro com o sistema no escuro fica com comentários escuros no meio de
uma página clara.&lt;/p&gt;
&lt;p&gt;Enquanto &lt;code&gt;repoId&lt;/code&gt; estiver vazio, a seção inteira não é renderizada — sem título, sem
script, sem requisição.&lt;/p&gt;
&lt;h3 id=&quot;92-google-analytics&quot;&gt;9.2 Google Analytics&lt;/h3&gt;
&lt;p&gt;Do snippet que o Google entrega, o blog precisa de &lt;strong&gt;uma coisa só&lt;/strong&gt;: o ID de medição.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No Google Analytics, crie uma propriedade GA4 e um fluxo de dados para o seu
domínio. Ele devolve um ID no formato &lt;code&gt;G-XXXXXXXXXX&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cole na config:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;ANALYTICS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;.googleAnalytics &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; &quot;G-XXXXXXXXXX&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Não cole o &lt;code&gt;&amp;#x3C;script&gt;&lt;/code&gt;: o blog emite exatamente as mesmas chamadas &lt;code&gt;gtag&lt;/code&gt;, só que
&lt;strong&gt;depois do consentimento&lt;/strong&gt;. Ligar o GA acende três coisas de uma vez:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;o &lt;strong&gt;banner de cookies&lt;/strong&gt; passa a aparecer;&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;política de privacidade&lt;/strong&gt; ganha a seção sobre o Google Analytics;&lt;/li&gt;
&lt;li&gt;o rodapé ganha &lt;strong&gt;Preferências de cookies&lt;/strong&gt;, para quem quiser mudar de ideia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por isso, preencha o bloco &lt;code&gt;CONSENT&lt;/code&gt; junto (seção 9.5). Para conferir que está certo,
veja o HTML publicado: não pode existir nenhuma &lt;code&gt;&amp;#x3C;script src=&quot;...googletagmanager...&quot;&gt;&lt;/code&gt;
na página — o endereço só aparece dentro da fila de consentimento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plausible&lt;/strong&gt; é a alternativa sem cookies: &lt;code&gt;ANALYTICS.plausible = &quot;seu-dominio.com&quot;&lt;/code&gt;.
Como não grava cookie, não dispara banner nenhum.&lt;/p&gt;
&lt;h3 id=&quot;93-adsense&quot;&gt;9.3 AdSense&lt;/h3&gt;
&lt;p&gt;Só faz sentido depois que o AdSense &lt;strong&gt;aprovar o seu site&lt;/strong&gt; — a aprovação olha volume e
originalidade de conteúdo, e um blog recém-criado costuma esperar.&lt;/p&gt;
&lt;p&gt;São três peças, em três lugares diferentes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;O publisher ID&lt;/strong&gt;, na config:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;ANALYTICS&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;.adsense &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt; &quot;ca-pub-0000000000000000&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;O &lt;code&gt;ads.txt&lt;/code&gt;&lt;/strong&gt;, na raiz do site. Crie &lt;code&gt;public/ads.txt&lt;/code&gt; com a linha exata que o
AdSense fornece — tudo em &lt;code&gt;public/&lt;/code&gt; vai para a raiz do domínio, e é lá que o Google
procura:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;strong&gt;Os formatos, no painel do AdSense&lt;/strong&gt;, em &lt;em&gt;Anúncios → Por site&lt;/em&gt;. Sem esse passo o
script carrega e &lt;strong&gt;nenhum anúncio aparece&lt;/strong&gt; — sintoma idêntico ao de um bug.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A meta tag de verificação da conta você não precisa colar: ela é emitida sozinha a
partir do publisher ID. E, como toda a publicidade fica atrás do consentimento, quem
recusar cookies não vê anúncio — comportamento correto, e receita menor do que o
painel projeta.&lt;/p&gt;
&lt;p&gt;Os formatos automáticos deixam o Google decidir onde inserir, inclusive entre
parágrafos e fixo no rodapé. Se preferir mandar você, posicione
&lt;code&gt;src/components/AdUnit.astro&lt;/code&gt; com um slot criado no painel — &lt;strong&gt;nenhuma página o usa
por padrão&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;94-newsletter&quot;&gt;9.4 Newsletter&lt;/h3&gt;
&lt;p&gt;Antes de tudo, uma confusão que custa tempo: &lt;strong&gt;RSS não envia e-mail&lt;/strong&gt;. O feed é um
arquivo que o site publica; quem o lê é um leitor de feeds. Para chegar numa caixa de
entrada é preciso um provedor no meio, e é ele quem transforma “saiu post novo” em
mensagem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Escolha um provedor com RSS-to-email.&lt;/strong&gt; Atenção ao plano: vários cobram justamente
por esse automatismo, mesmo com poucos assinantes. Vale conferir antes de criar conta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Crie uma lista por idioma.&lt;/strong&gt; O feed é por idioma, então a lista alimentada por ele
também é — quem assina lendo em inglês não deveria receber post em português.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pegue os campos reais do formulário, não o iframe.&lt;/strong&gt; Este é o passo onde é fácil se
enganar: provedores oferecem “compartilhar por iframe” ou um link pronto, mas o que
você precisa é do &lt;strong&gt;formulário HTML&lt;/strong&gt;. Se só houver o link, abra a página hospedada do
formulário e leia o HTML dela — lá estão as três coisas que importam:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;o &lt;code&gt;action&lt;/code&gt; (para onde o formulário posta);&lt;/li&gt;
&lt;li&gt;o &lt;strong&gt;nome do campo de e-mail&lt;/strong&gt;, que muitas vezes não é &lt;code&gt;email&lt;/code&gt; (a Brevo usa &lt;code&gt;EMAIL&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;os &lt;strong&gt;campos escondidos&lt;/strong&gt;, incluindo o &lt;strong&gt;honeypot anti-robô&lt;/strong&gt; — um campo que precisa
ser enviado &lt;strong&gt;vazio&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Postar sem esses campos é o pior tipo de falha: o provedor &lt;strong&gt;aceita&lt;/strong&gt; a requisição e
não cadastra ninguém. O formulário parece funcionar.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; NEWSLETTER&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  actionUrl: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    pt: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;https://provedor.exemplo/serve/AAA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    en: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;https://provedor.exemplo/serve/BBB&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  emailField: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;EMAIL&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  hiddenFields: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    pt: { locale: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;pt&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, email_address_check: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;    en: { locale: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;, email_address_check: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Idioma sem endpoint simplesmente não mostra formulário — melhor nenhum formulário do
que inscrever a pessoa na lista errada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feche o ciclo no painel:&lt;/strong&gt; crie uma integração de RSS-to-email por lista, apontando
para o feed correspondente (&lt;code&gt;/pt/rss.xml&lt;/code&gt;, &lt;code&gt;/en/rss.xml&lt;/code&gt;). A partir daí, publicar um
post envia o e-mail sozinho. Duas coisas a vigiar no primeiro disparo: muitos
provedores puxam vários itens de uma vez, e o seu feed já tem posts — confira quantos
ele pretende enviar antes de deixar rodar; e costuma haver uma janela de cerca de uma
hora entre publicar e disparar.&lt;/p&gt;
&lt;p&gt;Com JavaScript, o envio acontece em segundo plano e a pessoa fica na página; sem
JavaScript, o formulário posta normalmente. Nenhum dado de assinante passa pelo seu
site.&lt;/p&gt;
&lt;h3 id=&quot;95-consentimento-e-política-de-privacidade&quot;&gt;9.5 Consentimento e política de privacidade&lt;/h3&gt;
&lt;p&gt;Este bloco não liga integração nenhuma — ele governa o que as outras obrigam:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt; CONSENT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  required: &lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#6CB6FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  privacyUrl: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;/privacy&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  contact: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#96D0FF&quot;&gt;&quot;privacidade@seu-dominio.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F47067&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;contact&lt;/code&gt; é o endereço que a política oferece para pedidos de titular (LGPD, art. 18).
Crie a caixa antes de publicar: uma política que aponta para um e-mail inexistente é
pior do que não ter o campo.&lt;/p&gt;
&lt;p&gt;A página de privacidade &lt;strong&gt;se monta sozinha a partir da configuração&lt;/strong&gt;. Você não
escreve nem mantém esse texto: se o Google Analytics estiver ligado, aparece a seção
dele; se houver newsletter naquele idioma, aparece a seção da newsletter; se não
houver anúncios, some a frase que os menciona. E se &lt;strong&gt;nada&lt;/strong&gt; estiver ligado — sem
analytics, sem anúncios, sem comentários e sem formulário —, não existe página de
privacidade, nem link no rodapé, nem banner: um blog que não coleta nada não precisa
declarar nada.&lt;/p&gt;
&lt;p&gt;Vale ler a página depois de configurar tudo. Ela descreve o comportamento real do
site, mas quem responde pelo texto é você.&lt;/p&gt;
&lt;h3 id=&quot;96-busca&quot;&gt;9.6 Busca&lt;/h3&gt;
&lt;p&gt;Nada a configurar além de ligar ou desligar: &lt;code&gt;INTEGRATIONS.search = &quot;pagefind&quot;&lt;/code&gt; ou
&lt;code&gt;&quot;none&quot;&lt;/code&gt;. O índice é gerado no build, separado por idioma, e roda no navegador — não
existe servidor de busca para manter.&lt;/p&gt;
&lt;h2 id=&quot;10-rss&quot;&gt;10. RSS&lt;/h2&gt;
&lt;p&gt;Não tem o que configurar: o feed é gerado sozinho, &lt;strong&gt;um por idioma&lt;/strong&gt;, em
&lt;code&gt;/pt/rss.xml&lt;/code&gt; e &lt;code&gt;/en/rss.xml&lt;/code&gt;. Ele já sai anunciado no &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; de todas as páginas,
então leitores de feed encontram sozinhos, e há um ícone no rodapé. Título,
descrição e domínio vêm do &lt;code&gt;SITE&lt;/code&gt; — trocar a identidade no passo 2 já acerta o feed.&lt;/p&gt;
&lt;p&gt;Rascunhos nunca entram no feed.&lt;/p&gt;
&lt;h2 id=&quot;11-publicando&quot;&gt;11. Publicando&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;npm run build&lt;/code&gt; gera a pasta &lt;code&gt;dist/&lt;/code&gt; estática, que serve em &lt;strong&gt;qualquer&lt;/strong&gt;
hospedagem: armazenamento de objetos, CDN, host estático ou hospedagem
compartilhada tradicional.&lt;/p&gt;
&lt;p&gt;O template &lt;strong&gt;não traz&lt;/strong&gt; um workflow de deploy, de propósito: automação pertence a um
site concreto, com host e credenciais próprios, e um workflow que não consegue rodar
vira CI vermelho em todo fork antes de a pessoa ter decidido qualquer coisa. Quando
você tiver hospedagem, a seção &lt;strong&gt;Deploying&lt;/strong&gt; do &lt;code&gt;README&lt;/code&gt; descreve os dois caminhos
que cobrem hospedagem compartilhada — rsync por SSH e FTPS — com as armadilhas de
cada um.&lt;/p&gt;
&lt;p&gt;Antes de publicar, &lt;code&gt;npm test&lt;/code&gt; vale o minuto que leva: além de checar o build, ele
verifica se a sua configuração é coerente — idioma sem tradução, skin que não
existe, consentimento desligado com analytics ligado.&lt;/p&gt;
&lt;p&gt;Pronto — o esqueleto é seu. O próximo passo é o que mais importa:
&lt;a href=&quot;https://buildando.com/pt/posts/criando-posts/&quot;&gt;criar posts&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>instalação</category><category>configuração</category><category>guia</category></item><item><title>Criando posts no Buildando</title><link>https://buildando.com/pt/posts/criando-posts/</link><guid isPermaLink="true">https://buildando.com/pt/posts/criando-posts/</guid><description>Um post é uma pasta com um markdown. Veja o frontmatter, imagens colocadas, rascunhos e traduções — sem tocar em código.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Com o blog &lt;a href=&quot;https://buildando.com/pt/posts/instalando-e-personalizando/&quot;&gt;instalado e personalizado&lt;/a&gt;,
escrever é a parte fácil — e o motivo do template existir.&lt;/p&gt;
&lt;h2 id=&quot;um-post-é-uma-pasta&quot;&gt;Um post é uma pasta&lt;/h2&gt;
&lt;p&gt;Para publicar, crie um diretório em &lt;code&gt;src/content/posts/&lt;/code&gt; com um &lt;code&gt;index.md&lt;/code&gt; dentro.
Nada mais no projeto muda.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/content/posts/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  meu-primeiro-post/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    index.md      ← o conteúdo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    capa.png      ← imagens ficam ao lado do markdown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O &lt;strong&gt;nome da pasta&lt;/strong&gt; vira o endereço do post (o &lt;em&gt;slug&lt;/em&gt;): &lt;code&gt;meu-primeiro-post&lt;/code&gt; →
&lt;code&gt;/pt/posts/meu-primeiro-post/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;o-frontmatter&quot;&gt;O frontmatter&lt;/h2&gt;
&lt;p&gt;O bloco no topo do &lt;code&gt;index.md&lt;/code&gt; descreve o post. Três campos são &lt;strong&gt;obrigatórios&lt;/strong&gt; —
o build falha avisando qual post e qual campo, caso falte algum:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#6CB6FF;--shiki-dark-font-weight:bold&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;title: &quot;Título do post&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;description: &quot;Resumo em uma frase — vira o snippet de busca e o preview social.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;publishDate: 2026-07-20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;category: &quot;Boas Práticas&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;tags: [oo, testes]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;cover: ./capa.png        # imagem colocada na mesma pasta (opcional)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;coverAlt: &quot;Descrição da capa&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;draft: false             # true esconde da produção&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#6CB6FF;--shiki-dark-font-weight:bold&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;Seu conteúdo em &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-light-font-weight:bold;--shiki-dark:#ADBAC7;--shiki-dark-font-weight:bold&quot;&gt;**markdown**&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt; aqui.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Todo o resto tem padrão. O schema completo está em &lt;code&gt;src/content/config.ts&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;imagens&quot;&gt;Imagens&lt;/h2&gt;
&lt;p&gt;Coloque as imagens &lt;strong&gt;na pasta do post&lt;/strong&gt; e referencie por caminho relativo. No
build elas são &lt;strong&gt;otimizadas&lt;/strong&gt; e servidas em tamanhos responsivos (WebP), sem você
configurar nada:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;![&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#96D0FF;--shiki-dark-text-decoration:inherit&quot;&gt;Um diagrama&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#ADBAC7;--shiki-dark-text-decoration:underline&quot;&gt;./diagrama.png&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Um detalhe legal: se você &lt;strong&gt;não&lt;/strong&gt; definir uma &lt;code&gt;cover&lt;/code&gt;, o post ganha
&lt;strong&gt;automaticamente&lt;/strong&gt; um card social com a sua marca, gerado no build — assim todo
post fica com uma boa imagem ao ser compartilhado, mesmo sem você desenhar uma.&lt;/p&gt;
&lt;h2 id=&quot;rascunhos&quot;&gt;Rascunhos&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;draft: true&lt;/code&gt; mantém o post no repositório mas &lt;strong&gt;fora da produção&lt;/strong&gt;: ele aparece só
no &lt;code&gt;npm run dev&lt;/code&gt; e é excluído de páginas, listagens, facetas, sitemap, RSS e busca.
Ótimo para escrever com calma antes de publicar.&lt;/p&gt;
&lt;h2 id=&quot;idiomas-e-traduções&quot;&gt;Idiomas e traduções&lt;/h2&gt;
&lt;p&gt;Cada post declara seu idioma com &lt;code&gt;lang:&lt;/code&gt; e liga suas traduções com &lt;code&gt;translations:&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark-dimmed&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#22272e;color:#24292e;--shiki-dark:#adbac7; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;lang: pt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;translations:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#ADBAC7&quot;&gt;  en: my-first-post   # o slug da versão em inglês&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aí o seletor de idioma leva direto para a tradução. Se não houver tradução, ele
mantém o post e traduz só a interface da página.&lt;/p&gt;
&lt;h2 id=&quot;e-o-css&quot;&gt;E o CSS?&lt;/h2&gt;
&lt;p&gt;Não precisa. O markdown herda a &lt;strong&gt;tipografia do site&lt;/strong&gt; — títulos, listas, tabelas,
citações e blocos de código já saem estilizados. Escreva como você pensa.&lt;/p&gt;
&lt;p&gt;Pronto: apague os posts de exemplo, copie uma pasta como base e comece a escrever.&lt;/p&gt;</content:encoded><category>posts</category><category>markdown</category><category>guia</category></item></channel></rss>