{"id":18978928,"url":"https://github.com/andreidmt/r3wy","last_synced_at":"2026-04-12T11:32:38.433Z","repository":{"id":84514860,"uuid":"563307123","full_name":"andreidmt/r3wy","owner":"andreidmt","description":"React application proof-of-concept with focus on maintainability, setting as many :guard: guard :railway_track: rails as possible.","archived":false,"fork":false,"pushed_at":"2023-01-29T15:25:48.000Z","size":2308,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-01T10:42:18.627Z","etag":null,"topics":["conventional-commits","cypress","jest","lerna","monorepo","react","swc","typescript","webpack"],"latest_commit_sha":null,"homepage":"http://r3wy.s3-website.eu-central-1.amazonaws.com","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/andreidmt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-08T10:44:38.000Z","updated_at":"2024-10-25T11:31:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"c8eeecdd-1b4c-452d-8686-c80218ce9c56","html_url":"https://github.com/andreidmt/r3wy","commit_stats":null,"previous_names":["andreidmt/r3wy"],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreidmt%2Fr3wy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreidmt%2Fr3wy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreidmt%2Fr3wy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreidmt%2Fr3wy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreidmt","download_url":"https://codeload.github.com/andreidmt/r3wy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239985713,"owners_count":19729512,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["conventional-commits","cypress","jest","lerna","monorepo","react","swc","typescript","webpack"],"created_at":"2024-11-08T15:40:25.177Z","updated_at":"2026-04-11T07:30:17.626Z","avatar_url":"https://github.com/andreidmt.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-h1 --\u003e\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/r3wy/r3wy/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/r3wy/r3wy/tree/main)\n[![Coverage Status](https://coveralls.io/repos/github/r3wy/r3wy/badge.svg)](https://coveralls.io/github/r3wy/r3wy)\n\n# R3wy\n\n\u003e React application proof-of-concept with focus on maintainability, setting as\n\u003e many :guardsman: guard :railway_track: rails as possible.\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n- [Features](#features)\n- [Install](#install)\n- [Application Stack](#application-stack)\n- [Development flow](#development-flow)\n- [Scripts](#scripts)\n- [Todo](#todo)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Features\n\n- :dragon: [Lerna][intro_lerna] monorepo to encourage setting up your\n  application domain as a sum of smaller packages\n- :shipit: [CircleCI][intro_circleci] with [`jobs`][intro_cci-jobs] that read,\n  almost, as pure functions + [Contexts][intro_cci-context]\n- :suspect: [Typescript][intro_typescript], [ESLint][intro_eslint],\n  [Prettier][intro_prettier], [LintStaged][intro_lint-staged],\n  [CommitLint][intro_commit-lint] and [Githooks][intro_githooks] because I\n  don't trust myself to be consistent\n- :love_letter: Automated, [Conventional\n  Commits][intro_conventional-commits] based, versioning and releases via\n  [`commitlint`][intro_commit-lint] + [`lerna publish`][intro_lerna-publish]\n- :hammer: E2E testing using [Cypress][intro_cypress] and Unit testing with\n  [Jest][intro_jest]\n\n[intro_circleci]: https://circleci.com\n[intro_cci-jobs]: /.circleci/config.yml#27\n[intro_conventional-commits]: https://www.conventionalcommits.org\n[intro_lerna]: https://lerna.js.org\n[intro_cci-context]: https://circleci.com/docs/contexts\n[intro_typescript]: https://www.typescriptlang.org\n[intro_eslint]: https://eslint.org\n[intro_prettier]: https://prettier.io\n[intro_lint-staged]: https://github.com/okonet/lint-staged\n[intro_githooks]: https://git-scm.com/docs/githooks\n[intro_commit-lint]: https://commitlint.js.org\n[intro_lerna-publish]: https://lerna.js.org/docs/features/version-and-publish\n[intro_cypress]: https://www.cypress.io\n[intro_jest]: https://jestjs.io\n\n## Install\n\n```bash\ngit clone git@github.com:r3wy/r3wy.git \u0026\u0026 \\\n  cd r3wy \u0026\u0026 \\\n  npm run setup\n```\n\nEven if you are not contributing code and only updating docs or CI\nconfigurations, you should still run once `npm run setup` or `npm install`.\nDoing this will activate git hooks present in [.githooks](/.githooks) folder.\n\n## Application Stack\n\n- [webpack v5][app-stack_webpack] + [swc][app-stack_swc] - Most popular JS\n  bundler + lightning fast, Rust based, compile times\n- [typescript v4][app-stack_ts] - A strongly typed programming language that\n  builds on JavaScript\n- [react v18][app-stack_react] - A JavaScript library for building user\n  interfaces\n- [react-router v6][app-stack_react-router] - Declarative routing for React\n- [chakra-ui][app-stack_chakra] - Simple, Modular \u0026 Accessible UI\n  Components for your React Applications\n- [rambda][app-stack_rambda] - Point-free style functional programming library.\n  Faster, smaller and with TypeScript support alternative to\n  [Ramda](https://ramdajs.com/)\n\n[app-stack_react]: https://github.com/facebook/react\n[app-stack_react-router]: https://github.com/remix-run/react-router\n[app-stack_chakra]: https://github.com/chakra-ui/chakra-ui\n[app-stack_rambda]: https://github.com/selfrefactor/rambda\n[app-stack_ts]: https://www.typescriptlang.org\n[app-stack_webpack]: https://github.com/webpack/webpack\n[app-stack_swc]: https://swc.rs\n\n## Development flow\n\n[Trunk based development](https://trunkbaseddevelopment.com/) with friends. All\ncode changes flow one-way, bottom-up without diverging:\n\n- `feat/pr-branch` -\u003e `dev` -\u003e `main`.\n\n```text\n+--------+\n|  main  |\n+--------+\n   ^\n   |  +--------+\n   \\--+  dev   |\n      +--------+\n         ^\n         |   +-------------------------+\n         |\u003c--+  feat/login-form        |\n         |   +-------------------------+\n         |\n         |   +-------------------------+\n         \\\u003c--+  fix/login-remember-me  |\n             +-------------------------+\n```\n\n| :warning: WARNING                                                             |\n| :---------------------------------------------------------------------------- |\n| Always use \"Squash and Merge\" when mearging a PR into `dev`.                  |\n| Merge commits can still be done from the terminal - should never be the case. |\n\n## Scripts\n\n**Starts development servers:**\n\n- [localhost:8080](http://localhost:8080) - Local development server\n- [localhost:8888](http://localhost:8888) - Bundle analyzer\n\n```bash\n# repo root \n#  \u003e \"start\": \"npm run start --workspace=@r3wy/react\"\n\n# @r3wy/react\n#  \u003e \"start\": \"webpack serve --mode development\"\nnpm start\n```\n\n**Build `src/index.tsx` entry point into `dist` folder:**\n\n```bash\n# repo root\n#  \u003e \"build\": \"npm run build --workspace=@r3wy/react\"\n\n# @r3wy/react\n#  \u003e \"prebuild\": \"rm -rf dist\",\n#  \u003e \"build\": \"webpack --mode production\"\nnpm run build\n```\n\n| :warning: WARNING                                                         |\n| :------------------------------------------------------------------------ |\n| `start` and `build` scripts will not throw on TypeScript or ESLint errors |\n\n**Interactivly upgrade dependencies to the latest versions across all packages:**\n\n```bash\n# repo root\n#  \u003e ncu --deep --interactive\nnpm run update\n```\n\n## Todo\n\n- [ ] Fix unit-test coverage scope, enforce minimum test coverate in CI\n- [ ] Update `setup` CI job to benefit from cached node_modules\n- [ ] :red_circle: Locally install npm packages in lambda function repos.\n  Currently they are not part of workspace as a workaround for the lack of\n  npm's or lerna's `--nohoist`\n- [ ] Use [`lerna run`][todo_lerna-run] to run scripts cross-package and\n  benefit from [caching][todo_lerna-cache] and parallel running\n- [ ] :red_circle: Increment versions and local dependencies versions of\n  private repos also, not only of those who get published to npm ... prob via\n  separate call to [`lerna version`][todo_lerna-version]\n- [ ] Refactor `useCRUDStatus` to allow arbitrary actions\n- [ ] :red_circle: Configure Lerna [canary builds][todo_lerna-canary] for `dev`\n  branch\n- [ ] :red_circle: Introduce [Terraform][todo_terraform] as [Infrastructure as\n  Code][todo_iac] solution\n- [ ] [Code splitting][todo_code-splitting]\n- [ ] Export Typescript config to separate `@r3wy.ts-config` public package\n- [ ] Export UI primitives to separate `@r3wy.react-ui` public package\n- [ ] Export hooks to separate `@r3wy.react-hooks` public package\n- [ ] I18n with [react-i18next][todo_react-i18next] + Google Spreadsheet data\n  import\n- [ ] SSR\n- [ ] Update `CRUDStatusUI` to display all running operations\n- [ ] OAuth API + `useAuth` support\n- [ ] Realtime updates\n- [ ] Refactor inline css styles in separate [Chakra Components][todo_chakra-components]\n\n[todo_lerna-version]: https://github.com/lerna/lerna/tree/main/commands/version#readme\n[todo_lerna-run]: https://github.com/lerna/lerna/tree/main/commands/run\n[todo_lerna-cache]: https://lerna.js.org/docs/concepts/how-caching-works\n[todo_terraform]: https://www.terraform.io\n[todo_iac]: https://en.wikipedia.org/wiki/Infrastructure_as_code\n[todo_react-i18next]: https://react.i18next.com\n[todo_chakra-components]: https://chakra-ui.com/docs/styled-system/component-style\n[todo_code-splitting]: https://www.copycat.dev/blog/react-lazy\n[todo_lerna-canary]: https://github.com/lerna/lerna/tree/main/commands/publish#--canary\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreidmt%2Fr3wy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreidmt%2Fr3wy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreidmt%2Fr3wy/lists"}