Signal Capture Overview
What is Signal Capture?
Signal capture is collecting evidence that people want what you're building. In Foundry, every signal is a specific user action:
- Email submission — "I'm interested enough to give you my email"
- Payment click — "I'm interested enough to look at your price"
- Booking click — "I'm interested enough to schedule time with you"
- Social engagement — "I'm interested enough to follow or share"
Each of these is a measurable signal. Foundry tracks them all through the Events system.
Three Validation Paths
1. Email Capture
Collect email addresses with optional custom fields. The simplest path to proving interest.
Component: ConvertForm
Flow: Visitor fills form → client-side validation → anti-spam checks → webhook delivery → success redirect
Best for: Testing interest before building anything.
2. External Links (Presales)
Link to external payment or booking pages. Every click is tracked.
Component: ConvertExternal
Flow: Visitor clicks CTA → event tracked → redirected to external URL (Stripe, Cal.com, etc.)
Best for: Proving payment intent or booking commitment.
3. Internal Offers
Link to offer detail pages within your site. Track engagement before the final conversion.
Component: ConvertInternal
Flow: Visitor clicks CTA → event tracked → navigated to offer page
Best for: Warming up visitors before asking for commitment.
The Convert Component Family
All signal capture components live in the convert/ directory and follow consistent patterns:
| Component | data-testid | Purpose |
|---|---|---|
ConvertForm | convert-form | Email/signal capture form |
ConvertExternal | convert-external | External CTA (payment, booking, apply) |
ConvertInternal | convert-internal | Internal offer link |
ConvertPricing | convert-pricing | Pricing comparison grid |
ConvertSocial | convert-social | Founder's social link buttons |
ConvertSocialShare | convert-social-share | Page sharing popover |
ConvertRss | convert-rss | RSS feed subscription |
Every convert component:
- Has a
locationprop for event tracking (identifies where on the page it appears) - Fires events via
useEvents()on user interaction - Has a
data-testidfor automated testing - Can be used in MDC Markdown or directly in Vue templates
Using in Markdown (MDC)
All convert components work in MDC syntax:
::convert-form{location="hero" submit-label="Get Access"}
::
::convert-external{to="https://cal.com/you/call" type="booking" location="cta"}
::
::convert-internal{offer-slug="mentorship" location="sidebar"}
::
Props use kebab-case in MDC (e.g., submit-label instead of submitLabel).