Back to Lab
RAXXO Studios 9 min read

The Developer's Guide to Shopify (When You're Not a Shopify Dev)

You Know React. You Know APIs. Shopify Still Confuses You.

If you are a developer who has built web apps but never touched Shopify, you are not alone. Shopify's documentation assumes you are either a merchant clicking buttons or a dedicated Shopify developer who lives in Liquid templates. If you are a general-purpose developer who just needs an ecommerce backend, the learning curve feels unnecessarily steep.

I learned Shopify the hard way while building RAXXO's store. Custom sections, digital product delivery, webhook billing integration - all built by a developer who had zero Shopify experience a few weeks ago. Here is everything I wish someone had told me on day one.

Shopify powers millions of stores globally and processes enormous transaction volume. It is not going away. Understanding its architecture is a practical skill regardless of whether you love or hate the platform.

Liquid Basics for Developers Who Know JavaScript

Liquid is Shopify's templating language. If you know JavaScript template literals or Jinja2, you already understand 80% of Liquid. The mental model:

JavaScript Liquid
${variable} {{ variable }}
if (condition) { } {% if condition %} {% endif %}
array.forEach(item => { }) {% for item in array %} {% endfor %}
value.toUpperCase() {{ value | upcase }}
items.filter(i => i.active) {% for item in items %} {% if item.active %} {% endif %} {% endfor %}

The biggest difference: Liquid has no function definitions. You cannot write reusable functions. Instead, you use snippets (partial templates) and sections (self-contained modules). This feels primitive after working with React components, but it works within Shopify's rendering model.

Liquid also has no async operations, no fetch calls, no direct API access from templates. All data must come through Shopify's object model (product, collection, cart, customer objects) or through metafields. According to Shopify's developer docs, there are over 80 Liquid objects available, but you will use about 10 regularly.

Theme Architecture (The Mental Model)

Shopify themes have a strict file structure. Do not fight it:

theme/
  layout/        - Base HTML wrappers (think _app.tsx)
    theme.liquid  - The main layout, wraps everything
  templates/     - Page-type templates (think pages/)
    index.json    - Homepage template
    product.json  - Product page template
    collection.json - Collection page template
  sections/      - Reusable content blocks (think components/)
    header.liquid
    footer.liquid
    hero-banner.liquid
  snippets/      - Partial includes (think utils/)
    price.liquid
    product-card.liquid
  assets/        - CSS, JS, images
  config/        - Theme settings schema
    settings_schema.json
    settings_data.json

The key insight: JSON templates (index.json, product.json) define which sections appear on a page and in what order. Sections define the actual content. This separation is what powers the Shopify theme editor, where merchants drag and reorder sections visually.

If you come from Next.js (like I do), think of it this way: layout/ is your root layout, templates/ are your page components, sections/ are your reusable components, and the JSON files are your page configuration.

Custom Sections vs Apps

The first question every developer asks: "Should I build a custom section or a Shopify app?"

Use Case Custom Section Shopify App
Custom product layout Yes No
Landing page design Yes No
Custom checkout flow No Yes (Checkout UI Extensions)
Inventory management No Yes
Email automation No Yes
Custom analytics No Yes
Digital product delivery Partial (display only) Yes (for automation)

Rule of thumb: if it is visual and front-end, use a custom section. If it needs backend logic, webhooks, or third-party API calls, you need an app or external service. Most customization requests from developers can be solved with custom sections and theme code alone. Apps should be the exception, not the default.

For RAXXO's store, I built custom Liquid sections for product landing pages (Git Dojo and OhNine both have custom section-based landing pages), digital download delivery snippets, and collection layouts. The webhook billing integration with RAXXO Studio runs externally on Vercel, not as a Shopify app.

Webhook Integration

Shopify webhooks are how you get notified of events (orders, product updates, customer actions). For developers used to REST APIs, webhooks feel backwards - instead of polling for data, Shopify pushes data to your endpoint.

Setup is straightforward:

// Register a webhook via Shopify Admin API
POST /admin/api/2025-01/webhooks.json
{
  "webhook": {
    "topic": "orders/create",
    "address": "https://your-app.vercel.app/api/webhooks/shopify",
    "format": "json"
  }
}

Critical gotchas that will waste your time:

  • HMAC verification is mandatory. Shopify signs every webhook with your app secret. Verify it or you will accept fraudulent requests. The Shopify docs have a Node.js example that works.
  • Webhooks are not guaranteed to arrive once. They can be duplicated. Build idempotent handlers.
  • Respond with 200 within 5 seconds. If your handler takes longer, Shopify retries. Do heavy processing asynchronously.
  • Test locally with ngrok. Shopify cannot send webhooks to localhost. Use ngrok or Cloudflare Tunnel during development.

Want the complete blueprint?

We're packaging our full production systems, prompt libraries, and automation configs into premium guides. Stay tuned at raxxo.shop

The most common webhook integration failures come from missing HMAC verification, timeout issues, and not handling duplicate deliveries. Address all three from the start.

Shopify CLI

The Shopify CLI is how you develop themes locally. Install it with npm:

npm install -g @shopify/cli @shopify/theme

Key commands you will actually use:

# Start local development with hot reload
shopify theme dev --store your-store.myshopify.com

