Executando verificação de segurança...
19

Como estou desenvolvendo uma rede social de futebol do zero: stack, desafios e aprendizados

Salve pessoal, beleza? meu primeiro post aqui gostaria de compartilhar com vocês meu mais novo projeto, o Futeboxd, uma rede social para criar avaliações de partidas de futebol. Só pra esclarecer isso não é um Pitch(talvez seja um pouco) mas eu quero fazer mais uma descrição técnica dele, da onde saiu a idéia, como eu o construí ele, tecnologias usadas etc.

Sumário:

Por que eu criei o Futeboxd?
Arquitetura do projeto
Tecnologias usadas
Funcionalidades do Futeboxd
Futuro do Futeboxd
Conclusão

Por que eu criei o Futeboxd?

A idéia surgiu após eu ler alguns posts no X(antigo Twitter) sobre alguém criar um Letterboxd de futebol. Percebi que não existia um app amplo para avaliar partidas, eu encontrei alguns mas de um nicho bem limitado, como o RateGame que faz exatamente isso mas é limitado apenas a Liga Inglesa, eu então resolvi botar a mão na massa! Além de ser um projeto que eu gostaria de usar, vi nisso uma ótima oportunidade para desenvolver algo com usuários reais, melhorar meu portfólio e, quem sabe, conquistar aquela sonhada vaguinha.

Arquitetura do projeto

Inicialmente eu quebrei a cabeça com isso, a primeira coisa que eu fiz foi procurar uma fonte para buscar dados de partidas, inicialmente encontrei algumas apis mas que eram caras demais pro meu momento. Foi então que encontrei uma api da ESPN, não tem documentação, não é citada em nenhum site deles mas por algum motivo funciona e é totalmente aberta aqui uma doc dela feita pela comunidade, até agora eu não sei se é permitido o uso dela porque ela não é citada em nada da ESPN, mas se der ruim eu tenho uma alternativa: fazer web scraping do site Fbref, o que é permitido por eles mas com um rate limiting.

Abaixo você pode ver um desenho da arquitetura atual do futeboxd:

Arquitetura do futeboxd

Sim, microsserviços! Uma das grandes vantagens desse projeto foi que eu cai na real que eu não sabia nada! Eu achava que sabia sobre microsserviços, achava que sabia sobre clean arch mas eu não sabia nada. Só assistir cursos e nunca aplicar na prática não te ensina nada, eu sabia aplicar esses conceitos mas apenas nos projetos dos cursos que eu fiz, quando comecei a desenvolver um projeto do zero eu não consegui aplicar direito esses conhecimentos. Comecei a criar vários serviços, um para usuários outro para reviews outro para likes isso aumentou demais a complexidade do projeto, detalhe: tudo isso pra rodar em uma única VPS! Foi então que eu parei e repensei o projeto inteiro, e escolhi manter do jeito que está, um microsserviço e um monolito, com isso eu consigo escalar o serviço de futebol(o que na minha cabeça vai receber várias requisições), e ao mesmo tempo consigo deixar o monolito principal sem a complexidade que microsserviços introduz. E não podemos esquecer do serviço de atualização de dados de futebol, esse serviço basicamente é um cron job, que busca por partidas de uma liga específica(mais pra baixo detalharei quais ligas estão incluidas no Futeboxd) e cria crons jobs para os horários das partidas, depois atualiza de 5 em 5 minutos até que a partida acabe, eu fiz de uma maneira síncrona e bem espaçada para que não sobrecarregue os servidores da ESPN e eu acabe com um IP bloqueado.

Tecnologias Usadas

Para esse projeto eu optei por usar Golang nas apis sem qualquer framework(sim, estou escrevendo SQL puro), apesar de eu ser um desenvolvedor Java e estar almejando por uma vaga para trabalhar com Java, esse é um projeto que eu desenvolvi para ser usado por usuários reais, e eu precisava de uma linguagem que consumisse muita pouca memória e como eu estava estudando Golang na época, optei por escolher ele. para o worker eu escolhi o nodejs por motivos de ele ser bastante dinâmico com tipos e a api da ESPN não tem uma estrutura definida, e usar JS ajuda na hora que erros acontecem pela estrutura retornada pela API não ser o que o código estava esperando.

