Gabriel / Ramos

⟨ pintor de pixel ⟩


Refatorei o blog

Um pouco sobre o processo de recriação e como conduzi o desenvolvimento para deixar o blog e o site de cara nova

8 min. de leitura

Foto por Christopher Burns

Eu sei, esse post vai ser um pouco mais longo. A ideia dele é explicar como foi meu processo de raciocínio e reconstrução do meu site e blog e quais tecnologias e decisões eu escolhi.

Isso aqui era tudo mato

Meu blog anterior era feito com Hexo e atendeu perfeitamente às minhas necessidades nos últimos anos.

Eu sei, não sou o tipo que faz posts regulares (mas estou tentando, juro!), então, para um "blog fantasma" (como eu mesmo costumo chamar, rs) ele fazia o papel que precisava.

Entretanto, como venho trabalhando ativamente com React nos últimos anos, algumas coisas não estavam mais tão fluidas como deveriam:

  • Componentização: embora você possa aplicar boas práticas e componentizar seus blocos utilizando EJS (engine suportada pelo Hexo por padrão), a forma de escrever seus componentes é distante da forma como é feita no ecossistema do React;
  • Interface: a antiga versão do meu site/blog tinha um esquema de cores e uma tratativa sobre interfaces totalmente diferente. Eu queria algo que estivesse mais alinhado com a forma que eu desenvolvo hoje, e não como o fazia há anos atrás, a interface já não me agradava mais;
  • Tooling: minhas rotinas de build estavam obsoletas, não é um problema que estava relacionado com as tecnologias ou com o Hexo em si, mas não achei que faria sentido arrumar configurações em um projeto que eu já estava decidido a refazer.

"Arquitetura" (podemos chamar assim?)

A "arquitetura" manteve-se a mesma.

Tudo o que vocês enxergam no meu site ou no meu blog é estático e mantido, basicamente, em 2 repositórios separados e privados no meu github e eu estou bem contente com essa divisão.

Meu site é bem simples (praticamente um "hub" com vários links) e mudo muito menos constantemente que meu blog. Não queria deixar os dois projetos relacionados e envolver deploy/build dos dois. Então a escolha foi manter os dois como estavam e reaproveitar apenas seu conteúdo.

Minha ideia era aproveitar melhor os pacotes e configurações em comum (título, rodapé, configurações de build, definição de cores e variáveis) mas sem que os projetos estivessem juntos. Com isso, apenas mais um repositório foi criado, para dar sentido às preferencias de ambos os projetos.

Inclusive vale a dica: você sabia que você pode instalar um pacote NPM tendo como fonte um repositório do github? É isso mesmo! Você não precisa ficar se preocupando em publicar um pacote o tempo inteiro com npm publish e ficar ajustando a versão no seu package.json. No meu caso, facilitou bastante o desenvolvimento e era exatamente o que eu precisava. Então segui essa abordagem.

Se quiser ler um pouquinho mais sobre, dá uma olhada nesse artigo do Jon Church no Medium (em inglês).

Em resumo, existem estruturalmente 3 repositórios:

  • gabrieluizramos.github.io: com meu site;
  • blog: com o conteúdo do meu blog;
  • preferences: com essas definições, componentes, variáveis e configurações que são comum aos dois projetos acima.

Tecnologias

Eu praticamente já estava decidido a utilizar Gatsby, pelos seguintes motivos:

  • Manter facilmente minha fonte de dados atual: arquivos markdown com os conteúdos que escrevi;
  • Manter a abordagem estática: não preciso e não quero me preocupar com infraestrutura, prefiro que o Github resolva isso pra mim;
  • Utilizar React: coisa que já acostumei nos últimos anos;
  • Performance: coisa que o time e a plataforma do Gatsby preza muito, é realmente fácil ter um site simples performático sem praticamente dor de cabeça alguma;
  • Fácil configuração: é outro ponto forte do Gatsby, qualquer ajuste e configuração é muito fácil de ser realizado, basta modificar um arquivo e/ou inserir algum plugin (que, muito provavelmente, já vai existir) e tudo funciona como mágica;
  • Aproveitar para aprender alguma coisa nova, né non?!

Pausa pros Ads:

Meu amigo Willian Justen montou um curso completo ensinando como utilizar o Gatsby bem detalhadamente (que, inclusive, me ajudou muito ao longo do processo de refatoração). Se quiser saber um pouco mais sobre a experiência dele com a ferramenta e como fez a mudança do seu próprio blog, pode dar uma olhada no post que ele fez explicando sobre o assunto.


Redefinindo a interface

Provavelmente a parte mais complicada de todo o processo.

Como eu comentei anteriormente, meu blog antigo já não me agradava mais e a carinha dele era assim:

Listagem de posts no blog antigo Página de post no blog antigo

Embora eu continue adorando as cores utilizadas nele, queria algo que tivesse mais a ver com a forma que eu trabalho hoje em dia.

Adaptando minhas preferências para o site

Se você já viu minhas configurações nos meus dotfiles muito provavelmente vai ver que:

  • Utilizo iTerm2 (com zsh/oh-myzsh e tema af-magic);
  • Utilizo VSCode (com Nord como tema);
  • Adotei recentemente FiraCode como fonte.

