{"id":"bcff1fab-c754-4dbc-b6f9-beffd1a07e79","shortId":"EpxMZ2","kind":"skill","title":"form-strategy","tagline":"Design forms that convert, validate well, resist spam, and integrate cleanly with downstream systems. Use this skill when designing or auditing any form (contact, signup, checkout, multi-step, embedded), planning validation logic, fighting spam, choosing form tooling, or improvin","description":"# Form Strategy\n\nForms are where intent becomes action. Design them well or lose conversions, frustrate users, and drown in spam. Stack-agnostic.\n\n---\n\n## When to use\n\n- Designing or redesigning a form\n- Conversion is dropping on a key form\n- Spam volume is overwhelming the inbox or database\n- Auditing forms across a site\n- Planning validation logic\n- Choosing form tooling (form service, custom build, no-code)\n- Integrating forms with CRM, email, or other downstream systems\n- Multi-step form decisions\n\n## When NOT to use\n\n- Generic conversion optimization (use `cro-optimization`)\n- The copy on the form (use `landing-page-copy`)\n- Backend handling beyond form-specific concerns (use `frontend-component-build`, `code-review-web`)\n- General accessibility (use `accessibility-audit`)\n\n---\n\n## Required inputs\n\n- The form's purpose (what action, what outcome)\n- Current form (URL, screenshot, or fields)\n- Current performance (completion rate, spam rate, conversion to next step)\n- Downstream system (where submissions go: CRM, email, database, support tool)\n- Business context (volume, urgency of leads, cost of false vs missed signups)\n\n---\n\n## The framework: 5 dimensions\n\nEvery form decision falls into one of these dimensions.\n\n### Dimension 1: Field strategy\n\nThe biggest lever. Every additional field reduces conversion.\n\n**Questions to ask for each field:**\n- Is this required to deliver value to the user?\n- Is this required to deliver value to the business?\n- Can it be inferred from another source (email domain, behavior, context)?\n- Can it be asked later (after first contact, on second visit, on settings page)?\n\n**Default rule:** ask for the minimum to make the next step happen. Everything else later.\n\nFor a B2B contact form: name and email get you started. Phone, company size, role are nice-to-haves that often hurt conversion more than they help qualification.\n\nFor a checkout: country, postal code, address, name, payment. Anything else (referral source, marketing opt-in, account creation) is optional or moved to post-purchase.\n\n### Dimension 2: Field design\n\nHow each field looks and behaves.\n\n- **Labels above inputs** beat placeholders. Placeholder labels disappear when typing.\n- **Inline labels** (floating labels) work for very compact forms.\n- **Single column** for almost every form. Eyes flow vertically.\n- **Logical grouping** with visible spacing. Don't put unrelated fields next to each other.\n- **Right input type:** `email` for emails, `tel` for phone, `number` for numbers, `date` for dates. Mobile keyboards adapt.\n- **Autocomplete attributes:** `autocomplete=\"email\"`, `autocomplete=\"given-name\"`, etc. Browsers and password managers fill them in.\n- **Sensible defaults** for fields where one applies (country pre-selected by IP, etc.). Don't default to anything that would mislead if wrong.\n\n### Dimension 3: Validation\n\nTell users what's wrong, when, and how to fix it.\n\n- **Validate on blur, not on every keystroke.** Inline errors that appear as someone types are jarring.\n- **Re-validate on submit** (catch fields the user skipped).\n- **Specific messages:** \"Email must include @\" beats \"Invalid email.\"\n- **Position errors next to the field** they refer to.\n- **Don't submit a form when there are errors.** Highlight the first errored field. Scroll to it.\n- **Validate server-side too.** Client validation is UX. Server validation is correctness.\n\nFor format-flexible fields (phone numbers, postal codes), validate liberally. Reject only what's clearly wrong, not what's \"non-standard.\" Many phone formats exist.\n\n### Dimension 4: Spam defense\n\nPublic forms attract spam. Plan for it from day one.\n\n**Layered defense:**\n\n1. **Honeypot field.** A hidden field that humans don't fill in but bots do. If it's filled, reject silently. Free, low-friction, surprisingly effective for low-effort spam.\n2. **Time-based detection.** Reject submissions completed in under 2-3 seconds (bots) or after very long delays (suspicious sessions).\n3. **Rate limiting.** Reject if the same IP submits too many times.\n4. **CAPTCHA as a last resort.** Modern invisible CAPTCHAs (hCaptcha, reCAPTCHA v3, Turnstile) are low-friction. Old image CAPTCHAs are conversion-killers.\n5. **Behavioral signals.** Did the cursor move? Was there scroll? Modern services track this.\n6. **Content filtering.** Reject obvious spam content (links, foreign-language content if your audience is local, common spam words).\n7. **Server-side review.** A queue rather than direct delivery to inboxes for high-spam-target forms.\n\nFor most contact forms: honeypot + time check + Turnstile (or similar) is sufficient.\n\n### Dimension 5: Submission flow\n\nWhat happens after submit.\n\n- **Inline success message** for short forms. Don't redirect just to confirm.\n- **Confirmation page** for high-value submissions (to provide next steps, set expectations).\n- **Email confirmation** for signups, purchases, RSVPs. Always.\n- **Save data on errors** so the user doesn't re-enter everything.\n- **Optimistic UI** (show success before the server confirms) for low-stakes forms; risky for high-stakes.\n\nFor multi-step forms:\n- Show progress (3 of 5)\n- Save state between steps (in case of refresh or navigation)\n- Allow back navigation without losing data\n- Validate per step, not just at the end\n\n---\n\n## Workflow\n\n### Step 1: Audit current state\n\nFor each form on the site:\n- What's its purpose?\n- Number of fields, required vs optional\n- Current completion rate\n- Current spam rate\n- Validation rules\n- What happens after submit\n- Where the data goes downstream\n\n### Step 2: Define success per form\n\nDifferent forms have different success metrics:\n- Lead form: qualified leads (defined by sales)\n- Newsletter: confirmed subscriptions (after double opt-in)\n- Contact: substantive replies (not just submissions)\n- Checkout: successful payments\n\nTrack the metric that matters, not just submissions.\n\n### Step 3: Cut fields ruthlessly\n\nApply the field strategy filter. For each field, answer:\n- Required to deliver value? Keep.\n- Nice to have? Move to optional or later.\n- Used for routing or qualification? Often can be inferred.\n\nA 7-field form becomes a 3-field form. Conversion rises.\n\n### Step 4: Set up spam defense\n\nBefore launching a public form:\n- Add a honeypot field\n- Add time-based detection\n- Add rate limiting\n- Add a modern CAPTCHA if the form is high-traffic or high-spam\n\nAfter launch, monitor. Tune layers based on what's actually getting through.\n\n### Step 5: Improve validation\n\nWalk through each field:\n- Is validation specific?\n- Does it run at the right time (blur or submit, not on keystroke)?\n- Are error messages actionable?\n- Is server-side validation matching client-side?\n\n### Step 6: Verify accessibility\n\nCritical baseline:\n- Every input has an associated label (visually visible or `aria-label`)\n- Errors are associated with inputs (`aria-describedby`, `aria-invalid`)\n- Focus order matches visual order\n- Color isn't the only way to indicate errors\n- Form is fully keyboard-navigable\n\nSee `accessibility-audit` for the full WCAG audit.\n\n### Step 7: Test downstream\n\nSubmit the form. Verify:\n- Data lands where it should\n- Required fields are populated correctly\n- Spam defenses are working (test with a script)\n- The user gets the confirmation they expect\n- Internal notification is timely\n\nForms break silently when downstream systems change. Test after any integration update.\n\n### Step 8: Monitor\n\n- Completion rate over time\n- Spam rate over time\n- Errors per submission (high errors = bad UX)\n- Drop-off field (where do people abandon?)\n\n---\n\n## Failure patterns\n\n**Too many fields.** Most B2B contact forms have 3x more fields than they need. Cut.\n\n**Validation that fires while typing.** Annoying. Causes errors before the user has finished.\n\n**Generic error messages.** \"Invalid input.\" Where? Why? Be specific.\n\n**Required fields not marked.** Users discover they're required only after submission fails. Mark required (or, for short forms, mark optional).\n\n**Autocomplete disabled.** \"For security.\" It's almost never a security improvement and always a UX cost. Leave autocomplete on.\n\n**Tab order is broken.** Tab key skips fields or jumps backward. Set `tabindex` only when necessary; use natural DOM order.\n\n**Submit button below the fold.** Especially on mobile. Users don't see it.\n\n**No save on error.** User submits, has one error, returns to the form, all fields empty. Nightmare. Save the state.\n\n**Captcha as the only spam defense.** Captchas are friction. Layered defense beats brute-force friction.\n\n**Captcha visible by default.** Modern CAPTCHAs (Turnstile, reCAPTCHA v3) are invisible most of the time and only escalate when needed. Use those.\n\n**Newsletter signup that's actually a marketing list.** Honor opt-in scope. If the user signed up for product updates, don't add them to the marketing newsletter.\n\n**Confirmation page that's a dead end.** \"Thanks for submitting\" with no next step. What now? Provide an action (read related content, return to homepage, follow on social).\n\n**No double opt-in for marketing email.** Bots and typos pollute the list. See `email-deliverability` for why this matters.\n\n**Email field accepting `name@` as valid.** Browser spec validation is loose. Validate against an actual format.\n\n**Custom date pickers worse than native.** The native `<input type=\"date\">` is now good on most platforms. Don't reinvent unless you have a specific reason.\n\n**Forms that lose state on refresh.** For long forms, save to localStorage and restore on load.\n\n---\n\n## Output format\n\nA form audit document includes:\n\n- **Form inventory:** every form on the site\n- **Per-form review:** purpose, fields, performance\n- **Recommendations:** field cuts, validation improvements, spam defense, design changes\n- **Spam defense plan:** layers per form\n- **Accessibility status:** WCAG compliance per form\n- **Downstream integration map:** where each form's data goes\n- **Monitoring plan:** what's tracked\n\n---\n\n## Reference files\n\n- [`references/form-anatomy-checklist.md`](references/form-anatomy-checklist.md): A field-by-field, behavior-by-behavior checklist for auditing or designing a form, covering structure, accessibility, validation, and spam defense.","tags":["form","strategy","claude","skills","rampstackco","agent-skills","anthropic","awesome-claude-code","awesome-claude-prompts","awesome-claude-skills","claude-code","claude-skills"],"capabilities":["skill","source-rampstackco","skill-form-strategy","topic-agent-skills","topic-anthropic","topic-awesome-claude-code","topic-awesome-claude-prompts","topic-awesome-claude-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-good-first-issue","topic-mcp","topic-product-management","topic-seo"],"categories":["claude-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/rampstackco/claude-skills/form-strategy","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add rampstackco/claude-skills","source_repo":"https://github.com/rampstackco/claude-skills","install_from":"skills.sh"}},"qualityScore":"0.540","qualityRationale":"deterministic score 0.54 from registry signals: · indexed on github topic:agent-skills · 181 github stars · SKILL.md body (10,220 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:55:16.410Z","embedding":null,"createdAt":"2026-04-30T01:01:28.543Z","updatedAt":"2026-05-18T18:55:16.410Z","lastSeenAt":"2026-05-18T18:55:16.410Z","tsv":"'-3':641 '1':227,598,859 '2':359,630,640,897 '3':469,651,830,941,982 '3x':1217 '4':583,663,988 '5':215,687,753,832,1038 '6':701,1075 '7':721,977,1133 '8':1182 'abandon':1206 'accept':1458 'access':160,163,1077,1125,1547,1589 'accessibility-audit':162,1124 'account':348 'across':92 'action':51,172,1064,1424 'actual':1034,1381,1470 'adapt':427 'add':998,1002,1007,1010,1400 'addit':234 'address':337 'agnost':66 'allow':843 'almost':390,1273 'alway':791,1279 'annoy':1229 'anoth':267 'answer':953 'anyth':340,462 'appear':492 'appli':450,945 'aria':1090,1098,1101 'aria-describedbi':1097 'aria-invalid':1100 'aria-label':1089 'ask':240,276,289 'associ':1084,1094 'attract':588 'attribut':429 'audienc':715 'audit':24,90,164,860,1126,1131,1515,1582 'autocomplet':428,430,432,1267,1284 'b2b':304,1213 'back':844 'backend':143 'backward':1296 'bad':1197 'base':633,1005,1030 'baselin':1079 'beat':371,513,1350 'becom':50,980 'behav':367 'behavior':271,688,1577,1579 'behavior-by-behavior':1576 'beyond':145 'biggest':231 'blur':484,1055 'bot':611,643,1442 'break':1170 'broken':1289 'browser':437,1462 'brute':1352 'brute-forc':1351 'build':104,154 'busi':201,261 'button':1307 'captcha':664,671,682,1013,1339,1345,1355,1360 'case':838 'catch':503 'caus':1230 'chang':1175,1540 'check':746 'checklist':1580 'checkout':29,333,929 'choos':39,98 'clean':14 'clear':570 'client':547,1072 'client-sid':1071 'code':107,156,336,563 'code-review-web':155 'color':1108 'column':388 'common':718 'compact':385 'compani':314 'complet':183,637,880,1184 'complianc':1550 'compon':153 'concern':149 'confirm':771,772,786,812,916,1162,1406 'contact':27,280,305,742,923,1214 'content':702,707,712,1427 'context':202,272 'convers':57,75,127,187,237,325,685,985 'conversion-kil':684 'convert':7 'copi':134,142 'correct':554,1149 'cost':207,1282 'countri':334,451 'cover':1587 'creation':349 'critic':1078 'crm':111,196 'cro':131 'cro-optim':130 'current':175,181,861,879,882 'cursor':692 'custom':103,1472 'cut':942,1223,1534 'data':793,848,893,1140,1560 'databas':89,198 'date':422,424,1473 'day':594 'dead':1411 'decis':121,219 'default':287,445,460,1358 'defens':585,597,992,1151,1344,1349,1538,1542,1593 'defin':898,912 'delay':648 'deliv':248,257,956 'deliver':1451 'deliveri':731 'describedbi':1099 'design':4,22,52,70,361,1539,1584 'detect':634,1006 'differ':902,905 'dimens':216,225,226,358,468,582,752 'direct':730 'disabl':1268 'disappear':375 'discov':1251 'document':1516 'doesn':799 'dom':1304 'domain':270 'doubl':919,1435 'downstream':16,115,191,895,1135,1173,1553 'drop':77,1200 'drop-off':1199 'drown':61 'effect':624 'effort':628 'els':300,341 'email':112,197,269,309,413,415,431,510,515,785,1441,1450,1456 'email-deliver':1449 'embed':33 'empti':1334 'end':856,1412 'enter':803 'error':490,517,533,537,795,1062,1092,1116,1192,1196,1231,1238,1322,1327 'escal':1372 'especi':1311 'etc':436,457 'everi':217,233,391,487,1080,1520 'everyth':299,804 'exist':581 'expect':784,1164 'eye':393 'fail':1258 'failur':1207 'fall':220 'fals':209 'field':180,228,235,243,360,364,405,447,504,521,538,559,600,603,875,943,947,952,978,983,1001,1044,1146,1202,1211,1219,1247,1293,1333,1457,1530,1533,1573,1575 'field-by-field':1572 'fight':37 'file':1568 'fill':441,608,616 'filter':703,949 'finish':1236 'fire':1226 'first':279,536 'fix':480 'flexibl':558 'float':380 'flow':394,755 'focus':1103 'fold':1310 'follow':1431 'forc':1353 'foreign':710 'foreign-languag':709 'form':2,5,26,40,44,46,74,81,91,99,101,109,120,137,147,168,176,218,306,386,392,529,587,739,743,765,817,827,865,901,903,909,979,984,997,1016,1117,1138,1169,1215,1264,1331,1495,1503,1514,1518,1521,1527,1546,1552,1558,1586 'form-specif':146 'form-strategi':1 'format':557,580,1471,1512 'format-flex':556 'framework':214 'free':619 'friction':622,679,1347,1354 'frontend':152 'frontend-component-build':151 'frustrat':58 'full':1129 'fulli':1119 'general':159 'generic':126,1237 'get':310,1035,1160 'given':434 'given-nam':433 'go':195 'goe':894,1561 'good':1482 'group':397 'handl':144 'happen':298,757,888 'have':321 'hcaptcha':672 'help':329 'hidden':602 'high':736,776,821,1019,1023,1195 'high-spam':1022 'high-spam-target':735 'high-stak':820 'high-traff':1018 'high-valu':775 'highlight':534 'homepag':1430 'honeypot':599,744,1000 'honor':1385 'human':605 'hurt':324 'imag':681 'improv':1039,1277,1536 'improvin':43 'inbox':87,733 'includ':512,1517 'indic':1115 'infer':265,975 'inlin':378,489,760 'input':166,370,411,1081,1096,1241 'integr':13,108,1179,1554 'intent':49 'intern':1165 'invalid':514,1102,1240 'inventori':1519 'invis':670,1365 'ip':456,658 'isn':1109 'jar':497 'jump':1295 'keep':958 'key':80,1291 'keyboard':426,1121 'keyboard-navig':1120 'keystrok':488,1060 'killer':686 'label':368,374,379,381,1085,1091 'land':140,1141 'landing-page-copi':139 'languag':711 'last':667 'later':277,301,966 'launch':994,1026 'layer':596,1029,1348,1544 'lead':206,908,911 'leav':1283 'lever':232 'liber':565 'limit':653,1009 'link':708 'list':1384,1447 'load':1510 'local':717 'localstorag':1506 'logic':36,97,396 'long':647,1502 'look':365 'loos':1466 'lose':56,847,1497 'low':621,627,678,815 'low-effort':626 'low-frict':620,677 'low-stak':814 'make':294 'manag':440 'mani':578,661,1210 'map':1555 'mark':1249,1259,1265 'market':344,1383,1404,1440 'match':1070,1105 'matter':936,1455 'messag':509,762,1063,1239 'metric':907,934 'minimum':292 'mislead':465 'miss':211 'mobil':425,1313 'modern':669,697,1012,1359 'monitor':1027,1183,1562 'move':353,693,962 'multi':31,118,825 'multi-step':30,117,824 'must':511 'name':307,338,435,1459 'nativ':1477,1479 'natur':1303 'navig':842,845,1122 'necessari':1301 'need':1222,1374 'never':1274 'newslett':915,1377,1405 'next':189,296,406,518,781,1418 'nice':319,959 'nice-to-hav':318 'nightmar':1335 'no-cod':105 'non':576 'non-standard':575 'notif':1166 'number':419,421,561,873 'obvious':705 'often':323,972 'old':680 'one':222,449,595,1326 'opt':346,921,1387,1437 'opt-in':345,920,1386,1436 'optim':128,132 'optimist':805 'option':351,878,964,1266 'order':1104,1107,1287,1305 'outcom':174 'output':1511 'overwhelm':85 'page':141,286,773,1407 'password':439 'pattern':1208 'payment':339,931 'peopl':1205 'per':850,900,1193,1526,1545,1551 'per-form':1525 'perform':182,1531 'phone':313,418,560,579 'picker':1474 'placehold':372,373 'plan':34,95,590,1543,1563 'platform':1485 'pollut':1445 'popul':1148 'posit':516 'post':356 'post-purchas':355 'postal':335,562 'pre':453 'pre-select':452 'product':1396 'progress':829 'provid':780,1422 'public':586,996 'purchas':357,789 'purpos':170,872,1529 'put':403 'qualif':330,971 'qualifi':910 'question':238 'queue':727 'rate':184,186,652,881,884,1008,1185,1189 'rather':728 're':499,802,1253 're-ent':801 're-valid':498 'read':1425 'reason':1494 'recaptcha':673,1362 'recommend':1532 'redesign':72 'redirect':768 'reduc':236 'refer':523,1567 'references/form-anatomy-checklist.md':1569,1570 'referr':342 'refresh':840,1500 'reinvent':1488 'reject':566,617,635,654,704 'relat':1426 'repli':925 'requir':165,246,255,876,954,1145,1246,1254,1260 'resist':10 'resort':668 'restor':1508 'return':1328,1428 'review':157,725,1528 'right':410,1053 'rise':986 'riski':818 'role':316 'rout':969 'rsvps':790 'rule':288,886 'run':1050 'ruthless':944 'sale':914 'save':792,833,1320,1336,1504 'scope':1389 'screenshot':178 'script':1157 'scroll':539,696 'second':282,642 'secur':1270,1276 'see':1123,1317,1448 'select':454 'sensibl':444 'server':544,551,723,811,1067 'server-sid':543,722,1066 'servic':102,698 'session':650 'set':285,783,989,1297 'short':764,1263 'show':807,828 'side':545,724,1068,1073 'sign':1393 'signal':689 'signup':28,212,788,1378 'silent':618,1171 'similar':749 'singl':387 'site':94,868,1524 'size':315 'skill':20 'skill-form-strategy' 'skip':507,1292 'social':1433 'someon':494 'sourc':268,343 'source-rampstackco' 'space':400 'spam':11,38,63,82,185,584,589,629,706,719,737,883,991,1024,1150,1188,1343,1537,1541,1592 'spec':1463 'specif':148,508,1047,1245,1493 'stack':65 'stack-agnost':64 'stake':816,822 'standard':577 'start':312 'state':834,862,1338,1498 'status':1548 'step':32,119,190,297,782,826,836,851,858,896,940,987,1037,1074,1132,1181,1419 'strategi':3,45,229,948 'structur':1588 'submiss':194,636,754,778,928,939,1194,1257 'submit':502,527,659,759,890,1057,1136,1306,1324,1415 'subscript':917 'substant':924 'success':761,808,899,906,930 'suffici':751 'support':199 'surpris':623 'suspici':649 'system':17,116,192,1174 'tab':1286,1290 'tabindex':1298 'target':738 'tel':416 'tell':471 'test':1134,1154,1176 'thank':1413 'time':632,662,745,1004,1054,1168,1187,1191,1369 'time-bas':631,1003 'tool':41,100,200 'topic-agent-skills' 'topic-anthropic' 'topic-awesome-claude-code' 'topic-awesome-claude-prompts' 'topic-awesome-claude-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-good-first-issue' 'topic-mcp' 'topic-product-management' 'topic-seo' 'track':699,932,1566 'traffic':1020 'tune':1028 'turnstil':675,747,1361 'type':377,412,495,1228 'typo':1444 'ui':806 'unless':1489 'unrel':404 'updat':1180,1397 'urgenc':204 'url':177 'use':18,69,125,129,138,150,161,967,1302,1375 'user':59,252,472,506,798,1159,1234,1250,1314,1323,1392 'ux':550,1198,1281 'v3':674,1363 'valid':8,35,96,470,482,500,542,548,552,564,849,885,1040,1046,1069,1224,1461,1464,1467,1535,1590 'valu':249,258,777,957 'verifi':1076,1139 'vertic':395 'visibl':399,1087,1356 'visit':283 'visual':1086,1106 'volum':83,203 'vs':210,877 'walk':1041 'way':1113 'wcag':1130,1549 'web':158 'well':9,54 'without':846 'word':720 'work':382,1153 'workflow':857 'wors':1475 'would':464 'wrong':467,475,571","prices":[{"id":"c108873e-1e6a-4dd5-bbad-6417aba96eba","listingId":"bcff1fab-c754-4dbc-b6f9-beffd1a07e79","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"rampstackco","category":"claude-skills","install_from":"skills.sh"},"createdAt":"2026-04-30T01:01:28.543Z"}],"sources":[{"listingId":"bcff1fab-c754-4dbc-b6f9-beffd1a07e79","source":"github","sourceId":"rampstackco/claude-skills/form-strategy","sourceUrl":"https://github.com/rampstackco/claude-skills/tree/main/skills/form-strategy","isPrimary":false,"firstSeenAt":"2026-04-30T01:01:28.543Z","lastSeenAt":"2026-05-18T18:55:16.410Z"}],"details":{"listingId":"bcff1fab-c754-4dbc-b6f9-beffd1a07e79","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"rampstackco","slug":"form-strategy","github":{"repo":"rampstackco/claude-skills","stars":181,"topics":["agent-skills","anthropic","awesome-claude-code","awesome-claude-prompts","awesome-claude-skills","claude","claude-code","claude-skills","good-first-issue","mcp","product-management","seo","show-hn","showcase","showdev","web-design","web-development"],"license":"mit","html_url":"https://github.com/rampstackco/claude-skills","pushed_at":"2026-05-10T22:40:22Z","description":"Stack-agnostic Claude Skills covering the full website lifecycle: brand, design, content, SEO, dev, ops, growth, and research. Build, ship, audit, optimize.","skill_md_sha":"75b63cbecb7b601b6535d8372c6f31652113e505","skill_md_path":"skills/form-strategy/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/rampstackco/claude-skills/tree/main/skills/form-strategy"},"layout":"multi","source":"github","category":"claude-skills","frontmatter":{"name":"form-strategy","description":"Design forms that convert, validate well, resist spam, and integrate cleanly with downstream systems. Use this skill when designing or auditing any form (contact, signup, checkout, multi-step, embedded), planning validation logic, fighting spam, choosing form tooling, or improving form conversion. Triggers on form design, form validation, form conversion, multi-step form, form spam, captcha, honeypot, form abandonment, signup form, contact form. Also triggers when form completion rates are low or spam is overwhelming."},"skills_sh_url":"https://skills.sh/rampstackco/claude-skills/form-strategy"},"updatedAt":"2026-05-18T18:55:16.410Z"}}