[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEP6ENKP4Y3DEVF092639P":3,"skill-same:01M6EEP6ENKP4Y3DEVF092639P":79},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EEP6ENKP4Y3DEVF092639P","conform",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fconform\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Conform\n\n## Overview\n\nConform is a progressive enhancement form library. Forms work without JavaScript (server-side validation), then enhance with client-side validation when JS loads. Native to Remix and Next.js Server Actions. Uses Zod schemas for shared client\u002Fserver validation.\n\n## Instructions\n\n### Step 1: Next.js Server Action Form\n\n```typescript\n\u002F\u002F app\u002Factions.ts — Server action with Conform\n'use server'\nimport { parseWithZod } from '@conform-to\u002Fzod'\nimport { z } from 'zod'\n\nconst schema = z.object({\n  name: z.string().min(2),\n  email: z.string().email(),\n  message: z.string().min(10).max(1000),\n})\n\nexport async function submitContact(prevState: unknown, formData: FormData) {\n  const submission = parseWithZod(formData, { schema })\n\n  if (submission.status !== 'success') {\n    return submission.reply()     \u002F\u002F return errors to form\n  }\n\n  await db.contacts.create(submission.value)\n  return submission.reply({ resetForm: true })\n}\n```\n\n```tsx\n\u002F\u002F app\u002Fcontact\u002Fpage.tsx — Client form with progressive enhancement\n'use client'\nimport { useForm } from '@conform-to\u002Freact'\nimport { parseWithZod } from '@conform-to\u002Fzod'\nimport { useActionState } from 'react'\nimport { submitContact } from '..\u002Factions'\n\nexport default function ContactPage() {\n  const [lastResult, action] = useActionState(submitContact, undefined)\n  const [form, fields] = useForm({\n    lastResult,\n    onValidate({ formData }) {\n      return parseWithZod(formData, { schema })    \u002F\u002F client-side validation\n    },\n    shouldValidate: 'onBlur',\n    shouldRevalidate: 'onInput',\n  })\n\n  return (\n    \u003Cform id={form.id} onSubmit={form.onSubmit} action={action} noValidate>\n      \u003Cdiv>\n        \u003Clabel htmlFor={fields.name.id}>Name\u003C\u002Flabel>\n        \u003Cinput {...getInputProps(fields.name, { type: 'text' })} \u002F>\n        \u003Cp>{fields.name.errors}\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Clabel htmlFor={fields.email.id}>Email\u003C\u002Flabel>\n        \u003Cinput {...getInputProps(fields.email, { type: 'email' })} \u002F>\n        \u003Cp>{fields.email.errors}\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Clabel htmlFor={fields.message.id}>Message\u003C\u002Flabel>\n        \u003Ctextarea {...getTextareaProps(fields.message)} \u002F>\n        \u003Cp>{fields.message.errors}\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cbutton type=\"submit\">Send\u003C\u002Fbutton>\n    \u003C\u002Fform>\n  )\n}\n```\n\n## Guidelines\n\n- Conform forms work without JS — server validates and returns errors via form resubmission.\n- Share Zod schema between client and server — single source of truth for validation.\n- `shouldValidate: 'onBlur'` validates when user leaves field — less aggressive than onChange.\n- Native form attributes (required, minLength) work as fallback when JS is disabled.\n- Ideal for Remix and Next.js Server Actions — designed for their form patterns.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fconform",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill conform",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill conform",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill conform","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fconform\u002FSKILL.md",true,[45,51,55,59,63,67,71,75],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"research.template.md","REFERENCE","参考文档",581,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Fresearch.template.md",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"technical-steps\u002Fstep-01-init.md",5581,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-01-init.md",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"technical-steps\u002Fstep-02-technical-overview.md",9447,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-02-technical-overview.md",{"path":60,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":61,"sourceHtmlUrl":62},"technical-steps\u002Fstep-03-integration-patterns.md",9995,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-03-integration-patterns.md",{"path":64,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":65,"sourceHtmlUrl":66},"technical-steps\u002Fstep-04-architectural-patterns.md",7212,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-04-architectural-patterns.md",{"path":68,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":69,"sourceHtmlUrl":70},"technical-steps\u002Fstep-05-implementation-research.md",7774,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-05-implementation-research.md",{"path":72,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":73,"sourceHtmlUrl":74},"technical-steps\u002Fstep-06-research-synthesis.md",21056,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Ftechnical-steps\u002Fstep-06-research-synthesis.md",{"path":76,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":77,"sourceHtmlUrl":78},"workflow.md",2422,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-technical-research\u002Fworkflow.md",[80,94,104,113,119,126],{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":90,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[85],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[91,92,93],"model","model hierarchy","model hierarchy skill",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":100,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[99],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[101,102,103],"MCP","zoom","zoom mcp",{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[110,111,112,102],"sdk","zoom apps sdk","apps",{"skillNo":114,"name":115,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[115],{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":125,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[124],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[121],{"skillNo":127,"name":128,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[128]]