{"id":25290453,"url":"https://github.com/amanjain18/interview-scheduler","last_synced_at":"2026-04-11T17:46:58.173Z","repository":{"id":277205008,"uuid":"931657699","full_name":"AmanJain18/interview-scheduler","owner":"AmanJain18","description":"A web-based application for managing interview schedules, allowing interviewers and candidates to view, schedule, edit, and reschedule interviews with ease.","archived":false,"fork":false,"pushed_at":"2025-02-12T18:19:36.000Z","size":129,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-12T18:26:22.041Z","etag":null,"topics":["date-fns","react-router","reactjs","recat-big-calender","shadcn-ui","vite","zod-validation","zustand"],"latest_commit_sha":null,"homepage":"https://interview-scheduler-nu.vercel.app","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/AmanJain18.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-02-12T16:38:00.000Z","updated_at":"2025-02-12T18:19:40.000Z","dependencies_parsed_at":"2025-02-12T18:26:30.182Z","dependency_job_id":"7b11a611-1e06-446f-b5da-68b4af412118","html_url":"https://github.com/AmanJain18/interview-scheduler","commit_stats":null,"previous_names":["amanjain18/interview-schedular"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanJain18%2Finterview-scheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanJain18%2Finterview-scheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanJain18%2Finterview-scheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanJain18%2Finterview-scheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AmanJain18","download_url":"https://codeload.github.com/AmanJain18/interview-scheduler/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247527211,"owners_count":20953215,"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":["date-fns","react-router","reactjs","recat-big-calender","shadcn-ui","vite","zod-validation","zustand"],"created_at":"2025-02-13T00:26:19.370Z","updated_at":"2026-04-11T17:46:58.142Z","avatar_url":"https://github.com/AmanJain18.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"\" rel=\"noopener\"\u003e\n    \u003cimg width=200px height=200px src=\"https://i.imgur.com/6wj0hh6.jpg\" alt=\"Project logo\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eInterview Scheduler\u003c/h3\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Status](https://img.shields.io/badge/status-active-success.svg)]()\n[![GitHub Issues](https://img.shields.io/github/issues/AmanJain18/interview-scheduler.svg)](https://github.com/AmanJain18/interview-scheduler/issues)\n[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/AmanJain18/interview-scheduler.svg)](https://github.com/AmanJain18/interview-scheduler/pulls)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)\n\n\u003c/div\u003e\n\n---\n\n\u003cp align=\"center\"\u003e A web-based application for managing interview schedules, allowing interviewers and candidates to view, schedule, edit, and reschedule interviews with ease.\n    \u003cbr\u003e \n\u003c/p\u003e\n\n[![Dashboard](/screenshots/home.png)](/screenshots/home.png)\n\u003cp align=\"center\"\u003eDashboard\u003c/p\u003e\n\n[![Schedule](/screenshots/schedule.png)](/screenshots/schedule.png)\n\u003cp align=\"center\"\u003eSchedule Interview\u003c/p\u003e\n\n[![Calendar View](/screenshots/calendar.png)](/screenshots/calendar.png) \n\u003cp align=\"center\"\u003eCalender View\u003c/p\u003e\n\n## 📝 Table of Contents\n\n- [About](#about)\n- [Getting Started](#getting_started)\n- [Deployment](#deployment)\n- [Usage](#usage)\n- [Built Using](#built_using)\n- [Design Decisions](#design_decisions)\n- [Assumptions](#assumptions)\n- [Challenges Faced](#challenges)\n- [Future Improvements](#future)\n- [Authors](#authors)\n\n## 🧐 About \u003ca name = \"about\"\u003e\u003c/a\u003e\n\nThis project is an **Interview Scheduler** designed to help manage and schedule interviews efficiently. It provides a visual calendar interface for interview scheduling, supporting features like drag-and-drop scheduling, conflict validation, and interview rescheduling. The app also includes a form-based system for interview details input, supporting customizable working hours, and duration.\n\nDevelop a functional React application that allows HR/Recruiters to schedule, manage, and view interviews efficiently.\n\n## 🏁 Getting Started \u003ca name = \"getting_started\"\u003e\u003c/a\u003e\n\nThese instructions will help you set up and run the project locally for development and testing.\n\n### Prerequisites\n\nTo run this project, you'll need to have the following software installed:\n\n- **Node.js** (LTS version recommended) - You can download it from [here](https://nodejs.org/).\n- **npm** (comes with Node.js) or **Yarn** for managing dependencies.\n\n### Installing\n\n1. Clone the repository to your local machine:\n\n    ```bash\n    git clone https://github.com/AmanJain18/interview-scheduler.git\n    ```\n\n2. Navigate to the project directory:\n\n    ```bash\n    cd interview-scheduler\n    ```\n\n3. Install the dependencies:\n\n    Using npm:\n    ```bash\n    npm install\n    ```\n\n    Or using yarn:\n    ```bash\n    yarn install\n    ```\n\n4. Run the development server:\n\n    Using npm:\n    ```bash\n    npm run dev\n    ```\n\n    Or using yarn:\n    ```bash\n    yarn dev\n    ```\n\n5. Open your browser and visit `http://localhost:5173/` to view the app in action.\n\n### Add coding style\n\nThis project follows a coding style that ensures consistency across the codebase. You can run the following command to ensure your code adheres to the style guide:\n\n```bash\n#eslint\nnpm run lint\n```\n\n```bash\n# prettier\nnpm run format:fix\n```\n\n## 🚀 Deployment \u003ca name = \"deployment\"\u003e\u003c/a\u003e\n\nTo deploy this project on a live system:\n\n1. Build the production version of the app:\n\n    ```bash\n    npm run build\n    ```\n\n2. Deploy the contents of the `build` directory to your preferred hosting provider (e.g., Netlify, Vercel, or AWS).\n\n## 🎈 Usage \u003ca name=\"usage\"\u003e\u003c/a\u003e\n\nOnce the application is running, you can perform the following actions:\n\n- **Schedule a new interview**: Select a candidate, interviewer, date, and time to schedule an interview.\n- **View the interview schedule**: See a calendar view of interviews for different days.\n- **Reschedule an interview**: Drag and drop an existing interview to reschedule.\n- **Edit an interview**: Click on an existing interview to update details such as time, date, or participant.\n- **Validate conflicts**: The app will automatically check for conflicts in the schedule and prevent overlapping interviews.\n\n## ⛏️ Built Using \u003ca name = \"built_using\"\u003e\u003c/a\u003e\n\n- [React](https://reactjs.org/) - Frontend framework for building user interfaces\n- [Vite](https://vitejs.dev/) - Build tool for fast development and production\n- [Zustand](https://github.com/pmndrs/zustand) - State management library for managing interview data\n- [React Big Calendar](https://github.com/jquense/react-big-calendar) - Calendar library for managing interview schedules\n- [React Hook Form](https://react-hook-form.com/) - Form management library for easy validation and handling\n- [Shadcn UI](https://ui.shadcn.com/) - Accessible and customizable UI components\n- [React Router DOM](https://reactrouter.com/) - Routing library for navigation between pages\n- [Zod](https://github.com/colinhacks/zod) - Schema validation library for validating form data\n- [date-fns](https://date-fns.org/) - Date and time library for managing date and time-related operations\n\n## 🖌️ Design Decisions \u003ca name = \"design_decisions\"\u003e\u003c/a\u003e\n\n### State Management:\n- **Zustand** is used for state management, providing a centralized store for interviews and interviewers.\n- **zustand/middleware** is used for persisting the interview data to localStorage.\n\n### UI Library:\n- The project uses **Shadcn UI** for accessible and customizable UI components.\n\n### Calendar Library:\n- **React Big Calendar** is used to provide a visual calendar interface for viewing and managing interviews.\n\n### Form Library:\n- **React Hook Form** is used for efficient form management and validation.\n\n### Validation:\n- **Zod** is used for schema validation, ensuring data integrity.\n\n### Routing:\n- **React Router DOM** is used for navigating between different views (`Dashboard`, `Schedule`, `Edit`).\n\n### Styling:\n- The project uses **TailwindCSS - A utility-first CSS framework** for styling.\n\n### Notifications:\n- **Shadcn toast component** is used for providing user feedback through toast notifications.\n\n## 🤔 Assumptions \u003ca name = \"assumptions\"\u003e\u003c/a\u003e\n\n- **Interview Duration**: The application assumes a default interview duration of 1 hour. This can be customized in the InterviewForm component and the DateTimePicker component.\n- **Single-Day Interviews**: Currently, interviews are scheduled for a single date and time slot. Multi-day or recurring interviews are not supported.\n- **Working Hours**: The application uses pre-defined working hours (9:00 AM to 6:00 PM) for scheduling only available in weekdays. This can be adjusted in the DateTimePicker and relevant constant files.\n\n## 🧠 Challenges Faced \u003ca name = \"challenges\"\u003e\u003c/a\u003e\n\n- **Implementing Drag and Drop**: Integrating drag-and-drop functionality with React Big Calendar and updating the Zustand store required careful handling of event data and state updates.\n- **Time Slot Management**: Dynamically calculating and displaying available time slots based on interviewer availability, selected date, and interview duration required implementing custom logic in the DateTimePicker component.\n- **Conflict Validation**: Ensuring that interviews don't overlap for the same interviewer involves checking time slot boundaries and potential conflicts.\n\n## 🔮 Future Improvements \u003ca name = \"future\"\u003e\u003c/a\u003e\n\n- **Multi-Day Interviews**: Support scheduling interviews that span multiple days.\n\n- **Interviewer Calendars**:  Integrate with external calendars (e.g., Google Calendar) to check for real-time interviewer availability.\n\n- **Email Notifications**: Send notifications to candidates and interviewers about scheduled, rescheduled, or cancelled interviews.\n\n## ✍️ Authors \u003ca name = \"authors\"\u003e\u003c/a\u003e\n\n- [@AmanJain18](https://github.com/AmanJain18)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famanjain18%2Finterview-scheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famanjain18%2Finterview-scheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famanjain18%2Finterview-scheduler/lists"}