Skip to content

SvelteKit + Supabase + Tailwind rules for AI coding agents

Full stack: SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation

Ready-to-commit rules for SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation 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. SvelteKit with Svelte 5 runes, Tailwind and Supabase.

Last reviewed 2026-10-21 · Customise in the generator · Raw: AGENTS.md, CLAUDE.md

The mistake agents make most on this stack

Agents write Svelte 4 syntax (`export let`, `$:`) because most training data predates runes.

Generated files

AGENTS.md
# AGENTS.md - this project

Instructions for AI coding agents working in this repository.

## Project

A SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation project.

Stack: SvelteKit (Svelte 5), Tailwind CSS v4, Supabase, Zod validation.

## Commands

- Dev server: `npm run dev`
- Build: `npm run build`
- Type check: `npm run check`
- New migration: `npx supabase migration new <name>`
- Generate TS types: `npx supabase gen types typescript --local > types/supabase.ts`

## Project structure

- Routes in `src/routes/` (`+page.svelte`, `+page.server.ts`, `+layout.svelte`, `+server.ts`).
- Shared code in `src/lib/` (import as `$lib/...`), server-only code in `src/lib/server/`.

## 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.

## SvelteKit (Svelte 5)

- Use Svelte 5 runes: `$state`, `$derived`, `$effect`, `$props`. Do not use legacy `export let` or `$:` syntax in new code.
- Prefer `$derived` over `$effect` for computed values. Use `$effect` only for real side effects.
- Load data in `+page.server.ts` / `+layout.server.ts` `load` functions, not in `onMount`.
- Handle form submissions with form actions and `use:enhance`.
- Read secrets from `$env/static/private` or `$env/dynamic/private`, only in server files.
- Use `error()` and `redirect()` from `@sveltejs/kit` for control flow in load functions and actions.

## 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.

## Zod validation

- Validate all untrusted input (request bodies, form data, env vars, third-party API responses) with a Zod schema at the boundary.
- Derive TypeScript types from schemas with `z.infer<typeof schema>`; do not hand-write duplicate types.
- Use `safeParse` where you need to return validation errors to the user.

## Reference docs

- [SvelteKit docs](https://svelte.dev/docs/kit)
- [Svelte 5 runes](https://svelte.dev/docs/svelte/what-are-runes)
- [Tailwind CSS docs](https://tailwindcss.com/docs)
- [Supabase docs](https://supabase.com/docs)
- [Zod docs](https://zod.dev)

Commands your agent should run

TaskCommand
Dev servernpm run dev
Buildnpm run build
Type checknpm run check
New migrationnpx supabase migration new <name>
Generate TS typesnpx supabase gen types typescript --local > types/supabase.ts

What the rules cover

SvelteKit (Svelte 5)

SvelteKit with Svelte 5 runes and TypeScript. Scoped to src/**/*.svelte, src/**/*.ts in Cursor, Copilot and Windsurf.

  • Use Svelte 5 runes: $state, $derived, $effect, $props. Do not use legacy export let or $: syntax in new code.
  • Prefer $derived over $effect for computed values. Use $effect only for real side effects.
  • Load data in +page.server.ts / +layout.server.ts load functions, not in onMount.
  • Handle form submissions with form actions and use:enhance.
  • Read secrets from $env/static/private or $env/dynamic/private, only in server files.
  • Use error() and redirect() from @sveltejs/kit for control flow in load functions and actions.

Source docs: SvelteKit docs, Svelte 5 runes

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 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.

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() (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.

Source docs: Supabase docs

Zod validation

Runtime schema validation with Zod. Scoped to **/*.ts, **/*.tsx in Cursor, Copilot and Windsurf.

  • Validate all untrusted input (request bodies, form data, env vars, third-party API responses) with a Zod schema at the boundary.
  • Derive TypeScript types from schemas with z.infer<typeof schema>; do not hand-write duplicate types.
  • Use safeParse where you need to return validation errors to the user.

Source docs: Zod docs

How to install

  1. Copy AGENTS.md to your repo root. That covers Codex, Cursor, GitHub Copilot and most other agents.
  2. Using Claude Code? Add a CLAUDE.md with the single line @AGENTS.md, or use the standalone CLAUDE.md tab above.
  3. Want rules that only load for certain files in Cursor? Add the .cursor/rules/*.mdc files.
  4. Commit the files so your whole team (and every agent) shares them.

FAQ

Where do I put the AGENTS.md for SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation?

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 SvelteKit (Svelte 5)?

Agents write Svelte 4 syntax (export let, $:) because most training data predates runes.

Which commands should the agent run to check its work?

For this stack: npm run dev, npm run build, npm run check, npx supabase migration new <name>. They are listed in the generated files so the agent runs them before finishing a task.

Do these SvelteKit (Svelte 5) + Tailwind CSS v4 + Supabase + Zod validation 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