{"id":22712210,"url":"https://github.com/buildit/bookit-web","last_synced_at":"2026-03-04T21:34:53.361Z","repository":{"id":78235635,"uuid":"85237199","full_name":"buildit/bookit-web","owner":"buildit","description":"A web app for Bookin' it.","archived":false,"fork":false,"pushed_at":"2017-09-21T21:38:29.000Z","size":3098,"stargazers_count":2,"open_issues_count":2,"forks_count":6,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-13T16:13:30.320Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buildit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2017-03-16T20:09:05.000Z","updated_at":"2019-01-28T13:09:51.000Z","dependencies_parsed_at":"2023-05-29T23:00:27.372Z","dependency_job_id":null,"html_url":"https://github.com/buildit/bookit-web","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/buildit/bookit-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildit%2Fbookit-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildit%2Fbookit-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildit%2Fbookit-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildit%2Fbookit-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buildit","download_url":"https://codeload.github.com/buildit/bookit-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildit%2Fbookit-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30094005,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-12-10T13:09:40.864Z","updated_at":"2026-03-04T21:34:53.348Z","avatar_url":"https://github.com/buildit.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bookit\n\n[![Build Status](https://travis-ci.org/buildit/bookit-web.svg?branch=master)](https://travis-ci.org/buildit/bookit-web) [![Coverage Status](https://coveralls.io/repos/github/buildit/bookit-web/badge.svg?branch=master)](https://coveralls.io/github/buildit/bookit-web?branch=master)\n\nBookit is a web app aimed at providing a neat way to book meeting rooms in the Designit/Buildit office in Brooklyn.\n\n## Quick start\n```\nyarn install\nyarn start\n```\n\n## Requirements\n\nTo support various scripts locally, you should have `aws-cli` installed and configured with your secret and access key.\n```\npip install awscli\n```\n\n## Useful scripts\nRun all validations: unit tests and linting\n```\nnpm test\n```\n\nRun tests and watch for changes\n```\nnpm run test:unit:watch\n```\n\nSee a terrifying chart that reveals all the untested code 😱\n```\nnpm run test:unit:coverage\n```\n\n## Functional Tests\nThere are a couple of ways to run the functional/integration test suites - all of them involve the use of testcafe.\n\nFundamentally, all functional tests rely on the presence of the following environment variables: `BOOKITURI`, `BOOKITUSER` and `BOOKITPASSWD`\n\nTo run functional tests 100% locally, you will need to have bookit-web and bookit-server already running locally. Additionally you will\nrequire a set of credentials that will work for your local copy of bookit.\n\nFor example:\n```\n$ BOOKITURI=http://localhost:3001 BOOKITUSER=bruce@domain.com BOOKITPASSWD=brucepw npm run test:functional\n- or -\n$ BOOKITURI=http://localhost:3001 BOOKITUSER=bruce@domain.com BOOKITPASSWD=brucepw yarn test:functional\n```\n\nThe second option for running functional tests is to use `scripts/run-dockerized-functional-tests.sh`.\n\nLocal invocation of the script (from the bookit-web root directory) is as follows:\n\n```\n$ ./scripts/run-dockerized-functional-tests.sh\n```\n\nWith the above script, you do not need to pass the `BOOKITURI`, `BOOKITUSER` or `BOOKITPASSWD` variables, as the script will fetch valid values automatically from AWS before running. You also do not need to specify which URL to test against, as the dockerized bookit-web is network-aliased inside the container as bookit.riglet.io (which is the staging URL that's registered for the app on portal.azure.com).\n\nAs a general rule: If you are developing locally, it makes more sense to run functional tests via the npm/yarn script, and use of `run-dockerized-functional-tests.sh` is intended for CI environments or if you want to possibly debug why a CI build is choking on the script.\n\n## Existing functionality\n\n### Integration with Outlook\nThe app (or more specifically, the server-side code) can integrate with a Microsoft Exchange server.\n\n### Booking\nThe app can handle _very_ basic room booking.\n\nA user can do this:\n1) Open the app. See the agenda view, set to today's date, showing meetings for all rooms.\n2) Click on an available space.\n3) See the room booking form appear on the left, pre-populated with the correct time and date.\n4) Add a meeting title.\n5) Click \"Bookit\".\n6) See the booking appear in Bookit.\n\nSome common booking errors are handled. For example:\n1) Open the Bookit web app.\n2) Click on an available space.\n3) See the room booking form appear on the left, pre-populated with the correct time and date.\n4) Change to a time slot that is not available.\n5) See a message that notifies the user that the time is not available.\n\nThere are two layers of validation at work. Basic form validation (e.g. is startDate before endDate) happens in the `validate` function within `containers/MeetingForm`. Validation related to business rules (e.g. overlapping meetings are disallowed) happens in `utils/getAvailableTimeSlot`.\n\n### Login/Logout\nYou can retrieve user credentials using the `aws` commandline (or alternatively, logging into the aws dashboard, navigating to the **EC2** Dashboard and selecting **Parameter Store** from the left-hand side menu).\n\nThe user parameters are stored under the keys `BUILDIT_REGULAR_USER_NAME` and `BUILDIT_REGULAR_USER_PASSWORD`.\n\nExample using `aws-cli`:\n\n```\n$ aws ssm get-parameters --names BUILDIT_REGULAR_USER_NAME BUILDIT_REGULAR_USER_PASSWORD --with-decryption\n```\n\n(Output removed for obvious reasons)\n\n## Design assets\n[Designs on Zeplin (must be granted access)](https://app.zeplin.io/project/58d4072283526a2ba8174a28)\n\n[Mobile prototype with annotations](https://invis.io/R4B44OSUC)\n\n[Desktop prototype with annotations](https://invis.io/G7B44PKKY)\n\n[UI assets](https://www.dropbox.com/sh/xqfl0pses67us7s/AABqy11BWMXyKA9EYmwhQei3a?dl=0)\n\n[Calendar module PDF](/docs/CalendarModule.pdf)\n\n## Outstanding questions\nIn order for this app to work as expected, we need the answers to some specific questions (in this case, these questions were directed to\nDesignit IT). These questions are currently outstanding:\n1) Can we register Bookit with your Azure Active Directory?\n2) We'd like Bookit to be granted these two specific permissions: `Calendars.ReadWrite` and `Directory.Read.All`\nRoughly speaking, this would allow our app to read and modify calendars for Designit users. It also allows the app to read the list of Designit users. It does not give the app any other information, such as email. You can read more these permissions here: https://developer.microsoft.com/en-us/graph/docs/authorization/permission_scopes\n3) We'd like to create a key for the application. Of course, this is needed so that our app can authenticate against Designit's Exchange server.\n\n## Team members\nLawrence Lee - Designit\n\nEunice Chung - Designit\n\nChris Ashurst - Buildit (@frostiebot)\n\nZac Smith - Buildit (@billyzac)\n\nNicole Tibaldi - Buildit (@ntibaldi92)\n\nKrishna Shukla - Buildit (@krishna1027)\n\nAndrew Tuliszewki - Buildit (@defpearlpilot)\n\nPeter Monks - Buildit (@monksp-buildit)\n\nTiani Jones - Buildit (@tianioriginal)\n\nMat Rosa - Buildit (@matsays)\n\n## Former contributors:\n-Mert Sondac - Designit\n\n-Roman Safronov - Buildit (@electroma)\n\n## Configuration\nBookit was bootstrapped from [React Skellington](https://github.com/buildit/react-skellington).\n\nConfiguration can be tweaked via changes to `webpack.config.babel.js`.\n\nDeeper changes can be made via the modules under `webpack/parts`\n\nThe following files give control over the project:\n```\n.eslintrc.json\n.stylelintrc.json\n.browserlistrc\nwebpack.config.babel.js\n```\n\nChanges to `.babelrc` are NOT recommended (except for the addition/removal of plugins). Babel configuration should be modified through `webpack/parts/javascript.js`\n\n## CI \u0026 Deployment\nWe are using Travis to manage continuous integration and continuous deployment to staging.\n\n- Travis runs validations and then creates a production build. Nothing too crazy there.\n\n- On commits to `master`, if all unit tests pass, Travis creates a new Docker image and pushes it to an AWS ECR repo. After a successful push to ECR, the app is deployed to the integration environment. Then Integration tests are run. Only if the integration tests run successfully, does Travis then deploy the app to the staging environment.\n\n- The Dockerfile consumes the production code from the `build` directory, and adds the `config.js.template` file from the `nginx` directory into the image. Since bookit-web is 100% browser code, the resulting javascript from the build directory is free of any dependencies, thus making the resulting docker image essentially just static files.\n\n## Bookit integration\nIntegration deployments are [here](https://int-bookit-web.buildit.tools).\n\n## Bookit staging\nStaging deployments are [here](https://stg-bookit-web.buildit.tools).\n\n## Bookit server\nCheck it out [here](https://github.com/buildit/bookit-server).\n\n## Release Plan\nThe [plan](https://github.com/buildit/bookit-web/wiki) as it stands.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuildit%2Fbookit-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuildit%2Fbookit-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuildit%2Fbookit-web/lists"}