--- name: Admin CRUD Page description: Create admin dashboard pages with tables, forms, and actions --- # Admin CRUD Page Pattern Use this skill when creating admin pages for managing entities. ## When to Use - Adding a new admin section (e.g., /admin/[feature]) - Creating admin list pages with tables and row actions - Creating admin edit/create forms with headers **Note:** For general page patterns (forms, filters, pagination, remote functions), see [page-builder](../page-builder/SKILL.md). ## Route Structure Admin routes live in `src/routes/(admin)/admin/`: ``` src/routes/(admin)/admin/ └── [feature]/ ├── +page.svelte # List page (pure renderer) ├── data.remote.ts # Remote functions (all logic here) ├── [id]/ │ └── +page.svelte # Edit page └── new/ └── +page.svelte # Create page (optional) ``` > **IMPORTANT: Never use `+page.server.ts`** > > This project uses Remote Functions exclusively for server-side logic. All data loading, form handling, and mutations must go through `.remote.ts` files. Never create `+page.server.ts`, `+server.ts`, or use SvelteKit form actions. ## Admin-Specific Components | Component | Purpose | Import | | ------------------- | ----------------------------------------------- | ---------------------------------------- | | `PageHeader` | Page title with icon and actions | `$lib/ui/admin/PageHeader.svelte` | | `Table` | Data table with snippets for header/row/actions | `$lib/ui/admin/Table.svelte` | | `AdminList` | Simple wrapper with title and "New" button | `$lib/ui/admin/AdminList.svelte` | | `StatusSelect` | Status filter dropdown | `$lib/ui/admin/StatusSelect.svelte` | | `TypeSelect` | Content type filter | `$lib/ui/admin/TypeSelect.svelte` | | `Badge` | Status/type badges | `$lib/ui/admin/Badge.svelte` | | `Actions` | Row action buttons (edit, delete, custom) | `$lib/ui/admin/Actions` | | `ContentPicker` | Select related content | `$lib/ui/admin/ContentPicker.svelte` | | `QuickAction` | Dashboard quick action cards | `$lib/ui/admin/QuickAction.svelte` | | `ConfirmWithDialog` | Confirmation dialog wrapper | `$lib/ui/admin/ConfirmWithDialog.svelte` | ## Quick Start ### List Page ```svelte
| Name | Status | {/snippet} {#snippet row(item, classes)}{item.name} | {item.status} | {/snippet} {#snippet actionCell(item)}
|---|