Skip to content
Service

Shopify development done by engineers, not theme-slingers.

Shopify development agency for custom themes, apps, integrations, Shopify Plus, and Hydrogen. Honest engineering, performance budgets, measurable outcomes.

What we engineer

Themes, apps, integrations, Plus.

Theme work done right is software engineering, not Liquid gluing. The difference shows up six months after launch.

OS 2.0 themes

Sections everywhere, metafield-driven content, documented handoff — the merchandising team keeps shipping.

Custom apps

Node/Remix, Admin GraphQL, webhooks, App Bridge — for pricing, wholesale, subscription logic, integrations.

Integrations

ERP (NetSuite, SAP, Oracle), 3PL, CRM, email, reviews, subscriptions — with idempotency + reconciliation.

Shopify Plus builds

Functions, Flow, B2B, multi-store, HQ — built Plus-first, not upgraded to Plus later.

Shopify Functions

Cart transforms, payment customization, checkout validation, pricing logic — at the edge, in milliseconds.

Shopify Flow

Order routing, fraud screening, inventory, fulfillment branching — reviewable, documented automation.

Hydrogen / headless

Honest decision tree. Hydrogen when it's right (editorial + CMS needs, React team, scale DX). Not by default.

Performance engineering

LCP < 2s, INP < 200ms, CLS < 0.1. Budgets enforced at every PR via Lighthouse CI.

Theme development

Theme work done right is software engineering, not Liquid gluing. The difference shows up six months after launch: a well-engineered theme gets updated by the merchant’s team without breaking. A glued-together theme needs an agency on retainer to change the color of a button.

What “well-engineered” means on Shopify OS 2.0:

Sections everywhere. Every page built from sections, not hard-coded templates. The merchandising team rearranges layouts without touching code. PDPs, collections, the home, editorial pages — all driven by sections and blocks.

Metafield-driven content. Product-specific extended copy (care instructions, materials, ingredient lists), collection intro copy, author bios on editorial content — stored in metafields with a typed admin view. The developer ships the schema once; content lives where it belongs.

Liquid that reads like documentation. Variable naming that reflects intent, not the first thing that worked. Comments on non-obvious logic (why we branch on customer tag here, not where the branch is). Shared snippets extracted when they’re used three times, not preemptively. No clever tricks; boring wins.

Theme settings as a product. The settings_schema.json that ships with the theme is itself UX. Settings grouped logically, labels that make sense to a merchandiser, helpful defaults, hide/show conditional logic when it helps, documentation links embedded.

Handoff documentation. Every theme we ship comes with a merchant-facing doc: how to add a new section, how to edit metafields, what each setting controls, when to call us vs. when to DIY. Versioned in the repo next to the Liquid files.

The theme stack we extend from: Dawn fork for simpler catalogs, Horizon (Shopify’s newer reference theme) when we want its patterns, fully custom when the brand earns it. We’ll tell you honestly which one fits your store.

Custom app development

Public or private, Node or Remix, Admin GraphQL or Storefront API, OAuth and webhooks and App Bridge. We build the apps that do the things no Shopify app in the App Store does — because the work is specific to your business, because public apps can’t access the admin surfaces you need, or because the App Store version is built for a different use case and it shows.

Typical custom app work:

  • Pricing and discount logic that doesn’t fit into native discount codes or Functions alone — tiered pricing, customer-specific rules, time-window campaigns
  • Wholesale and B2B extensions — quick-order forms, CSV upload, per-retailer catalogs, approval workflows
  • Subscription logic on top of ReCharge/Bold/Stay AI — custom skip/swap/pause UX, retention-triggered offers, bundle subscriptions
  • Integration middleware — bi-directional sync with ERP, 3PL, CRM when a direct Shopify app doesn’t exist or doesn’t handle your edge cases
  • Internal tooling — admin-only apps for merchandising, reporting, operations

We default to Remix + TypeScript for new apps (Shopify’s official stack), Node + Express for legacy. GraphQL Admin for all writes; REST only where GraphQL doesn’t support the operation. Database: Postgres via Prisma, or Shopify’s metafields/metaobjects when the data lives with the store.

Apps we ship have observability from day one — structured logs, error reporting (Sentry), minimum webhook idempotency, retry logic with exponential backoff. Integration apps reconcile daily, not just in real time, because webhooks will eventually miss.

