{"id":14155472,"url":"https://github.com/openstax/rex-web","last_synced_at":"2026-01-26T13:14:00.741Z","repository":{"id":37285289,"uuid":"156439828","full_name":"openstax/rex-web","owner":"openstax","description":"Unified Reading EXperience","archived":false,"fork":false,"pushed_at":"2026-01-20T19:34:49.000Z","size":56876,"stargazers_count":17,"open_issues_count":25,"forks_count":1,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-01-20T20:38:15.274Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://rex-web.herokuapp.com/","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/openstax.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":".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":"2018-11-06T19:58:13.000Z","updated_at":"2026-01-20T15:46:05.000Z","dependencies_parsed_at":"2025-07-14T18:12:11.007Z","dependency_job_id":"8e884bd8-60af-4a62-b7ec-afe84e2e7cd8","html_url":"https://github.com/openstax/rex-web","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/openstax/rex-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstax%2Frex-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstax%2Frex-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstax%2Frex-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstax%2Frex-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openstax","download_url":"https://codeload.github.com/openstax/rex-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstax%2Frex-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28779171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T11:46:04.308Z","status":"ssl_error","status_checked_at":"2026-01-26T11:46:02.664Z","response_time":59,"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":["hacktoberfest"],"created_at":"2024-08-17T08:03:25.679Z","updated_at":"2026-01-26T13:14:00.720Z","avatar_url":"https://github.com/openstax.png","language":"TypeScript","funding_links":[],"categories":["hacktoberfest"],"sub_categories":[],"readme":"Unified **R**eading **Ex**perience\n\n[![Maintainability](https://api.codeclimate.com/v1/badges/c09c521f0a181481a91b/maintainability)](https://codeclimate.com/github/openstax/rex-web/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/c09c521f0a181481a91b/test_coverage)](https://codeclimate.com/github/openstax/rex-web/test_coverage)\n[![Updates](https://pyup.io/repos/github/openstax/rex-web/shield.svg)](https://pyup.io/repos/github/openstax/rex-web/) [![Greenkeeper badge](https://badges.greenkeeper.io/openstax/rex-web.svg)](https://greenkeeper.io/)\n\n## Confluence\n\nReal documentation is on [confluence](https://openstax.atlassian.net/wiki/spaces/UNIFIED/pages/196936/REX) everything here is just for quick reference.\n\n## Development Setup\n\ninstall [nvm](https://github.com/creationix/nvm#installation)\n\n```bash\n# use the right version of node\nnvm install\n\n# install yarn, skip if you have it already\nnpm install -g yarn\n\n# install dependencies\nyarn\n\n# start (browser will open automatically)\nyarn start\n```\n\n### to fix scarry untrusted cert warning in chrome\n\n*note:* you must do this for login to work\n\n#### trust the certificate\n- run `yarn trust-localhost` after you can see the security error in a browser\n- reload the browser\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `yarn start`\n\nRuns the app in the development mode.\u003cbr\u003e\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.\u003cbr\u003e\nYou will also see any lint errors in the console.\n\nRun `PORT=8000 yarn start` to change the webserver port.\n\n\n### `yarn start:static`\n\nBuilds the app, builds prerendered content, and then serves it at [http://localhost:3000](http://localhost:3000) .\n\nRun `PORT=8000 yarn start:static` to change the webserver port.\n\nRun `REACT_APP_ENV=development yarn start:static` to build the books (defined in [config.development.js](./src/config.development.js)) and serve them.\n\nTo prerender the test fixture book and serve it, run `REACT_APP_ENV=test yarn start:static`.\n\n### `yarn test`\n\nLaunches the test runner in the interactive watch mode.\u003cbr\u003e\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n#### `yarn test:unit`\n\nruns only unit tests and react snapshots, these are the fast tests that generate code coverage.\n\n#### `yarn test:screenshots`\n\nCI runs on ubuntu, and because of minor rendering differences between platforms this command will _probably_ fail if you run it locally. after making changes if you need to update the screenshots, you can use the command `make screenshots` which will run the tests locally in a ubuntu docker container. this takes a while, which is why the tests are separated from the ones in `yarn test:unit`\n\n**NOTE:** the `CI=true` flag makes it so screenshots will match if they are not quite exactly the same. this is included because there are still some things like math typesetting that are not 10000% deterministic in their rendering. if you want to make sure you get the updates you need for a minor change, you may have to remove the `CI=true` to see it, but you will probably also get some false positives.\n\n#### Running individual tests\n\nTo run a single test file, `yarn jest \u003cfile\u003e`.\n\n#### Running the linter\n\n`yarn lint` will run the linter, but note that you may need to install `shellcheck` which is used in the linting (e.g. `brew install shellcheck`).\n\n### `yarn build`\n\nBuilds the app for production to the `build` folder.\u003cbr\u003e\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.\u003cbr\u003e\n\n### Using Docker\n\ninstall [docker](https://docs.docker.com/install/)\n\nbuild the image\n\n```bash\ndocker build -t openstax/rex-web .\n```\n\nrun commands\n```bash\n\n# starts server\ndocker run -t openstax/rex-web yarn server\n\n# runs tests\ndocker run -t openstax/rex-web yarn test\n```\n\n## Test Suites\n\n### Developer Tests\n\nrun these with `yarn test`.\n\nthis suite:\n- contains **unit tests** and **puppeteer** tests\n- runs against a **local** dev server\n- uses **fixture** data and content\n- should be run locally by developers to make sure they don't break stuff\n- is run by CI against pull requests in case developers are lazy\n- should be **fast** to promote running frequently and prompt feedback on PRs\n- should contain only high priority browser tests with puppeteer because browser tests are slow\n\n### Selenium Tests\n\nrun these with `make test-local`\n\nThere are many more options when running these test. Please visit the [./pytest-selenium/README.md](./pytest-selenium/README.md) for more.\n\nthis suite:\n- contains browser tests using selenium\n- tests cross browser\n- runs against a **remote** environment\n- uses **real** content and **persistent** test data\n- is run against release candidates when they are updated\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstax%2Frex-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenstax%2Frex-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstax%2Frex-web/lists"}