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

Build apps with Resend

Resend delivers transactional emails from Supabase Edge Functions: welcome sequences, password resets, and notification digests. Goodspeed generates Resend 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 Resend build

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

ItemDescriptionStrength
supabase/functions/send-email/handler.tsA Supabase Edge Function that accepts a recipient, subject, and HTML body, then calls the Resend API to deliver the email. Used for welcome, reset, and digest flows.Data
Resend API key in Supabase secretsRESEND_API_KEY is stored as a Supabase secret (not in gas.config.ts) so it is never included in the app bundle or client-side code.Auth
Email templates in HTML stringsEmail HTML is generated inline in the Edge Function for each email type. Templates use the app name and branding from the function environment variables.Interface
Supabase auth email overridesSupabase's Auth email templates (confirm signup, reset password) are overridden to call the send-email Edge Function instead of Supabase's default mailer.Auth

Source: the Goodspeed generation pipeline · Transactional Email

REAL GENERATED CODE

A snippet from a Resend app the studio shipped

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

  1. Edge Function email send

    // supabase/functions/send-email/handler.ts
    import { Resend } from 'npm:resend';
    
    const resend = new Resend(Deno.env.get('RESEND_API_KEY'));
    
    Deno.serve(async (req) => {
      const { to, subject, html } = await req.json();
      const { error } = await resend.emails.send({
        from: 'Goodspeed <noreply@goodspeed.app>',
        to, subject, html,
      });
      if (error) return new Response(JSON.stringify(error), { status: 400 });
      return new Response(JSON.stringify({ ok: true }));
    });
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH RESEND

Your Resend app, generated