diff --git a/.cursor/rules/page-title.mdc b/.cursor/rules/page-title.mdc
new file mode 100644
index 0000000..c88866d
--- /dev/null
+++ b/.cursor/rules/page-title.mdc
@@ -0,0 +1,21 @@
+---
+description: Page titles must use the page-title class for consistent site-wide styling
+globs: src/routes/**/*.tsx,src/components/**/*Heading*.tsx,src/components/common/status-page/**/*.tsx
+alwaysApply: false
+---
+
+# Page titles
+
+Primary page headings must use the shared `page-title` class from `globals.css` so typography stays consistent across listing and detail pages.
+
+```tsx
+// Prefer
+
Miner Leaderboard
+
+// Avoid
+Miner Leaderboard
+```
+
+- Use on the main route/feature `h1` (one per page).
+- Do not restyle page titles with ad-hoc text size/weight/tracking classes unless intentionally overriding a special case (e.g. status codes use separate display styles).
+- Optional supporting text under the title can use `page-subtitle`.
diff --git a/.cursor/rules/use-bun.mdc b/.cursor/rules/use-bun.mdc
new file mode 100644
index 0000000..53d87bd
--- /dev/null
+++ b/.cursor/rules/use-bun.mdc
@@ -0,0 +1,14 @@
+---
+description: Use Bun as the package manager and script runner
+alwaysApply: true
+---
+
+# Use Bun, not npm
+
+This project uses **Bun** (`bun.lock` / `bun.lockb`). Prefer Bun for all package and script work.
+
+- Install deps: `bun add ` / `bun add -d ` / `bun install`
+- Run scripts: `bun run