A lista completa:

  • Serviço de futebol: Golang
  • Monolito principal: Golang
  • Worker: Nodejs
  • Banco de dados: Postgres
  • Armazenamento de imagens: Digital ocean spaces(estava usando AWS mas o digital ocean oferece um plano grátis além de ser significamente mais barato)
  • Envio de emails: Resend
  • Hospedagem: Hostinger com Docker swarm

Funcionalidades do Futeboxd

Atualmente o Futeboxd conta com funcionalidades básicas de uma rede social, você pode criar reviews, comentar nas reviews de outras pessoas, dar likes, seguir pessoas, fazer pesquisas, além também de ter um feed personalizado e recomendação de pessoas pra seguir com base na sua rede e no time que você torce, recomendando pessoas que torcem para o mesmo time.
Eu me baseei bastance no Tabnews para desenvolver esse projeto, tanto que a parte de autenticação e basicamente copiada daqui, apenas adaptei para o Golang e para o meu caso de uso.

Na parte de futebol, atualmente tenho um banco de dados com 60 mil partidas desde 2006 sendo atualizado continuamente nas seguintes ligas:

  • Copa do Brasil
  • Supercopa do Brasil
  • Campeonato Paulista
  • Campeonato Carioca
  • Campeonato Gaúcho
  • Campeonato Mineiro
  • Copa do Nordeste
  • Champions League
  • Europa League
  • Eliminatórias Europa
  • Copa do Mundo
  • Mundial de Clubes
  • Copa Libertadores
  • Copa Sul-Americana
  • Copa América
  • Premier League
  • EFL Championship
  • La Liga
  • Copa do Rei
  • Ligue One
  • Bundesliga
  • Serie A
  • Primeira Liga
  • Amistoso
  • Eurocopa
  • Copa da Liga Inglesa
  • Eliminatórias América
  • Copa da Inglaterra
  • Copa da Itália
  • Supercopa da Espanha
  • Copa da Alemanha
  • Super Copa da UEFA
  • Recopa
  • Mundial de Clubes
  • Conference League

Futuro do Futeboxd

Eu pretendo apenas deixar esse projeto como um portfólio para eu conseguir uma vaga, e quem sabe se ele tiver uma boa base de usuários fiéis usar um modelo de monetização parecido com o que o Letterboxd usa. Mas mesmo assim eu mantenho uma lista de funções que planejo adicionar ao site:

  • Notificações via push e email
  • Fazer comentários em comentários
  • Sistema de moderação com denúncias e um backoffice
  • Adicionar um campo que o usuário pode digitar se ele foi ao estádio ou não, criando um "diário" com isso
  • Criação de comunidades parecido com o Reddit
  • Discussões ao vivo, como um chat da Twitch para partidas acontecendo ao vivo
  • Uma melhor categorização das notícias, podendo listar notícias sobre um time especifíco ou sobre um termo

Além disso, estou considerando deixar o código do Futeboxd aberto no futuro para a comunidade contribuir. A API REST dele já é aberta, mas ainda não existe uma documentação, o que está no meu roadmap para desenvolver.

Conclusão

O Futeboxd é um projeto que acima de tudo me deu bastante aprendizado sobre desenvolvimento de software, sobre arquitetura, containers, clean code, SQL e sobre Golang que eu era um completo iniciante na linguagem quando comecei o projeto. Hoje, sinto que tenho uma base sólida e uma experiência considerável com ela.

E pra você que chegou até aqui o projeto já está no ar, Clique aqui

Carregando publicação patrocinada...
1

Excelente trabalho, cara!
Nós do https://sportboxd.com ficamos muito felizes de ter um clone do nosso projeto utilizado como case de estudo, foda demais!

