{"id":22381957,"url":"https://github.com/googleinterns/slurp","last_synced_at":"2026-02-26T15:40:26.832Z","repository":{"id":39063630,"uuid":"273537845","full_name":"googleinterns/SLURP","owner":"googleinterns","description":"Shared Live Universal Recreation Planner. Project by STEP 2020 Pod #53.","archived":false,"fork":false,"pushed_at":"2023-10-27T12:35:31.000Z","size":9420,"stargazers_count":3,"open_issues_count":42,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2023-12-05T16:48:05.539Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://step53-2020.appspot.com/","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/googleinterns.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2020-06-19T16:20:20.000Z","updated_at":"2023-12-05T16:48:05.540Z","dependencies_parsed_at":"2023-02-05T22:30:57.005Z","dependency_job_id":null,"html_url":"https://github.com/googleinterns/SLURP","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleinterns%2FSLURP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleinterns%2FSLURP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleinterns%2FSLURP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleinterns%2FSLURP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googleinterns","download_url":"https://codeload.github.com/googleinterns/SLURP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228209948,"owners_count":17885595,"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-12-05T00:11:11.032Z","updated_at":"2026-02-26T15:40:21.813Z","avatar_url":"https://github.com/googleinterns.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SLURP\n\nThis is the repo for the SLURP web application. The frontend is built using the React web framework and the Firebase development platform, with the backend built using Google's App Engine computing platform.\n\n## CLI Tools\nThis project makes use of the `gcloud` SDK for project deployment to Google Cloud, the `npm` and `yarn` package managers for Node.js, and the `nvm` Node.js version manager. Node.js 10 is the specific version required for this project.\n\nInstall `gcloud`:\n```\necho \"deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main\" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list\nsudo apt-get install apt-transport-https ca-certificates gnupg\ncurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -\nsudo apt-get update \u0026\u0026 sudo apt-get install google-cloud-sdk\n```\nThen run `gcloud init` to specify that development is being done on the \"step53-2020\" project.\n\nInstall `nvm`:\n```\nwget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash\n```\n\nInstall `npm`:\n```\nnvm install node\n```\n\nInstall `yarn`:\n```\ncurl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\necho \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list\nsudo apt update\nsudo apt install yarn\n```\n\nUsing Node.js 10:\n```\nnvm install 10\nnvm use 10\n```\n\nLocal development is run using the `serve` package. You must install this package via `yarn add serve` in order to run the local development scripts.\n\n## Project Structure\nThis project consists of a frontend component and a backend component.\n\n### Frontend\nThe frontend is built using React.js and makes use of Firebase. It has the following (simplified) directory tree:\n```\nfrontend/\n├── package.json\n├── public\n│   └── ...\n├── src\n│   ├── index.js\n│   ├── components\n│   │   └── ...\n│   ├── constants\n│   │   └── ...\n|   ├── styles\n│   │   └── ...\n│   └──...\n└── ...\n```\nThe `package.json` file contains all the dependencies for the frontend component, including React, while the `public` subdirectory contains the `index.html` file as well as other external assets that may be needed, such as images. The `src` subdirectory contains the main bulk of the React code.\n\n#### `src` Directory\n\n##### 'index.js' File\nThe index.js file contained in the src directory is the main entrypoint for the web application, as it is used to render the `root` div element in index.html. It currently uses whatever is defined by the App component.\n\n##### `components` Subdirectory\nThe components subdirectory contains all the various components and pages to be used in the web application. Each component should be placed in its own directory, with public facing parts exported in an `index.js` file. For example, if a component named \"Navbar\" was being developed, it should have at the very least `src/components/Navbar/index.js`. Any other JS files can be placed in the Navbar directory, but public facing parts should be exported in `index.js`. Another component, say \"TestComponent\", can then access Navbar via `import '../Navbar'`.\n\n###### The `App` Component\nThe most important component in the components subdirectory, which is ultimately what is fed into `src/index.js`. This component uses React Router (`import 'react-router-dom'`) to specify which pages of the web application can be visited and what component each of these pages uses.\n\n##### 'constants' Subdirectory\nContains any global constants for the projects. Currently contains a [routes.js](frontend/src/constants/routes.js) file that defines and exports the names for URL paths.\n\n##### 'styles' Subdirectory\nAlthough React Bootstrap is the main styling framework used for this project, the styles subdirectory can also store any created stylesheets. It can then be imported from a component via `import ../../styles/example_style.css`.\n\n### Backend\nThe Backend is runs on the Google App Engine framework and built using Maven. It has the following (simplified) directory tree:\n```\nbackend/\n├── pom.xml\n├── src\n│   ├── main\n│   │   ├── java\n│   │   │   └── com\n│   │   │       └── google\n│   │   │           └── slurp\n│   │   │               └── servlets\n│   │   │                   └── ...\n│   │   └── webapp\n│   │       └── WEB-INF\n│   │           └── appengine-web.xml\n│   └── test\n│       └── java\n│           └── com\n│               └── google\n│                   └── slurp\n|                       └── ...\n└── ...\n```\nThis file structure is largely the same as that used during portfolio creation portion of Google's 2020 STEP internship. The appengine-web.xml file was modified to ensure compatibility with the frontend component when deployed.\n\nServlets developed in the backend must be routed to the prefix `/api/v1` in the `@WebServlet` annotation, e.g.:\n```\n@WebServlet(\"/api/v1/test-servlet\")\npublic class TestServlet extends HttpServlet { ... }\n```\n\nThe servlet can then be accessed from the frontend with a fetch request, e.g. `fetch('api/v1/test-servlet').then( ... )`.\n\n## Styling\nThe React Bootstrap tool was imported for use in the frontend. Available components can be found [here](https://react-bootstrap.github.io/components/alerts/).\n\n## Testing\n\n### Frontend:\nThe Jest testing framework was installed as a dependency. From the command line, run `npm test` to enter Jest in watch mode. It will immediately search for any files ending in `.test.js` in the frontend directory that are related to any files changed since the last commit and run them. Pressing \"a\" while in this mode will run all tests, and \"w\" can give more information. See the [SumExample](frontend/src/components/SumExample) component for an example.\n\n### Backend:\nJUnit and Maven is used to run backend testing, following the same structure as Week 5 of the Google STEP Internship.\n\n## Generating JSDoc\nJSDoc 3 is used to generate documentation for all JS source code for this\nproject. To generate the docs for this project, run (from anywhere inside the\nproject directory):\n```\nnpm run docs\n```\nThe generated documentation will live in the directory `frontend/docs`.\nThe configuration rules for the JSDoc generation are specified in\n`/frontend/.jsdoc.conf.json`.\n\n## Running Locally\nFirst, ensure that you have installed and are using Node 10!\n```\nnvm install 10\nnvm use 10\n```\nThe frontend and backend components must be run in two separate terminals,\n\nFrontend (from the frontend directory):\n```\nyarn local\n```\n\nBackend (from the backend directory):\n```\nmvn package appengine:run\n```\n\nWhen testing in this environment, any changes made to the frontend code will be immediately updated and redployed locally in realtime. Maven must be stopped and rerun when any changes are made to the backend code.\n\n## Deploying\nEnsure that you have installed and are using Node 10!\n```\nnvm install 10\nnvm use 10\n```\n\nThe frontend and backend components must be deployed separately:\n\nFrontend (from the frontend directory):\n```\nyarn build\ngcloud app deploy\n```\n\nBackend (from the backend directory):\n```\nmvn appengine:deploy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogleinterns%2Fslurp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogleinterns%2Fslurp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogleinterns%2Fslurp/lists"}