Skip to content

Goodspeed is in closed beta. Enter your email and we check your invite on the spot: invited accounts start free today, and everyone else joins the waitlist in one click. Get started

Skip to content
Goodspeed

Connect PostHog to your Goodspeed app

Product analytics, session recording, and feature flags, all GDPR-compliant and consent-gated from day one. Goodspeed wires PostHog into every app that needs it at generation time, so you start with a working integration, not a blank config and a documentation tab.

WHAT GETS WIRED IN

Built into every PostHog build

Every app Goodspeed generates with PostHog includes these wired integrations from the first build. No manual setup required.

ItemDescriptionStrength
No client until consentThe analytics client is created on first use and only once consent is granted, which is what makes an opt-out posture real rather than declared.Analytics
Identified on login and signupidentifyPostHogUser() attaches optional traits, including subscription tier.Analytics
Identity cleared on logoutresetPostHogUser() runs on sign-out, so the next person on that device is not counted as the last one.Analytics
One event helper everywherecaptureEvent() is wired through the auth, purchase, navigation and error paths rather than re-implemented per screen.Analytics
Session recordingSwitched on through the $session_recording_enabled property when it is enabled in gas.config.ts.Analytics
Feature flags and A/B testsThe useFeatureFlag hook reads flags, so a screen variant can be split-tested without shipping a new release.Analytics

Source: the Goodspeed app foundation · analytics/feature-flags

REAL GENERATED CODE

A snippet from a PostHog integration the pipeline ships

This pattern is lifted from the engineered plumbing that ships inside every Goodspeed app. The studio generates PostHog integration code like this for every app that includes it, not a placeholder you have to fill in yourself.

  1. Consent-aware init

    // lib/posthog.ts
    let _posthog: PostHog | null = null;
    
    export async function getPostHog(): Promise<PostHog | null> {
      if (_posthog) return _posthog;
      const granted = await checkAnalyticsConsent();
      if (!granted) return null;
      if (!apiKey) return null;
      _posthog = new PostHog(apiKey, {
        host,
        persistence: 'memory',
        bootstrap: { distinctId: await getAnonymousId() },
      });
      return _posthog;
    }
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH POSTHOG

Your PostHog integration, generated