https://github.com/zooniverse/classroom
Front end for the education-api (https://github.com/zooniverse/education-api/)
https://github.com/zooniverse/classroom
hacktoberfest
Last synced: 4 months ago
JSON representation
Front end for the education-api (https://github.com/zooniverse/education-api/)
- Host: GitHub
- URL: https://github.com/zooniverse/classroom
- Owner: zooniverse
- License: apache-2.0
- Created: 2017-07-27T17:03:42.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-03-17T15:12:30.000Z (about 1 year ago)
- Last Synced: 2025-03-17T16:25:06.862Z (about 1 year ago)
- Topics: hacktoberfest
- Language: JavaScript
- Homepage: https://classroom.zooniverse.org/
- Size: 61.4 MB
- Stars: 0
- Watchers: 11
- Forks: 1
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Zooniverse Classrooms
Zooniverse Classrooms (formerly Education API Front End, or edu-api-front-end)
is the [Zooniverse's](https://www.zooniverse.org/) web portal for educational
tools, designed for Teachers and Students who want to learn more about science
using real world people-powered research projects.
The website is available at [https://classroom.zooniverse.org/](https://classroom.zooniverse.org/)
Zooniverse Classrooms is divided into different **Programs** that cater to
different fields of study, and each Program is usually also associated with a
specific Zooniverse project.
Currently available Programs:
- **Astro 101 with Galaxy Zoo**
- Has materials and tools for introductory astronomy students.
- Associated projects: [Galaxy Zoo 101](https://www.zooniverse.org/projects/zooniverse/galaxy-zoo-in-astronomy-101/), [Hubble's Law](https://www.zooniverse.org/projects/zooniverse/intro2astro-hubbles-law/), and [Zooniverse In Schools (project)](https://www.zooniverse.org/projects/zooniverse/zooniverse-in-schools)
- **Zooniverse-based Activities for Undergraduates**
- GEO/BIO/EVS 101 with Floating Forests
- ASTRO 101 with Planet Hunters
- ASTRO/GEO 101 with Planet Four
- **WildCam Darién Lab**
- Educational tool for students and explorers interested in learning about ecology, using real world camera trap data from the jungles of Panama.
- Heavy focus on using geographical map data.
- Associated project: [WildCam Darién](https://www.zooniverse.org/projects/wildcam/wildcam-darien)
- **WildCam Gorongosa Lab**
- Similar to WildCam Darién Lab, except focusing on Gorongosa National Park.
- Actually the original education program, and used to live at `lab.wildcamgorongosa.org`
- **Wildwatch Kenya Lab**
- Similar to WildCam Darién Lab, except focusing on Kenyan wildlife.
- Associated project: [WildCam Darién](https://www.zooniverse.org/projects/wildcam/wildcam-darien)
- **Zooniverse in Schools**
- Provides content and guidance to encourage teachers to use Zooniverse projects in school classrooms. Intended for students ages 9 to 12.
- Associated project: see "Zooniverse in Schools" assignment in Astro 101
## Usage
__Install the dependencies:__
Either:
- `npm ci` _or_
- `npm install`
__Test:__
~~npm run test~~
⚠️ WARNING: tests don't actually work.
__Development mode with livereload:__
`npm start`
__When you are done, create a production-ready version of the JS bundle:__
`npm run build`
#### Alternatively run it via docker & docker-compose
Depends on [docker install](https://docs.docker.com/install/) and [docker-compose install](https://docs.docker.com/compose/install/)
1. `docker-compose build`
2. `docker-compose up`
Or get a bash console where you can run `npm` cmds via the built container (ensure step 1 above is done)
`docker-compose run --rm --service-ports classrooms bash`
Run the tests via docker
`docker-compose run --rm classrooms npm run test`
## Deployment
Deployment is handled by Github Action. Both staging and production deployment can be run ad hoc in the actions tab as needed if you have the appropriate permissions on the repository.
### Staging
On merge to master, a Github Action is triggered to deploy to staging to `https://classroom.preview.zooniverse.org`.
### Production
Production deployments are triggered by an update to which commit the `production-release` tag is pointed to. This tag should be updated via chat ops and then a Github Action will run that builds and uploads the files to our cloud provider found at `https://classroom.zooniverse.org`.
## External Dependencies
Zooniverse Classrooms requires several external services to work properly.
**Zooniverse.org**
Our [main platform](https://www.zooniverse.org) is important for a few things:
- Allows authentication via Panoptes. Teachers & students on Zooniverse Classrooms login with their Zooniverse user details.
- Contains the Classify page of each associated project, where students actually work on _assignments._
**Education API**
This service manages the Programs listed on Zooniverse Classrooms, manages _classrooms_ and _assignments,_ keeps track of student _classifications._
- URL: [education-api.zooniverse.org](https://education-api.zooniverse.org/)
- Staging URL: [education-api-staging.zooniverse.org](https://education-api-staging.zooniverse.org/)
- Repo: [zooniverse/education-api](https://github.com/zooniverse/education-api)
- This service has multiple sub-services, such as a Kinesis stream that keeps track of classifications _for specific white-listed projects._
**Astronomy-related**
Astro 101 requires a few unique services.
- **Caesar**
- Used for exporting data generated by classrooms.
- URL: [caesar.zooniverse.org](https://caesar.zooniverse.org/)
- Repo: [zooniverse/caesar](https://github.com/zooniverse/caesar)
- **Zoo Tools**
- A Google Sheets add-on that helps process Galaxy Zoo data
- Repo: [zooniverse/zootools-sheets](https://github.com/zooniverse/zootools-sheets)
- ⚠️ Since late 2022, this hasn't been working!
- **Google Drive integration**
- We allow teachers to export directly to Google Drive via "Export Data -> Export with Google".
- Note that this feature sometimes won't appear if you're logged in on a Chrome Incognito window or similar.
**Mapping Services**
WildCam Darién Lab, WildCam Gorongosa Lab, and Wildwatch Kenya Lab all use mapping services to provide the geographical map interface.
- **Classroom Maps API:**
- Contains data related to subjects, aggregations, park boundaries, etc - essentially the points of interest on the map.
- URL: [classroom-maps-api.zooniverse.org](https://classroom-maps-api.zooniverse.org/)
- Repo: [zooniverse/classroom-maps-api](https://github.com/zooniverse/classroom-maps-api)
- See the [WildCam Docs](docs/wildcam/README.md) for adding or updating map data.
- Previously, we used a service called Carto or CartoDB, but we moved away due to cost issues and started hosting our own map API service.
- **Various Leaflet Map Providers:**
- Provides the actual visual maps, ranging from street maps to satellite views.
- Look at `mapConfig.map.tileLayers` in the [WildCam Darién Lab map config](https://github.com/zooniverse/classroom/blob/master/src/programs/darien/wildcam-darien.map-config.js) for examples.
- We wanted to use Google Maps at one point, but this was cost-prohibitive.
**Misc**
See the [config](src/lib/config.js) file for additional service URLs and app IDs.
## Development Notes
Here are some very nerdy details about how each project works. Only read this section if something breaks and/or you need a deeper understanding how things work behind the scenes.
#### About those Programs
- **General**
- For Programs that feature _classrooms_ and _assignments,_ the general idea is the same:
- Teachers create _classrooms_ and must _invite_ students to join.
- Students "work" on _assignments_ by submitting classifications to a specific workflow (determined by the assignment). This classifying is done via the associated Zooniverse project's Classify page (on zooniverse.org), except with some flags attached.
- Example 1: a Darien assignment link might look like `https://www.zooniverse.org/projects/wildcam/wildcam-darien/classify?workflow=10937&classroom=1` , with the `workflow` specifying "please let me classify on workflow 10937, which the Education API knows is associated with assignments XYZ".
- Example 2: a Hubble's Law assignment link might look like `https://www.zooniverse.org/projects/zooniverse/intro2astro-hubbles-law/classify?group=1599406`, with the `group` specifying that "hey, I'm classifying on the default workflow, but as part of a student group."
- **Astro 101 with Galaxy Zoo**
- For each assignment, students classify on the _default workflow_ of the associated projects, but with a student group ID added to the metadata.
- If you peek into their Program's attributes in EduAPI, you'll see `program.attributes.metadata.assignments` contains information for all the program's associated Zooniverse projects.
- **WildCam Darién Lab and WildCam Gorongosa Lab**
- Teachers create _custom assignments,_ (selecting which Subjects to appear) and each assignment creates a _clone of a main workflow_ of the associated project.
- If you peek into their Program's attributes in EduAPI, you'll see `program.attributes.custom = true` which indicates "please create custom assignments", and `program.attributes.metadata.workflowId` indicating which is the "main workflow" to clone.
- **Wildwatch Kenya Lab**
- Unlike Darién and Gorongosa, every student classifies on the _default workflow._
#### Dev Troubleshooting
Q: If I have questions, where should I start looking for answers?
A: Try our [Stack Overflow page](https://stackoverflowteams.com/c/zooniverse/questions), and search for "classroom" or "education. (Access restricted to Zooniverse users only)
Q: How do I make a WildCam Lab program?
A: See [https://stackoverflowteams.com/c/zooniverse/questions/339](https://stackoverflowteams.com/c/zooniverse/questions/339)
## Credits
This project was built on top of [Zooniverse Reduxify](https://github.com/zooniverse/zoo-reduxify),
which in turn was developed from the original [React Starterify](https://github.com/Granze/react-starterify)
by [Granze](https://github.com/Granze) and used under the [MIT License](http://opensource.org/licenses/MIT).
## License
Copyright 2018 Zooniverse
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.