{"id":26706535,"url":"https://github.com/santthosh/todoist","last_synced_at":"2026-04-18T02:02:34.905Z","repository":{"id":281946580,"uuid":"946965921","full_name":"santthosh/todoist","owner":"santthosh","description":"Easy to manage tasks and reminders","archived":false,"fork":false,"pushed_at":"2025-03-13T04:17:55.000Z","size":418,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-29T16:08:30.718Z","etag":null,"topics":["cursor","nextjs","postgresql","redis","todolist","vibe","vibecoding"],"latest_commit_sha":null,"homepage":"https://todoist.cloud","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/santthosh.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-03-12T00:27:59.000Z","updated_at":"2025-03-13T04:17:58.000Z","dependencies_parsed_at":"2025-03-12T01:31:36.448Z","dependency_job_id":"2583f3ce-2d9a-438f-be9b-d1608121b031","html_url":"https://github.com/santthosh/todoist","commit_stats":null,"previous_names":["santthosh/todoist"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/santthosh/todoist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santthosh%2Ftodoist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santthosh%2Ftodoist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santthosh%2Ftodoist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santthosh%2Ftodoist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/santthosh","download_url":"https://codeload.github.com/santthosh/todoist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santthosh%2Ftodoist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["cursor","nextjs","postgresql","redis","todolist","vibe","vibecoding"],"created_at":"2025-03-27T06:18:13.074Z","updated_at":"2026-04-18T02:02:34.886Z","avatar_url":"https://github.com/santthosh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# todoist.cloud\n\n**Easy to manage tasks and reminders**\n\n[![Run Tests](https://github.com/santthosh/todoist/actions/workflows/test.yml/badge.svg)](https://github.com/santthosh/todoist/actions/workflows/test.yml)\n[![Next.js](https://img.shields.io/badge/Next.js-15.2.2-black?style=flat\u0026logo=next.js)](https://nextjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?style=flat\u0026logo=typescript)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.4-38B2AC?style=flat\u0026logo=tailwind-css)](https://tailwindcss.com/)\n[![Flowbite](https://img.shields.io/badge/Flowbite-2.3-0CA4E6?style=flat\u0026logo=flowbite)](https://flowbite.com/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-14-336791?style=flat\u0026logo=postgresql)](https://www.postgresql.org/)\n[![Redis](https://img.shields.io/badge/Redis-7-DC382D?style=flat\u0026logo=redis)](https://redis.io/)\n[![Jest](https://img.shields.io/badge/Jest-29-C21325?style=flat\u0026logo=jest)](https://jestjs.io/)\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://todoist.cloud\"\u003e\n    \u003cimg src=\"public/cloud-icon.svg\" alt=\"Todoist Cloud Logo\" width=\"100\" height=\"100\"\u003e\n  \u003c/a\u003e\n  \u003ch3 align=\"center\"\u003e\n    \u003ca href=\"https://todoist.cloud\"\u003eVisit todoist.cloud\u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\n## Features\n\nThis application is a full-featured task management application that allows you to:\n\n- Create multiple task lists to organize your activities\n- Add items to your lists\n- Mark items as complete\n- Set due dates for your tasks\n- Schedule reminders for important tasks\n- Archive lists you no longer need\n- Delete lists and items\n\nThe application uses PostgreSQL for data storage and Redis for caching reminders.\n\n## Live Demo\n\nCheck out the live application at [https://todoist.cloud](https://todoist.cloud)\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.\n\n## Local Development with Docker Compose\n\nThis project uses PostgreSQL and Redis for data storage. To simplify local development, a Docker Compose configuration is provided.\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/)\n- [Docker Compose](https://docs.docker.com/compose/install/) (usually included with Docker Desktop)\n\n### Starting the Database Services\n\n1. Start PostgreSQL and Redis containers:\n\n```bash\ndocker-compose up -d\n```\n\n2. The services will be available at:\n   - PostgreSQL: `localhost:5432` (User: todoist, Password: aIU0Ys5hrBPho647FLBpzl+Q37IM5mQhTgUhTqt25mE=, Database: todoist)\n   - Redis: `localhost:6379`\n\n3. Update your `.env` file to connect to these services:\n\n```\nDATABASE_URL=\"postgresql://todoist:aIU0Ys5hrBPho647FLBpzl+Q37IM5mQhTgUhTqt25mE=@localhost:5432/todoist?schema=public\"\nREDIS_URL=\"redis://localhost:6379\"\n```\n\n4. Run database migrations:\n\n```bash\nnpx prisma migrate dev\n```\n\n### Stopping the Services\n\nTo stop the containers:\n\n```bash\ndocker-compose down\n```\n\nTo stop and remove all data volumes:\n\n```bash\ndocker-compose down -v\n```\n\n## Testing\n\nThis project includes comprehensive unit tests for components and API routes. The tests are written using Jest and React Testing Library.\n\n### Test Structure\n\n- `src/__tests__/components/` - Tests for React components\n- `src/__tests__/api/` - Tests for API routes\n- `src/__tests__/utils/` - Tests for utility functions\n- `e2e-tests/` - End-to-end tests using Playwright\n\n### Running Tests\n\nTo run the unit tests:\n\n```bash\nnpm test\n```\n\nTo run tests in watch mode (useful during development):\n\n```bash\nnpm run test:watch\n```\n\nTo run end-to-end tests with Playwright:\n\n```bash\nnpm run test:e2e\n```\n\nTo run end-to-end tests with UI mode (for debugging):\n\n```bash\nnpm run test:e2e:ui\n```\n\nTo view the Playwright test report:\n\n```bash\nnpm run test:e2e:report\n```\n\n### E2E Test Coverage\n\nThe end-to-end tests cover the following functionality:\n\n- **Home Page**: Verifies that the home page loads correctly and displays the expected UI elements.\n- **Todo List Creation**: Tests the creation of new todo lists.\n- **Responsive Design**: Ensures the application works correctly on different screen sizes.\n- **Theme Switching**: Verifies that the dark/light mode toggle works correctly.\n\nSome tests are currently skipped due to limitations in the test environment:\n- Tests that require navigating to list detail pages\n- Tests for reminders functionality\n\n### Continuous Integration\n\nThis project uses GitHub Actions for continuous integration. Tests are automatically run when:\n\n- Code is pushed to the `main` branch\n- A pull request is created targeting the `main` branch\n\nThe workflow sets up a test environment with Node.js, PostgreSQL, and Redis to ensure all tests pass in an environment similar to production.\n\nAdditionally, end-to-end tests are run after successful deployment to verify the application is working correctly in production.\n\nTo see the status of the latest test runs, check the \"Actions\" tab in the GitHub repository.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template\u0026filter=next.js\u0026utm_source=create-next-app\u0026utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nThis project is deployed at [https://todoist.cloud](https://todoist.cloud) using Vercel's platform.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.\n\n## Contributing\n\nContributions are welcome! Here's how you can contribute to this project:\n\n### Code of Conduct\n\nPlease be respectful and inclusive when contributing to this project. Harassment or abusive behavior will not be tolerated.\n\n### How to Contribute\n\n1. **Fork the repository** - Create your own copy of the project to work on.\n2. **Create a branch** - Make your changes in a new branch (`git checkout -b feature/amazing-feature`).\n3. **Make your changes** - Implement your feature or bug fix.\n4. **Run tests** - Ensure all tests pass with `npm test`.\n5. **Commit your changes** - Use clear commit messages that explain what you've done.\n6. **Push to your branch** - Upload your changes to your forked repository.\n7. **Create a Pull Request** - Submit a PR to the main repository for review.\n\n### Pull Request Guidelines\n\n- Ensure your code passes all tests\n- Update documentation as needed\n- Include screenshots or examples if relevant\n- Keep PRs focused on a single feature or fix\n\n### Development Setup\n\nFollow the \"Getting Started\" and \"Local Development with Docker Compose\" sections above to set up your development environment.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Continuous Integration and Deployment (CI/CD)\n\nThis project uses GitHub Actions for continuous integration and deployment to Vercel. The workflow is configured to:\n\n1. Run all tests when code is pushed to the `main` branch or when a pull request is created\n2. Automatically deploy to Vercel when tests pass on the `main` branch\n\n### CI/CD Workflow\n\nThe CI/CD pipeline consists of two main jobs:\n\n1. **Test**: Runs all tests to ensure code quality\n2. **Deploy**: Deploys the application to Vercel if all tests pass (only on the `main` branch)\n\n### Setting Up Vercel Deployment\n\nTo set up automatic deployment to Vercel, you need to add the following secrets to your GitHub repository:\n\n- `VERCEL_TOKEN`: Your Vercel API token\n- `VERCEL_ORG_ID`: Your Vercel organization ID\n- `VERCEL_PROJECT_ID`: Your Vercel project ID\n\nYou can find these values in your Vercel project settings.\n\n### Deployment Configuration\n\nThe deployment configuration is defined in the following files:\n\n- `.github/workflows/ci-cd.yml`: The main CI/CD workflow using Vercel CLI\n- `.github/workflows/vercel-deploy.yml`: An alternative workflow using the official Vercel GitHub Action\n- `vercel.json`: Configuration for Vercel deployment\n\nYou can choose which workflow to use based on your preferences. The `ci-cd.yml` workflow provides more control over the deployment process, while the `vercel-deploy.yml` workflow is simpler and uses the official Vercel GitHub Action.\n\n## Deployment\n\n### Prisma Setup for Deployment\n\nThe application is configured to work with Prisma in both development and production environments. The following configurations have been made:\n\n1. **Binary Targets**: The Prisma schema includes binary targets for both local development (`native`) and RHEL-based production environments (`rhel-openssl-3.0.x`).\n\n2. **Build Process**: The build process includes Prisma client generation and database migrations:\n   ```\n   prisma generate \u0026\u0026 prisma migrate deploy \u0026\u0026 next build\n   ```\n\n3. **CI/CD Pipeline**: The GitHub Actions workflow is configured to:\n   - Generate the Prisma client during testing\n   - Run database migrations during deployment\n   - Pass the necessary environment variables to the build process\n\n4. **Environment Variables**: Make sure to set the following environment variables in your Vercel project:\n   - `DATABASE_URL`: The connection string for your PostgreSQL database\n   - `REDIS_URL`: The connection string for your Redis instance\n\n5. **GitHub Secrets**: The following secrets should be set in your GitHub repository:\n   - `VERCEL_TOKEN`: Your Vercel API token\n   - `VERCEL_ORG_ID`: Your Vercel organization ID\n   - `VERCEL_PROJECT_ID`: Your Vercel project ID\n   - `DATABASE_URL`: The connection string for your PostgreSQL database\n   - `REDIS_URL`: The connection string for your Redis instance","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsantthosh%2Ftodoist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsantthosh%2Ftodoist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsantthosh%2Ftodoist/lists"}