Skip to content

Getting Started โ€‹

Set up the Gang Sheet Builder end-to-end โ€” from a Shopify product to live orders โ€” in about 30 minutes.

How It Works โ€‹

The Gang Sheet Builder is a self-hosted web app that sits outside Shopify but integrates tightly with your store:

Customer on your Shopify product page
  โ†’ Selects a sheet size (variant)
  โ†’ Clicks "Create Gang Sheet"
  โ†’ Builder opens in a new tab (your deployed URL)
  โ†’ Customer uploads images, arranges layout
  โ†’ Clicks "Save & Add to Cart"
  โ†’ File uploads to your backend
  โ†’ Customer is redirected to Shopify cart
  โ†’ Customer checks out
  โ†’ Shopify webhook fires โ†’ you receive email with download link
  โ†’ You download and print the gang sheet

There are two components you need to host:

ComponentWhat it isHosting
FrontendThe React builder app customers useNetlify, Vercel, or your own server
BackendNode.js API for file storage, order tracking, and emailRailway, Render, or your own server

Step 1 โ€” Deploy the Backend โ€‹

The backend handles file uploads, download link generation, order management, and email notifications.

1a. Environment Variables โ€‹

Copy .env.example to .env in gang-sheet-backend/ and fill in:

env
PORT=5000
BASE_URL=https://your-backend-url.com
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-gmail-app-password
OWNER_EMAIL=you@yourdomain.com

Gmail App Password

Go to Google Account โ†’ Security โ†’ 2-Step Verification โ†’ App passwords and generate a password for "Mail". Use that as EMAIL_PASS โ€” not your regular Gmail password.

  1. Push the gang-sheet-backend folder to a GitHub repository.
  2. Go to railway.app and create a new project from that repo.
  3. Add your environment variables under Variables.
  4. Railway will auto-deploy. Note your deployment URL (e.g. https://gang-sheet-backend-production.up.railway.app).

1c. Verify the Backend โ€‹

Visit https://your-backend-url.com/health โ€” it should return {"status":"ok"}.

The admin dashboard is at https://your-backend-url.com/admin.


Step 2 โ€” Deploy the Frontend โ€‹

The frontend is the builder app customers interact with.

2a. Configure the Backend URL โ€‹

In gang-sheet-frontend-shopify/, create a .env file:

env
VITE_API_URL=https://your-backend-url.com

2b. Build โ€‹

bash
cd gang-sheet-frontend-shopify
npm install
npm run build

2c. Deploy to Netlify โ€‹

  1. Go to netlify.com and sign in.
  2. Click Add new site โ†’ Deploy manually.
  3. Drag the dist/ folder onto the upload area.
  4. Get your URL: https://your-site-name.netlify.app.

Alternatively, deploy to Vercel or upload the dist/ folder to any static hosting.


Step 3 โ€” Create the Shopify Product โ€‹

  1. In Shopify admin, go to Products โ†’ Add product.
  2. Set the title (e.g. Custom DTF Gang Sheet).
  3. Under Variants, add one variant per sheet size you offer. Name the option Size:
Option ValuePrice (example)SKU
22" ร— 24"$20.00GS-22x24
22" ร— 36"$30.00GS-22x36
22" ร— 48"$40.00GS-22x48
22" ร— 60"$50.00GS-22x60
22" ร— 72"$60.00GS-22x72
  1. Set Track inventory to No (it's made to order).
  2. Click Save and note each variant's ID.

Variant IDs

You can find variant IDs in the URL when you click a variant in the admin, or via the Shopify Admin API. They're needed to wire up the builder button.


Step 4 โ€” Add the "Create Gang Sheet" Button to Your Theme โ€‹

  1. Go to Online Store โ†’ Themes โ†’ Customize.
  2. Navigate to the Product page template.
  3. Add a Custom Liquid block.
  4. Paste the following, replacing YOUR_BUILDER_URL with your Netlify URL:
liquid
{% if product.handle == 'custom-dtf-gang-sheet' %}
<div style="margin: 20px 0;">
  <button
    onclick="openGangSheetBuilder()"
    style="background:#16a34a;color:white;padding:14px 28px;font-size:17px;font-weight:bold;border:none;border-radius:8px;cursor:pointer;width:100%;"
  >
    ๐ŸŽจ Create Your Gang Sheet
  </button>
</div>

<script>
function openGangSheetBuilder() {
  const variantId = document.querySelector('input[name="id"]')?.value;
  const selectedOption = document.querySelector('.product-form__input--variant option:checked');
  const size = selectedOption?.text.trim();
  if (!size) { alert('Please select a size first'); return; }
  const sizeFormatted = size.replace(/["'\s]/g, '').toLowerCase();
  const builderUrl = `YOUR_BUILDER_URL?variant=${variantId}&size=${sizeFormatted}&shop={{ shop.permanent_domain }}`;
  window.open(builderUrl, '_blank');
}
</script>
{% endif %}
  1. Replace YOUR_BUILDER_URL with your deployed frontend URL.
  2. Click Save.

Method B: Edit Theme Code (Advanced) โ€‹

Edit sections/main-product.liquid directly and add the button code after the product form.


Step 5 โ€” Configure Shopify Webhooks โ€‹

Webhooks notify your backend when an order is placed so it can send you the download email.

  1. Go to Shopify Admin โ†’ Settings โ†’ Notifications โ†’ Webhooks.
  2. Click Create webhook.
  3. Set:
    • Event: Order creation
    • Format: JSON
    • URL: https://your-backend-url.com/api/shopify/webhook/order-created
  4. Click Save.

Step 6 โ€” Test the Full Flow โ€‹

  1. Visit your product page.
  2. Select a size variant.
  3. Click Create Gang Sheet.
  4. In the builder, upload a test image and arrange it.
  5. Click Save & Add to Cart.
  6. Go to cart โ€” confirm the item is there with the gang sheet file URL in the line item properties.
  7. Place a test order (Shopify test mode).
  8. Check your email for the order notification and download link.
  9. Click the download link and confirm the file is a high-resolution PNG.

Builder outside Shopify

If you open the builder URL directly (not from the product page), "Save & Add to Cart" will upload the file but the cart redirect will fail โ€” this is expected. Always test from the product page.

SaasyLlama โ€” Niche Apps. Built Different.