# Push theme changes to store
shopify theme push

# Pull current theme to local
shopify theme pull

# List available themes
shopify theme list

shopify theme dev starts a local proxy that hot-reloads your Liquid changes. It is slow compared to Next.js dev server (2-4 second reload vs instant HMR), but it works. Do not expect Vite-speed development. Shopify's architecture requires server-side rendering for every change.

Pro tip: use Claude Code for Liquid development. It handles Liquid syntax well, understands Shopify's object model, and can generate complete sections including the schema block. This is how I built all of RAXXO's custom sections - describe what I need, Claude Code generates the Liquid, I review and push.

Admin API (When You Need Backend Access)

The Shopify Admin API gives you programmatic access to everything: products, orders, customers, inventory, metafields. Two flavors: REST and GraphQL. Use GraphQL. It is more efficient for complex queries and Shopify is clearly investing more in the GraphQL API.

// Example: Fetch products with metafields via GraphQL
const query = `{
  products(first: 10) {
    edges {
      node {
        title
        handle
        metafields(first: 5) {
          edges {
            node {
              key
              value
              namespace
            }
          }
        }
      }
    }
  }
}`;

const response = await fetch(
  `https://your-store.myshopify.com/admin/api/2025-01/graphql.json`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Shopify-Access-Token': process.env.SHOPIFY_ACCESS_TOKEN
    },
    body: JSON.stringify({ query })
  }
);

Rate limits: REST API allows 40 requests per second. GraphQL uses a cost-based system where simple queries cost 1 point and complex queries cost more, with a 2,000-point budget per second. In practice, you will rarely hit limits unless you are doing bulk operations. For bulk data, use Shopify's Bulk Operations API instead of paginating through thousands of records.

When to Use Shopify vs Build Your Own

Scenario Use Shopify Build Custom
Physical product store Almost always Rarely
Digital product store Yes (with workarounds) If products are complex (SaaS, subscriptions)
Marketplace No Yes
Subscription service Partial (needs app) Better control with custom
Simple store with < 100 products Yes Waste of time
Complex UX requirements Possible but painful Better experience

RAXXO uses both: Shopify for the merch store (91 physical products + digital products like Git Dojo and OhNine) and a custom Next.js app for the SaaS (RAXXO Studio). Shopify handles checkout, payment processing, and order management. The SaaS handles everything Shopify cannot: real-time AI generation, user dashboards, usage tracking.

For developers deciding between the two: if your primary value proposition is a physical or simple digital product, use Shopify. You will spend 90% less time on payment processing, tax compliance, and order management. If your product IS the software (not just sold through software), build custom.

Real Examples from RAXXO's Store

Custom landing page sections: Git Dojo's product page uses 5 custom Liquid sections (hero, features grid, pricing comparison, FAQ, CTA). Each section has a schema block that makes it editable in Shopify's theme editor. Total development time: about 4 hours with Claude Code.

Digital download delivery: A custom snippet (digital-downloads-email.liquid) checks order tags and product handles to include download links in order confirmation emails. Files are hosted on Vercel (public/downloads/), not on Shopify. Simple, reliable, no app required.

Webhook billing: When someone subscribes to RAXXO Studio through Shopify, a webhook fires to the Vercel-hosted SaaS, which provisions the account and sets the subscription tier. This bridges Shopify's commerce with the custom app's functionality.

FAQ

Do I need to learn Liquid or can I use React/Next.js with Shopify?

For storefront customization, you need Liquid. Shopify's Hydrogen framework lets you build headless storefronts with React, but it is significantly more complex and you lose the theme editor. For most stores, learning basic Liquid (which takes 1-2 days for an experienced developer) is the faster path.

How long does it take a developer to build a custom Shopify theme?

Starting from an existing theme (like Dawn, Shopify's default), expect 20-40 hours for meaningful customization. Building from scratch is 80-120 hours. Using Claude Code for Liquid generation cuts both estimates by roughly 40-50%. Most developers should modify Dawn rather than starting from zero.

Is the Shopify CLI reliable for local development?

It works but it is slow. Expect 2-4 second reload times. The initial connection to your store can be flaky. My recommendation: use shopify theme dev for testing and shopify theme push for deploying confirmed changes. Do not rely on the local dev server for pixel-perfect preview - always verify in the actual Shopify preview.

Should I use Shopify apps or build custom integrations?

For standard needs (email marketing, reviews, upsells), use established apps. For custom business logic specific to your store, build external integrations via webhooks and the Admin API. Apps add monthly costs and can slow your store. Custom integrations have higher upfront effort but zero ongoing cost.

What is the best resource for learning Shopify development quickly?

Shopify's official developer documentation is actually good (unlike many platforms). Start with the "Themes" section, read about Liquid objects, then look at Dawn's source code on GitHub. Dawn is well-commented and demonstrates all standard patterns. Skip YouTube tutorials - most are outdated within months due to Shopify's rapid release cycle.

Dieser Artikel enthält Affiliate-Links. Wenn du dich darüber anmeldest, erhalte ich eine kleine Provision - für dich entstehen keine Mehrkosten. Ich empfehle nur Tools, die ich selbst nutze. (Werbung)