{"id":23819836,"url":"https://github.com/kth/kurs-pm-web","last_synced_at":"2026-02-26T09:40:12.395Z","repository":{"id":38312978,"uuid":"240027578","full_name":"KTH/kurs-pm-web","owner":"KTH","description":"Kurs-pm-web is a microservice with the public view of course memos. It uses React, MobX, and is based on KTH/node-web.","archived":false,"fork":false,"pushed_at":"2026-02-03T13:28:20.000Z","size":11184,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-02-04T03:51:28.269Z","etag":null,"topics":["kip","kth","microservice","mobx","react"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KTH.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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":"2020-02-12T14:05:06.000Z","updated_at":"2026-02-03T13:28:25.000Z","dependencies_parsed_at":"2024-01-16T21:41:37.604Z","dependency_job_id":"cdbda5ee-ef99-4833-bf7d-701a7dd02038","html_url":"https://github.com/KTH/kurs-pm-web","commit_stats":{"total_commits":925,"total_committers":16,"mean_commits":57.8125,"dds":"0.49945945945945946","last_synced_commit":"b87bbddc6c6c9730d80edd54af217d2db2a78d14"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":"KTH/node-web","purl":"pkg:github/KTH/kurs-pm-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KTH%2Fkurs-pm-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KTH%2Fkurs-pm-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KTH%2Fkurs-pm-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KTH%2Fkurs-pm-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KTH","download_url":"https://codeload.github.com/KTH/kurs-pm-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KTH%2Fkurs-pm-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29855482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T08:51:08.701Z","status":"ssl_error","status_checked_at":"2026-02-26T08:50:19.607Z","response_time":89,"last_error":"SSL_read: 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":["kip","kth","microservice","mobx","react"],"created_at":"2025-01-02T07:16:03.736Z","updated_at":"2026-02-26T09:40:12.379Z","avatar_url":"https://github.com/KTH.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Welcome to kurs-pm-web 👋\n\n![Version](https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000)\n![Prerequisite](https://img.shields.io/badge/node-18-blue.svg)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](#)\n\n## Introduction\n\nThe course information project (KIP) is an initiative at KTH that was launched in 2018 to improve the quality and availability of information about KTH:s courses. The background to the project is, among other things, that it was difficult for the student to find information about the courses and even more difficult to compare information about several courses. The reason for the problems is scattered course information in several places and that there is no uniformity or assigned places for the course information. The project takes measures to consolidate course information into two locations and to present the information in a manner that is uniform for KTH. The student should find the right information about the course, depending on their needs. The result of the project is a public course site where the correct course information is collected and presented uniformly. Also, a tool is developed for teachers to enter and publish course information. Eventually, this will lead to the student making better decisions based on their needs, and it will also reduce the burden on teachers and administration regarding questions and support for the student.\n\n### 🏠 [Homepage](https://github.com/KTH/kurs-pm-web)\n\n## Overview\n\nA course memo is an actual plan for taking the course. A course memo help students to plan and prepare for all the learning activities during the course offering. A course memo contains information about the goals of the course, activities, preparations, detailed information about the examination, and contacts. It is particularly important for students just before the start of the course. A teacher, or a course coordinator, creates a course memo, and it must be published no later than by course the start.\n\nKurs-pm-web is a microservice with the public view of course memos. It uses [React](https://reactjs.org/) and is based on [node-web](https://github.com/KTH/node-web).\n\n### API:s\n\nKurs-pm-web fetches data from:\n\n- Course memo API `/api/kurs-pm-data`\n- API to store information about course syllabuses `/api/kursplan`\n- API för kurs- och programinformation `/api/ladokApi`\n- API för examinator `/api/ugRestApi`\n\n### Related projects\n\n- [kurs-pm-data-admin-web](https://github.com/KTH/kurs-pm-data-admin-web)\n- [kurs-pm-data-api](https://github.com/KTH/kurs-pm-data-api)\n- [kursplan-api](https://github.com/KTH/kursplan-api)\n- [node-web](https://github.com/KTH/node-web)\n\n## Prerequisites\n\n- Node.js 18\n\n### Secrets for Development\n\nSecrets during local development are stored in a gitignored `.env` file (`env.in` can be used as template for your `.env` file). More details about environment variable setup and secrets can be found in [confluence](https://confluence.sys.kth.se/confluence/x/OYKBDQ).\n\n## For Development\n\n### Install\n\n```sh\nnpm install\n\n```\n\nYou might need to install as well:\n\n```sh\nnpm install cross-env\nnpm install concurrently\n```\n\n### Usage\n\nStart the service on [localhost:3000/kurs-pm/:courseCode](http://localhost:3000/kurs-pm/:courseCode).\n\n```sh\nnpm run start-dev\n```\n\n### Debug in Visual Studio Code\n\nIt's possible to use debugging options available in Visual Studio Code\nAdd to .vscode file launch.json:\n\n- _Microsoft_\n\n```json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug kursinfo-web\",\n      \"program\": \"${workspaceFolder}\\\\app.js\",\n      \"envFile\": \"${workspaceFolder}\\\\.env\",\n      \"env\": {\n        \"NODE_ENV\": \"development\"\n      }\n    }\n  ]\n}\n```\n\n- _Mac, Unix and so on_\n\n```json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug kursutvecling-web\",\n      \"program\": \"${workspaceFolder}/app.js\",\n      \"envFile\": \"${workspaceFolder}/.env\",\n      \"env\": {\n        \"NODE_ENV\": \"development\"\n      }\n    }\n  ]\n}\n```\n\n## Run tests\n\n```sh\nnpm run test\n```\n\n### Performance Tests\n\n```sh\nnpm run test-performance-in-docker\n```\n\nPerformance tests are run with [Artillery](https://artillery.io/). All api:s are mocked, so only the performance of `kurs-pm-web` is tested.\n\n## Monitor and Dashboards\n\nTo monitor status during local development:\n\n- [localhost:3000/kursinfoadmin/kurs-pm-data/\\_monitor](http://localhost:3000/kursinfoadmin/kurs-pm-data/_monitor)\n\nTo see branch information during local development:\n\n- [localhost:3000/kursinfoadmin/kurs-pm-data/\\_about](http://localhost:3000/kursinfoadmin/kurs-pm-data/_about)\n\n## Use 🐳\n\nCopy `docker-compose.yml.in` to `docker-compose.yml` and make necessary changes, if any. `KURS_PM_DATA_API_URI` probably needs to be set to reflect your local development setup.\n\n```sh\ndocker-compose up\n```\n\n## Deploy\n\nThe deployment process is described in [Om kursen: Release till produktion](https://confluence.sys.kth.se/confluence/x/xIjCCg).\n\n## Pre-\\*\\*-git-hooks\n\nWe use `husky` to run [pre-commit](/.husky/pre-commit) and [pre-push](/.husky/pre-push) hooks and `lint-staged` to run eslint and prettier.\n\n## Nomenclature\n\n| Name             | Aliases           | Example                                       | Notes                                              |\n| ---------------- | ----------------- | --------------------------------------------- | -------------------------------------------------- |\n| Course Memo Name |  `courseMemoName` | _Course memo Autumn 2020-1_                   | `courseMemoName` in database is not the same thing |\n| Course Title     |  `courseTitle`    | _SF1625 Calculus in One Variable 7.5 credits_ |                                                    |\n| Department Name  |  `departmentName` | _SCI/Matematik_                               |                                                    |\n\n## Author\n\n👤 **KTH**\n\n- Website: [kth.github.io/](https://kth.github.io/)\n- Github: [@KTH](https://github.com/KTH)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkth%2Fkurs-pm-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkth%2Fkurs-pm-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkth%2Fkurs-pm-web/lists"}