{"id":31618062,"url":"https://github.com/ma2903/reading-marathon","last_synced_at":"2026-04-08T11:32:55.510Z","repository":{"id":317902204,"uuid":"1064837904","full_name":"Ma2903/reading-marathon","owner":"Ma2903","description":"Aplicação full-stack de Maratona de Leitura com painel em tempo real, utilizando React, Node.js, WebSockets, RabbitMQ e Docker.","archived":false,"fork":false,"pushed_at":"2025-10-03T18:27:13.000Z","size":1237,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-03T20:20:37.267Z","etag":null,"topics":["docker","docker-compose","express","fullstack","javascript","nodejs","rabbitmq","react","tailwindcss","vite","websocket"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/Ma2903.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-09-26T16:20:13.000Z","updated_at":"2025-10-03T18:27:16.000Z","dependencies_parsed_at":"2025-10-03T20:20:47.196Z","dependency_job_id":"428e1029-d1c8-4dad-af3b-7afb32a7d3b9","html_url":"https://github.com/Ma2903/reading-marathon","commit_stats":null,"previous_names":["ma2903/reading-marathon"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Ma2903/reading-marathon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ma2903%2Freading-marathon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ma2903%2Freading-marathon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ma2903%2Freading-marathon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ma2903%2Freading-marathon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ma2903","download_url":"https://codeload.github.com/Ma2903/reading-marathon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ma2903%2Freading-marathon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278621844,"owners_count":26017253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","express","fullstack","javascript","nodejs","rabbitmq","react","tailwindcss","vite","websocket"],"created_at":"2025-10-06T13:45:19.247Z","updated_at":"2025-10-06T13:45:23.508Z","avatar_url":"https://github.com/Ma2903.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏅 Maratona de Leitura (Reading Marathon)\n\nAplicação full-stack de uma Maratona de Leitura com um painel de progresso coletivo em tempo real. Este projeto demonstra uma arquitetura moderna utilizando React para o frontend, Node.js para o backend, WebSockets para comunicação instantânea, RabbitMQ para mensageria e Docker para orquestração dos serviços.\n\n---\n\n## ✨ Funcionalidades\n\n-   **Painel em Tempo Real:** Acompanhe o progresso da maratona sem precisar atualizar a página.\n-   **Registro de Leitura:** Os participantes podem se identificar e registrar os livros e páginas lidas.\n-   **Progresso Coletivo:** Uma barra de progresso visual mostra o total de páginas lidas pelo grupo em relação à meta.\n-   **Ranking de Leitores:** Tabela de classificação que ordena os participantes por páginas lidas.\n-   **Feed de Atividades:** Veja em tempo real as leituras que estão sendo registradas.\n-   **Gráficos:** Visualização de dados como atividade por hora.\n\n---\n\n## 🛠️ Tecnologias Utilizadas\n\n-   **Frontend:**\n    -   [React](https://react.dev/) com [Vite](https://vitejs.dev/)\n    -   [Tailwind CSS](https://tailwindcss.com/) para estilização\n    -   [Recharts](https://recharts.org/) para gráficos\n    -   [Lucide React](https://lucide.dev/) para ícones\n-   **Backend:**\n    -   [Node.js](https://nodejs.org/) com [Express](https://expressjs.com/)\n    -   [WebSockets (ws)](https://github.com/websockets/ws) para comunicação em tempo real\n-   **Mensageria:**\n    -   [RabbitMQ](https://www.rabbitmq.com/) para gerenciar a fila de leituras registradas.\n-   **Containerização:**\n    -   [Docker](https://www.docker.com/) \u0026 [Docker Compose](https://docs.docker.com/compose/)\n\n---\n\n## 🚀 Como Executar o Projeto\n\nEste projeto é 100% containerizado. Você só precisa ter o Docker e o Docker Compose instalados.\n\n1.  **Clone o Repositório**\n    ```bash\n    git clone https://github.com/Ma2903/reading-marathon.git\n    cd reading-marathon\n    ```\n\n2.  **Suba os Containers**\n    Execute o comando abaixo na raiz do projeto. Ele irá construir as imagens e iniciar todos os serviços em segundo plano.\n    ```bash\n    docker-compose up --build -d\n    ```\n\n3.  **Acesse as Aplicações**\n    -   🌐 **Frontend (Painel da Maratona):** [http://localhost:3000](http://localhost:3000)\n    -   ⚙️ **Backend API:** [http://localhost:3001](http://localhost:3001)\n    -   🐰 **Painel do RabbitMQ:** [http://localhost:15672](http://localhost:15672)\n        -   **Usuário:** `admin`\n        -   **Senha:** `admin123`\n\n4.  **Para Parar a Aplicação**\n    Para parar todos os containers, execute:\n    ```bash\n    docker-compose down\n    ```\n\n---\n\n## 🏗️ Arquitetura\n\nO fluxo de dados da aplicação funciona da seguinte maneira:\n1.  O **Frontend** (React) permite que o usuário se registre e envie um formulário com os dados da leitura.\n2.  A requisição é enviada para o **Backend** (Node.js/Express).\n3.  O Backend publica a informação da leitura como uma mensagem em uma fila do **RabbitMQ**.\n4.  Um \"consumidor\" no mesmo Backend escuta essa fila, processa a mensagem (atualiza o total de páginas e os dados dos participantes).\n5.  Após processar, o Backend envia uma mensagem via **WebSocket** para todos os clientes (Frontends) conectados.\n6.  O **Frontend** recebe a atualização via WebSocket e atualiza a interface do usuário em tempo real.\n\n---\n\n## 📜 Licença\n\nEste projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fma2903%2Freading-marathon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fma2903%2Freading-marathon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fma2903%2Freading-marathon/lists"}