{"id":49446740,"url":"https://github.com/rodrigues-heric/rss-feed","last_synced_at":"2026-04-29T23:11:34.540Z","repository":{"id":334321363,"uuid":"1140975765","full_name":"rodrigues-heric/rss-feed","owner":"rodrigues-heric","description":"📡 Full Stack RSS platform using polyglot microservices architecture. Features a React (TS) frontend, NestJS API and a Go worker for RabbitMQ. Dockerized and scalable","archived":false,"fork":false,"pushed_at":"2026-03-10T02:43:43.000Z","size":364,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-10T09:07:11.146Z","etag":null,"topics":["docker","docker-compose","go","nestjs","rabbitmq","react","typescript"],"latest_commit_sha":null,"homepage":"https://rss-feed-one.vercel.app","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":"2026-01-24T02:49:48.000Z","updated_at":"2026-03-10T02:43:46.000Z","dependencies_parsed_at":"2026-01-24T14:16:04.978Z","dependency_job_id":null,"html_url":"https://github.com/rodrigues-heric/rss-feed","commit_stats":null,"previous_names":["rodrigues-heric/rss-feeder","rodrigues-heric/rss-feed"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rodrigues-heric/rss-feed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Frss-feed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Frss-feed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Frss-feed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Frss-feed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodrigues-heric","download_url":"https://codeload.github.com/rodrigues-heric/rss-feed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodrigues-heric%2Frss-feed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32447381,"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","go","nestjs","rabbitmq","react","typescript"],"created_at":"2026-04-29T23:11:31.450Z","updated_at":"2026-04-29T23:11:34.534Z","avatar_url":"https://github.com/rodrigues-heric.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![Feed RSS icon](./assets/rss.png) RSS Feed\n\n\u003e Full Stack RSS platform using polyglot microservices architecture.\n\u003e Features a React (TS) frontend, NestJS API and a Go worker for RabbitMQ. Dockerized and scalable\n\n![React](https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB)\n![Tailwind](https://img.shields.io/badge/tailwind-%2338B2AC.svg?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)\n![shadcn](https://img.shields.io/badge/shadcn-000000?style=for-the-badge\u0026logo=shadcnui\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![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge\u0026logo=mongodb\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## Product overview\n\nAn RSS aggregator platform that enables users to subscribe to multiple RSS feeds, manage their subscriptions, and consume news from various sources in a unified interface. The platform features a modern, responsive UI with real-time feed updates powered by a scalable microservices architecture.\n\n**Core Features:**\n\n- User authentication and management (JWT-based)\n- RSS feed subscription and management\n- News feed aggregation and display\n- Pagination and feed filtering\n- User profiles with personalization\n- Real-time feed processing via background workers\n- RESTful API with comprehensive Swagger documentation\n\n### Demo\n\nhttps://github.com/user-attachments/assets/2232fafa-b2f3-4d48-bbae-180e181b2af2\n\n### Project delivery\n\nThis project demonstrates a production-ready full-stack implementation using modern web technologies and architectural patterns, including polyglot microservices, containerization, and event-driven processing.\n\n### Demonstrated Skills\n\n- **Full-Stack Development**: Proficiency across frontend, backend, and worker services\n- **Microservices Architecture**: Designing scalable systems with independent services communicating via message queues\n- **Frontend Development**: Advanced React patterns, component composition, form handling, state management\n- **Backend Development**: NestJS with decorators, middleware, guards, interceptors, and validation\n- **Database Design**: MongoDB schema design and aggregation pipelines\n- **Message Queue Integration**: RabbitMQ for async task processing\n- **DevOps \u0026 Containerization**: Docker, Docker Compose for local development and deployment\n- **API Design**: RESTful principles with proper error handling and documentation (Swagger)\n- **Authentication \u0026 Security**: JWT implementation with refresh token strategy\n- **Cross-language Development**: TypeScript (Frontend/Backend), Go (Worker services)\n\n## Tech documentation\n\n### System architecture\n\nThe application follows a **polyglot microservices architecture** with three main services:\n\n1. **Frontend (React + Vite)**: Single Page Application serving the user interface on port 5173\n2. **Backend (NestJS)**: RESTful API handling business logic, authentication, and feed management on port 3000\n3. **Worker (Go)**: Background service consuming RSS feed jobs from RabbitMQ queue and storing results in MongoDB\n\n**Data Flow:**\n\n1. User submits RSS feed URL via frontend\n2. API validates and queues the job in RabbitMQ\n3. Go worker fetches and parses the RSS feed\n4. Parsed articles stored in MongoDB\n5. Frontend fetches and displays the aggregated news\n\n```mermaid\ngraph LR\n    A[React Frontend] \u003c--\u003e|HTTP/REST| B[NestJS Backend]\n    B --\u003e|Queue Jobs| C[RabbitMQ]\n    C --\u003e|Consume Jobs| D[Go Worker]\n    D --\u003e|Read/Write| E[MongoDB]\n    B \u003c--\u003e|Query| E\n    A \u003c--\u003e|Query| B\n```\n\n### Tech stack and decisions\n\n| Technology           | Layer               | Rationale                                                                       |\n| -------------------- | ------------------- | ------------------------------------------------------------------------------- |\n| **React 19**         | Frontend            | Modern, declarative UI library with excellent ecosystem and performance         |\n| **TypeScript**       | Frontend/Backend    | Type safety, better developer experience, catch errors at compile time          |\n| **Tailwind CSS**     | Frontend            | Utility-first CSS framework for rapid UI development with consistency           |\n| **shadcn/ui**        | Frontend            | Pre-built, accessible UI components built on Radix UI                           |\n| **Vite**             | Frontend Build      | Lightning-fast build tool with HMR, excellent developer experience              |\n| **React Hook Form**  | Frontend Forms      | Lightweight, performant form handling with minimal re-renders                   |\n| **Zod**              | Frontend Validation | TypeScript-native schema validation                                             |\n| **React Query**      | Frontend Data       | Powerful async state management for API data                                    |\n| **NestJS**           | Backend             | Full-featured framework with CLI, decorators, and strong architectural patterns |\n| **MongoDB**          | Database            | NoSQL database for flexible schema, excellent for semi-structured data          |\n| **Mongoose**         | Backend ORM         | Object modeling for MongoDB with validation and middleware support              |\n| **JWT (Passport)**   | Authentication      | Stateless authentication, ideal for microservices and SPAs                      |\n| **RabbitMQ**         | Message Queue       | Reliable async communication between microservices                              |\n| **Go**               | Worker Service      | Lightweight, concurrent processing ideal for CPU-bound RSS parsing tasks        |\n| **Docker \u0026 Compose** | DevOps              | Containerization for consistency, Compose for local orchestration               |\n\n### Key folders structure\n\n```\nrss-feed/\n├── backend/rss-feed/          # NestJS API\n│   ├── src/\n│   │   ├── modules/           # Feature modules (auth, users, rss, feed-source)\n│   │   │   ├── auth/          # Authentication logic, JWT strategy, guards\n│   │   │   ├── users/         # User management\n│   │   │   ├── rss/           # RSS feed endpoints and logic\n│   │   │   └── feed-source/   # Feed source management\n│   │   ├── infra/             # Infrastructure layer\n│   │   │   └── mongodb/       # Database schemas and services\n│   │   ├── common/            # Shared utilities\n│   │   │   ├── decorators/    # Custom decorators (GetUser, etc.)\n│   │   │   ├── filters/       # Global exception filters\n│   │   │   └── interceptors/  # Global interceptors (token refresh)\n│   │   ├── app.module.ts      # Root module\n│   │   └── main.ts            # Application entry point\n│   └── package.json           # Backend dependencies\n│\n├── frontend/rss-feed/         # React + Vite Application\n│   ├── src/\n│   │   ├── components/        # Reusable React components\n│   │   │   └── ui/            # shadcn/ui components\n│   │   ├── pages/             # Page components (home, login, profile, etc.)\n│   │   ├── routes/            # Route definitions and protection\n│   │   ├── services/          # API service clients\n│   │   ├── contexts/          # React Context (AuthContext)\n│   │   ├── hooks/             # Custom React hooks\n│   │   ├── interfaces/        # TypeScript interfaces for data\n│   │   ├── lib/               # Utilities and API client setup\n│   │   └── main.tsx           # Application entry point\n│   └── package.json           # Frontend dependencies\n│\n├── workers/go/                # Go Worker Service\n│   ├── main.go                # Worker entry point\n│   ├── go.mod                 # Go module definition\n│   └── Dockerfile             # Container configuration\n│\n├── docker-compose.yml         # Local orchestration\n└── README.md\n```\n\n### How to run\n\n**Prerequisites:**\n\n- Docker and Docker Compose installed\n- Node.js 18+ (if running without Docker)\n- Go 1.21+ (if building worker locally)\n\n**Option 1: Docker Compose (Recommended)**\n\n```bash\n# Clone the repository\ngit clone \u003crepository-url\u003e\ncd rss-feed\n\n# Create .env file with required variables\ncat \u003e .env \u003c\u003c EOF\nJWT_SECRET=your_jwt_secret_key_here\nMONGO_URI=mongodb://mongodb:27017/rss-feed\nRABBITMQ_URL=amqp://guest:guest@rabbitmq:5672/\nEOF\n\n# Start all services\ndocker compose up --build\n\n# Access the application:\n# - Frontend: http://localhost:5173\n# - Backend API: http://localhost:3000\n# - API Docs: http://localhost:3000/api/\n# - RabbitMQ Dashboard: http://localhost:15672 (guest/guest)\n```\n\n**Option 2: Local Development**\n\n```bash\n# Backend\ncd backend/rss-feed\nnpm install\nnpm run start:dev\n\n# Frontend (separate terminal)\ncd frontend/rss-feed\nnpm install\nnpm run dev\n\n# Worker (requires Go and local MongoDB/RabbitMQ)\ncd workers/go\ngo mod download\ngo run main.go\n```\n\n**Stopping Services:**\n\n```bash\n# Stop all containers\ndocker compose down\n\n# Stop and remove volumes\ndocker compose down -v\n```\n\n### Where to evaluate code\n\n**Frontend Architecture \u0026 Patterns:**\n\n- [App.tsx](frontend/rss-feed/src/App.tsx) - Application setup with React Query and Router\n- [AuthContext.tsx](frontend/rss-feed/src/contexts/AuthContext.tsx) - Context API for global authentication state and JWT token management\n- [ProtectedRoute.tsx](frontend/rss-feed/src/components/ProtectedRoute.tsx) - Route protection implementation\n- [index.routes.tsx](frontend/rss-feed/src/routes/index.routes.tsx) - Route definitions with lazy loading\n- [api.ts](frontend/rss-feed/src/lib/api.ts) - Axios configuration with interceptors for token refresh\n\n**Backend Architecture \u0026 NestJS Patterns:**\n\n- [app.module.ts](backend/rss-feed/src/app.module.ts) - Module organization and dependency injection\n- [auth.module.ts](backend/rss-feed/src/modules/auth/auth.module.ts) - Authentication module with JWT strategy\n- [token-refresh.interceptor.ts](backend/rss-feed/src/common/interceptors/token-refresh.interceptor.ts) - Global interceptor for token refresh logic\n- [jwt.strategy.ts](backend/rss-feed/src/modules/auth/jwt.strategy.ts) - Passport JWT strategy implementation\n- [get-user.decorator.ts](backend/rss-feed/src/common/decorators/get-user.decorator.ts) - Custom decorator for extracting user from JWT\n- [rss.service.ts](backend/rss-feed/src/modules/rss/rss.service.ts) - Business logic for RSS feed processing\n- [users.service.ts](backend/rss-feed/src/modules/users/users.service.ts) - User management with password hashing (bcrypt)\n\n**Microservices \u0026 Async Processing:**\n\n- [main.go](workers/go/main.go) - Go worker consuming RabbitMQ jobs, parsing RSS feeds with gofeed library, and storing in MongoDB\n- [docker-compose.yml](docker-compose.yml) - Service orchestration and networking configuration\n\n**Key Concepts to Review:**\n\n- JWT authentication and refresh token implementation\n- RabbitMQ producer/consumer pattern\n- MongoDB schema design and Mongoose modeling\n- React Context + React Query for state management\n- NestJS module and service architecture\n- TypeScript strict mode usage throughout\n\n## License\n\nDistributed under the **MIT** license. See `LICENSE` for more information.\n\nDeveloped by Heric Leite Rodrigues.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigues-heric%2Frss-feed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodrigues-heric%2Frss-feed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigues-heric%2Frss-feed/lists"}