diff --git a/CLAUDE.md b/CLAUDE.md
index 0902790..16ce671 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -186,6 +186,153 @@ export const myModule: ModulePlugin = {
- Module configs in `src/app.config.ts`
- Centralized config parsing and validation
+### **Form Implementation Standards**
+
+**CRITICAL: Always use Shadcn/UI Form Components with vee-validate**
+
+All forms in the application MUST follow the official Shadcn Vue form implementation pattern:
+
+**Required Form Setup:**
+```typescript
+import { useForm } from 'vee-validate'
+import { toTypedSchema } from '@vee-validate/zod'
+import * as z from 'zod'
+import {
+ FormControl,
+ FormDescription,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from '@/components/ui/form'
+
+// 1. Define Zod schema for validation
+const formSchema = toTypedSchema(z.object({
+ name: z.string().min(1, "Name is required").max(100, "Name too long"),
+ email: z.string().email("Invalid email address").optional(),
+ items: z.array(z.string()).min(1, "Select at least one item"),
+}))
+
+// 2. Set up form with vee-validate
+const form = useForm({
+ validationSchema: formSchema,
+ initialValues: {
+ name: '',
+ email: '',
+ items: []
+ }
+})
+
+// 3. Destructure form methods
+const { setFieldValue, resetForm, values, meta } = form
+
+// 4. Create form validation computed
+const isFormValid = computed(() => meta.value.valid)
+
+// 5. Create submit handler with form.handleSubmit
+const onSubmit = form.handleSubmit(async (values) => {
+ console.log('Form submitted:', values)
+ // Handle form submission logic
+})
+```
+
+**Required Form Template Structure:**
+```vue
+
+
+
+
+```
+
+**Key Form Requirements:**
+- ✅ **Form validation**: Use `@submit="onSubmit"` - form.handleSubmit automatically prevents page refresh
+- ✅ **Button state**: Disable submit button with `!isFormValid` until all required fields are valid
+- ✅ **Error display**: Use `