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 Sentry to your Goodspeed app

Crash reporting wired into every generated app with null-safe init, breadcrumb helpers, and sensitive-key redaction. Goodspeed wires Sentry 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 Sentry build

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

ItemDescriptionStrength
Off unless configuredSentry.init runs only when a DSN is present and crash reporting is switched on, so an unconfigured app sends nothing anywhere.Reliability
Sensitive keys redactedAny property matching a thirty-pattern list (password, token, secret, apiKey) is stripped before an event leaves the device.Auth
Readable event trailsaddBreadcrumb() is called across the analytics, purchase and service layers, so a crash arrives with the steps that led to it.Reliability
User context after sign-insetSentryUser attaches subscription tier, app version and device model to the error scope.Reliability
Performance spanscaptureTransaction wraps expensive work such as image upload and offline replay, so slow paths are measured rather than guessed at.Reliability

Source: the Goodspeed app foundation · error-monitoring

REAL GENERATED CODE

A snippet from a Sentry integration the pipeline ships

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

  1. Null-safe init

    // lib/sentry.ts
    const dsn = process.env.EXPO_PUBLIC_SENTRY_DSN ?? '';
    const isEnabled =
      gasConfig.features.analytics.crashReporting && !!dsn;
    
    if (isEnabled) { Sentry.init({ dsn, tracesSampleRate: 0.2 }); }
    
    export function sanitizeData(data: Record<string, unknown>) {
      const SENSITIVE = /password|token|secret|apiKey|authorization/i;
      return Object.fromEntries(
        Object.entries(data).map(([k, v]) =>
          [k, SENSITIVE.test(k) ? '[REDACTED]' : v]
        )
      );
    }
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH SENTRY

Your Sentry integration, generated