{"id":24652537,"url":"https://github.com/gmartins-dev/tea-roulette","last_synced_at":"2025-03-20T22:34:48.966Z","repository":{"id":274197814,"uuid":"921675044","full_name":"gmartins-dev/tea-roulette","owner":"gmartins-dev","description":"Drink Runner Roulette is here to save the day! It's a fun, fair, and simple web app that randomly picks who's making the next round of drinks.","archived":false,"fork":false,"pushed_at":"2025-02-08T14:01:54.000Z","size":1346,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T15:19:36.311Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gmartins-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-01-24T11:57:55.000Z","updated_at":"2025-02-08T14:01:58.000Z","dependencies_parsed_at":"2025-01-25T16:38:00.109Z","dependency_job_id":null,"html_url":"https://github.com/gmartins-dev/tea-roulette","commit_stats":null,"previous_names":["gmartins-dev/tea-roulette"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmartins-dev%2Ftea-roulette","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmartins-dev%2Ftea-roulette/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmartins-dev%2Ftea-roulette/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmartins-dev%2Ftea-roulette/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gmartins-dev","download_url":"https://codeload.github.com/gmartins-dev/tea-roulette/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244705660,"owners_count":20496544,"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","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":[],"created_at":"2025-01-25T19:15:47.858Z","updated_at":"2025-03-20T22:34:48.961Z","avatar_url":"https://github.com/gmartins-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Drink Runner Roulette 🍵\n\nEver had that awkward moment in the office when everyone's craving a drink, but no one wants to make it? Drink Runner Roulette is here to save the day!\nIt's a fun, fair, and simple web app that randomly picks who's making the next round of drinks.\n\n## What's This All About? 🤔\n\nYou know how it goes - it's always the same people volunteering to make drinks, while others mysteriously disappear when it's drinks time. Drink Runner Roulette brings some easy way and fairness to the age-old office drink round by:\n\n- 🎲 Randomly selecting who makes the drinks\n- 👥 Letting you add or remove people easily\n- 📱 Working on any device (phones, tablets, computers)\n- ⚡ Being super quick and easy to use\n\n## Features\n\n- ✨ Dynamic participant management\n  - Add/remove participants with real-time API sync\n  - Clear all participants at once\n  - Automatic name parsing (first name + last name)\n  - Real-time list updates\n- 🎲 Random selection via API\n  - Fair selection algorithm\n  - Animated result announcement\n  - Minimum 2 participants required\n  - Persistent user records\n- 🎨 Modern UI/UX\n  - Dark/Light theme support\n  - Responsive design\n  - Interactive hover effects\n  - Toast notifications\n  - Loading states \u0026 animations\n  - Accessible components\n- 💫 Visual Feedback\n  - Success/Error notifications\n  - Loading indicators\n  - Hover animations\n  - Theme transitions\n- 🔧 Error Handling\n  - API error boundaries\n  - Graceful fallbacks\n  - User-friendly error messages\n  - Automatic retries\n\n## Demo\n\n\u003cp  align=\"center\"\u003e\n  \u003ch5 align=\"center\"\u003e🖥 Desktop:\u003c/h5\u003e\n  \u003ckbd\u003e\n\u003cimg width=\"100%\" style=\"border-radius: 5px\" height=\"70%\" src=\"public/demo/dark-screen1.png\" alt=\"Dark Mode Screenshot 1\"\u003e\n\u003c/kbd\u003e\n  \u003ckbd\u003e\n\u003cimg width=\"100%\" style=\"border-radius: 5px\" height=\"70%\" src=\"public/demo/light-screen2.png\" alt=\"Light Mode Screenshot 2\"\u003e\n\u003c/kbd\u003e\n\u003c/p\u003e\n  \u003ch5 align=\"center\"\u003e📱 Mobile:\u003c/h5\u003e\n\u003cp  align=\"center\"\u003e\n\u003ckbd\u003e\n\u003cimg width=\"600\" style=\"border-radius: 5px\" height=\"100%\" src=\"public/demo/mobile-dark.png\" alt=\"Mobile Dark Mode Screenshot\"\u003e\n\u003c/kbd\u003e\n\u003ckbd\u003e\n\u003cimg width=\"600\" style=\"border-radius: 5px\" height=\"100%\" src=\"public/demo/mobile-light.png\" alt=\"Mobile Light Mode Screenshot\"\u003e\n\u003c/kbd\u003e\n\u003c/p\u003e\n\n- 💻 See more screenshots [here](https://github.com/gmartins-dev/tea-roulette/tree/master/public/demo)\n\n## Tech Stack\n\n- **Framework**: [Next.js 14](https://nextjs.org/) (React Framework)\n- **Language**: [TypeScript](https://www.typescriptlang.org/)\n- **API Integration**: C# .NET API\n- **Styling \u0026 Components**:\n  - [Tailwind CSS](https://tailwindcss.com/) for utility-first CSS\n  - [shadcn/ui](https://ui.shadcn.com/) - A collection of re-usable components\n  - [Lucide Icons](https://lucide.dev/) for icons\n- **Theme**: [next-themes](https://github.com/pacocoursey/next-themes)\n- **Font**: [Roboto](https://fonts.google.com/specimen/Roboto)\n\n## Getting Started\n\n1. **Prerequisites**\n   - Node.js 18.x or later\n   - Docker and Docker Compose\n   - npm 9.x or later\n\n2. **Installation**\n   ```bash\n   # Clone the repository\n   git clone https://github.com/yourusername/tea-roulette.git\n   cd tea-roulette\n\n   # Install dependencies\n   npm install\n\n   # Start the API (in docker directory)\n   cd docker\n   docker compose up -d\n\n   # Create .env.local in root directory\n   echo \"NEXT_PUBLIC_API_URL=http://localhost:8794\" \u003e .env.local\n\n   # Start the frontend\n   npm run dev\n   ```\n\n3. **Open** `http://localhost:3000` in your browser\n\n## Project Structure\n\n```\ntea-roulette/\n├── app/                          # Main application files\n│   ├── api/                      # API routes and handlers\n│   ├── layout.tsx                # Main layout component\n│   └── page.tsx                  # Main page component\n├── components/                   # Reusable UI components\n│   ├── add-user-form.tsx         # Form for adding users\n│   ├── drink-order-form.tsx      # Form for drink orders\n│   └── ui/                       # UI components (buttons, inputs, etc.)\n├── docker/                       # Docker configuration files\n│   └── docker-compose.yml        # Docker Compose file\n├── lib/                          # Utility functions and helpers\n│   └── api-handler.ts            # API handler utility\n├── styles/                       # Global styles\n│   └── globals.css               # Global CSS styles\n├── tests/                        # Test files\n├── .env.local                    # Local environment variables\n├── package.json                  # Project metadata and dependencies\n└── tsconfig.json                 # TypeScript configuration\n```\n\n## Development Guidelines\n\n1. **Code Style**\n   - TypeScript best practices\n   - Functional components\n   - Proper error handling\n   - Meaningful component props\n\n2. **API Integration**\n   - Proper error handling\n   - Loading states\n   - Retry logic\n   - Type safety\n\n3. **State Management**\n   - React hooks for local state\n   - Error boundaries\n   - Loading states\n   - Side effects management\n\n4. **Theme Support**\n   - Dark/light mode\n   - CSS variables\n   - Smooth transitions\n   - Consistent palette\n\n## API Integration\n\nThe application integrates with the your own API, which provides:\n- User management\n- Random drink runnner selection\n- Drink run tracking\n- Persistent data storage\n\n## Error Handling\n\nThe application includes comprehensive error handling:\n- API error boundaries\n- User-friendly error messages\n- Automatic retries for failed requests\n- Loading states for all async operations\n\n## Testing\n\nThe Tea Roulette application includes comprehensive unit tests covering all major functionality. The tests are written using Jest and can be found in the `tests` directory.\n\n### Test Coverage\n\nThe test suite covers the following areas:\n- Random tea selection\n- Tea collection management (adding/removing teas)\n- Tea categorization and filtering\n- User preferences handling\n- History tracking\n- Input validation\n\n### Running Tests\n\nTo run the test suite:\n\n```bash\nnpm test\n```\n\nTo run tests with coverage report:\n\n```bash\nnpm test -- --coverage\n```\n\n### Test Structure\n\nThe tests are organized into the following test suites:\n- Core functionality tests\n- Tea Management tests\n- Tea Categories tests\n- User Preferences tests\n- History Tracking tests\n- Validation tests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmartins-dev%2Ftea-roulette","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgmartins-dev%2Ftea-roulette","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmartins-dev%2Ftea-roulette/lists"}