Skip to main content

Overview

In this tutorial, you’ll create a checkout extension that displays estimated delivery dates based on the customer’s shipping address.

What You’ll Build

A checkout extension that:
  • Shows a delivery estimate banner
  • Updates based on shipping address
  • Uses Shopify UI components
  • Follows best practices

Step 1: Write Your Prompt

Go to your Synapse dashboard and enter this prompt:

Step 2: Review Generated Code

Synapse will generate TypeScript/React code like this:

Step 3: Validation

Synapse automatically validates your code:
✅ All Shopify UI components exist and are imported correctly
✅ React hooks are used properly (no conditional calls)
✅ Any GraphQL queries match Shopify’s schema
✅ Type safety and proper imports

Step 4: Self-Correction

If validation finds issues, Synapse automatically fixes them: Example Issue Found:
Correction Applied:
  • ✅ Fixed in attempt 1
  • Validation score: 95/100

Step 5: Deployment

Click “Deploy” and Synapse will:
  1. Push to GitHub: Code is committed to your repository
  2. Create Fly.io Service: Container is built automatically
  3. Run Shopify CLI: Extension is deployed to your dev store
  4. Auto-Release: Latest version is released

Step 6: Test in Checkout

  1. Go to your Shopify dev store admin
  2. Navigate to Settings → Checkout
  3. Click Customize
  4. Add your “Delivery Estimate” extension from the sidebar
  5. Click Save
Now test the checkout:
  • Add a product to cart
  • Go to checkout
  • Enter different shipping addresses (US vs international)
  • See the delivery estimate update automatically

Next Steps

Customize Styling

Learn about Shopify’s design system

Add Settings

Make your extension configurable

Build Functions

Create discount or shipping functions

Deploy to Production

Launch on real stores

Common Variations

Add a Countdown Timer

Show Shipping Method Impact

Troubleshooting

Make sure you’ve added it in the checkout editor at Settings → Checkout → Customize
Check that useShippingAddress() is imported from the correct package and the address object has a countryCode