<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt">
  <id>https://sprucepad.net/pt/feed.xml</id>
  <title type="text">sprucepad</title>
  <updated>2026-04-23T22:10:43.710Z</updated>
  <author>
    <name>Forest</name>
    <email>sprucepadhq@gmail.com</email>
    <uri>https://sprucepad.net/</uri>
  </author>
  <link href="https://sprucepad.net/pt/feed.xml" rel="alternate"/>
  <link href="https://sprucepad.net/pt/1.xml" rel="first"/>
  <link href="https://sprucepad.net/pt/1.xml" rel="last"/>
  <link href="https://sprucepad.net/pt/1.xml" rel="self"/>
  <subtitle type="text">sprucepad's blog posts in an atom feed.</subtitle>
  <entry>
    <id>astro-hello-world</id>
    <title type="text">Minha experiência usando Astro</title>
    <updated>2026-02-04T00:00:00.000Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="https://astro.build/" rel="noopener noreferrer" target="_blank"&gt;Astro&lt;/a&gt; é um framework web para sites focados em conteúdo, como blogs ou lojas de e-commerce. Ele gera HTML estático, ou no momento de compilação ou no momento da requisição, sem JavaScript por padrão. O que o torna diferente é que você &lt;em&gt;pode&lt;/em&gt; usar qualquer framework de JS se você quiser.&lt;/p&gt;
&lt;p&gt;Para esse site, eu decidi usá-lo junto com Svelte para as partes mais interativas, como as barras de pesquisa.&lt;/p&gt;
&lt;h2 id="estilos"&gt;Estilos&lt;/h2&gt;
&lt;p&gt;Para criar CSS, eu decidi usar o TailwindCSS. Essa decisão foi praticamente cara ou coroa, já que a experiência usando CSS vanilla no Astro é muito boa, já que os estilos só aplicam no componente que é usado.&lt;/p&gt;
&lt;p&gt;Para o design, recentemente, eu descobri o tema &lt;a href="https://www.neobrutalism.dev/" rel="noopener noreferrer" target="_blank"&gt;Neobrutalism&lt;/a&gt; para ShadCN e gostei bastante, e decidi segui-lo, já que combina bastante com pixel art.&lt;/p&gt;
&lt;h2 id="componentes"&gt;Componentes&lt;/h2&gt;
&lt;p&gt;Meu maior problema com HTML vanilla é a repetição. Por exemplo, se você tem um &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; no seu site, você tem que copiar e colar ele em todas as páginas que você quer. O Astro tem &lt;em&gt;componentes&lt;/em&gt;, que é um pedaço re-utilizável de HTML, CSS, e JS no servidor e navegador.&lt;/p&gt;
&lt;p&gt;O “HTML” em um componente Astro é JSX, e você pode usar variáveis. Por exemplo, eu tenho um componente com o nome de &lt;code&gt;&amp;lt;Button /&amp;gt;&lt;/code&gt;:&lt;/p&gt;

