Available for Shopify projects · Vietnam (GMT+7)

Hi, I'm Duke.

I build the Shopify features your theme and apps can't — custom sections, discount logic and private apps that load fast.

Agencies & app founders: white-label Shopify dev, from spec to App Store.

4+years, Shopify-only
~/duke — zsh
❯ whoami
shopify freelancer · ex-BA, speaks merchant
❯ cat fixes.txt
slow stores · custom discounts · theme gaps
❯ cat stack.txt
liquid functions react remix laravel
❯
SCROLL

01 / services

What I can fix for you

Fixed-price projects or hourly. Every project starts with a written spec, so you know the price before I write code.

FOR STORE OWNERS

01

Custom theme sections

The layout your theme doesn't ship — built in Liquid, editable in the theme editor, no app fee.

02

Custom discounts & pricing

Tiered, bundle, BOGO or B2B pricing rules Shopify can't do out of the box — via Shopify Functions.

03

Store speed fix

Find what's slowing your pages (often app widgets) and fix Core Web Vitals: LCP, CLS, INP.

04

Private app & integrations

Connect your store to an ERP, CRM or warehouse, or automate the manual work your team repeats.

FOR AGENCIES & APP FOUNDERS

05

White-label app dev

Public or custom apps under your brand, from spec to App Store review.

06

Theme app extensions

App blocks and embeds that survive any merchant's theme without layout shift.

07

Embedded admin

Polaris UIs, token-exchange auth, billing and webhooks done the Built for Shopify way.

08

Maintenance & API upgrades

Quarterly API version bumps, bug fixes and on-call for apps already in production.

02 / about

Product brain,engineer's hands.

Most developers wait for a spec. I write it with you. I started as a business analyst, so I ask about your margins, your customers and your team before I talk about code.

For 4+ years I've built Shopify apps full-time — including Flicky, a discount app (volume tiers, custom pricing, BOGO) and Flicky Banner Popup Countdown. Now I bring that same production experience to your store or your app, one project at a time.

ROLE 01

Business Analysis

  • Turn "I want something like X" into a clear, priced spec
  • Push back on features that won't pay for themselves
  • Explain trade-offs in plain language, not jargon

ROLE 02

Engineering

  • Full-stack Shopify: Liquid, Functions, React / Remix, Laravel
  • Production habits: tests, staging on a dev store, rollback plan
  • Speed as a feature: every storefront change checked against Core Web Vitals

Toolkit

what I use day to day

Shopify Platform
Admin GraphQLApp BridgePolarisOAuth / token exchangeWebhooksApp ProxyTheme App Extensions (Liquid)Functions (WASM)BillingMetafieldsShopify CLI
Frontend
React 18ViteReact RouterReact QueryZustandVanilla JSTailwind
Backend
PHP 8LaravelMySQLRedisHorizon queues
Infrastructure
nginxCloudflareAWS CloudFrontDockerGitHub Actions
Data & Tools
GA4Lighthouse / PageSpeedPlaywrightPHPUnit

03 / case studies

Problems I've solved

Real production problems from Shopify apps I build — each with a full technical write-up.

Discount app · Shopify Functions

Pricing rules merchants can actually see and schedule

FunctionsAdmin GraphQLLaravel
Problem

Every volume and custom-pricing rule was merged into one automatic discount. Merchants couldn't see individual rules in Shopify admin, and the app had to run its own scheduling.

Solution

Moved to one automatic discount per rule, synced on create / update / delete. Shopify now owns scheduling and combinations; the Function code didn't change, so no redeploy.

Result

Each rule shows up natively in Shopify Discounts with its own dates and combine settings. [METRIC — e.g. support tickets about scheduling]

Read the full write-up

Storefront widget · Theme app extension

A discount widget that doesn't shift the page

LiquidVanilla JSCore Web Vitals
Problem

JS-injected widgets appear after paint and push the product page down — a direct hit to CLS. They also break against unknown theme CSS and risk showing stale prices from cache.

Solution

A Liquid gate reserves the exact space before paint, a skeleton matches the real height, and JS hydrates after LCP. Prefixed, scoped CSS survives any theme; the cache stores decisions, never prices.

Result

Near-zero layout shift from the widget, no theme conflicts, no stale prices after a merchant edits a rule.

Read the full write-up

Performance · Admin + storefront

A ~3x smaller config, a faster admin

MetafieldsReactVite
Problem

Rule config stored full Shopify GIDs in one JSON metafield read on every storefront page — heading for the size cap as catalogs grew. The embedded admin painted nothing until a large JS bundle loaded.

Solution

Stored numeric IDs instead of GIDs with a backward-compatible migration. In the admin, route code-splitting, vendor chunking and deferred work shrank the critical JS path.

Result

Metafield payload ~3x smaller and safely under Shopify's limits; faster first paint in admin. [METRIC — LCP before → after]

Read the full write-up

04 / work

Apps I've built

Live

Flicky Discount & Pricing

All-in-one discounts — volume tiers, custom pricing, BOGO, codes, cart goals and free shipping — built on Shopify Functions.

View on Shopify App Store
Live

Flicky Banner Popup Countdown

Multi-language banners, announcement bars, popups and countdown bars for sale campaigns.

View on Shopify App Store

05 / writing

Notes from the build

How I solve real Shopify problems — 11 write-ups, no fluff.

Building a Shopify Discount App: Engineering Notes

Stop Layout Shift in JS-Injected Shopify Widgets

Make a Storefront Widget Survive Any Merchant's Theme CSS

One Automatic Discount per Rule: A Shopify Functions Architecture

All 11 posts

06 / contact

Got a Shopify problem?Let's scope it.

Send your store URL and a few lines about what you need. I reply within 24 hours with questions or a time for a free call.

[email protected]