

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456## React789- You are using the latest version of React (v19)10- Do not write any backend code. Just frontend logic.11- If a complex skeleton is needed, create a component function `LoadingSkeleton` in the same file.12- Store components for each major page or workflow in `app/components/$WORKFLOW/$COMPONENT.tsx`.13 - If a single page has more than two dedicated components, create a subfolder `app/components/$WORKFLOW/$PAGE/$COMPONENT.tsx`14- Use lowercase dash separated words for file names.15- Use React 19, TypeScript, Tailwind CSS, and ShadCN components.16- Prefer function components, hooks over classes.17- Use ShadCN components in `web/app/components/ui` as your component library. If you need new components, ask for them.18 - Never edit the `web/components/ui/*.tsx` files.19 - You can find a list of components here https://ui.shadcn.com/docs/components20- Break up large components into smaller components, but keep them in the same file unless they can be generalized.21- Put any "magic" strings like API keys, hosts, etc into a "constants.ts" file.22- For React functional components with three or fewer props, always inline the prop types as an object literal directly in the function signature after the destructured parameters (e.g., `function Component({ prop1, prop2 }: { prop1: string; prop2?: number }) { ... })`. Include default values in destructuring and mark optional props with ? in the type object. Do not use separate interfaces or type aliases; keep types inline. For complex types, add inline comments if needed.23- Put the interface definition right above the related function24- Internally, store all currency values as integers and convert them to floats when rendering visually25- When building forms use React Hook Form.26- Include a two line breaks between any `useHook()` calls and any `useState()` definitions for a component.27- When using a function prop inside a `useEffect`, please use a pattern that avoids including the function in the dependency array, like the `useRef` trick.28- When writing React components, always hoist complex conditional expressions into descriptively named constants at the top of the component function for better readability and maintainability.29- When managing API response data, store the entire response object (or relevant subset) in a single `useState` rather than creating separate state variables for each field. Derive individual values from the response object when passing to child components using optional chaining (e.g., response?.field || defaultValue).30- Refactor ternary to &&: `{condition ? <A/> : <B/>}` → `{condition && <A/>}{!condition && <B/>}`31- Use the following pattern to reference query string values (i.e. `?theQueryStringParam=value`):3233```typescript34const [searchParams, _setSearchParams] = useSearchParams();35// searchParams contains the value of all query string parameters36const queryStringValue = searchParams.get("theQueryStringParam")37```3839### Mock Data4041- For any backend communication, create mock responses. Use a async function to return mock data that I will swap out later for a async call to an API.42- When creating mock data, always specify it in a dedicated `web/app/mock.ts` file43- Load mock data using a react router `clientLoader`. Use the Skeleton component to present a loading state.4445### React Hook Form4647Follow this structure when generating a form.4849```tsx5051// add a mock function simulating server communication52async function descriptiveServerSendFunction(values: any) {53 const mockData = getMockReturnData(/* ... */)54 return new Promise(resolve => setTimeout(() => resolve(mockData), 500));55}5657const formSchema = z.object({58 field_name: z.string(),59 // additional schema definition60})6162const form = useForm<z.infer<typeof formSchema>>({63 resolver: zodResolver(formSchema),64})6566const {67 formState: { isSubmitting, errors },68 setError,69 clearErrors,70} = form717273async function onSubmit(values: z.infer<typeof formSchema>) {74 clearErrors("root")7576 // ...77 const { data, error } = await descriptiveSendFunction(values)7879 if (error) {80 setError("root.serverError", { message: error.detail?.[0]?.msg })81 return82 }83 // ...84}8586return (87 <Form {...form}>88 <form onSubmit={form.handleSubmit(onSubmit)}>89 {/* form fields */}9091 <ServerErrorAlert error={errors.root?.serverError} />9293 <Button94 type="submit"95 disabled={isSubmitting}96 >97 {isSubmitting ? "Submitting..." : "Submit"}98 </Button>99 </form>100 </Form>101)102```103104### Styling105106* Use `text-blue-link` for styling any simple `<a>` tags107
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| iloveitaly/llm-ide-rules.cursor/rules/python.mdc · 13 | Cursor rules | setupstyletypesdo-not | 88/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/alembic-migrations.mdc · 13 | Cursor rules | no sections | 50/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/fastapi.mdc · 13 | Cursor rules | no sections | 24/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/general.mdc · 13 | Cursor rules | teststyledo-notagent-behaviour+1 | 92/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/justfiles.mdc · 13 | Cursor rules | do-not | 31/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/pytest-integration-tests.mdc · 13 | Cursor rules | teststyletesting-strategy | 73/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/pytest-tests.mdc · 13 | Cursor rules | testarchtesting-strategyapi+1 | 61/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/python-app.mdc · 13 | Cursor rules | styledatabasedocs | 61/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/python-route-tests.mdc · 13 | Cursor rules | api | 24/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/react-router.mdc · 13 | Cursor rules | testing-strategy | 57/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/shell.mdc · 13 | Cursor rules | no sections | 4/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.cursor/rules/typescript.mdc · 13 | Cursor rules | styletypessecurity | 63/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/copilot-instructions.md · 13 | Copilot instructions | teststyledo-notagent-behaviour+1 | 92/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/alembic-migrations.instructions.md · 13 | Copilot instructions | no sections | 50/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/fastapi.instructions.md · 13 | Copilot instructions | no sections | 16/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/justfiles.instructions.md · 13 | Copilot instructions | do-not | 31/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/pytest-integration-tests.instructions.md · 13 | Copilot instructions | teststyletesting-strategy | 65/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/pytest-tests.instructions.md · 13 | Copilot instructions | testarchtesting-strategyapi+1 | 53/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/python-app.instructions.md · 13 | Copilot instructions | styledatabasedocs | 61/100 | 14 days ago | |
| iloveitaly/llm-ide-rules.github/instructions/python-route-tests.instructions.md · 13 | Copilot instructions | api | 16/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 46 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/cli.mdc · 49 | Cursor rules | setupbuildteststyle+4 | 96/100 | 14 days ago | |
| enuno/unifi-mcp-server.cursor/rules/common-mistakes.mdc · 226 | Cursor rules | testlint-formatgitdo-not | 93/100 | today | |
| iloveitaly/llm-ide-rules.cursor/rules/general.mdc · 13 | Cursor rules | teststyledo-notagent-behaviour+1 | 92/100 | 14 days ago | |
| dotCMS/core.cursor/rules/e2e-rules.mdc · 949 | Cursor rules | setupteststylearch+5 | 89/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/guard-git.mdc · 139 | Cursor rules | stylearchgitsecurity+2 | 89/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/iloveitaly-llm-ide-rules-cursor-rules-react)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.