{"id":50538677,"url":"https://github.com/rage/secret-project-331-pre-git-lfs","last_synced_at":"2026-06-03T18:30:46.486Z","repository":{"id":361752649,"uuid":"1253123180","full_name":"rage/secret-project-331-pre-git-lfs","owner":"rage","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-01T04:30:49.000Z","size":708675,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-01T06:23:57.093Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/rage.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":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":"2026-05-29T07:08:50.000Z","updated_at":"2026-06-01T04:30:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rage/secret-project-331-pre-git-lfs","commit_stats":null,"previous_names":["rage/secret-project-331-pre-git-lfs"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rage/secret-project-331-pre-git-lfs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Fsecret-project-331-pre-git-lfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Fsecret-project-331-pre-git-lfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Fsecret-project-331-pre-git-lfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Fsecret-project-331-pre-git-lfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rage","download_url":"https://codeload.github.com/rage/secret-project-331-pre-git-lfs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Fsecret-project-331-pre-git-lfs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33876333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2026-06-03T18:30:46.411Z","updated_at":"2026-06-03T18:30:46.475Z","avatar_url":"https://github.com/rage.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Secret Project 331](./img/secret-project-readme-banner.png)\n\n\u003e [!IMPORTANT]\n\u003e This document contains technical information intended for software developers. If you're not a software developer, you might find these resources helpful instead:\n\u003e\n\u003e - To learn more about the courses, visit [https://www.mooc.fi](https://www.mooc.fi).\n\u003e - For teacher documentation, refer to the **Wiki** tab in this repository.\n\nSecret Project 331 is a Learning Management System (LMS) developed by the MOOC Center of the University of Helsinki. It's deployed at [https://courses.mooc.fi](https://courses.mooc.fi). It includes:\n\n- A visual, no-code course material editor based on blocks (text, media, embeds, exercises, etc.)\n- Exercises are created directly within the material editor — no need to context-switch to a separate tool\n- Multiple exercise types including multiple-choice, essay, short answer, and timelines\n  - New exercise types can be added via plugins. Plugins can be developed by third parties and installed without changes to the core system\n- Automatic progress tracking, pass/fail logic, and certificate generation\n- Built-in glossary, citation manager, course statistics, and inline student feedback tools\n- Support for multilingual courses\n- Integration with the Open University of the University of Helsinki for official completion registration\n\n\u003e [!NOTE]\n\u003e The system builds on years of dedicated work on Massive Open Online Courses (MOOCs) at the Computer Science Department of the University of Helsinki.\n\u003e It was developed by a team led by [Henrik Nygren](https://github.com/nygrenh), who also designed the core features and software architecture.\n\u003e\n\u003e You can check out the rest of the contributors [here](https://github.com/rage/secret-project-331/graphs/contributors).\n\n## Development Environment Setup\n\nTo begin development on Secret Project 331, set up your local environment by following the instructions in [Development.md](./docs/Development.md), which covers setup on Windows, Linux, and macOS.\n\n### Package Manager\n\nThis project uses **pnpm** as the package manager. If you set up with Nix (`bin/install-nix`), pnpm is provided automatically. Otherwise, install it manually by following the [pnpm installation guide](https://pnpm.io/installation).\n\n## Code Style\n\nIn this project, code style is enforced with automatic tools. To ensure your contributions follow the project's code style, you need to set up pre-commit hooks and configure your editor.\n\n### Setting Up Pre-Commit Hooks\n\nRun `pnpm install` in the repository root to install the necessary tools:\n\n```bash\n$ cd Code/secret-project-331/\n$ pnpm install\n```\n\nThis will install `lint-staged`, which ensures that your code passes some basic code style checks before committing.\n\nWhen you're ready to perform a comprehensive code style check (note: this may take some time), use:\n\n```bash\nbin/git-run-branch-ready-checks\n```\n\n### Configuring Your Editor\n\n#### Visual Studio Code\n\nTo configure Visual Studio Code for this project, open it in the repository root with the pre-configured workspace:\n\n```bash\n$ cd Code/secret-project-331/\n$ bin/code\n```\n\nThe `bin/code` command automatically opens the project with recommended settings.\n\nAfter opening, install the recommended extensions prompted in the bottom right corner:\n\n![Recommended extensions popup](./docs/img/recommended-extensions.png)\n\nOnce installed, these settings will enable your editor to:\n\n- Automatically display code style issues.\n- Automatically fix some issues when saving files.\n\n## Documentation\n\nDocumentation for teachers is located in the **Wiki** tab of this repository. The documentation within the repository itself is intended for developers only.\n\n### Technical Documentation\n\n- **Backend**: [Headless LMS Server Documentation](https://rage.github.io/secret-project-331/headless_lms_server/index.html)\n- **Database Schema**: [Database Documentation](https://rage.github.io/secret-project-331-db-docs/)\n- **Shared Module**: [Component Storybook](https://rage.github.io/secret-project-storybook/)\n\nFor additional developer documentation, see the `docs` folder in the repository.\n\n## Development Resources\n\nBelow are essential resources, conventions, and courses to support development on this codebase. Familiarize yourself with these resources before beginning work.\n\n### Frontend Development\n\n- [Mobile-first CSS](./docs/mobile-first-css.md)\n- Full Stack React Development: [Fullstack Open](https://fullstackopen.com/en/)\n- Next.js: [Next.js Basics](https://nextjs.org/learn/basics/create-nextjs-app)\n- CSS Box Model: [Mozilla CSS Box Model](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model)\n- CSS-in-JS with Emotion: [Emotion Documentation](https://emotion.sh/docs/introduction)\n- CSS Layouts with Flexbox and Grid:\n  - **Flexbox** (primary layout tool):\n    - Patterns: [Flexbox Patterns](https://tobiasahlin.com/blog/common-flexbox-patterns/)\n    - Playground: [Flexyboxes](https://the-echoplex.net/flexyboxes/)\n    - Documentation: [Mozilla Flexbox Documentation](https://developer.mozilla.org/en-US/docs/Glossary/Flexbox)\n  - **Grid** (secondary layout tool):\n    - Documentation: [Mozilla Grid Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout)\n- TypeScript: [TypeScript Documentation](https://www.typescriptlang.org/docs/)\n- Iframes:\n  - Iframe Element: [MDN Iframe Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)\n  - Channel Messaging API: [Channel Messaging Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)\n\n### Deployment Resources\n\n- Docker: [DevOps with Docker](https://devopswithdocker.com/)\n- Kubernetes: [DevOps with Kubernetes](https://devopswithkubernetes.com/)\n\n### Backend Development\n\n- Rust Programming Language: [The Rust Book](https://doc.rust-lang.org/book/#the-rust-programming-language)\n- Actix Web Framework: [Actix Web](https://actix.rs/)\n- SQLx for Rust: [SQLx Usage](https://github.com/launchbadge/sqlx#usage)\n- Rust by Example: [Rust by Example](https://doc.rust-lang.org/rust-by-example/)\n- Learn Rust with Linked Lists: [Entirely Too Many Linked Lists](https://rust-unofficial.github.io/too-many-lists/)\n- Rustlings (Rust Exercises): [Rustlings](https://github.com/rust-lang/rustlings)\n- Rust Cookbook: [Rust Cookbook](https://rust-lang-nursery.github.io/rust-cookbook/)\n\n## License\n\nThe program in the `services/cms` folder is licensed under [GPL-3.0-only](LICENSE-SERVICES-CMS).\n\nAll other parts of the codebase are licensed under [Apache-2.0](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frage%2Fsecret-project-331-pre-git-lfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frage%2Fsecret-project-331-pre-git-lfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frage%2Fsecret-project-331-pre-git-lfs/lists"}