.agents/skills/repo-website-guide-create/SKILL.md
Add new documentation guides and tutorials to the Formisch website. Use when creating guides about form concepts, features, or techniques that aren't covered by existing documentation.
npx skillsauth add open-circle/formisch repo-website-guide-createInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides instructions for adding new documentation guides to the Formisch website.
Guides are organized under website/src/routes/{framework}/guides/:
website/src/routes/{framework}/guides/
├── menu.md # Navigation menu
├── layout.tsx # Layout wrapper
├── (category-name)/ # Route group (with parentheses)
│ └── guide-name/ # Individual guide folder
│ └── index.mdx # Guide content
Categories:
(get-started) - Introductory content(main-concepts) - Core library concepts(advanced-guides) - Advanced featuresDetermine the appropriate category:
mkdir -p website/src/routes/{framework}/guides/(category-name)/guide-slug/
{framework} = solid, qwik, preact, svelte, or vue---
title: Guide Title
description: >-
A concise description of what this guide covers.
contributors:
- github-username
---
import { Link } from '~/components';
# Guide Title
Opening paragraph explaining what the reader will learn.
## Section Heading
Content explaining the topic with clear, concise language.
\`\`\`tsx
// Code example with proper framework imports
import { createForm, Field, Form } from '@formisch/solid';
import \* as v from 'valibot';
const Schema = v.object({
email: v.pipe(v.string(), v.email()),
});
export default function Example() {
const form = createForm({ schema: Schema });
return (
<Form of={form}>
<Field of={form} path={['email']}>
{(field) => <input {...field.props} value={field.input} />}
</Field>
</Form>
);
}
\`\`\`
## Another Section
Continue with additional sections as needed.
Add to website/src/routes/{framework}/guides/menu.md:
## Category Name
- [Existing Guide](/{framework}/guides/existing/)
- [New Guide Title](/{framework}/guides/guide-slug/)
---
title: Guide Title
description: >-
Multi-line descriptions use >- syntax.
contributors:
- github-username
---
Use Link component with framework prefix:
import { Link } from '~/components';
See <Link href="/solid/guides/define-your-form/">define your form</Link>.
See <Link href="/solid/api/createForm/">`createForm`</Link>.
tsx for components, ts for utilities@formisch/{framework}import * as v from 'valibot'v.nonEmpty() for non-empty validation (not v.minLength(1))| Framework | API Category | | --------- | ------------ | | Solid | "primitive" | | Qwik | "hook" | | Preact | "hook" | | Vue | "composable" | | Svelte | "rune" |
inline code for API names, variables, files# Introduction
Opening explanation.
## Highlights
Key features with brief descriptions.
## Basic Example
Simple working code.
## Comparison
Advantages over alternatives.
## Next Steps
Links to related guides.
# Define Your Form
Explains what the guide covers.
## Step 1: Create Schema
Explanation with code.
## Step 2: Create Form Store
Explanation with code.
## Common Patterns
Variations and alternatives.
## Related
Links to API docs and other guides.
# Field Arrays
Overview of the feature.
## When to Use
Scenarios where this applies.
## Implementation
Detailed code examples.
## Edge Cases
Special considerations.
## Performance
Optimization tips.
import { createForm, Field, Form, type SubmitHandler } from '@formisch/solid';
import * as v from 'valibot';
const LoginSchema = v.object({
email: v.pipe(v.string(), v.email()),
password: v.pipe(v.string(), v.minLength(8)),
});
export default function LoginPage() {
const loginForm = createForm({
schema: LoginSchema,
});
const handleSubmit: SubmitHandler<typeof LoginSchema> = (output) => {
console.log(output);
};
return (
<Form of={loginForm} onSubmit={handleSubmit}>
<Field of={loginForm} path={['email']}>
{(field) => (
<div>
<input {...field.props} value={field.input} type="email" />
{field.errors && <div>{field.errors[0]}</div>}
</div>
)}
</Field>
<button type="submit" disabled={loginForm.isSubmitting}>
Login
</button>
</Form>
);
}
### Using Field component
\`\`\`tsx
<Field of={form} path={['email']}>
{(field) => <input {...field.props} value={field.input} />}
</Field>
\`\`\`
### Using useField primitive
\`\`\`tsx
const field = useField(form, { path: ['email'] });
return <input {...field.props} value={field.input} />;
\`\`\`
Before submitting:
{framework}/guides/(category)/guide-slug/index.mdxLink component with framework prefixWhen guides include Formisch APIs, verify correct usage:
frameworks/{framework}/src/packages/methods/src/packages/core/src/playgrounds/{framework}/src/development
Update existing API documentation when Formisch source code changes. Use when function signatures, types, interfaces, or JSDoc comments change in the library source.
development
Review and verify API documentation routes on the Formisch website. Use when checking documentation accuracy, completeness, and consistency with source code.
development
Create new API documentation routes for the Formisch website. Use when adding documentation for new exported functions, types, components, or methods that don't yet have website documentation.
development
Navigate the Formisch monorepo structure. Use when finding code locations, understanding architecture, locating source files, or implementing features across packages and frameworks.