{"id":15789949,"url":"https://github.com/nonblocking/mashroom-demo-dynamic-cockpit","last_synced_at":"2026-02-02T18:33:49.161Z","repository":{"id":153210581,"uuid":"445576509","full_name":"nonblocking/mashroom-demo-dynamic-cockpit","owner":"nonblocking","description":"Mashroom Server Dynamic Cockpit Demo","archived":false,"fork":false,"pushed_at":"2025-05-16T07:44:23.000Z","size":7100,"stargazers_count":0,"open_issues_count":13,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-26T20:08:37.306Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/nonblocking.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}},"created_at":"2022-01-07T16:01:52.000Z","updated_at":"2022-12-24T09:20:05.000Z","dependencies_parsed_at":"2024-10-26T03:27:01.178Z","dependency_job_id":"24a0951c-0d87-4621-b191-21ce7db421e1","html_url":"https://github.com/nonblocking/mashroom-demo-dynamic-cockpit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nonblocking/mashroom-demo-dynamic-cockpit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonblocking%2Fmashroom-demo-dynamic-cockpit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonblocking%2Fmashroom-demo-dynamic-cockpit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonblocking%2Fmashroom-demo-dynamic-cockpit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonblocking%2Fmashroom-demo-dynamic-cockpit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nonblocking","download_url":"https://codeload.github.com/nonblocking/mashroom-demo-dynamic-cockpit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonblocking%2Fmashroom-demo-dynamic-cockpit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29017463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T18:20:26.228Z","status":"ssl_error","status_checked_at":"2026-02-02T18:20:25.361Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2024-10-04T22:04:18.538Z","updated_at":"2026-02-02T18:33:49.144Z","avatar_url":"https://github.com/nonblocking.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Mashroom Dynamic Cockpit Demo\n\nThis demo shows how to create a dynamic cockpit based on a search backend and a bunch of SPAs with [Mashroom Portal](https://github.com/nonblocking/mashroom).\n\n![Screenshot](screenshot.png)\n\nThe demo consists of a Portal page with a search that fetches results from a backend and at the same times searches for Apps,\nwhich are able to show some details for the search hits. It also searches Apps by name and displays them inline -\nwithin the backend search results - if they don't need any input (such as a customerId).\n\nThe possible Apps are determined dynamically based on meta info in the plugin definition:\n\n```json\n{\n    \"plugins\": [\n        {\n            \"name\": \"Mashroom Dynamic Cockpit Demo Customer Details App\",\n            // ...\n            \"defaultConfig\": {\n                \"metaInfo\": {\n                    \"demoCockpit\": {\n                        \"viewType\": \"Details\",\n                        \"entity\": \"Customer\"\n                    }\n                },\n                // ...\n            }\n        }\n    ]\n}\n```\n\n...which means: This App can display details for the search hit entity \"Customer\".\n\nSo, this concept allows it to extend the cockpit dynamically by just registering new Apps\n(which can also happen dynamically and even without a Portal restart in case of *Remote Apps*).\n\nNotable other features:\n\n * Apps can open other Apps via message bus to show some further details (e.g. Customer -\u003e Customer Orders)\n * Apps in the content area can be moved via Drag and Drop\n * Apps can even appear in the search result, if the search terms match the App name, and the App does not require any config\n   (enter \"bestseller\" into the search field to try it out)\n * The Cockpit also integrates the Demo Remote App from http://demo-remote-app.mashroom-server.com - so if you enter \"chuck\"\n   in the search you will see a random Chuck Norris joke ;-)\n\n## Modules\n\n * cockpit-management-app: The central App that provides the search and manages adding and removing Apps\n * mock-backend: A demo search backend with some mock data\n * startup-job: A startup plugin that configures the cockpit page if it doesn't exist yet\n * theme-extension: A page enhancement plugin with some extra style for the cockpit page\n\nAll other modules are demo Apps to display data.\n\n## Start the demo\n\nRequirements:\n  * Node.js \u003e= 14\n\n\n    npm install\n    cd test/test-server\n    npm start\n\n\nThe cockpit will be available at http://localhost:5050/portal/web/cockpit - user is: john/john\n\nNotes:\n * It might take some time until the \"Cockpit Demo\" page appears, since the plugins need to be built first\n * If something goes wrong, check the Admin UI: http://localhost:5050/mashroom/admin\n\n### Using Docker\n\n    docker build -t mashroom-demo-dynamic-cockpit .\n    docker run -it -e NODE_ENV=production -p 5050:5050 mashroom-demo-dynamic-cockpit\n\n## Article\n\nCheck out this blog entry for more details: [https://medium.com/mashroom-server/building-dynamic-cockpits-with-mashroom-portal-7ffa5f990520](https://medium.com/mashroom-server/building-dynamic-cockpits-with-mashroom-portal-7ffa5f990520)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnonblocking%2Fmashroom-demo-dynamic-cockpit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnonblocking%2Fmashroom-demo-dynamic-cockpit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnonblocking%2Fmashroom-demo-dynamic-cockpit/lists"}