{"id":21270001,"url":"https://github.com/ushiradineth/cron","last_synced_at":"2025-03-15T11:45:02.000Z","repository":{"id":221992571,"uuid":"755782482","full_name":"ushiradineth/cron","owner":"ushiradineth","description":"A Cron clone built to play around with React DND and rebuild some of the cool features of Cron.","archived":false,"fork":false,"pushed_at":"2025-02-09T21:26:57.000Z","size":510,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-09T22:19:22.753Z","etag":null,"topics":["calender","cron","nextjs","react-dnd","time-management","vercel"],"latest_commit_sha":null,"homepage":"https://cron.ushira.com","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/ushiradineth.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":"2024-02-11T03:13:18.000Z","updated_at":"2025-02-09T21:27:00.000Z","dependencies_parsed_at":"2024-02-11T17:24:56.574Z","dependency_job_id":"dd84c0bb-c613-4d33-a1a7-41e03bff2110","html_url":"https://github.com/ushiradineth/cron","commit_stats":null,"previous_names":["ushiradineth/cron-fe"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ushiradineth%2Fcron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ushiradineth%2Fcron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ushiradineth%2Fcron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ushiradineth%2Fcron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ushiradineth","download_url":"https://codeload.github.com/ushiradineth/cron/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243725545,"owners_count":20337667,"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":["calender","cron","nextjs","react-dnd","time-management","vercel"],"created_at":"2024-11-21T08:14:04.834Z","updated_at":"2025-03-15T11:45:01.993Z","avatar_url":"https://github.com/ushiradineth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cron\n\n- An Calander Management App made to learn Advanced UI Use Cases and Golang with Test Driven Development.\n\n- Backend can be found [here](https://github.com/ushiradineth/cron-be).\n\n## Technologies\n\n### Frontend\n\n- `TypeScript`\n- `Next.js`\n- `Dnd-kit`\n- `Zustand`\n- `NextAuth`\n- `TanStack Query`\n- `Tailwind CSS`\n- `Zod`\n\n### Backend\n\n- `Go`\n- `net/http`\n- `PostgreSQL`\n- `Test Containers`\n- `Swaggo`\n- `sqlx`\n\n### Infrastructure\n\n- `Docker`\n- `Github Actions`\n- `Vercel`\n- `GitHub Container Registry`\n\n## Features\n\n- Here's what I learned and implemented on this project:\n\n### Advanced UI drag and drop with Dnd-kit.\n\n- Drag through a day to create a new event.\n- Drag from the top or bottom of an event to extend or shorten it.\n- Drag the event from the middle to move it to another day.\n- Show previews of the changes done through the sidebar.\n- Show previews of the changes done before create a new event.\n- Show previews of the changes done through resizing an event.\n- Lots of performance testing and bug fixes due to the complexity of the UI.\n\n### State management with Zustand.\n\n- I have not used state management libraries before on a personal project, so I used this opportunity to learn it.\n- Manage the state of the events, settings and prerendered data with Zustand.\n- Share state between the sidebar and calander view for previewing.\n\n### TDD with Go.\n\n- The flow of TDD is to write the test first, then write the code to make the test pass.\n- The main goal of this project is to learn TDD, so I wrote the tests first.\n\n### Test Containers.\n\n- I used `Test Containers` to run the tests in a containerized environment.\n- This allowed me to run the tests in a headless environment, which is important for the CI/CD pipeline.\n\n## The Process\n\n- This project took a while to complete due to work.\n- I wanted to use this project as a canvas to try new technologies, which I was able to.\n\n## Todo List\n\n- Unfortunatly, this project is on hold as I am working on a few other projects that I would like to focus more on, however, this list would act as a roadmap if I do come back to this project.\n\n### Frontend\n\n- [ ] Light mode.\n- [ ] Context menu to save changes.\n- [ ] Settings page for user and calander settings.\n- [ ] Add custom color palette for events.\n- [ ] Events that span multiple days.\n- [ ] Repeated events.\n- [x] Timezone support.\n- [ ] Monthly and yearly view.\n\n### Backend\n\n- [ ] Rate limiting.\n- [x] Logging.\n- [x] Metrics.\n- [x] Tracing.\n- [x] Kubernetes deployment with ArgoCD.\n- [ ] Architecture Documentation.\n\n### General\n\n- [ ] Forget Password Flow.\n- [ ] Email verification.\n- [ ] Email only signup.\n- [ ] Notion integration.\n- [ ] Google Calendar integration.\n- [ ] Google Contacts integration.\n- [ ] Google Auth integration.\n- [ ] Migrate from AuthJS to Better Auth.\n- [ ] NextJS 15.\n- [ ] React Suspense.\n\n## Running the Project\n\n- To run the project in your local environment, follow these steps:\n  - Clone the repository to your local machine.\n  - Clone the [backend](https://github.com/ushiradineth/cron-be) repository, and follow the instructions to run the backend.\n  - Copy the `.env.example` file to `.env` and fill in the required environment variables.\n  - Run `pnpm install` in the project directory to install the required dependencies.\n  - Run `pnpm dev` to get the project running.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fushiradineth%2Fcron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fushiradineth%2Fcron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fushiradineth%2Fcron/lists"}