&lt;button class="neobrutal p-2 cursor-pointer hover:shadow-none transition-shadow bg-white text-black"&gt;Clique!&lt;/button&gt;
&lt;pre class="astro-code catppuccin-mocha" style="background-color:#1e1e2e;color:#cdd6f4;overflow-x:auto" tabindex="0" data-language="astro"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#94E2D5"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#F5C2E7"&gt;Button&lt;/span&gt;&lt;span style="color:#F9E2AF"&gt; class&lt;/span&gt;&lt;span style="color:#94E2D5"&gt;=&lt;/span&gt;&lt;span style="color:#A6E3A1"&gt;&amp;quot;bg-white text-black&amp;quot;&lt;/span&gt;&lt;span style="color:#94E2D5"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#CDD6F4"&gt;Clique!&lt;/span&gt;&lt;span style="color:#94E2D5"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#F5C2E7"&gt;Button&lt;/span&gt;&lt;span style="color:#94E2D5"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Que é um botão reutilizável; se eu quiser um botão com os mesmos estilos, eu simplesmente importo esse componente e uso.&lt;/p&gt;
&lt;h2 id="internacionalização"&gt;Internacionalização&lt;/h2&gt;
&lt;p&gt;O Astro tem internacionalização com uma configuração. Eu adicionei o &lt;em&gt;adapter&lt;/em&gt; para Vercel e configurei:&lt;/p&gt;
&lt;pre class="astro-code catppuccin-mocha" style="background-color:#1e1e2e;color:#cdd6f4;overflow-x:auto" tabindex="0" data-language="ts"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span style="color:#CDD6F4"&gt;i18n&lt;/span&gt;&lt;span style="color:#9399B2"&gt;:&lt;/span&gt;&lt;span style="color:#9399B2"&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#CDD6F4"&gt;  defaultLocale&lt;/span&gt;&lt;span style="color:#9399B2"&gt;:&lt;/span&gt;&lt;span style="color:#A6E3A1"&gt; &amp;quot;pt&amp;quot;&lt;/span&gt;&lt;span style="color:#9399B2"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#CDD6F4"&gt;  locales&lt;/span&gt;&lt;span style="color:#9399B2"&gt;:&lt;/span&gt;&lt;span style="color:#CDD6F4"&gt; [&lt;/span&gt;&lt;span style="color:#A6E3A1"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span style="color:#9399B2"&gt;,&lt;/span&gt;&lt;span style="color:#A6E3A1"&gt; &amp;quot;pt&amp;quot;&lt;/span&gt;&lt;span style="color:#CDD6F4"&gt;]&lt;/span&gt;&lt;span style="color:#9399B2"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#CDD6F4"&gt;  routing&lt;/span&gt;&lt;span style="color:#9399B2"&gt;:&lt;/span&gt;&lt;span style="color:#9399B2"&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#CDD6F4"&gt;    prefixDefaultLocale&lt;/span&gt;&lt;span style="color:#9399B2"&gt;:&lt;/span&gt;&lt;span style="color:#FAB387"&gt; true&lt;/span&gt;&lt;span style="color:#9399B2"&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#9399B2"&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span style="color:#9399B2"&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso cria um redirect da página inicial para &lt;code&gt;/pt/&lt;/code&gt; automaticamente, e a partir daí você pode duplicar as páginas em outras línguas.&lt;/p&gt;
&lt;h2 id="integração-com-svelte"&gt;Integração com Svelte&lt;/h2&gt;
&lt;p&gt;Eu acho incrível como você pode ter um site completamente estático, com um pouquinho de JavaScript onde necessário, em qualquer framework. Como a interatividade desse site é pequena, eu decidir usar Svelte, pois ele é um compilador e teria muito menos JS do que SolidJS ou React, por exemplo.&lt;/p&gt;
&lt;p&gt;Eu usei Svelte 5 no efeito de digitadora na &lt;a href="/"&gt;página inicial&lt;/a&gt; e em todas as barras de pesquisa (que são o mesmo componente).&lt;/p&gt;
&lt;h2 id="clientrouter-"&gt;&amp;lt;ClientRouter /&amp;gt;&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;&amp;lt;ClientRouter /&amp;gt;&lt;/code&gt; é um componente do Astro que adiciona Client-Side Routing ao seu site, resultando em navegações mais rápidas e permitindo transições entre cada página, com View Transitions.&lt;/p&gt;
&lt;p&gt;A única coisa que fiz para adicioná-lo foi colocar ele na &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; do meu layout.&lt;/p&gt;
&lt;h2 id="conteúdo"&gt;Conteúdo&lt;/h2&gt;
&lt;p&gt;O Astro deixa você escrever páginas em Markdown, sem precisar de usar HTML para escrever uma página de sobre, por exemplo. Ele também tem a &lt;em&gt;Content Layer&lt;/em&gt;, que são coleções de dados e/ou Markdown que podem ser usados para coisas como um blog ou galeria, e te dá a habilidade de usar Zod para validar esses dados.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Astro é um ótimo framework para sites focados em conteúdo. Ele lida com todas as frustrações que tenho com sites baseados no Next.js, com gerenciamento de conteúdo menos que ideal.&lt;/p&gt;
&lt;p&gt;Eu certamente usaria de novo. Mas, para coisas mais interativas, eu ainda prefiro a conveniência do Next e a habilidade de colocar vários componentes em um arquivo, que o Astro não tem.&lt;/p&gt;</content>
    <link href="https://sprucepad.net/pt/posts/astro-hello-world" rel="alternate"/>
    <published>2026-02-04T00:00:00.000Z</published>
  </entry>
</feed>