page-builder
Provides universal, remote-first patterns for list and detail page construction.
Install
mkdir -p .claude/skills/page-builder && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5672" && unzip -o skill.zip -d .claude/skills/page-builder && rm skill.zipInstalls to .claude/skills/page-builder
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Patterns for building list and detail pages with forms, filters, and data fetchingKey capabilities
- →Implement list pages with filtering and search
- →Build detail pages with form initialization
- →Map data types to UI components
- →Handle auto-submit filter forms
- →Manage pagination for data feeds
How it works
It uses a remote-first pattern where data fetching logic is separated from pure Svelte renderers.
Inputs & outputs
When to use page-builder
- →Create a searchable list page with pagination
- →Build a detail page with an edit form
- →Map mixed data types to specific UI components
About this skill
Page Builder Patterns
Universal patterns for building pages. These apply to both public-facing and admin pages.
When to Use
- Building list pages with filtering, search, pagination
- Building detail/edit pages with forms
- Rendering mixed-type feeds or lists
- Any page that fetches and displays data
Core Principle
Remote-First: Put logic in data.remote.ts, keep pages as pure renderers.
See using-remote-functions/REMOTE-FIRST.md for the full pattern.
Page Types
| Type | Purpose | Reference |
|---|---|---|
| List Page | Display items with filters/search | LIST-PAGE.md |
| Detail Page | View/edit single item with form | DETAIL-PAGE.md |
| Feed Page | Mixed-type items with components | FEED-PAGE.md |
Route Structure
src/routes/
└── [section]/
├── +page.svelte # List page
├── data.remote.ts # Remote functions (queries, forms)
└── [slug]/
└── +page.svelte # Detail page
Key Patterns
1. Component Mapping
Map data types to components for clean rendering:
<script>
const components = new Map([
['article', ArticleCard],
['video', VideoCard],
['cta', CTABanner]
])
</script>
{#each items as item, index (index)}
{@const Component = components.get(item.type)}
<Component {...item.props} />
{/each}
2. Filter Forms (Auto-Submit)
Native forms that update URL params on input:
<script>
let form: HTMLFormElement
function submitForm() { form.requestSubmit() }
function debouncedSubmit() {
clearTimeout(timer)
timer = setTimeout(submitForm, 300)
}
</script>
<form bind:this={form}>
<input name="search" oninput={debouncedSubmit} />
<select name="status" onchange={submitForm} />
</form>
3. Form Initialization
Populate forms with existing data:
<script>
import { initForm } from '$lib/utils/form.svelte'
initForm(updateItem, () => ({
id: item.id,
name: item.name ?? '',
status: item.status ?? 'draft'
}))
</script>
4. Pagination
<script>
import Pagination from '$lib/ui/Pagination.svelte'
</script>
<Pagination count={totalItems} perPage={20} />
Form Components
| Component | Purpose |
|---|---|
Input | Text, email, password inputs with validation |
Textarea | Multi-line text with validation |
Select | Dropdown with options |
Checkbox | Boolean toggle |
All accept:
label- Field labeldescription- Helper textissues- Validation errors fromfield.issues()...rest- Spread fromfield.as('type')
Remote Function Patterns
Query with Filters
const filtersSchema = z.object({
search: z.string().catch(''),
status: z.string().catch(''),
page: z.number().catch(1)
})
export const getItems = query('unchecked', async (searchParams: URLSearchParams) => {
const { locals } = getRequestEvent()
const filters = parseSearchParams(filtersSchema, searchParams)
return locals.service.getFiltered(filters)
})
Form with Validation
export const updateItem = form(
z.object({
id: z.string(),
name: z.string().min(1, 'Required'),
status: z.enum(['draft', 'published'])
}),
async (data) => {
const { locals } = getRequestEvent()
await locals.service.update(data.id, data)
return { success: true }
}
)
Reference Files
- LIST-PAGE.md - Full list page patterns
- DETAIL-PAGE.md - Form and detail patterns
- FEED-PAGE.md - Mixed-type feed rendering
When not to use it
- →When building static pages without data fetching
Limitations
- →Requires Svelte framework
- →Dependent on remote function patterns
How it compares
It enforces a strict separation between data fetching and presentation compared to monolithic page development.
Compared to similar skills
page-builder side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| page-builder (this skill) | 1 | 7mo | No flags | Intermediate |
| svelte-ui-design | 23 | 9mo | No flags | Intermediate |
| worklog-design | 0 | 2mo | No flags | Advanced |
| tanstack-form | 16 | 2mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by svelte-society
View all by svelte-society →You might also like
svelte-ui-design
XIYO
ALWAYS use this skill for ANY Svelte component styling, design, or UI work. Svelte 5 UI design system using Tailwind CSS 4, Skeleton Labs design tokens/presets/Tailwind Components, and Bits UI headless components. Covers class composition, color systems, interactive components, forms, overlays, and all visual design.
worklog-design
regisx001
>
tanstack-form
exceptionless
TanStack Form with Zod validation in Svelte 5. Form state management, field validation, error handling, and ProblemDetails integration. Keywords: TanStack Form, createForm, Field, form validation, zod schema, form errors, onSubmit, onSubmitAsync, problemDetailsToFormErrors
tanstack-query
exceptionless
Data fetching and caching with TanStack Query in Svelte. Query patterns, mutations, cache invalidation, WebSocket-driven updates, and optimistic updates. Keywords: createQuery, createMutation, TanStack Query, query keys, cache invalidation, optimistic updates, refetch, stale time, @exceptionless/fetchclient, WebSocket
svelte
EpicenterHQ
Svelte 5 patterns including TanStack Query mutations, shadcn-svelte components, and component composition. Use when writing Svelte components, using TanStack Query, or working with shadcn-svelte UI.
svelte-migrate
temporalio
Migrate a Svelte 4 component to Svelte 5 runes syntax. Use when asked to migrate, convert, or upgrade a .svelte file to Svelte 5.