Nuxt + Supabase + Tailwind rules for AI coding agents
Full stack: Nuxt (Vue 3) + Tailwind CSS v4 + Supabase
Ready-to-commit rules for Nuxt (Vue 3) + Tailwind CSS v4 + Supabase in every major format: AGENTS.md (Codex, Cursor, Copilot), CLAUDE.md (Claude Code), Cursor .mdc project rules, legacy .cursorrules, Copilot instructions, Windsurf rules and GEMINI.md. Nuxt with Supabase auth and Postgres.
Last reviewed 2026-10-21 · Customise in the generator · Raw: AGENTS.md, CLAUDE.md
The Supabase secret key ends up in `runtimeConfig.public`.
Generated files
# AGENTS.md - this project
Instructions for AI coding agents working in this repository.
## Project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## Project structure
- Pages in `pages/`, components in `components/`, composables in `composables/`, API routes in `server/api/`.
- Nuxt 4 moves app code under `app/`; follow the layout the project already uses.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
## Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
## Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
## Reference docs
- [Nuxt docs](https://nuxt.com/docs)
- [Tailwind CSS docs](https://tailwindcss.com/docs)
- [Supabase docs](https://supabase.com/docs)
# CLAUDE.md - this project
Project instructions for Claude Code.
## Project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## Project structure
- Pages in `pages/`, components in `components/`, composables in `composables/`, API routes in `server/api/`.
- Nuxt 4 moves app code under `app/`; follow the layout the project already uses.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
## Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
## Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
## Reference docs
- [Nuxt docs](https://nuxt.com/docs)
- [Tailwind CSS docs](https://tailwindcss.com/docs)
- [Supabase docs](https://supabase.com/docs)
---
description: "Core rules for this project"
alwaysApply: true
---
# this project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
description: "Nuxt (Vue 3) conventions: Nuxt full-stack Vue 3 app with TypeScript."
globs: **/*.vue, server/**/*.ts, composables/**/*.ts, app/**/*.ts
alwaysApply: false
---
# Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
Docs: https://nuxt.com/docs
---
description: "Tailwind CSS v4 conventions: Utility-first styling with Tailwind CSS v4."
globs: **/*.css, **/*.tsx, **/*.vue, **/*.svelte, **/*.astro, **/*.html, **/*.blade.php, **/*.erb
alwaysApply: false
---
# Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
Docs: https://tailwindcss.com/docs
---
description: "Supabase conventions: Postgres, auth and storage from Supabase."
globs: supabase/**, **/supabase/**/*.ts, lib/supabase/**
alwaysApply: false
---
# Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
Docs: https://supabase.com/docs
# Cursor rules - this project
You are an expert Nuxt (Vue 3), Tailwind CSS v4, Supabase engineer working on this codebase. Follow these rules.
## Project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## Project structure
- Pages in `pages/`, components in `components/`, composables in `composables/`, API routes in `server/api/`.
- Nuxt 4 moves app code under `app/`; follow the layout the project already uses.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
## Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
## Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
## Reference docs
- [Nuxt docs](https://nuxt.com/docs)
- [Tailwind CSS docs](https://tailwindcss.com/docs)
- [Supabase docs](https://supabase.com/docs)
# Copilot instructions - this project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
applyTo: "**/*.vue,server/**/*.ts,composables/**/*.ts,app/**/*.ts"
---
# Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
---
applyTo: "**/*.css,**/*.tsx,**/*.vue,**/*.svelte,**/*.astro,**/*.html,**/*.blade.php,**/*.erb"
---
# Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
---
applyTo: "supabase/**,**/supabase/**/*.ts,lib/supabase/**"
---
# Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
---
trigger: always_on
---
# this project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
trigger: glob
globs: **/*.vue, server/**/*.ts, composables/**/*.ts, app/**/*.ts
---
# Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
---
trigger: glob
globs: **/*.css, **/*.tsx, **/*.vue, **/*.svelte, **/*.astro, **/*.html, **/*.blade.php, **/*.erb
---
# Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
---
trigger: glob
globs: supabase/**, **/supabase/**/*.ts, lib/supabase/**
---
# Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
# GEMINI.md - this project
Project context for Gemini CLI.
## Project
A Nuxt (Vue 3) + Tailwind CSS v4 + Supabase project.
Stack: Nuxt (Vue 3), Tailwind CSS v4, Supabase.
## Commands
- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npx nuxi typecheck`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`
## Project structure
- Pages in `pages/`, components in `components/`, composables in `composables/`, API routes in `server/api/`.
- Nuxt 4 moves app code under `app/`; follow the layout the project already uses.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Nuxt (Vue 3)
- Use `<script setup lang="ts">` and the Composition API.
- Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with `useFetch` or `useAsyncData` so it works with SSR. Avoid raw `fetch` inside `onMounted` for page data.
- Server routes go in `server/api/` using `defineEventHandler`; validate bodies with `readValidatedBody`.
- Secrets go in `runtimeConfig` (server-only keys) and env vars. Only `runtimeConfig.public` reaches the browser.
- Use `useState` for SSR-safe shared state or Pinia for larger stores.
## Tailwind CSS v4
- Tailwind v4 is configured in CSS: `@import "tailwindcss";` plus `@theme { ... }` for design tokens. Do not create a `tailwind.config.js` unless the project already has one.
- Use theme tokens (colors, spacing) instead of arbitrary values like `w-[37px]`.
- Build responsive layouts mobile-first with `sm:`, `md:`, `lg:` prefixes.
- Extract repeated class lists into components, not `@apply` chains.
- Support dark mode with the `dark:` variant when the project uses it.
## Supabase
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The `service_role`/secret key bypasses RLS: use it only in trusted server code, never in the client.
- Change the schema with migration files in `supabase/migrations/`, not by clicking in the dashboard.
- On the server, verify the user with `supabase.auth.getUser()` (or `getClaims()`); do not trust `getSession()` alone for authorization.
- In SSR frameworks use `@supabase/ssr` (`createServerClient` / `createBrowserClient`), not the deprecated auth-helpers packages.
- Regenerate database types after each migration and type the client with them.
## Reference docs
- [Nuxt docs](https://nuxt.com/docs)
- [Tailwind CSS docs](https://tailwindcss.com/docs)
- [Supabase docs](https://supabase.com/docs)
Commands your agent should run
| Task | Command |
|---|---|
| Dev server | npm run dev |
| Build | npm run build |
| Type check | npx nuxi typecheck |
| New migration | npx supabase migration new <name> |
| Generate TS types | npx supabase gen types typescript --local > types/supabase.ts |
What the rules cover
Nuxt (Vue 3)
Nuxt full-stack Vue 3 app with TypeScript. Scoped to **/*.vue, server/**/*.ts, composables/**/*.ts, app/**/*.ts in Cursor, Copilot and Windsurf.
- Use
<script setup lang="ts">and the Composition API. - Rely on Nuxt auto-imports for Vue, composables and components; do not add manual imports for them.
- Fetch data with
useFetchoruseAsyncDataso it works with SSR. Avoid rawfetchinsideonMountedfor page data. - Server routes go in
server/api/usingdefineEventHandler; validate bodies withreadValidatedBody. - Secrets go in
runtimeConfig(server-only keys) and env vars. OnlyruntimeConfig.publicreaches the browser. - Use
useStatefor SSR-safe shared state or Pinia for larger stores.
Source docs: Nuxt docs
Tailwind CSS v4
Utility-first styling with Tailwind CSS v4. Scoped to **/*.css, **/*.tsx, **/*.vue, **/*.svelte, **/*.astro, **/*.html, **/*.blade.php, **/*.erb in Cursor, Copilot and Windsurf.
- Tailwind v4 is configured in CSS:
@import "tailwindcss";plus@theme { ... }for design tokens. Do not create atailwind.config.jsunless the project already has one. - Use theme tokens (colors, spacing) instead of arbitrary values like
w-[37px]. - Build responsive layouts mobile-first with
sm:,md:,lg:prefixes. - Extract repeated class lists into components, not
@applychains. - Support dark mode with the
dark:variant when the project uses it.
Source docs: Tailwind CSS docs
Supabase
Postgres, auth and storage from Supabase. Scoped to supabase/**, **/supabase/**/*.ts, lib/supabase/** in Cursor, Copilot and Windsurf.
- Enable Row Level Security on every table and write explicit policies. No table ships without RLS.
- The anon/publishable key is public. The
service_role/secret key bypasses RLS: use it only in trusted server code, never in the client. - Change the schema with migration files in
supabase/migrations/, not by clicking in the dashboard. - On the server, verify the user with
supabase.auth.getUser()(orgetClaims()); do not trustgetSession()alone for authorization. - In SSR frameworks use
@supabase/ssr(createServerClient/createBrowserClient), not the deprecated auth-helpers packages. - Regenerate database types after each migration and type the client with them.
Source docs: Supabase docs
How to install
- Copy
AGENTS.mdto your repo root. That covers Codex, Cursor, GitHub Copilot and most other agents. - Using Claude Code? Add a
CLAUDE.mdwith the single line@AGENTS.md, or use the standalone CLAUDE.md tab above. - Want rules that only load for certain files in Cursor? Add the
.cursor/rules/*.mdcfiles. - Commit the files so your whole team (and every agent) shares them.
FAQ
Where do I put the AGENTS.md for Nuxt (Vue 3) + Tailwind CSS v4 + Supabase?
Save it as AGENTS.md in the root of your repository, next to your main config file. Codex, Cursor and GitHub Copilot pick it up automatically. For Claude Code, add a CLAUDE.md containing @AGENTS.md (or use the standalone CLAUDE.md on this page).
What is the most common mistake AI agents make with Nuxt (Vue 3)?
The Supabase secret key ends up in runtimeConfig.public.
Which commands should the agent run to check its work?
For this stack: npm run dev, npm run build, npx nuxi typecheck, npx supabase migration new <name>. They are listed in the generated files so the agent runs them before finishing a task.
Do these Nuxt (Vue 3) + Tailwind CSS v4 + Supabase rules work with Cursor and Claude Code?
Yes. This page includes the same rules as AGENTS.md, CLAUDE.md, Cursor .mdc project rules, a legacy .cursorrules file, GitHub Copilot instructions, Windsurf rules and GEMINI.md.
Can I customise these rules?
Yes. Open this stack in the generator to add or remove libraries, set your project name and package manager, switch beginner explanations on, and download everything as a zip.
Related stacks
Nuxt (Vue 3) + Tailwind CSS v4 + Zod validation
Nuxt and Vue 3 with Tailwind.
Next.js (App Router) + Tailwind CSS v4 + shadcn/ui + Supabase + Zod validation
The default vibe-coding SaaS stack: Next.js App Router, Supabase for auth and Postgres, Tailwind and shadcn/ui for the interface.
Next.js (App Router) + Tailwind CSS v4 + Supabase + Stripe payments + Zod validation + Vitest
The full indie-hacker SaaS kit: auth, database, payments and tests.
React + Vite + Tailwind CSS v4 + Supabase + Zustand
A client-only React app talking straight to Supabase, popular for quick prototypes and internal tools.
SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation
SvelteKit with Svelte 5 runes, Tailwind and Supabase.
Next.js (App Router) + Tailwind CSS v4
A plain Next.js + TypeScript + Tailwind v4 starter, the most common front-end setup in 2026.