{"id":28339326,"url":"https://github.com/innodoc/innodoc-webapp","last_synced_at":"2026-02-23T23:35:03.837Z","repository":{"id":43120931,"uuid":"142482043","full_name":"innodoc/innodoc-webapp","owner":"innodoc","description":"Web viewer and editor for interactive educational content","archived":false,"fork":false,"pushed_at":"2025-02-08T17:19:51.000Z","size":13432,"stargazers_count":1,"open_issues_count":44,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-29T03:32:13.006Z","etag":null,"topics":["education","innodoc","mathematics","react","webapp"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/innodoc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2018-07-26T18:56:45.000Z","updated_at":"2025-02-08T17:19:57.000Z","dependencies_parsed_at":"2025-02-08T18:32:34.620Z","dependency_job_id":null,"html_url":"https://github.com/innodoc/innodoc-webapp","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/innodoc/innodoc-webapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innodoc%2Finnodoc-webapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innodoc%2Finnodoc-webapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innodoc%2Finnodoc-webapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innodoc%2Finnodoc-webapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/innodoc","download_url":"https://codeload.github.com/innodoc/innodoc-webapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innodoc%2Finnodoc-webapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29760710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T21:02:23.375Z","status":"ssl_error","status_checked_at":"2026-02-23T20:58:31.539Z","response_time":90,"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":["education","innodoc","mathematics","react","webapp"],"created_at":"2025-05-27T01:24:01.198Z","updated_at":"2026-02-23T23:35:03.822Z","avatar_url":"https://github.com/innodoc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![pipeline status](https://git.tu-berlin.de/innodoc/innodoc-webapp/badges/main/pipeline.svg)](https://git.tu-berlin.de/innodoc/innodoc-webapp/-/commits/main) [![Latest Release](https://git.tu-berlin.de/innodoc/innodoc-webapp/-/badges/release.svg)](https://git.tu-berlin.de/innodoc/innodoc-webapp/-/releases)\n\n# innoDoc web app\n\nHTML viewer for interactive educational content.\n\n## Running the application\n\n### Docker\n\nThe easiest way to get started is to use the prebuilt image.\n\n```sh\ndocker run \\\n  --rm \\\n  --publish 8000:8000 \\\n  --env CONTENT_ROOT=\"https://example.com/content/\" \\\n  --env MONGO_URL=mongodb://mongodb/innodoc-test \\\n  --network innodocbridge\n  innodoc/innodoc-webapp\n```\n\n**Note:** You still need a MongoDB instance and content for the app to do\nanything useful.\n\n**See also:** [Docker README](docker/README.md)\n\n### Manually building the application\n\n#### Requirements\n\nPlease make sure you have a current version of [Node.js](https://nodejs.org/)\nand [Yarn](https://yarnpkg.com/) installed on your system. For Node.js use your\npackage manager of choice. [nvm](https://github.com/creationix/nvm) is also an\nexcellent option to install a current version of Node.js into your home\ndirectory.\n\nThe software is built and tested on Linux systems. Using it on other operating\nsystems might work, but your mileage may vary.\n\n#### 1. Install dependencies\n\nInstall node packages.\n\n```sh\n$ yarn install\n```\n\n#### 2. Configuration\n\nCopy the example configuration `.env.example` to `.env` and edit to your\nliking.\n\n#### 3. Build the application\n\n```sh\n$ yarn build\n```\n\nAn optimized production build can be found in the directory\n`packages/client-web/src/.next`.\n\n#### 4. Start the production server\n\nThis will start the web server that serves the web application.\n\n```sh\n$ yarn start\n```\n\n### Serving content to the application\n\nFor the application to do anything useful, you will need content to display.\n\nContent is static data in the shape of JSON and image files. To produce such\ncontent a separate program\n[innoConv](https://git.tu-berlin.de/innodoc/innoconv) can be used. The\ncontent needs to be served via HTTP(S) (see [`CONTENT_ROOT`](#content_root)).\nDon't forget to send [CORS\nheaders](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) if needed.\n\n### Configuration options\n\nConfiguration options are set in the `.env` file. You can use `.env.example` as\na basis. For `docker run` you might want to use `--env` or `--env-file`.\n\n## Deployment\n\nWeb applications usually run behind a reverse proxy to provide features such as\nTLS termination, static asset serving or load balancing. Details on how to do\nthat is not in the scope of this document.\n\nStatic assets are stored in the directory `/innodoc-webapp/src/.next/static`\nin the Docker container.\n\nCurrently the application should be served directly from the domain root (like\n`myapp.example.com`) rather than from a sub-directory (like\n`www.example.com/myapp`).\n\n## Development\n\nThe codebase is split into separate sub-packages for organizational purposes\nand to enable sharing of code. This is managed by\n[Yarn Workspaces](https://yarnpkg.com/lang/en/docs/workspaces/).\n\n### Development server\n\nThe development server compiles code on-the-fly and therefore there's no need\nto build in advance.\n[Hot Module Replacement (HMR)](https://webpack.js.org/concepts/hot-module-replacement/)\nis activated by default.\n\n```sh\n$ yarn dev\n```\n\n### Unit tests\n\n[Jest](https://jestjs.io/) and [Enzyme](http://airbnb.io/enzyme/) are used for\ntesting.\n\n```sh\n$ yarn test:unit\n```\n\n##### Coverage\n\nShows detailed coverage report and also produces `./coverage/lcov-report` that\ncan be viewed in a web browser.\n\n```sh\n$ yarn test:unit:coverage\n```\n\n### E2E tests\n\n[Playwright](https://playwright.dev/) is used for E2E testing.\n\nThis will spawn the app and content servers automatically before running E2E\ntests. Afterwards both servers are shut down. Don't forget to build the\napplication before as this runs directly on the production build.\n\n```sh\n$ yarn test:e2e\n```\n\nE2E tests can also be looked at while running.\n\n```sh\n$ yarn test:e2e:show\n```\n\nFor failed tests a screenshot will be taken automatically and placed into the\ndirectory `packages/client-web/e2e/screenshots`.\n\n### Serve test content\n\nServe test content that can be used with [`CONTENT_ROOT`](#content_root). That\ncomes in handy for development and testing. For production you should set up a\nproper web server to handle static content.\n\n```sh\n$ yarn test:e2e:content\n```\n\n### Linting\n\nBased on [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript).\nMost notable difference: No [semicolon](https://eslint.org/docs/rules/semi) at\nthe end of a statement.\n\n```sh\n$ yarn lint\n```\n\n### Bundle analyzer\n\nVisualize bundle contents using\n[Webpack Bundle Analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer).\n\n```sh\n$ yarn workspace @innodoc/client-web build:bundle-analyze\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnodoc%2Finnodoc-webapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finnodoc%2Finnodoc-webapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnodoc%2Finnodoc-webapp/lists"}