{"id":14070043,"url":"https://github.com/oedotme/render","last_synced_at":"2025-04-05T15:09:17.692Z","repository":{"id":37766042,"uuid":"358843324","full_name":"oedotme/render","owner":"oedotme","description":"Opinionated React Template","archived":false,"fork":false,"pushed_at":"2025-02-07T17:49:41.000Z","size":1662,"stargazers_count":130,"open_issues_count":0,"forks_count":19,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T14:12:35.058Z","etag":null,"topics":["app","boilerplate","client","eslint","frontend","hooks","husky","prettier","react","react-router","structure","tailwindcss","template","typescript","vite","web"],"latest_commit_sha":null,"homepage":"https://renderapp.vercel.app","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/oedotme.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":"2021-04-17T09:59:09.000Z","updated_at":"2025-02-11T01:16:35.000Z","dependencies_parsed_at":"2024-03-07T18:29:47.500Z","dependency_job_id":"0804a8db-9f65-4cbc-b8de-81dd2e156a81","html_url":"https://github.com/oedotme/render","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oedotme%2Frender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oedotme%2Frender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oedotme%2Frender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oedotme%2Frender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oedotme","download_url":"https://codeload.github.com/oedotme/render/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353746,"owners_count":20925329,"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":["app","boilerplate","client","eslint","frontend","hooks","husky","prettier","react","react-router","structure","tailwindcss","template","typescript","vite","web"],"created_at":"2024-08-13T07:07:26.646Z","updated_at":"2025-04-05T15:09:17.674Z","avatar_url":"https://github.com/oedotme.png","language":"TypeScript","readme":"\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://rendertemplate.vercel.app\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg src=\"/public/logo.svg\" alt=\"Render · Opinionated React Template\" width=\"120\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003cem\u003eOpinionated React Template\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\n\n# Render\n\nOpinionated React template setup with modern tooling, here some [recommendations](#recommendations) if needed\n\n## Technologies and tools\n\n- [React](https://reactjs.org)\n- [TypeScript](https://www.typescriptlang.org)\n- [React Router](https://reactrouter.com)\n- [Generouted](https://github.com/oedotme/generouted)\n- [TailwindCSS](https://tailwindcss.com)\n- [Playwright](https://playwright.dev)\n- [ESLint](https://eslint.org)\n- [Prettier](https://prettier.io)\n- [Vite](https://vitejs.dev)\n- [PNPM](https://pnpm.io)\n- [Husky](https://typicode.github.io/husky)\n- [Commitlint](https://commitlint.js.org)\n- [Lint-staged](https://github.com/okonet/lint-staged)\n- [Vercel](http://vercel.com)\n\n## Highlights\n\n### File based routing\n\n- Using [`generouted` with type-safe navigation](https://github.com/oedotme/generouted)\n- Check [`generouted` features](https://github.com/oedotme/generouted#features) and [conventions](https://github.com/oedotme/generouted#conventions) for more details\n\n### Authentication example\n\n- [Authentication context](./src/context/auth.tsx)\n- [Routes guard](./src/config/redirects.tsx)\n\n### Custom hooks\n\n- [`useQuery` hook](./src/hooks/query.ts)\n\n## Usage\n\nBy [generating](https://github.com/oedotme/render/generate) from this template then/or cloning locally\n\n## Getting started\n\n#### Installation\n\n```shell\n# install dependencies\npnpm install\n\n# install playwright browsers\npnpm playwright install --with-deps chromium\n```\n\n#### Development and build\n\n```shell\n# start development server · http://localhost:3000\npnpm dev\n\n# build client for production\npnpm build\n\n# start production preview · http://localhost:5000\npnpm preview\n```\n\n#### Testing — end-to-end and unit tests\n\n```shell\n# run all tests from the command-line\npnpm test\n\n# run end-to-end tests in interactive mode\npnpm test:ui\n\n# run end-to-end tests in headed browsers\npnpm test:headed\n\n# run test generator to record an end-to-end test\npnpm test:record\n```\n\n## Recommendations\n\n#### Frameworks\n\n- [Astro](https://astro.build)\n- [Next.js](https://nextjs.org)\n- [Remix](https://remix.run)\n- [Blitz](https://blitzjs.com)\n- [Redwood](https://redwoodjs.com)\n\n#### Non-React Frameworks\n\n- [Solid](https://www.solidjs.com)\n- [SolidStart](https://start.solidjs.com)\n- [Preact](https://preactjs.com)\n\n#### Languages\n\n- [ReScript](https://rescript-lang.org)\n\n#### Routing\n\n- [TanStack Router](https://tanstack.com/router)\n\n#### Components\n\n- [Radix UI](https://www.radix-ui.com)\n- [Headless UI](https://headlessui.dev)\n- [Chakra UI](https://chakra-ui.com)\n\n#### Build tools\n\n- [Esbuild](https://esbuild.github.io)\n- [Parcel](https://parceljs.org)\n\n#### Server state\n\n- [TanStack Query](https://tanstack.com/query)\n- [SWR](https://swr.vercel.app)\n\n#### Data fetching\n\n- [Ky](https://github.com/sindresorhus/ky)\n- [Redaxios](https://github.com/developit/redaxios)\n- [Axios](https://github.com/axios/axios)\n\n#### Global state\n\n- [Zustand](https://github.com/pmndrs/zustand)\n- [Jotai](https://jotai.org)\n- [Recoil](https://recoiljs.org)\n- [Redux Toolkit](https://redux-toolkit.js.org)\n\n#### Animation\n\n- [Framer Motion](https://www.framer.com/motion)\n\n## License\n\nMIT\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foedotme%2Frender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foedotme%2Frender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foedotme%2Frender/lists"}