If the app is going public, we handle the App Store submission process — screenshots, GDPR/privacy posture, billing integration, review cycles.

Integrations

The unglamorous work that keeps the store running. ERP (NetSuite, SAP, Oracle Fusion, Microsoft Dynamics, Brightpearl, Cin7), 3PL (ShipBob, 3PL Central, Deliverr, ShipStation, in-house WMS), CRM (Salesforce, HubSpot, Gorgias for helpdesk), email (Klaviyo, Postscript, Attentive, Omnisend), reviews (Yotpo, Okendo, Judge.me), subscriptions (ReCharge, Bold, Stay AI), merchandising (Rebuy, Searchspring).

What “integration done right” means:

  • Idempotency. Every write is safe to retry. No duplicate orders in NetSuite because a webhook fired twice.
  • Reconciliation. Daily batch job compares the source of truth on each side. Divergences flagged; either auto-corrected or surfaced for human review.
  • Observability. Every sync operation logs. Every error raises a meaningful alert. Dashboards show sync health per integration.
  • Rate-limit aware. Shopify’s bucket algorithm, NetSuite’s governance limits, whatever the partner platform uses — handled explicitly, not accidentally.
  • Schema evolution. Integrations that live for years handle schema changes on both sides without breaking.

We’ve written dozens of integrations. The pattern is always the same: webhooks for real-time signal, polling for completeness, reconciliation for correctness, alerts for when any of the three diverges.

Shopify Plus builds

Plus earns its premium at specific thresholds — and we’ll tell you honestly if you’re not at one. For teams that are, Plus unlocks the surfaces that matter for real-scale ecommerce:

  • Shopify Functions for cart transforms, payment customization, checkout validation, and pricing logic that runs in milliseconds at the edge
  • Shopify Flow for automation across commerce + ops (order routing, fraud, inventory, fulfillment branching)
  • Shopify B2B (companies, catalogs, price lists, approval workflows, customer terms)
  • Multi-store + multi-market via HQ
  • checkout.liquid on legacy Plus accounts (deprecated for new accounts, still relevant for migrations)
  • Merchant Success relationship with direct contacts, architectural review, early-access features, priority support

We build Plus from day one when the team’s there — not by “upgrading a theme to Plus later.” The Plus-only features get wired in during initial build: Flow automations for ops, Functions replacing any legacy Script logic, B2B architecture if wholesale is in scope, HQ topology if multi-store or multi-market.

For Plus migrations specifically, we run architectural review with Merchant Success before touching code. Enterprise Plus migrations typically run 14–20 weeks and cost $80k+.

Shopify Plus development agency

A dedicated section for Plus merchants evaluating partners specifically. Here’s our Plus posture:

  • Shopify Plus Partner with direct Merchant Success access
  • Plus sandbox builds for migrations and major feature work
  • Functions-first cart/checkout logic — we don’t ship Script-based logic to new builds
  • Multi-store architecture — HQ topology designed around business structure, not defaults
  • B2B deep work — native companies/catalogs, not app-based workarounds
  • Audit trails — Plus admin logs wired to external logging (Datadog, Honeycomb) for enterprise observability
  • SSO/SAML configuration via Okta, Azure AD, or whatever your identity provider is
  • Performance budgets tracked per environment; regressions block merge

Engagements typical: Plus migration ($80k+ fixed), new Plus build ($120k+ fixed), Plus retainer with dedicated squad ($20k+/mo).

Hydrogen and headless

Sometimes right, often overkill. Here’s the honest decision framework:

Headless wins when:

  • Editorial/CMS needs genuinely can’t live inside a Shopify theme (publication-grade content, custom CMS surfaces, editorial workflow)
  • The brand needs app-grade interactions (complex state, real-time UI, heavy client-side logic)
  • Scale or DX demands React (team is already React-native; talent pool argument)
  • A secondary front-end exists (mobile app sharing API with web)

Headless loses money when:

  • The stock Shopify storefront is already hitting CWV targets
  • The team is stretched thin — headless is higher DX cost forever, not just at launch
  • The motivation is “everyone says to go headless”

On Hydrogen specifically: Hydrogen + Oxygen is Shopify’s Remix-based headless stack with deep integration and Shopify-maintained infrastructure. It’s the right choice for Shopify-only headless builds. For multi-commerce backends or teams that want full control, Next.js or Astro on top of the Storefront API is the more flexible path. Both are things we ship.

