/blog

My personal blog made with Astro

Primary LanguageAstroCreative Commons Attribution 4.0 InternationalCC-BY-4.0

My blog

Olá, bem vindo ao código fonte do meu blog, atualmente disponibilizado no link robertdeveloper.com.

Print of preview of my blog FIGMA

Sumário

Stack

  • TypeScript - Linguagem utilizada
  • Astro - Framework que facilita a criação de sites staticos e performáticos, além de facilitar a criação de conteúdo
  • SolidJS - Uma biblioteca JavaScript declarativa, eficiente e flexível para construir UIs
  • MDX - Biblioteca que permite utilizar components jsx em conteúdo markdown
  • Tailwindcss - Biblioteca que traz uma série de classes utilitárias para utilizar css de forma prática
  • Eslint - Analisador de código estático
  • Prettier - Formatador de código

Objetivo

Este projeto foi desenvolvido com o objetivo de facilitar a apresentação da minha jornada na programação e compartilhar minha trajetória com outras pessoas.

O blog está hospedado na AWS e utiliza as actions do GitHub para CI/CD. Abaixo tem uma imagem exemplificando o fluxo de trabalho que ocorre ao entrar no meu blog.

Image that explain the work flow that occurs when anyone enter in my blog

Arquitetura

Optei por seguir e experimentar o atomic design, uma metodologia de criação de design systems que facilita enxergar e entender sua UI e seus componentes. Abaixo tem uma imagem explicativa.

Image that explain atomic design

Geração de og:image

Para evitar a criação manual das og:images, automatizei esse processo no momento da construção do projeto. Isso é feito da seguinte maneira:

Eu criei uma astro-integration que roda após o comando astro build ser finalizado com sucesso. Essa integração executa um script que pega o HTML gerado pelo build da página que fica no path /og (removi este path do sitemap pois é para uso interno apenas). Em seguida, iniciamos um navegador com o puppeteer e injetamos o HTML lá. Com ajuda do astro, conseguimos pegar o título de cada página gerada e adicioná-lo ao HTML injetado no navegador, assim, temos uma página no browser do puppeteer que poderia servir como nossa imagem. Dessa forma, tiramos um print com a ajuda do puppeteer e armazenamos ele na pasta que desejamos. Após isso, basta que as páginas apontem para esse local onde salvamos o print.

Estrutura de pastas

.
├── .github
├── .husky
├── .vscode
├── astro-integrations
├── docs
├── public
├── src
│   ├── @types
│   ├── content
│   ├── css
│   ├── pages
│   ├── ui
Folder Name Details
.github Pasta para conter algumas features utilizadas pelo GitHub, caso queira saber mais clique aqui
.husky Pasta utilizada pelo husky, uma biblioteca que ajuda a manter o padrão no repositório, apesar de ser um projeto que apenas eu mexo, eu gosto de manter as boas práticas
.vscode Pasta utilizada para conter algumas configurações padrões para o VS Code, para saber mais, clique aqui
.astro-integrations Pasta criada para manter integrações criadas por mim para o astro utilizar
docs Pasta criada para conter algumas imagens utilizadas apenas na documentação deste projeto
public Pasta onde contém os arquivos estáticos do projeto, como fotos, SVGs, etc...
src/@types Pasta contendo algumas tipagens que são globais no projeto
src/content Pasta utilizada pelo astro para handle de conteúdos que podem ser utilizados pelo projeto, uma das features mais legais do astro, para mais informações, clique aqui
src/css Pasta contendo estilos globais do projeto
src/pages Pasta que o astro utiliza para gerar os paths do site, é aqui onde montamos nossas páginas, para saber mais, clique aqui
src/ui Pasta contendo toda a UI do projeto, dividida em atoms, molecules, organisms, templates e layouts