UNPKG

skills-ws

Version:

87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.

369 lines (325 loc) • 12.4 kB
## Contents - 🚀 Single vs Multi-Step Analysis Framework - Single-Step Signup Analysis - Multi-Step Signup Analysis - Decision Matrix: Single vs Multi-Step ## 🚀 Single vs Multi-Step Analysis Framework ### Single-Step Signup Analysis **Advantages of Single-Step Forms** - ✅ Lower perceived friction (visual simplicity) - ✅ Higher completion rates for motivated users - ✅ Faster time to completion - ✅ Better mobile experience - ✅ Easier A/B testing and analytics **Disadvantages of Single-Step Forms** - ❌ Overwhelming for complex signups - ❌ Higher abandonment at validation errors - ❌ No progressive commitment building - ❌ Poor error handling experience - ❌ Difficult to optimize individual fields ```html <!-- Single-Step Signup Form Template --> <form class="signup-form single-step" data-flow-type="single-step"> <div class="form-header"> <h2>Join 50,000+ Users</h2> <p>Start your free trial today</p> </div> <div class="form-fields"> <!-- Account-essential fields ONLY. Every required field costs conversion: collect the minimum needed to create the account (typically just email + password) and defer everything else to progressive profiling or social autofill. Do NOT make name required here — it is rarely needed at the account-creation step and contradicts a low-friction signup. --> <input type="email" name="email" placeholder="Email Address" autocomplete="email" inputmode="email" required> <!-- Length-first password. No maxlength, no composition rules, no pattern attribute (see "Password UX" below for the rationale). --> <input type="password" name="password" placeholder="Create Password (12+ characters)" autocomplete="new-password" minlength="12" required> <!-- OPTIONAL, clearly labeled, never blocks submit. Collect a single display name only if your product genuinely needs it now. --> <input type="text" name="firstName" placeholder="First name (optional)" autocomplete="given-name"> <!-- B2B-only: company is OPTIONAL at signup; enrich post-signup from the email domain or progressive profiling instead. --> <input type="text" name="company" placeholder="Company (optional)" autocomplete="organization"> </div> <!-- Trust signals --> <div class="form-trust"> <label class="checkbox-wrapper"> <input type="checkbox" name="acceptTerms" required> <span class="checkmark"></span> I agree to the <a href="/terms">Terms</a> and <a href="/privacy">Privacy Policy</a> </label> <!-- Make any privacy claim TRUE and specific. "We never share" is a legal commitment; only state what your privacy policy actually says. A vague "your data is secure" badge adds no trust and can expose you. Prefer a concrete, verifiable signal. --> <p class="privacy-note"> 🔒 No spam. Unsubscribe anytime. See our <a href="/privacy">Privacy Policy</a>. </p> </div> <button type="submit" class="btn-signup"> Start Free Trial → No Credit Card </button> <!-- Social signup options --> <div class="social-signup"> <div class="divider"> <span>or continue with</span> </div> <div class="social-buttons"> <!-- Handlers wired to the canonical initiateSocialLogin() defined in "Social Login Implementation Best Practices" below. --> <button type="button" class="btn-social google" onclick="initiateSocialLogin('google')"> <img src="/google-icon.svg" alt=""> Continue with Google </button> <button type="button" class="btn-social microsoft" onclick="initiateSocialLogin('microsoft')"> <img src="/microsoft-icon.svg" alt=""> Continue with Microsoft </button> </div> </div> </form> ``` ### Multi-Step Signup Analysis **Advantages of Multi-Step Forms** - ✅ Progressive commitment building - ✅ Better user guidance and help - ✅ Easier error handling per step - ✅ Opportunity for value reinforcement - ✅ Better analytics per step **Disadvantages of Multi-Step Forms** - ❌ Higher perceived friction - ❌ Risk of abandonment between steps - ❌ More complex implementation - ❌ Requires step-by-step optimization - ❌ Potential mobile navigation issues ```html <!-- Multi-Step Signup Flow --> <div class="signup-flow multi-step" data-flow-type="multi-step"> <!-- Progress indicator --> <div class="progress-bar"> <div class="progress-step active" data-step="1"> <span class="step-number">1</span> <span class="step-label">Account</span> </div> <div class="progress-step" data-step="2"> <span class="step-number">2</span> <span class="step-label">Profile</span> </div> <div class="progress-step" data-step="3"> <span class="step-number">3</span> <span class="step-label">Preferences</span> </div> </div> <!-- Step 1: Basic Account Information --> <div class="step-content active" data-step="1"> <div class="step-header"> <h2>Create Your Account</h2> <p>Quick setup - takes less than 2 minutes</p> </div> <form class="step-form"> <input type="email" name="email" placeholder="Your email address" autocomplete="email" inputmode="email" required> <!-- Single password field + a show/hide toggle. Drop the "confirm password" field: with a reveal toggle and a paste- friendly input it adds friction without preventing typos, and password managers ignore it. --> <div class="password-field"> <input type="password" name="password" placeholder="Choose a strong password (12+ characters)" autocomplete="new-password" minlength="12" required> <button type="button" class="toggle-password" aria-label="Show password" aria-pressed="false">Show</button> </div> <button type="button" class="btn-next" onclick="nextStep(2)"> Continue → </button> </form> <!-- Social options prominent in step 1 --> <div class="social-signup"> <div class="divider"><span>or</span></div> <button type="button" class="btn-social google" onclick="initiateSocialLogin('google')"> <img src="/google-icon.svg" alt=""> Sign up with Google </button> </div> </div> <!-- Step 2: Personal Information --> <div class="step-content" data-step="2"> <div class="step-header"> <h2>Tell Us About Yourself</h2> <p>Help us personalize your experience</p> </div> <form class="step-form"> <!-- This is a POST-account step, so the account already exists; a user who abandons here is still signed up. Keep fields optional unless your core product flow truly requires them, and let the user "Skip for now". --> <div class="name-fields"> <input type="text" name="firstName" placeholder="First name" autocomplete="given-name"> <input type="text" name="lastName" placeholder="Last name" autocomplete="family-name"> </div> <input type="text" name="company" placeholder="Company" autocomplete="organization"> <select name="role" autocomplete="organization-title"> <option value="">Your Role</option> <option value="founder">Founder/CEO</option> <option value="marketing">Marketing</option> <option value="sales">Sales</option> <option value="product">Product</option> <option value="other">Other</option> </select> <div class="step-navigation"> <button type="button" class="btn-back" onclick="previousStep(1)"> ← Back </button> <button type="button" class="btn-skip" onclick="nextStep(3)"> Skip for now </button> <button type="button" class="btn-next" onclick="nextStep(3)"> Continue → </button> </div> </form> </div> <!-- Step 3: Preferences & Goals --> <div class="step-content" data-step="3"> <div class="step-header"> <h2>What's Your Main Goal?</h2> <p>We'll customize your dashboard based on your needs</p> </div> <form class="step-form"> <div class="goal-options"> <label class="option-card"> <input type="radio" name="goal" value="increase-conversions"> <div class="card-content"> <div class="card-icon">📈</div> <h4>Increase Conversions</h4> <p>Optimize landing pages and forms</p> </div> </label> <label class="option-card"> <input type="radio" name="goal" value="reduce-churn"> <div class="card-content"> <div class="card-icon">🔒</div> <h4>Reduce Churn</h4> <p>Improve user retention and engagement</p> </div> </label> <label class="option-card"> <input type="radio" name="goal" value="grow-revenue"> <div class="card-content"> <div class="card-icon">💰</div> <h4>Grow Revenue</h4> <p>Optimize pricing and upsells</p> </div> </label> </div> <div class="step-navigation"> <button type="button" class="btn-back" onclick="previousStep(2)"> ← Back </button> <button type="submit" class="btn-complete"> Complete Setup → </button> </div> </form> </div> </div> ``` ### Decision Matrix: Single vs Multi-Step This is a **starting heuristic, not a verdict** — it produces a hypothesis you then validate with a real A/B test (see the experiment workflow below). The weights are illustrative defaults; tune them to your data. ```javascript // Signup Flow Decision Heuristic — fully self-contained. // Returns a recommendation + the explicit reasoning trail so the output // is auditable. Treat the result as the variant to test, not ground truth. function determineOptimalFlow(userContext) { const factors = { requiredFieldCount: userContext.requiredFields?.length ?? 0, audience: userContext.audience, // 'B2B' | 'B2C' primaryDevice: userContext.device, // 'mobile' | 'desktop' productValue: userContext.productValue, // 'high' | 'low' }; // Each rule contributes a signed weight. Positive => multi-step. const rules = [ { when: factors.requiredFieldCount <= 4, weight: -2, because: 'Few required fields fit comfortably in one step', }, { when: factors.requiredFieldCount >= 8, weight: +3, because: 'Many required fields are less daunting when chunked', }, { when: factors.audience === 'B2B', weight: +2, because: 'B2B buyers tolerate qualification steps', }, { when: factors.audience === 'B2C', weight: -1, because: 'B2C buyers expect instant, frictionless signup', }, { when: factors.primaryDevice === 'mobile', weight: -2, because: 'Mobile favors a single short step over navigation', }, { when: factors.productValue === 'high', weight: +1, because: 'High perceived value sustains more steps', }, ]; const applied = rules.filter((r) => r.when); const score = applied.reduce((sum, r) => sum + r.weight, 0); return { recommendation: score > 2 ? 'multi-step' : 'single-step', confidence: Math.abs(score) >= 3 ? 'high' : 'moderate', score, reasoning: applied.map((r) => `${r.weight > 0 ? '+' : ''}${r.weight}: ${r.because}`), nextStep: 'A/B test the recommended flow against the alternative before committing.', }; } // Example: // determineOptimalFlow({ requiredFields: ['email','password'], audience: 'B2C', device: 'mobile', productValue: 'low' }) // -> { recommendation: 'single-step', confidence: 'high', score: -5, reasoning: [...] } ```