{"id":16585837,"url":"https://github.com/secundant/product-template","last_synced_at":"2025-10-14T09:17:27.461Z","repository":{"id":48411500,"uuid":"514947675","full_name":"secundant/product-template","owner":"secundant","description":"Detailed fully featured template for long-term projects","archived":false,"fork":false,"pushed_at":"2024-05-23T13:31:19.000Z","size":2999,"stargazers_count":4,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T21:11:22.903Z","etag":null,"topics":["changeset","docusaurus","example","monorepo","nx","template","tutorial","typescript","yarn"],"latest_commit_sha":null,"homepage":"https://product-template.pages.dev/","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/secundant.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}},"created_at":"2022-07-17T20:23:53.000Z","updated_at":"2024-05-23T13:31:23.000Z","dependencies_parsed_at":"2024-01-03T14:25:47.404Z","dependency_job_id":"8d93aaee-a2c9-47a0-b9c8-e7f5ee8c0b93","html_url":"https://github.com/secundant/product-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/secundant/product-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secundant%2Fproduct-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secundant%2Fproduct-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secundant%2Fproduct-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secundant%2Fproduct-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/secundant","download_url":"https://codeload.github.com/secundant/product-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secundant%2Fproduct-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018501,"owners_count":26086383,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"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":["changeset","docusaurus","example","monorepo","nx","template","tutorial","typescript","yarn"],"created_at":"2024-10-11T22:49:46.115Z","updated_at":"2025-10-14T09:17:27.415Z","avatar_url":"https://github.com/secundant.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003e\n  \u003ca aria-label=\"Product template\" href=\"https://github.com/belgattitude/nextjs-monorepo-example\"\u003e\n    🏗 Product template\n  \u003c/a\u003e\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eDetailed fully featured template for long-term projects\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003e Project is in early development phase and contains some dirty moments\n\n[Visit our documentation](https://product-template.pages.dev/repo/intro) to get detailed information and\nsee like-a-real-world example of [apps/docs](./apps/docs) in one 👏\n\n- [Yarn 4](https://yarnpkg.com/getting-started/usage), a flexible package manager\n- [Corepack](https://nodejs.org/api/corepack.html) for seamless package manager switching\n- Monorepo powered by [NX](https://nx.dev/)\n- [lefthook](https://github.com/evilmartians/lefthook/) for git hooks\n  - [commitlint](https://commitlint.js.org/) on commit-msg\n  - [ESLint](https://eslint.org/) and [Prettier](https://prettier.io/) on pre-commit\n  - Tests, type checking and linting on pre-push\n- [Vitest](https://vitest.dev/) for unit tests\n- Preconfigured [TypeScript](https://www.typescriptlang.org/) with strict rules\n- [Vitepress](https://vitepress.vuejs.org/) for [own documentation application](./apps/docs) with its rationale, explanation and self-documented recipes\n- **not implemented** Group of ready-to-use examples of UI Kit libraries (self-made / radix)\n- **not implemented** Multiple applications examples (NextJS / Vite / Razzel)\n\n## Setup\n\n```shell\ncorepack enable\nyarn\n```\n\n## Details\n\n### Preconfigured TypeScript\n\n[Global tsconfig.base.json](./tsconfig.base.json) is a well-designed\nconfiguration preset with strict rules and monorepo packages paths.\nIt should be used in all modules in workspace for consistency purpose.\nOf course, you can reconfigure it as you wish :)\n\n### NX and monorepo\n\n#### Benefits\n\n- Cache\n- Consistency\n- Scalability\n- Shared anything (code, configs, tools, etc.)\n- Transparent **source code** relations\n  \u003e It sounds not so important, but it changes the way you think about your code and significantly boosts your productivity in certain cases (it literally could be 1 day vs 30 minutes)\n- Zero overhead for new and existing projects\n- Code structuring and easy reuse—we're able to extract all common logic\n  to shared libraries and use it without any painful actions (build/publish/install/update/etc.)\n- Collaboration across a team and tools\n\n#### Drawbacks\n\n- Repository size—this is a potential problem with scaling up (**TODO - research it**)\n\n## Development quick tips\n\n### New library creation\n\nUnfortunately, we still can't provide better way then just copy-paste one of libraries.\n\n\u003e **Help wanted** If you know really well worked way to generate libs with NX - let me know.\n\n1. Copy library and rename it\n2. Add path to tsconfig.base.json\n\n### Testing\n\nBy default, unit tests is powered by [Vitest](https://vitest.dev/),\nin our [root package.json](./package.json) already added `vite` and `vite-tsconfig-paths`,\nso you don't need to add them in every package.\n\nSo, if you want to add unit tests:\n\n1. `yarn add -D vitest` in target library folder or `yarn workspace @my-org/NAME add -D vitest` anywhere else\n2. Add `vite.config.ts` - you can take configuration in [local \"std\" library](libs/std/vite.config.ts)\n   or make it yourself as it shown [in vitest documentation](https://vitest.dev/config/)\n3. Add `\"test\": \"vitest run\"` to your library `package.json`\n\nOf course, you can change choose `jest` or something else instead of `vitest` if you want :)\n\n### CSS\n\nIn all packages we use [TailwindCSS](https://tailwindcss.com/),\n\n### Project graph\n\nThis command will show a graph of the dependencies and tasks.\n\n```sh\nyarn nx graph\n```\n\n### TODO Describe details\n\n- `tsconfig.base.json`\n- lefthook\n- Root-level package.json and no dependencies in packages\n- Docs\n- Tailwind\n- React-aria\n- Nx shared config\n-\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecundant%2Fproduct-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsecundant%2Fproduct-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecundant%2Fproduct-template/lists"}