GithubHelp home page GithubHelp logo

johnpetros / dev-media Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 337 KB

Exibidor de métricas das redes sociais de desenvolvedores famosos utilizando proxy reverso e load balancing

License: MIT License

Python 77.43% HTML 20.10% Shell 0.12% JavaScript 2.15% Dockerfile 0.21%

dev-media's Introduction

Dev Media 👨‍💻


🖥️ Sobre o Projeto

Dev Media é um site web que informa as métricas do Github, Instagram, Twitter (eu me recuso a chamá-lo de X) e Youtube de um desenvolvedor popular na comunidade, sendo Filipe Deschamps, Gustavo Guanabara ou Fábio Akita.

Na página inicial é exibido a quantidade de seguidores de cada uma das redes sociais do desenvovedor, enquanto na página secundária é exibido isso e mais outras métricas das respectivas plataformas.

O objetivo ao realizar esse projeto foi aprender o conceito de Proxy Reverso e Load Balacing utilizando Nginx. Nesse caso, utilizei 4 containers Docker uma para ser o servidor web, outro para servir o banco de dados e os demais para ser a aplicação em si (cada uma delas imforma as respectivas métricas de cada um dos desenvolvedores citados).

Além disso, esse projeto é inspirado em ambos os desafios Time tracking dashboard e Social media dashboard with theme switcher do Frontend Mentor, uma plataforma online e gratuita para desenvolvedores melhorarem suas habilidades no Frontend.

⏹️ Demonstração

Página inicial

Página inicial
Página de detalhes

Página de detalhes

✨ Funcionalidades

Pagina inicial

  • Deve ser exibido 4 widgets sendo que em cada um deve conter
    • Número de seguidores do Github
    • Número de seguidores do Twitter
    • Número de seguidores do Instagram
    • Número de inscritos do Youtube
    • Link para levar o usuário diretamente para a conta do desenvolvedor da respectiva rede social
  • Deve ser exibido o avatar de um avatar do densenvolvedor, juntamente com o seu nome.
  • Deve ser disponibilizado um link para a página de detalhes.

Pagina de detalhes

  • Deve ser exibido os widgets da página inicial
  • Deve ser exibido total de seguidores/incritos considerando todas as redes sociais do desenvolvedor
  • Deve ser exibido em forma de cards as seguintes informações:
    • Quantidade de repositórios no Github
    • Quantidade de Stars no Github
    • Quantidade de likes no Twitter
    • Quantidade retweets no Twitter
    • Quantidade de publicações no Instagram
    • Quantidade de likes no Instagram
    • Quantidade de views no Youtube
    • Quantidade de videos no Youtube
  • Cada widget deve informar a variação absoluta com relação ao dia anterior
  • Cada card deve informar a variação percentual com relação ao dia anterior

Proxy reverso

  • Caso o usuário acesse uma rota contendo o nome do desenvolvedor, ex.: /akita, ele deve ser redirecionado para a aplicação referente a ao desenvolvedor Akita.

Loading Balancing

  • A cada vez que o usuário recarregar a página, ele deve ser direcionado para a aplicação de outro desenvolvedor.
  • Todas as aplicações devem ter o mesmo peso no load balancing, ou seja todo o número de requests deve ser igualmente distribuído entre elas.

Banco de dados

  • As tabelas deve ser criadas automaticamente ao iniciar a aplicação
  • Os dados referentes aos desenvolvedores devem ser inseridos automaticamente ao iniciar a aplicação
  • As métricas a serem exibidas deve ser reais, ou seja, devem ser providas de serviços externos a aplicação
  • As métricas providas externamente a aplicação devem ser inseridos no banco de dados a cada 10 minutos

Light/Dark Mode

  • O usuário pode escolher o tema da aplicação (light ou dark)
  • O padrão deve ser dark mode
  • O tema escolhido deve ser armazado no navegador de tal forma que mesmo se o usuário recarregar a página o tema escolhido deve ser selecionado automaticamente

⚙️ Arquitetura

🛠️ Tecnologias, ferramentas e serviços externos

Este projeto foi desenvolvido usando as seguintes tecnologias:

  • Python para programar o backend

  • Flask Para ser o servidor web da aplicação

  • Peewee Para consultar e manipular dados o banco de dados (ORM)

  • Ngnix para ser o proxy reverso e aplicar o load balancing

  • SQLite Para servir como banco de dados de teste

  • PostgreSQL - para servir como banco de dados de produção

  • TailwindCSS - para estilizar as templates HTML

  • HTML - Para construir os templates da aplicação

  • JavaScript - Para fazer funcionalidade de light/dark mode

  • Docker - para criar e gerenciar os containers do Nginx, das aplicações e do banco de dados

  • Github Rest API - para buscar dados públicos de um perfil do Github

  • Rettiwt API - para buscar dados públicos de um perfil do Twitter

  • Youtube API - para buscar dados públicos de um canal do Youtube

Para mais detalhes acerca das dependências do projeto, como versões específicas, veja o arquivo package.json do projeto.


🚀 Como rodar a aplicação?

🔧 Pré-requisitos

Antes de baixar o projeto você necessecitará ter instalado na sua máquina as seguintes ferramentas:

  • Git para manilupar repostitórios Git
  • Docker para manipular Docker containers

Além disto é bom ter um editor para trabalhar com o código, como o VSCode.

Além disto é crucial configurar as variáveis de ambiente em um arquivo chamado .env antes de executar a aplicação. veja o arquivo .env.example para ver quais variáveis devem ser configuradas.

📟 Rodando a aplicação

# Clone este repositório
$ git clone https://github.com/JohnPetros/dev-media.git

# Acesse a pasta do projeto
$ cd dev-media

# Rode os containers do projeto
$ docker compose up

Muito provavelmente a aplicação estará rodando no endereço http://localhost:8000


🧪 Rodando os testes automatizados

python -m pytest src/app/core

💪 Como contribuir

# Fork este repositório
$ git clone https://github.com/JohnPetros/dev-media.git

# Cria uma branch com a sua feature
$ git checkout -b minha-feature

# Commit suas mudanças:
$ git commit -m 'feat: Minha feature'

# Push sua branch:
$ git push origin minha-feature

Você deve substituir 'minha-feature' pelo nome da feature que você está adicionando.

Utilize minha tabela de emojis para cada tipo de commit para manter o padrão entre as mensagens de commit.

Você também pode abrir um nova issue a respeito de algum problema, dúvida ou sugestão para o projeto. Ficarei feliz em poder ajudar, assim como melhorar este projeto.


📝 Licença

Esta aplicação está sob licença do MIT. Consulte o Arquivo de licença para obter mais detalhes sobre.


Feito com 💜 por John Petros 👋🏻

dev-media's People

Contributors

johnpetros avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.