Nuxt4-test
CLAUDE.md0 starsChanged 8 months agoMITView on GitHub
- Reads credentials
In this repository10 other files it gives its agents.
- design-componentSkill
- new-componentSkill
- new-composableSkill
- new-gql-operationSkill
- new-migrationSkill
- new-quill-fieldSkill
- new-resolverSkill
- new-server-routeSkill
- new-settings-storeSkill
- new-storeSkill
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
13 rules. About 0 are common, 0 are distinctive, and 13 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 24
Never use Options API — always <script setup lang="ts">
- Very specific: line 25
Never use any — use unknown and narrow
- Very specific: line 26
Never hardcode connection strings — use process.env on the server.
- Very specific: line 27
Never use raw Tailwind colors (text-blue-500) — semantic only (text-foreground, bg-card, etc.)
- Very specific: line 28
Never create tailwind.config.js — Tailwind v4 is CSS-only
- Very specific: line 29
Always use cn() from ~/lib/utils for class merging
- Very specific: line 30
Always wrap Quill in <ClientOnly>, sanitize HTML before storing (sanitize-html)
- Very specific: line 31
Always protect server routes/resolvers with requireSession(event)
- Very specific: line 32
Always namespace localStorage keys with settings:
- Very specific: line 33
Always run npm run codegen after changing a GQL schema file
- Very specific: line 34
Always run npm run db:generate after changing a Drizzle schema file
- Very specific: line 35
Prefer Drizzle returning() over a second select after insert/update
- Very specific: line 53
Add shadcn-vue: npx shadcn-vue@latest add <component> → app/components/ui/
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md
Stack
Vue 3 + Vite SPA · H3 standalone server · GraphQL Yoga (/api/graphql) · Drizzle ORM + postgres.js · reka-ui + shadcn-vue · Tailwind v4 (no config file) · Pinia · iron-session · vue-i18n · GraphQL Codegen
E2E Type Chain — never break this
Drizzle schema → GQL schema → Codegen → Vue — app/types/gql.ts is auto-generated, never edit manually. Never write manual types for DB or GQL responses.
Folder Structure
app/= srcDir (~alias).server/at project root (~~alias).- Components:
app/components/ui/(shadcn-vue),app/components/editor/(Quill, client-only) - Stores:
app/stores/· Composables:app/composables/· Pages:app/pages/ - Router:
app/router/index.ts(vue-router, manually configured) - i18n setup:
app/i18n/index.ts· Locale files:i18n/locales/{en,nl}.json - DB:
server/db/schema/*.ts· GQL schema:server/graphql/schema/· Resolvers:server/graphql/resolvers/ - Session lib:
server/lib/session.ts(iron-session wrapper)
Naming
- Components:
PascalCase.vue· Composables:useXxx.ts· Stores/routes/schema/resolvers:camelCase.ts/kebab-case.ts - DB tables:
snake_caseplural · columns:snake_case· Drizzle vars:camelCase - GQL types:
PascalCase· queries:camelCase· mutations: verb-firstcamelCase· inputs:PascalCaseInput
Rules
- Never use Options API — always
<script setup lang="ts"> - Never use
any— useunknownand narrow - Never hardcode connection strings — use
process.envon the server; Vite auto-imports handle the client - Never use raw Tailwind colors (
text-blue-500) — semantic only (text-foreground,bg-card, etc.) - Never create
tailwind.config.js— Tailwind v4 is CSS-only - Always use
cn()from~/lib/utilsfor class merging - Always wrap Quill in
<ClientOnly>, sanitize HTML before storing (sanitize-html) - Always protect server routes/resolvers with
requireSession(event) - Always namespace localStorage keys with
settings: - Always run
npm run codegenafter changing a GQL schema file - Always run
npm run db:generateafter changing a Drizzle schema file - Prefer Drizzle
returning()over a second select after insert/update - Pinia: always setup store syntax, never options syntax
- i18n: always
useI18n(), never hardcode strings. Escape@as{'@'}in locale values
Auth
- Client:
const { user, loggedIn, isAdmin, logout } = useAuth()— wrapsuseAuthStore() - Server guard:
await requireSession(event)— from~/lib/session
Colors (semantic only)
bg-background · bg-card · text-foreground · text-muted-foreground · border-border · bg-primary / text-primary (action blue) · text-primary-foreground · bg-accent · text-destructive · ring-ring/30
Design System
Always read design-system.md before generating any component or page.
- Fonts:
font-serifheadings ·font-sansUI ·font-monocode - Spacing: 4px base, multiples only
- Borders:
border border-borderon all cards - Radius:
rounded-sminputs ·rounded-mdbuttons/cards - Buttons:
solid/outline/ghost— onesolidper view max - Add shadcn-vue:
npx shadcn-vue@latest add <component>→app/components/ui/ - UI with design: use
/design-component· Structure only: use/new-component
Commands
npm run dev # Vite + H3 + codegen:watch (combined)
npm run build # lint → codegen → typecheck → build
npm run codegen # generate GQL types
npm run db:generate # generate Drizzle migration
npm run db:migrate # run migrations
npm run db:setup # generate + migrate
npm run db:studio # Drizzle Studio
npm run lint # lint + fix
npm run typecheck # vue-tscEnv vars (never commit, keep in .env.example)
DATABASE_URL · NUXT_SESSION_PASSWORD (min 32 chars, read by iron-session) · NUXT_OAUTH_GITHUB_CLIENT_ID · NUXT_OAUTH_GITHUB_CLIENT_SECRET · NUXT_PUBLIC_APP_NAME · PORT
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.

