remix
Skill15 starsChanged 42 days agoMITView on GitHub
Expert Remix (React Router v7) assistance covering Loaders, Actions, nested routing, optimistic UI, and Web Fetch standards. Use when developing resilient, full-stack React web applications.
7 other projects use a version of this.
Adopted by
Most recently taken up by
- SigmaMatrix-AI/tapvidtheir own version, first seen Nov 8, 2026
- vrodokanakis/claude-skillstheir own version, first seen Oct 25, 2026
- Mindrally/skillstheir own version, first seen Oct 8, 2026
- paean-ai/deeptidetheir own version, first seen Oct 8, 2026
- remix-run/remixtheir own version, first seen Oct 8, 2026
- authdog/agent-skillstheir own version, first seen Sep 18, 2026
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- remix-run/remix★ 33ksame name
- paean-ai/deeptide★ 1.1ksame name
- Mindrally/skills★ 275same name
- basezh/agent-skills-on-base★ 15same name
- SigmaMatrix-AI/tapvid★ 4same name
- authdog/agent-skills★ 0same name
- vrodokanakis/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository350 other files it gives its agents.
- airflowSkill
- catboostSkill
- claudeSkill
- comfyuiSkill
- cursor-aiSkill
- dalleSkill
- daskSkill
- dbtSkill
- deepseekSkill
- fastaiSkill
- geminiSkill
- github-copilotSkill
- huggingfaceSkill
- jaxSkill
- jupyterSkill
- kerasSkill
- langchainSkill
- lightgbmSkill
- llamaindexSkill
- llamaSkill
- matplotlibSkill
- midjourneySkill
- mistralSkill
- mlflowSkill
- nltkSkill
- numpySkill
- ollamaSkill
- openai-gptSkill
- opencvSkill
- pandasSkill
- perplexitySkill
- plotlySkill
- polarsSkill
- pytorchSkill
- raySkill
- scikit-learnSkill
- seabornSkill
- spacySkill
- sparkSkill
- stable-diffusionSkill
- tensorflowSkill
- vaexSkill
- weights-biasesSkill
- whisperSkill
- xgboostSkill
- api-gatewaySkill
- clean-architectureSkill
- cqrsSkill
- domain-driven-designSkill
- event-drivenSkill
- event-sourcingSkill
- graphqlSkill
- grpcSkill
- hexagonalSkill
- microservicesSkill
- modular-monolithSkill
- monolithSkill
- rest-apiSkill
- sagaSkill
- serverlessSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 1 is distinctive, and 2 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 149
Use Remix loaders and actions for declarative data synchronization:
- Very specific: line 195
Use useFetcher for mutations that do not require full page navigation (e.g.
- Very specific: line 201
Use client-side useEffect for data fetching when loader functions exist.
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Remix
Remix is a full-stack web framework built on web standards (Fetch API, Request/Response), providing nested routing, resilient form mutations, and seamless Vite integration.
When to Use
- Web Standards-First Full-Stack Applications: Utilizing standard
Request,Response, and HTML forms via Remix / React Router v7. - High-Performance Server-Rendered Applications: Instant page transitions with nested routing and parallel data loading.
- Resilient Web Apps with Progressive Enhancement: Applications that function reliably before JavaScript has loaded.
- Optimistic UI & Mutation Heavy Interfaces: Using
useFetcherand server actions without bespoke client state machines.
Quick Start
import { json } from "@remix-run/node";
import { useLoaderData, Form } from "@remix-run/react";
// Functions run on server
export async function loader() {
return json(await db.getTasks());
}
export async function action({ request }) {
const formData = await request.formData();
await db.createTask(formData.get("title"));
return json({ ok: true });
}
// Component runs on Client + Server
export default function Tasks() {
const tasks = useLoaderData<typeof loader>();
return (
<Form method="post">
<input name="title" />
<button>Add</button>
</Form>
);
}Core Concepts
Nested Routing & Parallel Loader Data Loading
Fetching server-side data per route segment in parallel:
// app/routes/users.$id.tsx
import { json, type LoaderFunctionArgs } from "@remix-run/node";
import { useLoaderData, Link } from "@remix-run/react";
export async function loader({ params }: LoaderFunctionArgs) {
const userId = params.id;
const user = await db.user.findUnique({ where: { id: userId } });
if (!user) {
throw new Response("User Not Found", { status: 404 });
}
return json({ user });
}
export default function UserDetailRoute() {
const { user } = useLoaderData<typeof loader>();
return (
<div className="user-card">
<h2>{user.name}</h2>
<p>{user.email}</p>
<Link to="edit">Edit Profile</Link>
</div>
);
}Route Actions & HTML Form Submission
Standard HTTP POST handling with automatic revalidation:
// app/routes/users.$id.edit.tsx
import { redirect, type ActionFunctionArgs } from "@remix-run/node";
import { Form, useActionData } from "@remix-run/react";
export async function action({ request, params }: ActionFunctionArgs) {
const formData = await request.formData();
const name = formData.get("name") as string;
if (!name || name.length < 3) {
return { error: "Name must be at least 3 characters" };
}
await db.user.update({ where: { id: params.id }, data: { name } });
return redirect(`/users/${params.id}`);
}
export default function EditUserRoute() {
const actionData = useActionData<typeof action>();
return (
<Form method="post">
<input name="name" placeholder="Full Name" />
{actionData?.error && <span className="error">{actionData.error}</span>}
<button type="submit">Update</button>
</Form>
);
}Granular ErrorBoundaries per Route Segment
Isolating errors without crashing the entire page hierarchy:
import { isRouteErrorResponse, useRouteError } from "@remix-run/react";
export function ErrorBoundary() {
const error = useRouteError();
if (isRouteErrorResponse(error)) {
return (
<div className="route-error">
<h1>
{error.status} {error.statusText}
</h1>
<p>{error.data}</p>
</div>
);
}
return (
<div className="route-error">Unexpected application error occurred.</div>
);
}Common Patterns
Loader and Action Data Cycle
Problem: Managing separate state stores, loading states, and error handling for form submissions.
Solution: Use Remix loaders and actions for declarative data synchronization:
import {
json,
type LoaderFunctionArgs,
type ActionFunctionArgs,
} from "@remix-run/node";
import { useLoaderData, Form } from "@remix-run/react";
export async function loader({ request }: LoaderFunctionArgs) {
const todos = await db.todos.findMany();
return json({ todos });
}
export async function action({ request }: ActionFunctionArgs) {
const formData = await request.formData();
await db.todos.create({ title: formData.get("title") });
return json({ ok: true });
}
export default function TodosPage() {
const { todos } = useLoaderData<typeof loader>();
return (
<div>
<Form method="post">
<input name="title" required />
<button type="submit">Add Todo</button>
</Form>
<ul>
{todos.map((t) => (
<li key={t.id}>{t.title}</li>
))}
</ul>
</div>
);
}Best Practices
Do:
- Leverage Remix / React Router v7 unified framework features for universal full-stack execution.
- Build mutations with native
<Form>components to guarantee progressive enhancement. - Co-locate
loader,action, and component in the same route file for atomic cohesion. - Use
useFetcherfor mutations that do not require full page navigation (e.g. upvotes, inline toggles).
Don't:
- Manage client cache state manually; Remix automatically revalidates loader data after actions.
- Return huge, unneeded relational payloads from loaders; return lean, serialized data.
- Use client-side
useEffectfor data fetching whenloaderfunctions exist.
Troubleshooting
| Error | Cause | Solution |
Error: You must return a Response from loader/action | Loader or action did not return a value or returned undefined. | Return json({ data }) or new Response(...). |
Form data empty in action | Form inputs missing name attribute. | Ensure every <input> inside <Form> has a unique name attribute. |
Root boundary caught error | Unhandled error in child route without local ErrorBoundary. | Export ErrorBoundary component in route to catch local exceptions. |
References
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