Acho que seria maneiro falar pra galera de onde veio a inspiração, que você curtiu o nosso trabalho, quis colaborar com a gente mas infelizmente a comunicação não fluiu e por isso você decidiu fazer a sua versão do projeto por conta própria e tudo mais.

Como não tem ninguém aqui ganhando dinheiro com isso, seria interessante ganharmos pelo menos os créditos por sermos usados como base pro teu case.

De qualquer forma seu trabalho tá excepcional, boa sorte na sua jornada meu caro!
Abraço.

1

Opa amigo, boa tarde, primeiramente muito obrigado e desculpe por não ter citado o sportboxd como um exemplo, realmente esqueci.

Mas eu não usei o seu projeto como base, a minha ideia veio da mesma fonte que a sua, do twitter, quando vocês postaram sobre o sportboxd eu já estava em um desenvolvimento avançado do futeboxd, na verdade eu me inspirei bastante no letterboxd, tabnews e no plotwist tanto que se você reparar a UI do meu projeto tem elementos e funcionalidades bastante parecidas com eles. Mas perdão eu poderia ter citado vocês e esqueci mesmo.

2

Tamo junto!
Boa sorte na sua jornada meu mano, mandou bem demais de qualquer forma
Inclusive, gostei do Plotwist vou usar kkkkkkkkkk lembro de ter visto ele por aqui alguma vez

1

Wow, muito massa seu site/projeto.
Como citou aqui não desejar ter ads no APP por enquanto, mas, se desejar ter ads no site, ativa a Upeex.com já poderá cobrir os custos da infra. rs
Sucesso ai no projeto!

0
1

Que legal cara, parabéns! Gostei muito dos cards das partidas que rolaram, achei bonito. Além dos site todo em si, tem uma experiência amigável.

Só uma pergunta: Onde você consegue as informações sobre as partidas que acontecem ou aconteceram nos campeonatos?

1
1
1

muito legal mano! é eu também ja fiz um "twitter 2" mas rede sociais você precisa fazer uma coisa diferente, porque twitter, instagram, LinkedIn etc já dominam, tentar competir com elas é tempo perdido.

1

muito legal o seu projeto, deixa o seu contato do linkedin pfv.
sou gerente de tecnologia em uma empresa de IA e a maioria dos nossos microserviços são em Go.
constantemente estou contratando, podemos trocar uma ideia.

1
1

Parabéns pelo excelente projeto! Esse é um nicho com grande potencial de visibilidade e oportunidades de monetização. Além de gerar receita com o Google Ads, você também pode estabelecer parcerias estratégicas com lojas que vendem camisas de times, ampliando ainda mais suas possibilidades de crescimento. Claro, sem desviar o seu foco na área de tecnologia, pois essa experiência agrega muito valor ao seu desenvolvimento profissional.

1

Muito obrigado pelas dicas, por enquanto não quero usar ads no app mas não descarto essa possibilidade no futuro, e achei muito boa essa ideia sobre estabelecer parcerias com lojas, pode ser uma boa forma de promover o app.

1

Show de bola(sem trocadilho)!!!

Já publicou no linkedin? Acredito que não demorará muito até que alguem te chame.

Consigo enxergar esse projeto facilmente bombando por aí, comece a divulgar nas rodas de amigos, no bar, na faculdade... tem futuro.

1

Valeu pelo apoio! Ainda não postei, vou postar nos próximos dias, só estou arrumando umas coisas na API pra deixar ele redondo.

1

Os serviços da Hostinger são de boa? Tu tá satisfeito no geral com eles?

To procurando uma alternativa, preço é importante, mas tem que ter qualidade no serviço pra não ficar na mão...
Sucesso pra ti.

2

Cara, nao tenho nada a reclamar, a vps e o domínio sao da hostinger e até agora estão me atendendo bem, mas ele não tem aquelas funções do ec2 de auto scaling, load balancing, é tudo manual. Em compensação é bem mais barato.