react-router-v7-patterns

react-router-v7-patterns is a cursor rule for Cursor from CharLEE-X/effect-cursor-rules. It costs 0 tokens per session (3,047 once invoked), scanned A, original, MIT.

A set of rules for organizing applications with React Router v7, a library for mapping web addresses to pages and loading their data. It also covers patterns inherited from Remix, a related web framework.

In plain words
What is it for?
Use it when structuring route folders, page and API endpoints, layouts, loaders, and related components in a React application.
Why use it?
It helps keep page routes, API routes, layouts, and data loading organized as an application grows.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Good fit Use it when structuring route folders, page and API endpoints, layouts, loaders, and related components in a React application.

Compare 6 cursor rules from other repositories ↓
Install with agentmods
npx agentmods add rules/charlee-x/effect-cursor-rules/react-router-v7-patterns
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/CharLEE-X/effect-cursor-rules

Made for: Cursor.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for react-router-v7-patterns

README.md
[![agentmods](https://agentmods.dev/badge/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns/github.svg)](https://agentmods.dev/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns)
Your own site
<a href="https://agentmods.dev/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns"><img src="https://agentmods.dev/badge/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for react-router-v7-patterns

Your own site · 80×15
<a href="https://agentmods.dev/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns"><img src="https://agentmods.dev/badge/rules/charlee-x/effect-cursor-rules/react-router-v7-patterns.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Nothing until a file matches its globs; then the whole rule loads.
When invoked 3,047 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.03047
Opus 5.5 $0.00000 $0.01219
Sonnet 5.5 $0.00000 $0.00609
Haiku 4.5 $0.00000 $0.00305

Measured 1mo ago against content hash e72ba7e0d1d9, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

react-router-v7-patterns scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

rules/react-router-v7-patterns.mdc · 478 lines

How it starts

The opening of the file, as written. The whole thing — 478 lines — stays where its author put it; the contents beside it link to each section on GitHub.

React Router v7 (Remix) Best Practices

Overview

React Router v7 is the evolution of Remix, providing server-side rendering, data loading, and modern routing patterns. Follow these patterns for optimal performance and user experience.

Route Structure and Organization

✅ CORRECT Route Organization

// apps/frontend/src/routes/
├── _layout.tsx                    // Root layout
├── _auth.tsx                      // Auth layout
├── page/
│   ├── index/                     // Home page
│   │   ├── route.tsx             // Main route file
│   │   ├── featured-blogs.tsx    // Page components
│   │   └── hero.tsx
│   └── about/
│       └── route.tsx
├── api/
│   ├── auth/
│   │   └── login.tsx             // API routes
│   └── blog/
│       └── featured.tsx
└── ui/
    ├── blog/
    │   └── route.tsx             // UI routes
    └── profile/
        └── route.tsx

❌ WRONG Route Organization

// Don't mix concerns in single files
├── routes/
│   ├── everything-in-one-file.tsx  // Too much in one file
│   ├── random-structure/           // Inconsistent naming
│   └── no-clear-separation/        // Mixed API and UI routes

Data Loading Patterns

✅ CORRECT Loader Implementation

// route.tsx
import { LoaderFunctionArgs } from 'react-router'
import { BlogPostService } from '~/.server/services/BlogPostService'
import { E } from '~/lib/effect'

export const loader = async ({ request }: LoaderFunctionArgs) => {
  const url = new URL(request.url)
  const page = Number(url.searchParams.get('page')) || 1
  
  // Use Effect-TS for data loading
  const featuredBlogPostsPromise = E.runPromise(
    BlogPostService.getFeaturedBlogPosts({ page, limit: 6 }).pipe(
      E.provide(BlogPostService.Default)
    )
  )
  
  return {
    featuredBlogPostsPromise,
    meta: {
      title: 'T6C - Motorcycle Community',
      description: 'Join the ultimate motorcycle building community'
    }
  }
}

// Component using the data
export default function HomePage() {
  const { featuredBlogPostsPromise } = useLoaderData<typeof loader>()
  
  return (
    <div>
      <Suspense fallback={<LoadingSkeleton />}>
        <Await 
          resolve={featuredBlogPostsPromise}
          errorElement={<ErrorComponent />}
        >
          {(data) => <FeaturedBlogs data={data} />}
        </Await>
      </Suspense>
    </div>
  )
}

Read the full file on GitHub · 478 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 478 lines · 3,047 tokens per session scan A e72ba7e0d1d9

Subscribe to this mod's changes

react-router-v7-patterns is a cursor rule published in the GitHub repository CharLEE-X/effect-cursor-rules (6 stars, last pushed 1y ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,047 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.