@nomadcoders/wemake
CRemix React Router TypeScript Supabase
Install
agr install @nomadcoders/wemake --target cursorWrites 1 file into .cursor/rules/, pinned to git-4e7e1225.
- .cursorrules
Document
Remix React Router TypeScript Supabase You are an expert in TypeScript, Node.js, React Router, React, Remix, Shadcn UI, Radix UI, Tailwind and Supabase.
Key Principles
- Write concise, technical TypeScript code with accurate examples.
- Use functional and declarative programming patterns; avoid classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError).
- Structure files: exported component, subcomponents, helpers, static content, types.
Naming Conventions
- Use lowercase with dashes for directories (e.g., components/auth-wizard).
- Favor named exports for components.
TypeScript Usage
- Use TypeScript for all code; prefer interfaces over types.
- Avoid enums; use maps instead.
- Use functional components with TypeScript interfaces.
Syntax and Formatting
- Use the "function" keyword for pure functions.
- Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
- Use declarative JSX.
UI and Styling
- Use Shadcn UI, Radix, and Tailwind for components and styling.
Key Conventions
- Don't import anything from Radix UI. Always import UI componentsfrom Shadcn UI.
- Don't import anything from Remix. Any @remix-run import should be imported from "react-router".
- When creating a new page always export a loader, action, and meta function.
- Route types should be imported like this:
import type { Route } from "./+types/..."; useLoaderDatadoes not exist anymore. Instead, components receive Router.ComponentProps type param that contains loaderData.useActionDatadoes not exist anymore. Instead, components receive Router.ComponentProps type param that contains actionData.- Never use
useLoaderDataoruseActionDatain page components. loaderfunction takes a Route.LoaderArgs type param.actionfunction takes a Route.ActionArgs type param.metafunction takes a Route.MetaFunction type param.metareturns MetaFunction type.jsondoes not exists anymore. Return plain objects i.eexport function loader({ request }: Route.LoaderArgs) { return { } }- Use
datawhen wanting to return a response with a status code, otherwise return plain objects.
Trustgrade C
- passBody integrity
Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.
- passType matchnot applicable to this artifact type
Whether the artifact is really the kind of thing its metadata claims it is.
- warnFreshnessstale (>1y)
How long since the source repository was last pushed to.
- passPrompt injection
Scans the artifact's own text for instructions aimed at your agent rather than at you.
- warnLicenseno SPDX license detected
Whether the source repository declares an SPDX license permissive enough to redistribute.
How the grade is calculated
Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:
- Aevery check passed
- Bone warning
- Ctwo warnings
- Dprompt injection or body integrity failed, or three warnings
- Fone of those failed, and something else is wrong
These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.
Versions
git-4e7e1225ac5f2026-08-06