diff --git a/src/routes/README.md b/src/routes/README.md
new file mode 100644
index 0000000..441a4e8
--- /dev/null
+++ b/src/routes/README.md
@@ -0,0 +1,21 @@
+# Routes
+
+TanStack Start uses **file-based routing**. Every `.tsx` file in this directory
+defines a route. Do **not** create `src/pages/`, `src/routes/_app/index.tsx`, or
+`app/layout.tsx` — those are Next.js / Remix conventions. The only root layout
+is `src/routes/__root.tsx`.
+
+## Conventions
+
+| File | URL |
+| --- | --- |
+| `index.tsx` | `/` |
+| `about.tsx` | `/about` |
+| `users/index.tsx` | `/users` |
+| `users/$id.tsx` | `/users/:id` (dynamic — bare `$`, no curly braces) |
+| `posts/{-$category}.tsx` | `/posts/:category?` (optional segment) |
+| `files/$.tsx` | `/files/*` (splat — read via `_splat` param, never `*`) |
+| `_layout.tsx` | layout route (renders children via ``) |
+| `__root.tsx` | app shell — wraps every page; preserve `` |
+
+`routeTree.gen.ts` is auto-generated. Don't edit it by hand.