{"id":13632668,"url":"https://github.com/open-learning-exchange/planet","last_synced_at":"2026-04-16T18:07:06.709Z","repository":{"id":38709671,"uuid":"97563790","full_name":"open-learning-exchange/planet","owner":"open-learning-exchange","description":"🌍 Planet Learning - Angular application","archived":false,"fork":false,"pushed_at":"2026-04-15T12:09:06.000Z","size":52415,"stargazers_count":68,"open_issues_count":993,"forks_count":43,"subscribers_count":27,"default_branch":"master","last_synced_at":"2026-04-15T12:16:03.490Z","etag":null,"topics":["angular","couchdb","docker","hacktoberfest","learning-management-system","open-learning-exchange","planet","raspberrypi","typescript","vagrant"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/treehouses/planet","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/open-learning-exchange.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-07-18T06:55:53.000Z","updated_at":"2026-04-14T09:14:18.000Z","dependencies_parsed_at":"2023-10-17T03:08:25.998Z","dependency_job_id":"621246f5-1dc1-44e8-b1f2-cd28053de6c5","html_url":"https://github.com/open-learning-exchange/planet","commit_stats":null,"previous_names":[],"tags_count":1299,"template":false,"template_full_name":null,"purl":"pkg:github/open-learning-exchange/planet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-learning-exchange%2Fplanet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-learning-exchange%2Fplanet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-learning-exchange%2Fplanet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-learning-exchange%2Fplanet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-learning-exchange","download_url":"https://codeload.github.com/open-learning-exchange/planet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-learning-exchange%2Fplanet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31897914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T17:33:00.867Z","status":"ssl_error","status_checked_at":"2026-04-16T17:32:57.401Z","response_time":69,"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":["angular","couchdb","docker","hacktoberfest","learning-management-system","open-learning-exchange","planet","raspberrypi","typescript","vagrant"],"created_at":"2024-08-01T22:03:10.408Z","updated_at":"2026-04-16T18:07:06.693Z","avatar_url":"https://github.com/open-learning-exchange.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","docker"],"sub_categories":[],"readme":"[![license: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![Docker Stars](https://img.shields.io/docker/stars/treehouses/planet.svg?maxAge=604800)](https://store.docker.com/community/images/treehouses/planet)\n[![Docker Pulls](https://img.shields.io/docker/pulls/treehouses/planet.svg?maxAge=604800)](https://store.docker.com/community/images/treehouses/planet)\n[![Maintainability](https://qlty.sh/badges/d936229a-e812-4e3a-806e-4f5d7cd4ace5/maintainability.svg)](https://qlty.sh/gh/open-learning-exchange/projects/planet)\n[![chat on discord](https://img.shields.io/discord/1079980988421132369?logo=discord\u0026color=%237785cc)](https://discord.gg/BVrFEeNtQZ)\n\n# **Planet Learning**\n\nPlanet Learning is a generic learning system built in Angular \u0026 CouchDB.\n\nLink to [Angular Doc](https://angular.io/docs) and [Material Design](https://material.angular.io/).\n\n## Planet Development Notes\n\nFor development, the following additional tools are required:\n\n* Docker\n* Git\n* NPM v10\n* Node.js v18\n* Angular CLI v18\n\nThe only other prerequisite is Docker Desktop. After cloning the repository, follow the steps below to set up the development environment using Docker:\n\nCreate a directory for planet development data:\n```\nmkdir -p ~/srv/planetdev \u0026\u0026 cd ~/srv/planetdev\n```\n\nDownload the Docker Compose file:\nFor Linux:\n```\nwget https://raw.githubusercontent.com/ole-vi/planet-prod-configs/main/planet-dev.yml\n```\n\nFor macOS/Windows:\n```\ncurl https://gist.githubusercontent.com/xyb994/0d14dfe302df0df0d4e8d8df0d1d5feb/raw/planet-dev-mac.yml -o planet-dev.yml\n```\n\nStart the containers:\n```\ndocker compose -f planet-dev.yml -p planet-dev up -d\n```\n\nVerify container status:\nRun ```docker ps -a``` after a minute. You should see two containers running: chatapi and couchdb. The db-init container should have exited.\n\nConfigure CORS for CouchDB:\n```\ngit clone https://github.com/pouchdb/add-cors-to-couchdb.git\ncd add-cors-to-couchdb\nnpm install\nwhile ! curl -X GET http://127.0.0.1:2200/_all_dbs ; do sleep 1; done\nnode bin.js http://localhost:2200\n```\n\nClone and configure the Planet project:\n```\ngit clone https://github.com/open-learning-exchange/planet.git\ncd planet\nchmod +x couchdb-setup.sh\nbash couchdb-setup.sh -p 2200 -i\n```\n\nInstall dependencies and serve the app:\n```\nnpm install\nng serve\n```\n\nVisit localhost:3000 to access the Planet app.\nIf port 3000 is in use, try ```ng serve --port 3001```\n\n## Chatapi Notes\n\nConfigure the models (API keys \u0026 Models \u0026 Assistant settings) through the `manager dashboard -\u003e AI Configurations` or directly in the `configurations` database in CouchDB. \n\nSupported models: *OpenAI*, *Perplexity*, *Deepseek*, and *Gemini*\n\nFor chatapi development instructions, refer to the [chatapi README](chatapi/README.md).\n\n## Project Guidelines\n\n* Check out the project page for tasks.\n* Before contributing also be sure to read our [style guide](Style-Guide.md).\n* Please clone the repository rather than forking, unless you're from outside the organization. It's easier for us to collaborate from a new branch on the same repository.\n* After cloning the repository please run `npm run install-hooks` to add the git hooks to your local repository.\n* If you see something that needs work, please create an issue.  If the issue is on the frontend, please try to make it specific to one component.\n* To work on an issue, create a new branch with a descriptive title.\n* Please wait for at least two positive reviews before merging a PR into the master branch\n\n## Locale Configuration\n\nTo run planet in development with a different locale, you can set the configuration to one of the supported language tags. For example, to run in Spanish, use:\n```\n  npm run dev -- --configuration spa \n\n  or \n\n  ng serve --configuration spa\n```\n*You can use the short-hand `-c` in place of `--configuration`*\n\n## Tests\n\nYou can run tests directly from the host or within the development container.\n\n### Unit Tests:\n```\nnpm run test\n```\nOpen `localhost:9876` once this is done compiling\n\n### End-to-End Tests:\n\nEnd-to-end test automation is not currently wired up in this repository. There is no supported `npm run e2e` workflow on this branch.\n\n## Additional Commands\n\n\nRun: `ng serve`\n\nBuild: `ng build`\n\nLint: `ng lint`\n\nThis will fix any lint errors that TSLint can automatically fix:\n`Fix Lint: ng lint --fix`\n\n\nTo serve the app in a different language, use the LNG variable:\n`\nLNG=es npm start\n`\n\n## Troubleshooting\n\n### I switched branches and now I'm missing a dependency...\n\nRun the following command to reinstall dependencies:\n`\nnpm install\n`\n\nIf issues persist, delete and reinstall dependencies:\n\n```\nrm -rf node_modules/*\nnpm install\n````\n\n### Missing database or authentication issues\n\nRun the CouchDB setup script:\n```\n./v-couchdb-setup.sh -u \u003cadmin-username\u003e -w \u003cadmin-password\u003e\n```\n### Cannot GET /\n\nReinstall packages:\n```\nrm -rf node_modules/*\nrm package-lock.json\nnpm install\n```\nRestart the app:\n`\nng serve\n`\n\n### Error on initial npm install\n\nIf your npm install fails on your first try, first check if you are using Node v18. Other versions of Node may throw errors when installing dependencies.\n\nThis project is tested with [BrowserStack](https://www.browserstack.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-learning-exchange%2Fplanet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-learning-exchange%2Fplanet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-learning-exchange%2Fplanet/lists"}