{"id":20453225,"url":"https://github.com/danekf/scheduler","last_synced_at":"2025-09-10T04:10:01.404Z","repository":{"id":56799845,"uuid":"522663710","full_name":"danekf/scheduler","owner":"danekf","description":"Interview Scheduler project, built from LHL skeleton.","archived":false,"fork":false,"pushed_at":"2022-08-22T21:33:31.000Z","size":1656,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-25T16:28:22.313Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/danekf.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}},"created_at":"2022-08-08T18:29:34.000Z","updated_at":"2022-08-08T18:29:39.000Z","dependencies_parsed_at":"2022-08-16T23:30:33.419Z","dependency_job_id":null,"html_url":"https://github.com/danekf/scheduler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"lighthouse-labs/scheduler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danekf%2Fscheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danekf%2Fscheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danekf%2Fscheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danekf%2Fscheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danekf","download_url":"https://codeload.github.com/danekf/scheduler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242005738,"owners_count":20056431,"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":"2024-11-15T11:12:10.490Z","updated_at":"2025-03-05T09:49:21.075Z","avatar_url":"https://github.com/danekf.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![React][React.js]][React-url]\n# Interview Scheduler\n\n\u003ca\u003e\u003cimg src = \"images/Banner.png\" alt=\"Banner\"\u003e\u003c/img\u003e\u003c/a\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#Notable-npm-dependencies\"\u003eNotable NPM Dependencies\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#get-scheduler-api\"\u003eGet Scheduler API\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#using-interview-scheduler\"\u003eUsing Interview Scheduler\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#Screenshots\"\u003eScreenshots\u003c/a\u003e\u003c/li\u003e\n \n  \u003c/ol\u003e\n\u003c/details\u003e\n\u003cbr\u003e\n\n## About the project\n\nThis project was built with the goal of creating a working single page interview shcheduler using the React framework. The project makes api calls to a custom scheduler-api using axios to fill out current interviews. \n\nThe project is intended as an introduction to React, using states, custom hooks and various testing frameworks.\n\nThe scheduler is able to add, edit or delete current interviews and expects a user to provide a name and select an interviewer.\n\nThe scheduler will also handle errors if the api is unable to save a users interview.\n\nStorybook is used for unit testing and to build components to be added to the interview shceduler using mock data.\n\nJest is used for integration testing of the scheduler, while cypress is used for a true browser test of the interview scheduler.\n\n\u003cbr\u003e\n\n## Notable NPM Dependencies\n\u003cul\u003e\n\u003cli\u003eAxios data fetching from database\n\u003cli\u003eReact: v16.9.0\n\u003cli\u003ereact-Dom: v16.9.0\n\u003cli\u003eCypress: Testing\n\u003cli\u003eJest: Testing\n\u003cli\u003eStorybook: Component building\n\u003cli\u003eWebpack Development Server: local hosting of site for development\n\u003c/ul\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003cbr\u003e\n\n# Getting Started\n\n## Get Scheduler API\nClone [Scheduler Api][API-URL] and follow the setup instructions for PostgreSQL server. \n\nIf you do not have a PostgreSQL server, you will need to install it prior to following those instructions.\n\n\u003cbr\u003e\n\n## Setup Interview Scheduler\n\n### Install dependencies \n```sh\nnpm install --save-dev-dependencies\n```\n\n## Using Interview Scheduler\n\n### Running Webpack Development Server\n\n```sh\nnpm start\n```\n\n## Running Jest Test Framework\n\n```sh\nnpm test\n```\n\n## Running Storybook Visual Testbed\n\n```sh\nnpm run storybook\n```\n\n## Running Cypress\n\n```sh\nnpm run cypress\n```\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n# Roadmap\n\n- [ ] Add user log in\n- [ ] Only allow users to add, edit or delete their own interviews.\n- [ ] Implement user profiles, including avatars, contact info and a list of upcoming interviews.\n- [ ] Deploy server to Heroku\n- [ ] Deploy Continuous integration using CircleCI and Netlify\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n# Screenshots\n### Main page on first load.\n#### This may differ as the scheduler api randomizes appointments\n\u003ca\u003e\u003cimg src = \"images/Main.png\" alt=\"Main\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n### Add Interview\n#### Shows the screen a user is presented with when clicking on a (+) symbol to add interview\n\u003ca\u003e\u003cimg src = \"images/Add.png\" alt=\"Add\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n### Add Interview - Validation\n#### App will validate that the user has input both a student name and selected an interviewer and present a clear error should either be missing.\n\n\u003ca\u003e\u003cimg src = \"images/Add-Invalid input.png\" alt=\"Add-invalid-Student\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n#### Notice that the interviewer selected will be highlighted once selected.\n\u003ca\u003e\u003cimg src = \"images/Add-interviewer select after invalid input.png\" alt=\"Add-invalid-Interviewer\"\u003e\u003c/a\u003e\n\u003cbr\u003e\n\n### Add Interview - Completed\n#### Once an interview is successfully booked, it will be added to the list. Note that the spots for Monday has been decremented by 1 upon successful booking. This is done by checking the state and is calculated dynamically rather than just adding or substracting 1. This also applies upon deletiong.\n\n\u003ca\u003e\u003cimg src = \"images/Add-Complete.png\" alt=\"Add-Complete\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n### Hover Appointment\n#### By hovering over an appointment, a user will find an edit, and delete icon. The interview also slightly changes colour in response.\n\u003ca\u003e\u003cimg src = \"images/MouseOver.png\" alt=\"MouseOver\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n### Edit Appointment\n#### By clicking on the edit icon, a user is able to change the student name, as well as the selected interviewer.\n\u003ca\u003e\u003cimg src = \"images/Edit.png\" alt=\"Edit\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n### Delete Appointment\n#### By clicking on the delete icon, a user is presented with a confirmation to delete prior to putting in the request to the API. Once deleted, the spots remaining will update appropriately.\n\u003ca\u003e\u003cimg src = \"images/Delete.png\" alt=\"Delete\"\u003e\u003c/a\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n\n\n\n\n\n\n\n[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB\n[React-url]: https://reactjs.org/\n[API-URL]:https://github.com/lighthouse-labs/scheduler-api","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanekf%2Fscheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanekf%2Fscheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanekf%2Fscheduler/lists"}