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
Markdown
## 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: [...] }
```