{"id":59141,"date":"2023-04-27T07:34:22","date_gmt":"2023-04-27T10:34:22","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=59141&#038;preview=true&#038;preview_id=59141"},"modified":"2023-10-27T03:04:30","modified_gmt":"2023-10-27T06:04:30","slug":"eleventy","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/","title":{"rendered":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)"},"content":{"rendered":"<p>Com o aumento dos <a href=\"https:\/\/kinsta.com\/pt\/blog\/geradores-de-site-estatico\/\">geradores de sites est\u00e1ticos (SSGs)<\/a> como o Eleventy, nunca foi t\u00e3o f\u00e1cil criar um <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-um-site-statico\/\">site est\u00e1tico<\/a> elegante e eficiente.<\/p>\n<p>Neste artigo, exploraremos como usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico impressionante e funcional sem precisar de uma linguagem ou banco de dados do lado do servidor.<\/p>\n<p>Voc\u00ea tamb\u00e9m aprender\u00e1 como implantar seu site est\u00e1tico diretamente do seu reposit\u00f3rio GitHub para a <a href=\"https:\/\/sevalla.com\/static-site-hosting\/\">hospedagem de site est\u00e1tico<\/a> da Kinsta, colocando seu site no ar rapidamente em um dom\u00ednio<em> .kinsta.page<\/em> gratuito.<\/p>\n<p>Aqui est\u00e1 uma <a href=\"http:\/\/eleventy-portfolio-h9ahf.kinsta.page\/\">demonstra\u00e7\u00e3o em tempo real<\/a>\u00a0do site de portf\u00f3lio est\u00e1tico que voc\u00ea criar\u00e1 com o Eleventy.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/11ty-portfolio-static-site.jpg\" alt=\"Stylish static portfolio website\" width=\"1600\" height=\"788\"><figcaption class=\"wp-caption-text\">Site de portf\u00f3lio est\u00e1tico elegante.<\/figcaption><\/figure>\n<p>Voc\u00ea pode acessar o <a href=\"https:\/\/github.com\/kinsta\/11ty-portfolio\" target=\"_blank\" rel=\"noopener noreferrer\">reposit\u00f3rio do GitHub<\/a> deste projeto se quiser dar uma olhada mais de perto.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que \u00e9 Eleventy?<\/h2>\n<p>O Eleventy, tamb\u00e9m conhecido como 11ty, \u00e9 um gerador de sites est\u00e1ticos que cria sites com base em <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-html\/\">HTML<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhores-praticas-css\/\">CSS<\/a> e <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a> sem a necessidade de bancos de dados e linguagens de programa\u00e7\u00e3o de <a href=\"https:\/\/kinsta.com\/pt\/blog\/backend-vs-frontend\/\">backend<\/a>.<\/p>\n<p>O Eleventy \u00e9 conhecido por sua simplicidade e flexibilidade, pois n\u00e3o obriga voc\u00ea a usar apenas uma linguagem ou framework de template. Ele suporta mais de 10 linguagens de template e permite que voc\u00ea use quantas quiser em um \u00fanico projeto:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/11ty-template-languages.jpg\" alt=\"Template languages supported by Eleventy\" width=\"1600\" height=\"226\"><figcaption class=\"wp-caption-text\">Onze linguagens de template.<\/figcaption><\/figure>\n<p>O Eleventy, como a maioria dos SSGs, permite que voc\u00ea crie o conte\u00fado do seu site est\u00e1tico usando componentes reutiliz\u00e1veis em vez de criar documentos HTML completos para cada p\u00e1gina.<\/p>\n\n<h2>Como instalar o Eleventy<\/h2>\n<p>\u00c9 f\u00e1cil instalar o Eleventy. Veja como:<\/p>\n<ol start=\"1\">\n<li>Certifique-se de que voc\u00ea tenha o <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a> instalado em seu computador. Voc\u00ea pode verificar executando o comando <code>node -v<\/code> em seu terminal. Voc\u00ea n\u00e3o est\u00e1 dispon\u00edvel? Veja <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-instalar-o-node-js\/\">como instalar o Node.js<\/a> em seu computador.<\/li>\n<li>Crie um novo diret\u00f3rio para seu projeto.<\/li>\n<li>Abra o terminal e execute o comando <code>npm init -y<\/code> no diret\u00f3rio do seu projeto para inicializar um novo projeto Node.js, criando um arquivo <strong>package.json<\/strong> com as configura\u00e7\u00f5es padr\u00e3o.<\/li>\n<li>Execute o comando <code>npm install @11ty\/eleventy --save-dev<\/code> para instalar o pacote como uma depend\u00eancia de desenvolvimento em seu projeto.<\/li>\n<li>E pronto! Agora voc\u00ea pode executar o Eleventy executando o comando <code>npx @11ty\/eleventy<\/code> no diret\u00f3rio do seu projeto. Isso gerar\u00e1 os arquivos do site e os enviar\u00e1 para um diret\u00f3rio <strong>_site<\/strong> (ou o diret\u00f3rio configurado por voc\u00ea) na pasta do projeto.<\/li>\n<\/ol>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> Quando voc\u00ea executar o comando <code>npx @11ty\/eleventy<\/code>. Voc\u00ea obter\u00e1 esta sa\u00edda:<\/p>\n<pre><code class=\"language-bash\">[11ty] Wrote 0 files in 0.01 seconds (v2.0.0)<\/code><\/pre>\n<p>Aqui, 0 arquivos s\u00e3o gravados porque n\u00e3o h\u00e1 templates na pasta do seu projeto.<\/p>\n<h2>Comandos e configura\u00e7\u00e3o do Eleventy<\/h2>\n<p>Agora voc\u00ea tem seu projeto Eleventy criado, mas isso n\u00e3o \u00e9 tudo. Voc\u00ea precisa criar algumas configura\u00e7\u00f5es e conhecer alguns comandos b\u00e1sicos para o seu site est\u00e1tico que podem ser servidos no navegador.<\/p>\n<h3>Comandos do Eleventy<\/h3>\n<p>Aqui est\u00e3o alguns dos principais comandos do Eleventy que voc\u00ea deve conhecer:<\/p>\n<ul>\n<li><code>npx @11ty\/eleventy<\/code>: Esse comando \u00e9 usado para criar seu site e enviar o resultado para a pasta <strong>_site<\/strong> (ou qualquer pasta que voc\u00ea tenha configurado como diret\u00f3rio de sa\u00edda).<\/li>\n<li><code>npx @11ty\/eleventy --serve<\/code>: Esse comando iniciar\u00e1 um servidor local para que voc\u00ea possa visualizar o site no navegador. Quando voc\u00ea fizer qualquer altera\u00e7\u00e3o no site, o projeto ser\u00e1 automaticamente reconstru\u00eddo e atualizado no navegador.<\/li>\n<li><code>npx @11ty\/eleventy --serve --port=8081<\/code>: Este comando inicia o servidor Eleventy e especifica uma porta personalizada na qual o servidor ficar\u00e1 ouvindo (Listen).<\/li>\n<li><code>npx @11ty\/eleventy --watch<\/code>: Esse comando observar\u00e1 os arquivos do projeto em busca de altera\u00e7\u00f5es e reconstruir\u00e1 automaticamente o site quando necess\u00e1rio.<\/li>\n<\/ul>\n<p>Voc\u00ea n\u00e3o precisa memorizar esses comandos, pois pode adicion\u00e1-los aos comandos gerais no objeto scripts do seu arquivo package.json:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token string\">\"scripts\"<\/span><span class=\"token builtin class-name\">:<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token string\">\"build\"<\/span><span class=\"token builtin class-name\">:<\/span> <span class=\"token string\">\"npx @11ty\/eleventy\"<\/span>,\n    <span class=\"token string\">\"start\"<\/span><span class=\"token builtin class-name\">:<\/span> <span class=\"token string\">\"npx @11ty\/eleventy --serve\"<\/span>,\n    <span class=\"token string\">\"watch\"<\/span><span class=\"token builtin class-name\">:<\/span> <span class=\"token string\">\"npx @11ty\/eleventy --watch\"<\/span>\n  <span class=\"token punctuation\">}<\/span>,<\/code><\/pre>\n<p>Agora voc\u00ea pode usar <code>npm start<\/code> para atender ao seu aplicativo em vez de <code>npx @11ty\/eleventy --serve<\/code>, e tamb\u00e9m pode executar <code>npm run build<\/code> em vez de <code>npx @11ty\/eleventy<\/code>.<\/p>\n<h3>Como configurar seu site est\u00e1tico com o Eleventy<\/h3>\n<p>O Eleventy \u00e9 &#8220;zero-config&#8221; por padr\u00e3o e tem op\u00e7\u00f5es de configura\u00e7\u00e3o flex\u00edveis. Aqui est\u00e3o algumas das principais op\u00e7\u00f5es de configura\u00e7\u00e3o que voc\u00ea deve conhecer:<\/p>\n<ul>\n<li><strong>input:<\/strong> Essa op\u00e7\u00e3o permite que voc\u00ea especifique o diret\u00f3rio dos arquivos do seu projeto. A pr\u00e1tica recomendada \u00e9 que voc\u00ea use <strong>src<\/strong>.<\/li>\n<li><strong>output:<\/strong> Essa op\u00e7\u00e3o permite que voc\u00ea especifique o diret\u00f3rio para o qual o site criado deve ser enviado. Por padr\u00e3o, o Eleventy envia a sa\u00edda para a pasta <strong>_site<\/strong>. (N\u00e3o h\u00e1 necessidade de alterar isso).<\/li>\n<li><strong>templateFormats:<\/strong> Essa op\u00e7\u00e3o permite que voc\u00ea especifique quais extens\u00f5es de arquivo devem ser processadas como templates. Por padr\u00e3o, o Eleventy processa arquivos <strong>.html<\/strong>, <strong>.njk<\/strong> e <strong>.md<\/strong> como templates.<\/li>\n<\/ul>\n<p>Esses s\u00e3o apenas alguns dos comandos e op\u00e7\u00f5es de configura\u00e7\u00e3o dispon\u00edveis no Eleventy. Para configurar seu projeto Eleventy, crie um arquivo <strong>.eleventy.js<\/strong> na raiz do seu projeto. Depois, cole esse c\u00f3digo no arquivo para dar ao seu projeto uma estrutura que inclui um diret\u00f3rio de entrada:<\/p>\n<pre class=\"language-js\"><code class=\"language-js\">module<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">exports<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">eleventyConfig<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token literal-property property\">dir<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\n            <span class=\"token literal-property property\">input<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'src'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> <code>eleventyConfig<\/code> \u00e9 passado como um argumento, fornecendo mais op\u00e7\u00f5es de configura\u00e7\u00e3o que ser\u00e3o usadas posteriormente neste projeto.<\/p>\n<h2>Como visualizar um site Eleventy<\/h2>\n<p>Agora voc\u00ea conhece alguns comandos-chave que podem ser usados para visualizar seu site est\u00e1tico Eleventy, mas quando voc\u00ea executa o comando <code>npm run build<\/code> (<code>npx @11ty\/eleventy<\/code>), nada \u00e9 exibido. Isso acontece porque voc\u00ea n\u00e3o tem um arquivo de template.<\/p>\n<p>Voc\u00ea pode criar uma pasta <strong>src<\/strong> na pasta raiz do seu projeto e, em seguida, criar alguns arquivos de template, como <strong>index.html<\/strong>, ou usar a linguagem de template de sua prefer\u00eancia para representar a p\u00e1gina inicial:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"UTF-8\" \/&gt;\n        &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;\n        &lt;title&gt;Eleventy Static Site&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        Hello World!\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Se voc\u00ea executar o comando <code>npm run build<\/code>, uma pasta <strong>_site<\/strong> ser\u00e1 criada com o arquivo est\u00e1tico gerado. Com certeza voc\u00ea vai querer que isso seja exibido no seu navegador e ativar alguns recursos de atualiza\u00e7\u00e3o autom\u00e1tica. Isso \u00e9 poss\u00edvel executando o comando <code>npx @11ty\/eleventy --serve<\/code>, que voc\u00ea agora configurou como <code>npm start<\/code>. Isso disponibilizar\u00e1 seu site em http:\/\/localhost:8080\/.<\/p>\n<h2>Como criar um site de portf\u00f3lio est\u00e1tico com o Eleventy<\/h2>\n<p>Agora voc\u00ea sabe como criar um site est\u00e1tico com o Eleventy. Vamos criar o projeto de portf\u00f3lio.<\/p>\n<p>Voc\u00ea pode criar um novo projeto Eleventy do zero ou <a href=\"https:\/\/github.com\/olawanlejoel\/11ty-portfolio-starter\">usar nossos arquivos iniciais<\/a>, que incluem as imagens, CSS e conte\u00fado para este projeto, para acelerar as coisas. No GitHub,<strong> Use this template<\/strong> &gt; <strong>Create a new repository<\/strong> para copiar esses ativos e os arquivos de configura\u00e7\u00e3o inicial para um novo reposit\u00f3rio pr\u00f3prio e, em seguida, baix\u00e1-los para sua m\u00e1quina local.<\/p>\n<p>Seu projeto ter\u00e1 a seguinte estrutura:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\">\u251c\u2500\u2500 node_modules\/\n\u251c\u2500\u2500 public\/\n\u251c\u2500\u2500 src\/\n     \u251c\u2500\u2500 _includes\n     \u251c\u2500\u2500 layouts\n     \u251c\u2500\u2500 assets\n     \u251c\u2500\u2500 css\n     \u251c\u2500\u2500 projects\n     \u2514\u2500\u2500 index.njk\n\u251c\u2500\u2500 .eleventy.js\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 package.lock.json\n\u2514\u2500\u2500 package.json<\/code><\/pre>\n<h3>Como usar templates no Eleventy<\/h3>\n<p>Ao usar o Eleventy, h\u00e1 tr\u00eas tipos principais de templates que voc\u00ea precisa entender. Esses templates podem ser criados com o Nunjucks, que permite que voc\u00ea defina vari\u00e1veis, loops, condicionais e outras l\u00f3gicas que podem ser usadas para gerar o conte\u00fado da p\u00e1gina dinamicamente.<\/p>\n<ul>\n<li><strong>Templates de p\u00e1gina:<\/strong> Eles definem a estrutura e o conte\u00fado de p\u00e1ginas individuais em seu site.<\/li>\n<li><strong>Templates de layout:<\/strong> Definem a estrutura geral e o design da(s) p\u00e1gina(s) do seu site. Geralmente incluem elementos comuns, como cabe\u00e7alhos, rodap\u00e9s, menus de navega\u00e7\u00e3o e barras laterais, que s\u00e3o compartilhados em v\u00e1rias p\u00e1ginas.<\/li>\n<li><strong>Templates partials:<\/strong> Definem se\u00e7\u00f5es pequenas e reutiliz\u00e1veis da marca\u00e7\u00e3o HTML do seu site. S\u00e3o usados para definir elementos comuns, como cabe\u00e7alhos, rodap\u00e9s, menus de navega\u00e7\u00e3o e barras laterais, que podem ser inclu\u00eddos em templates de layout e de p\u00e1gina.<\/li>\n<\/ul>\n<p>Agora que voc\u00ea entende cada um desses tipos de templates, vamos criar templates para o site de portf\u00f3lio est\u00e1tico.<\/p>\n<h4>Como criar layouts no Eleventy<\/h4>\n<p>Dentro do diret\u00f3rio <strong>src<\/strong>, crie um diret\u00f3rio <strong>_includes<\/strong>. Nele, voc\u00ea encontrar\u00e1 todos os nossos layouts e parti\u00e7\u00f5es.<\/p>\n<p>Voc\u00ea pode criar uma pasta de <strong>layouts<\/strong> para organizar todos os seus templates, usando sua linguagem de template preferida, como Nunjucks.<\/p>\n<p>Crie um arquivo\u00a0<strong>base.njk<\/strong>\u00a0para conter o layout geral de todas as suas p\u00e1ginas.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"UTF-8\" \/&gt;\n        &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;\n        &lt;link rel=\"icon\" href=\"\/assets\/favicon.jpeg\" \/&gt;\n        &lt;link\n            rel=\"stylesheet\"\n            href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.2.1\/css\/all.min.css\"\n            integrity=\"sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf\/nwasF0nqhPay5w\/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==\"\n            crossorigin=\"anonymous\"\n            referrerpolicy=\"no-referrer\"\n        \/&gt;\n        &lt;link rel=\"stylesheet\" href=\"\/css\/global.css\" \/&gt;\n        &lt;title&gt;J.'s Portfolio&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;div&gt;\n            {{ content | safe }}\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>No c\u00f3digo acima, uma marca\u00e7\u00e3o HTML geral \u00e9 criada e a Font Awesome \u00e9 inclu\u00edda de um CDN para que voc\u00ea possa ter acesso aos \u00edcones. Al\u00e9m disso, a vari\u00e1vel content \u00e9 passada para que voc\u00ea inclua todo o conte\u00fado de qualquer p\u00e1gina que use esse layout.<\/p>\n<p>Mas essa n\u00e3o \u00e9 a hist\u00f3ria completa do layout. Seu layout ter\u00e1 algumas se\u00e7\u00f5es que aparecer\u00e3o em todas as p\u00e1ginas, como a barra de navega\u00e7\u00e3o e o rodap\u00e9. Vamos criar partials para cada uma dessas se\u00e7\u00f5es.<\/p>\n<h4>Como usar partials no Eleventy<\/h4>\n<p>Todos os partials s\u00e3o armazenados no diret\u00f3rio <strong>_includes<\/strong>. Para uma organiza\u00e7\u00e3o adequada, voc\u00ea pode armazen\u00e1-los em uma pasta de <strong>componentes<\/strong> dentro do diret\u00f3rio <strong>_includes<\/strong>. Crie um arquivo <strong>navbar.njk<\/strong> e armazene o c\u00f3digo abaixo para seus Partials de Navbar.<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"nav-container\"&gt;\n    &lt;div class=\"logo\"&gt;\n        &lt;a href=\"\/\"&gt;\n            J.\n        &lt;\/a&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"nav\"&gt;\n        &lt;a href=\"\/projects\" class=\"link\"&gt;\n            Projects\n        &lt;\/a&gt;\n        &lt;a href=\"https:\/\/docs.google.com\/document\/d\/10ZosQ38Z3804KYPcb_aZp9bceoXK-q3GrkHjYshqIRE\/edit?usp=sharing\" class=\"cta-btn\"&gt;Resume&lt;\/a&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>A seguir, crie um arquivo <strong>footer.njk<\/strong> para os seus Partials de Rodap\u00e9:<\/p>\n<pre><code class=\"language-html\">&lt;hr \/&gt;\n&lt;div class=\"footer-container\"&gt;\n    &lt;p&gt;\u00a9 2023 Joel's Portfolio&lt;\/p&gt;\n    &lt;div class=\"social_icons\"&gt;\n        &lt;a\n            href=\"https:\/\/twitter.com\/olawanle_joel\"\n            aria-label=\"Twitter\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n        &gt;\n            &lt;i class=\"fa-brands fa-twitter\"&gt;&lt;\/i&gt;\n        &lt;\/a&gt;\n        &lt;a\n            href=\"https:\/\/github.com\/olawanlejoel\"\n            aria-label=\"GitHub\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n        &gt;\n            &lt;i class=\"fa-brands fa-github\"&gt;&lt;\/i&gt;\n        &lt;\/a&gt;\n        &lt;a\n            href=\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\"\n            aria-label=\"LinkedIn\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n        &gt;\n            &lt;i class=\"fa-brands fa-linkedin\"&gt;&lt;\/i&gt;\n        &lt;\/a&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Adicione esses partials \u00e0 sua p\u00e1gina ou template de layout usando a declara\u00e7\u00e3o <code>{% include %}<\/code>. Veja como ficar\u00e1 o template <strong>layouts\/base.njk<\/strong> quando voc\u00ea incluir os Partials de Navbar e Rodap\u00e9:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"UTF-8\" \/&gt;\n        &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;\n        &lt;link rel=\"icon\" href=\"\/assets\/favicon.jpeg\" \/&gt;\n        &lt;link\n            rel=\"stylesheet\"\n            href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.2.1\/css\/all.min.css\"\n            integrity=\"sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf\/nwasF0nqhPay5w\/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==\"\n            crossorigin=\"anonymous\"\n            referrerpolicy=\"no-referrer\"\n        \/&gt;\n        &lt;link rel=\"stylesheet\" href=\"\/css\/global.css\" \/&gt;\n        &lt;title&gt;J.'s Portfolio&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;div&gt;\n            {% include \"components\/navbar.njk\" %}\n                {{ content | safe }}\n            {% include \"components\/footer.njk\" %}\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Quando voc\u00ea executar o comando <code>npm start<\/code>, esse layout n\u00e3o aparecer\u00e1 porque n\u00e3o foi adicionado a um template de p\u00e1gina. Crie um template de p\u00e1gina e adicione esse layout.<\/p>\n<h4>Como criar templates de p\u00e1gina no Eleventy<\/h4>\n<p>Na pasta <strong>src<\/strong>, crie um arquivo <strong>index.njk<\/strong> para servir como p\u00e1gina inicial do site do seu portf\u00f3lio. Essa p\u00e1gina usar\u00e1 o layout b\u00e1sico:<\/p>\n<pre><code class=\"language-html\">---\nlayout: layouts\/base.njk\ntitle: Home\n---\n&lt;h1&gt; This is the {{title}} Page. &lt;\/h1&gt;<\/code><\/pre>\n<p>Quando voc\u00ea executar o comando <code>npm start<\/code>, seu site est\u00e1tico ser\u00e1 carregado em <strong>http:\/\/localhost:8080\/<\/strong>. Esta \u00e9 a apar\u00eancia da sa\u00edda:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-home-page.jpg\" alt=\"Page Template without styling\" width=\"1600\" height=\"470\"><figcaption class=\"wp-caption-text\">Modelo de p\u00e1gina sem estilo.<\/figcaption><\/figure>\n<h3>Como usar CSS e imagens no Eleventy<\/h3>\n<p>Voc\u00ea perceber\u00e1 que no arquivo <strong>layouts\/base.njk<\/strong>, um arquivo CSS \u00e9 vinculado para estilizar a p\u00e1gina do portf\u00f3lio, mas quando o site \u00e9 carregado, os estilos CSS n\u00e3o s\u00e3o afetados porque o arquivo CSS n\u00e3o foi adicionado \u00e0 pasta<strong>_site<\/strong>.<\/p>\n<p>Para fazer o CSS funcionar, configure no seu arquivo <strong>.eleventy.js<\/strong> usando o par\u00e2metro <code>eleventyConfig<\/code>. Isso permite que o Eleventy saiba que o(s) arquivo(s) CSS existe(m) e tamb\u00e9m fique atento a poss\u00edveis altera\u00e7\u00f5es no arquivo CSS.<\/p>\n<p>Na pasta <strong>src<\/strong>, voc\u00ea pode criar uma pasta <strong>css<\/strong> para armazenar todos os arquivos CSS que usar\u00e1 no seu projeto, mas, para este artigo, voc\u00ea pode usar um arquivo CSS &#8211; <a href=\"https:\/\/github.com\/kinsta\/11ty-portfolio\/blob\/starter\/src\/css\/global.css\" target=\"_blank\" rel=\"noopener noreferrer\">global.css<\/a>. Voc\u00ea pode ent\u00e3o configurar a pasta <strong>css<\/strong> para que ela configure todos os arquivos na pasta:<\/p>\n<pre><code class=\"language-js\">eleventyConfig.addPassthroughCopy('src\/css');\neleventyConfig.addWatchTarget('src\/css');<\/code><\/pre>\n<p>O mesmo vale para imagens. Se voc\u00ea adicionar alguma imagem na sua p\u00e1gina, ela n\u00e3o aparecer\u00e1 at\u00e9 que voc\u00ea configure a pasta onde suas imagens est\u00e3o armazenadas. Crie uma pasta de <strong>assets<\/strong> para armazenar todas as suas imagens e configure essa pasta.<\/p>\n<pre><code class=\"language-js\">eleventyConfig.addPassthroughCopy('src\/assets');<\/code><\/pre>\n<p>\u00c9 assim que o seu arquivo de configura\u00e7\u00e3o ficar\u00e1 agora:<\/p>\n<pre><code class=\"language-js\">module.exports = function (eleventyConfig) {\n    eleventyConfig.addPassthroughCopy('src\/assets');\n    eleventyConfig.addPassthroughCopy('src\/css');\n    eleventyConfig.addWatchTarget('src\/css');\n\n    return {\n        dir: {\n            input: 'src',\n        },\n    };\n};<\/code><\/pre>\n<p>Quando voc\u00ea executar <code>npm start<\/code>, o estilo CSS funcionar\u00e1 e sua p\u00e1gina inicial ter\u00e1 a seguinte apar\u00eancia:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-home-page-with-css.jpg\" alt=\"Appearance of the template when you add layout\" width=\"1600\" height=\"436\"><figcaption class=\"wp-caption-text\">Apar\u00eancia do template depois que o layout for adicionado.<\/figcaption><\/figure>\n<h2>Cria\u00e7\u00e3o de partials e adi\u00e7\u00e3o \u00e0 p\u00e1gina inicial<\/h2>\n<p>Agora voc\u00ea conseguiu criar um layout e adicion\u00e1-lo \u00e0 sua p\u00e1gina inicial (<strong>index.njk<\/strong>). Vamos personalizar a p\u00e1gina inicial para conter algumas informa\u00e7\u00f5es sobre voc\u00ea, como mais informa\u00e7\u00f5es sobre voc\u00ea, suas habilidades e informa\u00e7\u00f5es de contato.<\/p>\n<p>Voc\u00ea pode decidir adicionar seu c\u00f3digo e marca\u00e7\u00f5es diretamente ao template <strong>index.njk<\/strong>, mas vamos criar partials individuais para as informa\u00e7\u00f5es Hero, About, skills e contact.<\/p>\n<h3>Os partials do Hero<\/h3>\n<p>Esta \u00e9 a primeira se\u00e7\u00e3o abaixo da barra de navega\u00e7\u00e3o, cujo objetivo principal \u00e9 dar aos usu\u00e1rios uma ideia do que \u00e9 o site.<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"hero-container\"&gt;\n    &lt;img src='assets\/profile.jpeg' class=\"profile-img\" alt=\"Joe's personal headshot\" \/&gt;\n    &lt;div class=\"hero-text\"&gt;\n        &lt;h1&gt;Hey, I'm Joe \ud83d\udc4b&lt;\/h1&gt;\n        &lt;p&gt;\n            I'm a software developer based in Lagos, Nigeria. I specialize in building (and occasionally designing) exceptional websites, applications, and everything in between.\n        &lt;\/p&gt;\n        &lt;div class=\"social-icons\"&gt;\n            &lt;a href=\"https:\/\/twitter.com\/olawanle_joel\"&gt;\n                &lt;i class=\"fa-brands fa-twitter\"&gt;&lt;\/i&gt;\n            &lt;\/a&gt;\n            &lt;a href=\"https:\/\/github.com\/olawanlejoel\"&gt;\n                &lt;i class=\"fa-brands fa-github\"&gt;&lt;\/i&gt;\n            &lt;\/a&gt;\n            &lt;a href=\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\"&gt;\n                &lt;i class=\"fa-brands fa-linkedin\"&gt;&lt;\/i&gt;\n            &lt;\/a&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Alguns detalhes sobre voc\u00ea est\u00e3o inclu\u00eddos no c\u00f3digo acima, juntamente com alguns \u00edcones sociais para conectar links aos seus perfis de m\u00eddia social.<\/p>\n<p>Os partials do Hero devem ter a seguinte apar\u00eancia:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-hero-partials.jpg\" alt=\"The Hero partials display basic catchy details about the developer\" width=\"1600\" height=\"680\"><figcaption class=\"wp-caption-text\">Exibi\u00e7\u00e3o do Hero.<\/figcaption><\/figure>\n<p>Voc\u00ea pode adicionar mais conte\u00fado \u00e0 se\u00e7\u00e3o Hero, alterar os estilos no arquivo <strong>css\/globals.css<\/strong> ou at\u00e9 mesmo criar sua pr\u00f3pria vers\u00e3o dessa se\u00e7\u00e3o.<\/p>\n<h3>Os partials Sobre<\/h3>\n<p>A se\u00e7\u00e3o Sobre fornece \u00e0s pessoas que visitam seu portf\u00f3lio mais informa\u00e7\u00f5es sobre voc\u00ea em quantos par\u00e1grafos voc\u00ea desejar. Ela pode ser uma p\u00e1gina separada se voc\u00ea tiver mais informa\u00e7\u00f5es para contar.<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"about-container\"&gt;\n    &lt;h2&gt;About Me&lt;\/h2&gt;\n    &lt;div class=\"flex-about\"&gt;\n        &lt;div class=\"about-text\"&gt;\n            &lt;p&gt;\n                As a developer, I have always been passionate about creating elegant and effective solutions to complex problems. I have a strong foundation in software development, with a focus on web technologies such as HTML, CSS, and JavaScript. I enjoy working on both the front-end and back-end of applications, and I am always looking for ways to optimize performance, improve user experience, and ensure the highest level of code quality.\n            &lt;\/p&gt;\n            &lt;p&gt;Throughout my career, I have worked on a wide range of projects, from simple static websites to complex enterprise-level applications. I am experienced in working with a variety of development tools and frameworks, including React, Angular, Vue.js, Node.js, and Laravel. I am always eager to learn and explore new technologies, and I am constantly seeking out opportunities to improve my skills and knowledge.&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"about-img\"&gt;\n            &lt;Image src='\/assets\/about.jpeg' class=\"profile-img\" alt=\"Joe and animal relaxing and having fun\" \/&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>O c\u00f3digo cont\u00e9m informa\u00e7\u00f5es sobre voc\u00ea (uma imagem e algum texto). Esta \u00e9 a apar\u00eancia que a se\u00e7\u00e3o Sobre deve ter:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-about-partials.jpg\" alt=\"Appearance of the about partials.\" width=\"1600\" height=\"704\"><figcaption class=\"wp-caption-text\">Sobre os partials.<\/figcaption><\/figure>\n<h3>Os partials de Habilidades<\/h3>\n<p>Esta se\u00e7\u00e3o \u00e9 usada para exibir as tecnologias que voc\u00ea usa ou adora usar.<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"skills-container\"&gt;\n    &lt;h2&gt;Skills&lt;\/h2&gt;\n    &lt;div class=\"grid-skills\"&gt;\n        &lt;div class=\"skill-card html\"&gt;\n            &lt;i class=\"fa-brands fa-html5 html-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;HTML&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"skill-card css\"&gt;\n            &lt;i class=\"fa-brands fa-css3-alt css-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;CSS&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"skill-card js\"&gt;\n            &lt;i class=\"fa-brands fa-js-square js-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;JavaScript&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"skill-card react\"&gt;\n            &lt;i class=\"fa-brands fa-react react-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;React&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"skill-card node\"&gt;\n            &lt;i class=\"fa-brands fa-node-js node-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;Node&lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"skill-card python\"&gt;\n            &lt;i class=\"fa-brands fa-python python-icon\"&gt;&lt;\/i&gt;\n            &lt;p&gt;Python&lt;\/p&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>O c\u00f3digo acima cria um cart\u00e3o para conter o \u00edcone de tecnologia com fonte incr\u00edvel e o nome de cada habilidade. Voc\u00ea tamb\u00e9m pode adicionar mais estilos e modificar o c\u00f3digo para torn\u00e1-lo mais atraente e distinto. \u00c9 assim que a se\u00e7\u00e3o de habilidades deve ficar:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-skills-partials.jpg\" alt=\"Skills partials showing all added skills\" width=\"1600\" height=\"446\"><figcaption class=\"wp-caption-text\">Partials de habilidades.<\/figcaption><\/figure>\n<h3>Os partials de Contato<\/h3>\n<p>J\u00e1 que isso \u00e9 um portf\u00f3lio, voc\u00ea deveria adicionar uma forma dos poss\u00edveis clientes\/empregadores entrarem em contato com voc\u00ea. Uma maneira seria adicionar um e-mail.<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"contact-container\"&gt;\n    &lt;h2&gt;Get In Touch&lt;\/h2&gt;\n    &lt;p&gt;If you want us to work together, have any question or want me to speak at your event, my inbox is always open. Whether just want to say hi, I'll try my best to get back to you! Cheers!&lt;\/p&gt;\n    &lt;a href=\"mailto:joelolawanle@kinsta.com\" class='cta-btn'&gt;Say Hello&lt;\/a&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Substitua o endere\u00e7o de e-mail na tag <code>a<\/code> pelo seu pr\u00f3prio, de modo que o bot\u00e3o inicie um aplicativo de e-mail para que as pessoas enviem uma mensagem para voc\u00ea.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/portfolio-contact-partials.jpg\" alt=\"Contact partials display a little information and a cta button\" width=\"1600\" height=\"318\"><figcaption class=\"wp-caption-text\">Partials de Contato.<\/figcaption><\/figure>\n<p>Voc\u00ea criou com \u00eaxito todos os partials para sua p\u00e1gina inicial. Em seguida, voc\u00ea precisa inclu\u00ed-los no arquivo <strong>index.njk<\/strong> para que possam ser exibidos na p\u00e1gina inicial:<\/p>\n<pre><code class=\"language-html\">---\nlayout: layouts\/base.njk\ntitle: Home\n---\n{% include \"components\/hero.njk\" %}\n{% include \"components\/about.njk\" %}\n{% include \"components\/skills.njk\" %}\n{% include \"components\/contact.njk\" %}<\/code><\/pre>\n<p>Quando voc\u00ea executar o comando <code>npm start<\/code>, sua p\u00e1gina inicial exibir\u00e1 todos os Partials adicionadas de acordo.<\/p>\n<h3>Como usar as cole\u00e7\u00f5es no Eleventy<\/h3>\n<p>Na Eleventy, as cole\u00e7\u00f5es s\u00e3o uma forma de agrupar conte\u00fado relacionado para que voc\u00ea possa gerar p\u00e1ginas com base nesse conte\u00fado. Por exemplo, se voc\u00ea tiver arquivos markdown de conte\u00fado semelhante (artigos de blog) armazenados em uma pasta de blog do seu projeto, poder\u00e1 usar cole\u00e7\u00f5es para busc\u00e1-los e exibir uma lista de todo o conte\u00fado. Al\u00e9m disso, voc\u00ea pode criar um layout para lidar com como esses conte\u00fados s\u00e3o exibidos.<\/p>\n<p>As cole\u00e7\u00f5es s\u00e3o definidas no arquivo de configura\u00e7\u00e3o <strong>.eleventy.js<\/strong> e podem incluir dados de v\u00e1rias fontes, como arquivos markdown ou JSON.<\/p>\n<p>Para este site de portf\u00f3lio, vamos criar um diret\u00f3rio de <strong>projetos<\/strong> no diret\u00f3rio <strong>src<\/strong>, para armazenar o conte\u00fado markdown de cada projeto. Esse conte\u00fado incluir\u00e1 detalhes sobre o projeto, o problema resolvido, as tecnologias usadas, os desafios encontrados e as li\u00e7\u00f5es aprendidas.<\/p>\n<p>Voc\u00ea pode criar um arquivo markdown com o nome do projeto (<strong>quotes-generator.md<\/strong>) e colar o c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-md\">---\ntitle: Quotes Generator\ndescription: \"Helps you generates quotes from about 1600 quotes written by different authors . Quotes are automatically copied to your clipboards.\"\ngitHubURL: \"https:\/\/github.com\/olawanlejoel\/random-quote-generator\"\nimage: \"\/assets\/quotes-banner.jpeg\"\n---\n\nThe quotes generator project is a software tool designed to display random inspirational or thought-provoking quotes to users. This project aims to solve the problem of lack of motivation or inspiration by providing users with a quick and easy way to access inspiring quotes.\n\n### Technologies Used\nThe technologies used in this project include HTML, CSS, and JavaScript. The application utilizes an API to fetch random quotes and display them to the user.\n\n### Challenges and Lessons Learned\nOne of the main challenges faced during this project was designing the user interface to be visually appealing and responsive on different devices. The team had to consider various design elements such as font sizes, colors, and layout to create a user-friendly and aesthetically pleasing interface.\n\nAnother challenge was handling errors and edge cases such as network connectivity issues or invalid API responses. The team had to implement error handling and fallback mechanisms to ensure that the application would continue to function smoothly under various conditions.\n\nThroughout the project, the team learned valuable lessons about front-end development, such as the importance of clean and efficient code, effective debugging and troubleshooting, and responsive design principles. They also learned the importance of utilizing APIs to access and display data from external sources.\n\nOverall, the quotes generator project was a valuable learning experience that allowed the team to develop their technical and creative skills, and create a useful tool for users looking for daily inspiration or motivation.<\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> se voc\u00ea usou o template inicial, j\u00e1 deve t\u00ea-los, caso contr\u00e1rio, poder\u00e1 copi\u00e1-los do diret\u00f3rio de projetos do nosso <a href=\"https:\/\/github.com\/kinsta\/11ty-portfolio\/tree\/starter\/src\/projects\" target=\"_blank\" rel=\"noopener noreferrer\">template inicial no GitHub<\/a>.<\/p>\n<p>O frontmatter no topo desses arquivos torna os valores dispon\u00edveis para serem injetados nos seus templates.<\/p>\n<p>Como esses arquivos Markdown est\u00e3o no diret\u00f3rio <strong>src<\/strong>, o Eleventy os tratar\u00e1 como templates e gerar\u00e1 uma p\u00e1gina HTML para cada um deles. Seu URL ser\u00e1 algo como <strong>\/projects\/quotes-generator<\/strong>.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/quote-project-page.jpg\" alt=\"The appearance of each project without layout\" width=\"1600\" height=\"587\"><figcaption class=\"wp-caption-text\">Apar\u00eancia do projeto sem layout.<\/figcaption><\/figure>\n<p>No entanto, o Eleventy n\u00e3o saber\u00e1 qual layout usar para essas p\u00e1ginas porque elas ainda n\u00e3o t\u00eam um valor de layout em seu frontmatter.<\/p>\n<p>Primeiro, vamos montar o layout desse conte\u00fado. Depois, criaremos uma cole\u00e7\u00e3o e adicionaremos tudo em forma de lista numa p\u00e1gina dedicada a projetos.<\/p>\n<p>Como antes, crie um arquivo de layout (<strong>project.njk<\/strong>) na pasta de <strong>layouts<\/strong>. Para evitar repeti\u00e7\u00f5es, como esse arquivo usar\u00e1 a marca\u00e7\u00e3o HTML padr\u00e3o, voc\u00ea ajustar\u00e1 o layout <strong>base.njk<\/strong> criando um bloco para indicar a se\u00e7\u00e3o do seu layout que ser\u00e1 alterada.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"UTF-8\" \/&gt;\n        &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;\n        &lt;link rel=\"icon\" href=\"\/assets\/favicon.jpeg\" \/&gt;\n        &lt;link\n            rel=\"stylesheet\"\n            href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.2.1\/css\/all.min.css\"\n            integrity=\"sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf\/nwasF0nqhPay5w\/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==\"\n            crossorigin=\"anonymous\"\n            referrerpolicy=\"no-referrer\"\n        \/&gt;\n        &lt;link rel=\"stylesheet\" href=\"\/css\/global.css\" \/&gt;\n        &lt;title&gt;J.'s Portfolio&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;div&gt;\n            {% include \"components\/navbar.njk\" %}\n                {% block content %} \n                    {{ content | safe }}\n                {% endblock %}\n            {% include \"components\/footer.njk\" %}\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>O bloco recebe um nome de conte\u00fado porque voc\u00ea pode ter muitos blocos em seus templates. Agora voc\u00ea pode estender isso ao layout <strong>project.njk<\/strong>, de modo que s\u00f3 precisa especificar o bloco de conte\u00fado:<\/p>\n<pre><code class=\"language-html\">{% extends \"layouts\/base.njk\" %}\n\n{% block content %}\n    &lt;div class=\"project-layout\"&gt;\n        &lt;h2&gt;{{title}}&lt;\/h2&gt;\n        &lt;img src=\"{{image}}\" alt=\"image\" class=\"banner-img\" \/&gt;\n        &lt;a href=\"{{gitHubURL}}\" class=\"cta-btn pt-btn\"&gt;\n            &lt;div class=\"small-icons\"&gt;\n                GitHub &lt;i class=\"fa-brands fa-github\"&gt;&lt;\/i&gt;\n            &lt;\/div&gt;\n        &lt;\/a&gt;\n        {{ content | safe }}\n    &lt;\/div&gt;\n{% endblock %}<\/code><\/pre>\n<p>No c\u00f3digo acima, voc\u00ea est\u00e1 especificando como cada projeto ser\u00e1 exibido. Voc\u00ea obter\u00e1 o <strong>title<\/strong>, a <strong>image <\/strong>e o <strong>gitHubURL<\/strong> do frontmatter e, em seguida, adicionar\u00e1 outro conte\u00fado usando a vari\u00e1vel de conte\u00fado (<code>{{ content | safe }}<\/code>).<\/p>\n<p>O pr\u00f3ximo passo seria adicionar o layout ao front matter de cada projeto:<\/p>\n<pre><code class=\"language-html\">---\nlayout: layouts\/project.njk\ntitle: Quotes Generator\ndescription: \"Helps you generates quotes from about 1600 quotes written by different authors . Quotes are automatically copied to your clipboards.\"\ngitHubURL: \"https:\/\/github.com\/olawanlejoel\/random-quote-generator\"\nimage: \"\/assets\/quotes-banner.jpeg\"\n---\n\n\u2026<\/code><\/pre>\n<p>Ao recarregar a URL de cada projeto, por exemplo, <strong>\/projects\/quotes-generator<\/strong>, voc\u00ea notar\u00e1 que ele agora usa o layout criado:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/quote-project-page-with-layout.jpg\" alt=\"The appearance of each project with layout\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Apar\u00eancia do projeto com layout.<\/figcaption><\/figure>\n<h4>Como usar cole\u00e7\u00f5es em templates<\/h4>\n<p>Cada um dos seus projetos agora \u00e9 exibido de forma agrad\u00e1vel com o layout especificado, mas como as pessoas podem acessar esses projetos? Voc\u00ea precisa criar uma lista na qual as pessoas possam clicar para acessarem cada projeto. \u00c9 aqui que entram as cole\u00e7\u00f5es.<\/p>\n<p>Para usar cole\u00e7\u00f5es, defina isso no arquivo de configura\u00e7\u00e3o <strong>.eleventy.js<\/strong> usando o m\u00e9todo <code>addCollection()<\/code>.<\/p>\n<pre><code class=\"language-js\">module.exports = function (eleventyConfig) {\n    \/\/ \u2026\n\n    eleventyConfig.addCollection('projects', (collection) =&gt; {\n        return collection.getFilteredByGlob('src\/projects\/*.md');\n    });\n\n    return {\n        \/\/ ...\n    };\n};<\/code><\/pre>\n<p>No c\u00f3digo acima, o m\u00e9todo <code>addCollection()<\/code> \u00e9 usado para definir uma cole\u00e7\u00e3o chamada projects. A fun\u00e7\u00e3o de callback passada para <code>addCollection()<\/code> retorna todos os arquivos markdown no diret\u00f3rio de projetos usando o m\u00e9todo <code>getFilteredByGlob()<\/code>.<\/p>\n<p>Ap\u00f3s definir uma cole\u00e7\u00e3o, voc\u00ea pode us\u00e1-la em um template para gerar p\u00e1ginas com base nesse conte\u00fado. Vamos criar um template de p\u00e1gina <strong>projects.njk<\/strong>, que usaria o layout <strong>base.njk<\/strong>:<\/p>\n<pre><code class=\"language-html\">---\nlayout: layouts\/base.njk\ntitle: Projects\n---\n&lt;div class=\"projects-container\"&gt;\n    &lt;h2&gt;Projects&lt;\/h2&gt;\n    &lt;div class=\"projects-grid\"&gt;\n        {% for project in collections.projects %}\n            &lt;div class=\"project-card\"&gt;\n                &lt;div class=\"project-header\"&gt;\n                    &lt;i class=\"fa-regular fa-folder-open folder-icon\"&gt;&lt;\/i&gt;\n                    &lt;div class=\"small-icons\"&gt;\n                        &lt;a href={{project.data.gitHubURL}}&gt;&lt;i class=\"fa-brands fa-github\"&gt;&lt;\/i&gt;&lt;\/a&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n                &lt;h3&gt;{{project.data.title}}&lt;\/h3&gt;\n                &lt;p&gt;{{project.data.description}}&lt;\/p&gt;\n                &lt;a href=\"{{project.url}}\" class=\"cta-btn\"&gt;Read more&lt;\/a&gt;\n            &lt;\/div&gt;\n        {% endfor %}\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>No c\u00f3digo acima, a declara\u00e7\u00e3o <code>{% for %}<\/code> \u00e9 usada para percorrer todos os projetos na cole\u00e7\u00e3o e gerar um cart\u00e3o de projeto para cada um.<\/p>\n<p>Voc\u00ea ter\u00e1 acesso a todas as vari\u00e1veis usando <code>project.data.[key]<\/code>. Por exemplo, o c\u00f3digo acima exibir\u00e1 o t\u00edtulo, a descri\u00e7\u00e3o e a URL do GitHub do projeto. Voc\u00ea tamb\u00e9m pode acessar a URL do projeto usando <code>project.url<\/code>.<\/p>\n<p>Quando voc\u00ea executa o comando <code>npm start<\/code> e navega at\u00e9 a p\u00e1gina de projetos, esta \u00e9 a apar\u00eancia da p\u00e1gina quando voc\u00ea adiciona muitos projetos:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/projects-page-with-content.jpg\" alt=\"A collection of all projects on the projects template page\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">P\u00e1gina de template de projetos.<\/figcaption><\/figure>\n<h3>Como usar shortcodes<\/h3>\n<p>Os shortcodes s\u00e3o uma forma de definir tags HTML personalizadas ou valores din\u00e2micos JavaScript que voc\u00ea pode reutilizar em seus templates. Por exemplo, voc\u00ea pode definir um shortcode para gerar o ano atual e adicion\u00e1-lo ao seu site.<\/p>\n<p>No arquivo de configura\u00e7\u00e3o <strong>.eleventy.js<\/strong>, voc\u00ea pode definir um shortcode usando o m\u00e9todo <code>addShortcode()<\/code>. Por exemplo, o c\u00f3digo a seguir define um shortcode chamado year:<\/p>\n<pre><code class=\"language-js\">module.exports = function (eleventyConfig) {\n    \/\/ ...\n    eleventyConfig.addShortcode('year', () =&gt; {\n        return `${new Date().getFullYear()}`;\n    });\n    return {\n        \/\/ ...\n    };\n};<\/code><\/pre>\n<p>O shortcode year acima retornar\u00e1 o ano atual, que voc\u00ea pode adicionar a qualquer template do seu projeto. Por exemplo, em vez de codificar o ano no rodap\u00e9 deste site, voc\u00ea pode adicion\u00e1-lo dinamicamente usando <code>{% year %}<\/code>, para que ele se atualize a cada ano:<\/p>\n<pre><code class=\"language-html\">&lt;hr \/&gt;\n&lt;div class=\"footer-container\"&gt;\n    &lt;p&gt;\u00a9 {% year %} Joel's Portfolio&lt;\/p&gt;\n    &lt;div class=\"social_icons\"&gt;\n        \/\/ ...\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Quando a p\u00e1gina for renderizada, a sa\u00edda incluir\u00e1 o ano atual na tag HTML <code>p<\/code>.<\/p>\n<h2>Como adicionar um tema a um site Eleventy<\/h2>\n<p>Adicionar um tema a um site Eleventy pode ser uma \u00f3tima maneira de personalizar a apar\u00eancia do seu site rapidamente. Oficialmente, o Eleventy se refere aos temas como iniciantes (eles significam o mesmo). Muitos sites oferecem temas gratuitos do Eleventy, como os <a href=\"https:\/\/www.11ty.dev\/docs\/starter\/\">temas oficiais do Eleventy<\/a> e os <a href=\"https:\/\/jamstackthemes.dev\/ssg\/eleventy\/\" target=\"_blank\" rel=\"noopener noreferrer\">temas Jamstack<\/a>.<\/p>\n<p>Tudo o que voc\u00ea precisa fazer \u00e9 selecionar seu tema ou starter favorito e, em seguida, acessar o reposit\u00f3rio do GitHub para clon\u00e1-lo em seu computador local. Certifique-se de que voc\u00ea leia a documenta\u00e7\u00e3o para saber as etapas de configura\u00e7\u00e3o e personaliza\u00e7\u00e3o dos projetos.<\/p>\n<p>Execute <code>npm install<\/code> para instalar todos os pacotes usados e, em seguida, execute <code>npm start<\/code> para servir seu aplicativo localmente para <strong>http:\/\/localhost:8080\/<\/strong>.<\/p>\n<h2>Como implantar um site Eleventy<\/h2>\n<p>Agora voc\u00ea conseguiu criar um site est\u00e1tico de portf\u00f3lio estiloso com Eleventy. Ter esse tipo de site apenas na sua m\u00e1quina local n\u00e3o \u00e9 suficiente. Voc\u00ea vai querer hosped\u00e1-lo on-line para compartilh\u00e1-lo com seu p\u00fablico.<\/p>\n<p>A Kinsta \u00e9 uma plataforma de nuvem que permite <a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\">hospedar sites est\u00e1ticos<\/a>, incluindo Eleventy. Isso pode ser feito enviando seu c\u00f3digo para o seu provedor Git preferido (<a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>) e, finalmente, implantando na Kinsta.<\/p>\n<p>Antes de enviar seus arquivos para qualquer provedor Git, crie um <a href=\"https:\/\/kinsta.com\/pt\/blog\/nao-funcionamento-do-gitignore\/\">arquivo .gitignore<\/a> na raiz do seu projeto para especificar os arquivos e pastas que o Git deve ignorar ao enviar seu c\u00f3digo:<\/p>\n<pre><code class=\"language-git\"># dependencies\n\/node_modules\n\n# run\n\/_site<\/code><\/pre>\n<h3 id=\"push-your-eleventy-site-to-github\" class=\"has-anchor-hash\">Envie seu site Eleventy para o GitHub<\/h3>\n<p>Para este guia, vamos usar o GitHub. Crie um reposit\u00f3rio no GitHub, e ent\u00e3o voc\u00ea pode usar <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-avancado\/\">comandos git<\/a> para <a href=\"https:\/\/kinsta.com\/pt\/blog\/push-codigo-github\/\">enviar seu c\u00f3digo<\/a>.<\/p>\n<p>Inicialize seu reposit\u00f3rio Git local abrindo seu terminal, navegando at\u00e9 o diret\u00f3rio que cont\u00e9m seu projeto e executando o seguinte comando:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git<\/span> init<\/code><\/pre>\n<p>Agora adicione seu(s) c\u00f3digo(s) ao reposit\u00f3rio Git local usando o seguinte comando:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git<\/span> <span class=\"token function\">add<\/span> <span class=\"token builtin class-name\">.<\/span><\/code><\/pre>\n<p>Voc\u00ea agora pode commitar suas mudan\u00e7as usando o seguinte comando:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git<\/span> commit <span class=\"token parameter variable\">-m<\/span> <span class=\"token string\">\"my first commit\"<\/span><\/code><\/pre>\n<p><strong>Nota:<\/strong> Substitua &#8220;my first commit&#8221; por uma mensagem breve descrevendo suas altera\u00e7\u00f5es.<\/p>\n<p>Finalmente, envie seu c\u00f3digo para o GitHub usando os seguintes comandos:<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git<\/span> remote <span class=\"token function\">add<\/span> origin <span class=\"token punctuation\">[<\/span>repository URL<span class=\"token punctuation\">]<\/span>\n<span class=\"token function\">git<\/span> push <span class=\"token parameter variable\">-u<\/span> origin master<\/code><\/pre>\n<p><strong>Nota:<\/strong> Substitua [URL do reposit\u00f3rio] pela URL do seu reposit\u00f3rio no GitHub.<\/p>\n<p>Se for bem-sucedido, voc\u00ea agora pode implantar na Kinsta!<\/p>\n<h3 id=\"deploying-your-eleventy-site-to-kinsta\" class=\"has-anchor-hash\">Implantando seu site Eleventy na Kinsta<\/h3>\n<p>A implanta\u00e7\u00e3o na Kinsta acontece em quest\u00e3o de segundos. Uma vez que seu reposit\u00f3rio esteja pronto, siga essas etapas para implantar seu site est\u00e1tico na Kinsta:<\/p>\n<ol>\n<li>Fa\u00e7a login ou crie uma conta para visualizar o painel do <a href=\"https:\/\/my.kinsta.com\/?lang=pt\">MyKinsta<\/a>.<\/li>\n<li>Autorize a Kinsta com seu provedor Git.<\/li>\n<li>Clique em <strong>Sites Est\u00e1ticos<\/strong> na barra lateral esquerda e depois clique em <strong>Adicionar site<\/strong>.<\/li>\n<li>Selecione o reposit\u00f3rio e o branch de onde deseja implantar.<\/li>\n<li>Atribua um nome \u00fanico ao seu site.<\/li>\n<li>Adicione as configura\u00e7\u00f5es de build no seguinte formato:\n<ul>\n<li><strong>Comando build:<\/strong> <code>npm run build<\/code><\/li>\n<li><strong>Vers\u00e3o do Node:<\/strong> <code>18.16.0<\/code><\/li>\n<li><strong>Diret\u00f3rio de publica\u00e7\u00e3o:<\/strong> <code>_site<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Finalmente, clique em <strong>Criar site<\/strong>.<\/li>\n<\/ol>\n<p>E \u00e9 isso! Agora voc\u00ea tem um site implantado em quest\u00e3o de segundos. Um link \u00e9 fornecido para acessar a vers\u00e3o implantada do seu site.<\/p>\n<p>Como alternativa \u00e0 Hospedagem de Site Est\u00e1tico, voc\u00ea pode optar por implantar seu site est\u00e1tico com a <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos<\/a> da Kinsta, que oferece maior flexibilidade de hospedagem, uma gama mais ampla de benef\u00edcios e acesso a recursos mais robustos. Por exemplo, escalonamento, implanta\u00e7\u00e3o personalizada usando um Dockerfile e <a href=\"https:\/\/docs.sevalla.com\/applications\/analytics\">an\u00e1lises abrangentes<\/a> que incluem dados em tempo real e hist\u00f3ricos.<\/p>\n\n<h2>Resumo<\/h2>\n<p>Neste artigo, voc\u00ea aprendeu como criar um site elegante com o Eleventy, como personalizar um site est\u00e1tico da Eleventy desde o in\u00edcio e como criar um bom site de portf\u00f3lio.<\/p>\n<p>Quer voc\u00ea esteja criando um blog pessoal, um site de portf\u00f3lio ou uma loja on-line, o Eleventy pode ajud\u00e1-lo a atingir seus objetivos com o m\u00ednimo de esfor\u00e7o e o m\u00e1ximo de impacto.<\/p>\n<p>Ent\u00e3o, por que n\u00e3o experimentar hoje e <a href=\"https:\/\/sevalla.com\/static-site-hosting\/\">hospedar na Kinsta de forma gratuita<\/a>? Temos um <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">template &#8220;Hello World&#8221; do Eleventy<\/a> que voc\u00ea pode usar para come\u00e7ar ainda mais r\u00e1pido.<\/p>\n<p><em>Agora \u00e9 a sua vez: o que voc\u00ea acha do Eleventy? Voc\u00ea j\u00e1 utilizou o Eleventy para criar alguma coisa? Fique \u00e0 vontade para compartilhar seus projetos e experi\u00eancias conosco na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com o aumento dos geradores de sites est\u00e1ticos (SSGs) como o Eleventy, nunca foi t\u00e3o f\u00e1cil criar um site est\u00e1tico elegante e eficiente. Neste artigo, exploraremos &#8230;<\/p>\n","protected":false},"author":287,"featured_media":59142,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[958,1018,1009],"class_list":["post-59141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-estatisticas-de-cms","topic-ferramentas-desenvolvimento-web","topic-geradores-sites-estaticos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)\" \/>\n<meta property=\"og:description\" content=\"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-27T10:34:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-27T06:04:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\" \/>\n\t<meta property=\"og:image:width\" content=\"6084\" \/>\n\t<meta property=\"og:image:height\" content=\"3042\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)\",\"datePublished\":\"2023-04-27T10:34:22+00:00\",\"dateModified\":\"2023-10-27T06:04:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\"},\"wordCount\":3972,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\",\"name\":\"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\",\"datePublished\":\"2023-04-27T10:34:22+00:00\",\"dateModified\":\"2023-10-27T06:04:30+00:00\",\"description\":\"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png\",\"width\":6084,\"height\":3042},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Geradores de Sites Est\u00e1ticos\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/geradores-sites-estaticos\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty) - Kinsta\u00ae","description":"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)","og_description":"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.","og_url":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-04-27T10:34:22+00:00","article_modified_time":"2023-10-27T06:04:30+00:00","og_image":[{"width":6084,"height":3042,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"24 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)","datePublished":"2023-04-27T10:34:22+00:00","dateModified":"2023-10-27T06:04:30+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/"},"wordCount":3972,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/eleventy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/","url":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/","name":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","datePublished":"2023-04-27T10:34:22+00:00","dateModified":"2023-10-27T06:04:30+00:00","description":"Aprenda a usar o Eleventy para criar um site de portf\u00f3lio est\u00e1tico deslumbrante e funcional sem a necessidade de uma linguagem do lado do servidor ou banco de dados.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/eleventy\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/11ty-static-site-generator-01.png","width":6084,"height":3042},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/eleventy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Geradores de Sites Est\u00e1ticos","item":"https:\/\/kinsta.com\/pt\/topicos\/geradores-sites-estaticos\/"},{"@type":"ListItem","position":3,"name":"Como Criar um Site Est\u00e1tico Elegante com Eleventy (11ty)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=59141"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59141\/revisions"}],"predecessor-version":[{"id":64369,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59141\/revisions\/64369"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59141\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/59142"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=59141"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=59141"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=59141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}