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

Payment sheet integration for marketplace and commerce apps, with server-side intent creation plus native Stripe SDK on mobile. Goodspeed wires Stripe 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 Stripe build

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

ItemDescriptionStrength
Initialized behind a flaginitStripe() runs at boot with the publishable key from gas.config.ts, and only when the marketplace feature is switched on.Payments
Native payment sheetpresentPaymentSheet() wraps both the setup and the presentation call and returns every error state to the checkout screen.Payments
Secret key stays server-sideThe client secret is fetched from a Supabase Edge Function, so the Stripe secret key is never in the app bundle.Payments
Every attempt recordedA Sentry breadcrumb and an analytics event are written on each payment attempt and completion, so a drop-off leaves a trail.Analytics
Subscription webhooks handledAn Edge Function processes Stripe subscription lifecycle events and writes the result to the users table.Payments

Source: the Goodspeed app foundation · payments/marketplace

REAL GENERATED CODE

A snippet from a Stripe integration the pipeline ships

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

  1. Payment sheet

    // lib/stripe.ts
    export async function presentPaymentSheet(
      clientSecret: string,
    ): Promise<{ error?: string }> {
      const { error: initError } = await StripeModule.initPaymentSheet({
        paymentIntentClientSecret: clientSecret,
        merchantDisplayName: gasConfig.app.name,
      });
      if (initError) return { error: initError.message };
      const { error } = await StripeModule.presentPaymentSheet();
      return error ? { error: error.message } : {};
    }
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH STRIPE

Your Stripe integration, generated