Signal Capture Overview

The three validation paths and the convert component family.

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.

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:

Componentdata-testidPurpose
ConvertFormconvert-formEmail/signal capture form
ConvertExternalconvert-externalExternal CTA (payment, booking, apply)
ConvertInternalconvert-internalInternal offer link
ConvertPricingconvert-pricingPricing comparison grid
ConvertSocialconvert-socialFounder's social link buttons
ConvertSocialShareconvert-social-sharePage sharing popover
ConvertRssconvert-rssRSS feed subscription

Every convert component:

  • Has a location prop for event tracking (identifies where on the page it appears)
  • Fires events via useEvents() on user interaction
  • Has a data-testid for 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).