We publish our decision tree upfront rather than defaulting to one answer. Most of the “should we go headless?” calls we take end with us recommending a great theme build instead.

Performance engineering

Every build ships with a performance budget committed in the first week — LCP < 2s, INP < 200ms, CLS < 0.1 on mobile. Budgets enforced at every PR via Lighthouse CI; regressions block merge.

What’s in the budget:

  • Liquid profiling — render time per section, eliminated waterfall in Liquid fragments
  • Image pipeline — AVIF/WebP with responsive srcset, eager above fold, lazy below, proper width/height to prevent CLS
  • Font strategy — preload critical font(s), font-display: swap, subset when possible
  • JS minimization — lazy hydration for interactive widgets, no render-blocking scripts, third-party tag audit
  • Aggressive caching — CDN headers, asset versioning, no-vary-search handling for UTM parameters
  • Critical CSS — inlined; non-critical deferred

Measured on real users (CrUX) and on every PR (Lighthouse). Budget breaches raise an alert; they don’t get auto-approved.

Our engineering process

  • Spec → spike → estimate → build → review → ship. Time-boxed exploration on anything risky before committing to an estimate.
  • PR per feature with a Lighthouse report attached. Performance regressions reviewed explicitly.
  • Feature flags for risky rollouts. Ramp % in Liquid or via an app-managed toggle.
  • Staging parity with production (same app stack, test data not live). Launches tested end-to-end before cutover.
  • 30-day stabilization bake on every launch with on-call engineer.

What we don’t do

Honesty saves time on both sides of the call.

  • Rebuild Shopify on a different platform. We’re a Shopify agency. If you’re leaving Shopify, we can help you decide to stay; we won’t help you leave.
  • Custom checkouts on non-Plus accounts. Shopify’s Checkout Extensibility has replaced the old checkout.liquid pattern; on non-Plus, you’re working within Extensibility limits, and we’ll say when those limits don’t fit.
  • Pre-revenue projects. Agency pricing rarely makes sense below $1M GMV.
  • AI-generated content. Not in copy, not in briefs, not in strategy documents. Human-written every time.
  • Handoffs without documentation. Every project ships with a merchant-facing operations doc and an engineering README.

Selected engineering work

Tech stack

What we ship on.

Liquid + OS 2.0

Theme architecture with sections-everywhere and metafield-driven content, documented for the merchant team.

Remix + TypeScript

Shopify's official stack for new apps. Node + Express for legacy maintenance.

Postgres + Prisma

For apps that need custom data models. Shopify metafields + metaobjects when data belongs with the store.

Observability day one

Sentry, structured logs, webhook idempotency, retry + reconciliation. Integrations that don't silently break.

Recent results

Selected work using this service.

See all case studies →

Related services

Next steps in the same engagement.

See all services →

Frequently asked

Common questions about this service.

Both, depending on fit. Extending Horizon or a Dawn fork is right for most catalogs. Fully custom themes make sense when the brand or UX needs can't be reached inside a theme's architecture without rewriting half of it anyway.
Yes — Node or Remix, Admin GraphQL, Storefront API, webhooks, App Bridge. We build custom apps for merchant-specific logic (pricing, wholesale, subscriptions, integrations) and public apps when a client wants to monetize.
Yes, when it's warranted. Headless makes sense for unique storefront needs, editorial-first sites, or brands who genuinely benefit from React. We publish an honest decision tree rather than defaulting to 'yes, everything should be headless.'
NetSuite, SAP, Brightpearl, Cin7, ShipBob, 3PL Central, Klaviyo, Gorgias, Postscript, ReCharge, Yotpo, Rebuy, Salesforce, HubSpot — and a long list of custom connectors. If it has an API, we've probably written to it.
Performance budget set before build starts. LCP < 2s, INP < 200ms, CLS < 0.1. Audited at every PR. Liquid profiling, lazy hydration, image pipeline, font strategy — all handled in the build, not as post-launch firefighting.
Yes. We work directly with Plus Merchant Success and have access to early-access features, migration tooling, and architectural review.

Scope a Shopify build.

Bring a requirements doc or just a mess we can untangle on the call.