E nada mais relacionado à forma como eu trabalho do que a própria estilização de terminal e editor que eu utilizo, não é mesmo?

Após essa decisão, iniciei o desenvolvimento dessa "base" para ambos os projetos.

Fonte

Começando pela fonte, a ideia era aplicar FiraCode em todo os projetos.

Terminal

Deixar a listagem dos posts publicados o mais semelhante possível às abas que utilizo. Em outras palavras, replicar em CSS algo como:

Meu terminal hoje

Tentando replicar essa estrutura, a decisão foi a seguinte, para cada uma das informações da aba do terminal:

  • As informações sobre "caminho" seriam compostas pelas antigas "tags" de cada um dos posts: ~/app/personal/blog seria ~/dev/general
  • A informação sobre a "branch" seria composta pela data de publicação de cada post: (master) seria (2019-09-23)
  • O título do post viria como uma informação escrita no terminal, logo após esses trechos;
  • Para facilitar a visibilidade dos últimos posts e diferenciá-los dos mais antigos, inseri o ícone de "estrela" (*) que aparece quando existem modificações a serem "commitadas" em um repositório em um cursor com uma animação para ficar "piscando" 

Editor

Por último, mas não menos importante, a ideia era deixar todos os trechos de código dos artigos com a cara do tema que eu utilizo no VSCode.

Para isso, utilizei o PrismJS e percebi que alguém já havia iniciado a inserção do tema que eu utilizo por lá. Ai foi basicamente finalizar o trabalho e utilizar o tema.

Agora, todos os trechos de código ficam mais ou menos assim:

import React from 'react';

const person = { name: 'gabriel' }
console.log(person);

function Button({ children }) {
  const onClick = () => null;

  return (
    <button onClick={onClick}>{children}</button>
  );
}

export default Button;

Desenvolvimento

Blog

Comecei pelo blog. A ideia era deixar ele o mais redondo possível e funcionando com os posts que eu já possuía.

Em um primeiro momento, não me preocupei com nada relacionado à interface. Apenas fiz o blog ter seu conteúdo funcionando com Gatsby. Tive alguns ajustes de caminho e de imagens para fazer (já que o Hexo utilizava EJS) mas foi bem rápido (o fato de ter poucos posts ajudou bastante nessa questão).

Zerei o repositório, instalei as dependências necessárias, limpei o boilerplate do Gatsby e, após ter tudo funcionando, foi hora de colocar a mão na massa e iniciei e ai sim iniciar o desenvolvimento dos componentes e dos estilos envolvidos:

  • Deixei os componentes principais separados, como header, footer, link, wrapper genérico e o componente responsável por aplicar o layout e um reset padrão;
  • Criei os arquivos com as variáveis de cores, espaçamento, grid e fontes.

Após o desenvolvimento dos estilos seguindo as preferências do terminal que utilizo, desenvolvi a página de listagem de posts e a página com o conteúdo do post em si e, ao finalizar o blog, foi a hora de separar as preferências em um outro repositório a parte.

Preferências

Foi quando estava criando o pacote que percebi que precisaria necessidade do plugin gatsby-plugin-compile-es6-packages. Já que a ideia era manter um repositório com código-fonte das preferências a parte, o Gatsby precisa desse plugin para compilar o código dessas depedências.

Com isso, esse pacote de preferências ganhou mais um personagem, responsável por aplicar a definição de plugins compartilhados entre os projetos (que são inseridos no arquivo gatsby-config.js).

Após a criação desse pacote, o único trabalho foi instalá-lo no blog e importar os componentes direto dele, removendo os import locais ao projeto.

Site

Após isso, foi hora de deixar o site de cara nova. Como o conteúdo é bem simples, foi bem tranquilo.

O processo foi parecido com o do blog, apaguei o código anterior, limpei o conteúdo do starter do Gatsby e instalei o pacote de preferências.

Após isso, o trabalho foi apenas de inserir o conteúdo das duas páginas e aplicar os componentes necessários que já estavam no pacote criado anteriormente.

Últimos detalhes e re-inserção das interações

Problemas ao publicar

Após finalizar os dois projetos, tive alguns probleminhas com rotas ao inserir os sites de volta nos repositórios do github (que lida com os sites pelo gh-pages) que foram facilmente resolvidos com o pathPrefix no arquivo gatsby-config.js e o pacote gh-pages com as informações de branch e preferências dos projetos.

Inserção do banner

Após esses ajustes, foi hora de inserir um banner principal para os posts. Aproveitei e configurei as metatags para que o banner também aparecesse como imagem ao compartilhar o post nas redes sociais.

Interações

Por fim, foi a hora de re-inserir os blocos de "interação" no post, compostos pelos links de compartilhamento em redes sociais e pelos comentários do Facebook.

Para me auxiliar nessa tarefa, optei por utilizar outros dois pacotes que são muito interessantes:

  • react-share: para criação dos links/ícones de compartilhamento;
  • react-facebook: para criação do bloco com os comentários.

Agora é só manter

Daqui pra frente, o trabalho é manter o conteúdo atualizado e fazer quaisquer ajustes finos necessários.

Espero que tenham gostado da forma como organizei e estruturei a recriação do meu blog e espero que isso possa te ajudar caso esteja pensando em refazer (ou até mesmo criar do zero) seu site também!