V vitor.rocha
todos os projetos // projeto · fullstack go

DevBook

Uma rede social onde quem escreve código conta o que aprendeu: publicações, curtidas, seguidores e busca — construída em dois serviços Go que conversam por HTTP.

Banner do projeto DevBook

Visão geral

O DevBook é uma rede social no estilo Twitter/X voltada a desenvolvedores: cada pessoa publica o que está construindo ou aprendendo, segue outras, curte publicações e acompanha o feed. O projeto é 100% Go, dividido em uma API REST e uma aplicação web que a consome.

O problema

Uma rede social concentra os problemas clássicos de backend: autenticação segura, autorização por recurso (só o autor edita ou apaga a própria publicação), relações entre usuários e um webapp que mantenha a sessão sem expor o token. O desafio era resolver tudo isso com a biblioteca padrão do Go no centro.

A solução

A API expõe usuários e publicações em rotas REST com gorilla/mux, senhas com hash bcrypt e login que emite JWT; um middleware valida o token antes de cada rota protegida. O webapp renderiza templates Go no servidor e guarda o token num cookie assinado e criptografado com gorilla/securecookie. O MySQL 8 sobe por docker-compose com o schema aplicado automaticamente na primeira execução e healthcheck.

Funcionalidades

  • Cadastro, login e sessão com JWT + cookie criptografado
  • Feed com publicações, curtir e descurtir
  • Criar, editar e excluir as próprias publicações
  • Seguir, deixar de seguir, seguidores e seguindo
  • Busca de pessoas e perfil com estatísticas
  • Tema claro/escuro com persistência

Arquitetura

São dois processos independentes: a API na porta 5001 e o webapp na 3000. O navegador só fala com o webapp; o webapp repassa cada ação à API por HTTP, anexando o JWT guardado no cookie. Na API, o fluxo é rota → middleware de autenticação → controller → repositório → MySQL, com as camadas separadas por pacote.

Screenshots

Desafios & aprendizados

O ponto mais delicado foi a sessão: manter o token fora do alcance do JavaScript do navegador exigiu cookie assinado e criptografado, e a autorização por recurso exigiu comparar o dono do registro com o usuário do token em cada operação sensível. O projeto consolidou API design em Go, middlewares e a separação entre serviço de dados e aplicação web.