{"id":49446721,"url":"https://github.com/rodrigues-heric/weather-report","last_synced_at":"2026-04-29T23:11:27.690Z","repository":{"id":327502241,"uuid":"1107774484","full_name":"rodrigues-heric/weather-report","owner":"rodrigues-heric","description":"🌦️ Full-stack weather platform using a polyglot microservices architecture. Features a React frontend, NestJS API, and distributed workers in Go and Python connected via RabbitMQ. Dockerized \u0026 Scalable.","archived":false,"fork":false,"pushed_at":"2026-01-16T21:41:56.000Z","size":7309,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-17T09:20:08.598Z","etag":null,"topics":["docker","docker-compose","event-driven","flask","fullstack","golang","microservices","nestjs","python","rabbitmq","react","shadcn","tailwind","typescript","vite"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rodrigues-heric.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-01T15:40:38.000Z","updated_at":"2026-01-16T21:44:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rodrigues-heric/weather-report","commit_stats":null,"previous_names":["rodrigues-heric/weather-report"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rodrigues-heric/weather-report","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Fweather-report","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Fweather-report/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Fweather-report/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Fweather-report/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodrigues-heric","download_url":"https://codeload.github.com/rodrigues-heric/weather-report/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Fweather-report/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32447380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","event-driven","flask","fullstack","golang","microservices","nestjs","python","rabbitmq","react","shadcn","tailwind","typescript","vite"],"created_at":"2026-04-29T23:11:25.692Z","updated_at":"2026-04-29T23:11:27.685Z","avatar_url":"https://github.com/rodrigues-heric.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌦️ Weather Report\n\n![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![NestJS](https://img.shields.io/badge/NestJS-E0234E?style=for-the-badge\u0026logo=nestjs\u0026logoColor=white)\n![Go](https://img.shields.io/badge/Go-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white)\n![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white)\n![RabbitMQ](https://img.shields.io/badge/RabbitMQ-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)\n\n\u003e Uma plataforma full-stack de previsão meteorológica projetada para alta performance, escalabilidade e experiência de usuário fluida.\n\n## 🎯 Visão Geral do Produto\n\nEste projeto demonstra a capacidade de construir uma aplicação web moderna de ponta a ponta, simulando desafios reais de engenharia de software, como processamento de dados em larga escala e interfaces responsivas.\n\n### 📷 Demonstração\n\nhttps://github.com/user-attachments/assets/b544c090-538b-4ae9-a380-d87b121e0fc5\n\n### 🚀 O que este projeto entrega?\n\n- **Experiência do Usuário (UX):** Interface intuitiva construída com componentes modernos, permitindo busca de previsões, sistema de favoritos e visualização de dados climáticos.\n- **Performance e Robustez:** O sistema foi projetado para não travar. Tarefas pesadas são enviadas para \"filas\" e processadas em segundo plano, mantendo a tela do usuário sempre rápida.\n- **Segurança:** Implementação de autenticação segura e proteção de rotas.\n\n### 💡 Competências Demonstradas\n\nComo desenvolvedor responsável pela **concepção e entrega full-stack**, este projeto destaca:\n\n- **Visão de Produto:** Tradução de requisitos técnicos em funcionalidades úteis para o usuário final.\n- **Arquitetura Escalável:** O sistema está pronto para crescer, separado em microsserviços que podem ser ampliados independentemente.\n- **Versatilidade (Poliglotismo):** Uso da linguagem certa para a tarefa certa (Python para dados, Go para performance, TypeScript para web).\n\n## 🛠️ Documentação Técnica\n\nDetalhes sobre a arquitetura orientada a eventos, decisões de stack e instruções de setup.\n\n### 🏗️ Arquitetura do Sistema\n\nO projeto utiliza uma arquitetura híbrida de microserviços com **RabbitMQ** para desacoplar a API dos workers de processamento.\n\n```mermaid\ngraph TD\n    Client[\"💻 Frontend (React + Vite)\"] --\u003e|REST API| API[\"🛡️ Backend Gateway (NestJS)\"]\n    API --\u003e|Autenticação| Auth[\"JWT Strategy\"]\n    API --\u003e|Publica Evento| RMQ[\"🐇 RabbitMQ Cluster\"]\n    \n    RMQ --\u003e|Consome Dados| PyWorker[\"🐍 Python Worker (Ingestão/ETL)\"]\n    RMQ --\u003e|Consome Jobs| GoWorker[\"🐹 Go Worker (Alta Concorrência)\"]\n    \n    PyWorker --\u003e DB[(Database)]\n    GoWorker --\u003e DB\n```\n\n### 💻 Tech Stack \u0026 Decisões\n\n| Camada    | Tecnologias                            | Por que foi escolhida?                                                                                         |\n| --------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| Frontend  | React, TypeScript, Tailwind, shadcn/ui | Combinação de desenvolvimento rápido com tipagem segura e componentes de UI acessíveis e consistentes.         |\n| Backend   | NestJS, TypeScript, JWT                | Framework robusto e opinativo que facilita a modularização, injeção de dependência e manutenção a longo prazo. |\n| Messaging | RabbitMQ                               | Garante que mensagens não sejam perdidas e permite o processamento assíncrono (Fire and Forget).               |\n| Workers   | Python \u0026 Go                            | **Python** pela facilidade em manipulação de dados; **Go** pela performance bruta em concorrência.             |\n| DevOps    | Docker, Docker Compose                 | \"Infrastructure as Code\" para garantir que o ambiente de desenvolvimento seja idêntico ao de produção.         |\n\n### 📂 Estrutura de Diretórios Chave\n\n```bash\n/\n├── backend/weather/       # API Principal (NestJS)\n│   ├── src/auth/          # Lógica de Autenticação e JWT Guards\n│   └── src/main.ts        # Entrypoint da API\n├── weather-report/        # Frontend (React + Vite)\n│   └── src/main.tsx       # Entrypoint da UI\n├── data_processing/\n│   └── weather.py         # Pipeline de ingestão (Python)\n├── go-worker/\n│   └── main.go            # Worker concorrente (Go)\n└── docker-compose.yml     # Orquestração de todos os serviços\n```\n\n### 🚀 Como executar o projeto\n\nVocê pode rodar a aplicação completa utilizando Docker e rodando o\nfrontend e backend\n\n**Primeiro**\n\nSuba os serviços de banco de dados e os workers:\n\n```bash\n# Na raiz do projeto\ndocker-compose up -d\n```\n\n**Segundo**\n\nSuba o backend rodando:\n\n```bash\ncd backend/weather/\nnpm run start\n```\n\n**Terceiro**\n\nSuba o frontend rodando:\n\n```bash\ncd weather-report/\nnpm run dev\n```\n\n## 🧪 Onde avaliar o código\n\nSe você tem pouco tempo, foque nestes arquivos para entender a qualidade do código:\n\n- **Entrada do Backend:** backend/weather/src/main.ts\n- **Segurança/Auth:** backend/weather/src/auth/jwt.strategy.ts\n- **Pipeline de Dados:** data_processing/weather.py\n- **Frontend Entry:** weather-report/src/main.tsx\n\n## 📄 Licença\n\nDistribuído sob a licença **MIT**. Veja `LICENSE` para mais informações.\n\nDesenvolvido por Heric Leite Rodrigues.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigues-heric%2Fweather-report","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodrigues-heric%2Fweather-report","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigues-heric%2Fweather-report/lists"}