Skip to content

Goodspeed is in closed beta. New accounts join the waitlist and we open spots in batches. Join the waitlist

Skip to content
Goodspeed

Build apps with TypeScript

All generated app code is TypeScript, from Zod schemas and Supabase types through to every component and route file. Goodspeed generates TypeScript as a standard part of every app, so the output is a working codebase from day one, not a scaffold you have to finish yourself.

WHAT GETS GENERATED

Built into every TypeScript build

Every app Goodspeed generates with TypeScript includes these production-ready patterns, wired together from the first build.

ItemDescriptionStrength
tsconfig.json with strict modeGenerated tsconfig.json sets strict: true, noImplicitAny, and noUncheckedIndexedAccess to catch the largest class of generated-code bugs at compile time.Configuration
tsc --noEmit gate in release scriptscripts/release.mjs runs tsc --noEmit before EAS Build; any type error in generated code fails the build rather than shipping silently.Quality
Zod schemas for runtime validationlib/validation.ts exports emailSchema, passwordSchema, displayNameSchema, and feedbackSchema. The DevAgent generates additional app-specific schemas.Validation
Typed event cataloglib/events.ts exports a string-literal-union EVENTS catalog so every PostHog captureEvent call is checked against the declared event names at compile time.Analytics
Supabase generated typessupabase gen types --project-id produces a Database type. All Supabase queries reference it so missing columns surface as type errors, not runtime 404s.Backend

Source: the Goodspeed generation pipeline · Language

REAL GENERATED CODE

A snippet from a TypeScript app the studio shipped

This pattern comes straight out of the production groundwork every Goodspeed app is generated on. The studio generates TypeScript code like this for every app in the pipeline, not a hello-world sample you have to grow into a real app.

  1. Zod validation

    // lib/validation.ts: common Zod schemas
    export const emailSchema =
      z.string().email('Invalid email address').trim().toLowerCase();
    
    export const passwordSchema = z
      .string()
      .min(8, 'Password must be at least 8 characters')
      .max(128, 'Password must be at most 128 characters')
      .regex(/[A-Z]/, 'Password must contain an uppercase letter')
      .regex(/[0-9]/, 'Password must contain a number');
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH TYPESCRIPT

Your TypeScript app, generated