<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jack Petersen</title>
    <description>The latest articles on DEV Community by Jack Petersen (@jackpetersencode).</description>
    <link>https://dev.to/jackpetersencode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951446%2F366a9708-d302-4d41-a6aa-07a0e1f8cc02.png</url>
      <title>DEV Community: Jack Petersen</title>
      <link>https://dev.to/jackpetersencode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jackpetersencode"/>
    <language>en</language>
    <item>
      <title>Building a Shopify app for the June 30 Scripts deprecation: V1.3 feature tour, pricing breakdown, and the bug that ate my Friday</title>
      <dc:creator>Jack Petersen</dc:creator>
      <pubDate>Tue, 26 May 2026 14:36:05 +0000</pubDate>
      <link>https://dev.to/jackpetersencode/building-a-shopify-app-for-the-june-30-scripts-deprecation-v13-feature-tour-pricing-breakdown-1nak</link>
      <guid>https://dev.to/jackpetersencode/building-a-shopify-app-for-the-june-30-scripts-deprecation-v13-feature-tour-pricing-breakdown-1nak</guid>
      <description>&lt;p&gt;Shopify Scripts — the Ruby-based payment customization tool that's been around for ~8 years on Shopify Plus — shuts off June 30, 2026. Editing's already disabled since April. Come June 30, any active payment Script silently stops firing and merchant checkouts revert to default.&lt;/p&gt;

&lt;p&gt;Estimates put 2,000-5,000 Plus merchants on Scripts for payment customization specifically. Each one has a hard migration deadline. I built &lt;a href="https://apps.shopify.com/paylogic" rel="noopener noreferrer"&gt;PayLogic&lt;/a&gt; for that.&lt;/p&gt;

&lt;p&gt;V1.3 just shipped and the product is feature-complete for the deadline. Here's the full picture: every feature, what tier it's on, and the reasoning behind the pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1 active install, 1 churned (paid 2 subscription charges, uninstalled within 25 min)&lt;/li&gt;
&lt;li&gt;Total revenue to date: $9.98&lt;/li&gt;
&lt;li&gt;Shipped 4 versions in 5 weeks: V1 → V1.1 → V1.2 → V1.3&lt;/li&gt;
&lt;li&gt;Live on the App Store: &lt;a href="https://apps.shopify.com/paylogic" rel="noopener noreferrer"&gt;apps.shopify.com/paylogic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Landing page + blog + free in-browser Scripts converter: &lt;a href="https://paylogic.dev" rel="noopener noreferrer"&gt;paylogic.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The feature tour
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conditions (when does a rule fire?)
&lt;/h3&gt;

&lt;p&gt;PayLogic ships 16 rule templates. The conditions you can build rules around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cart total ≥ or ≤ a threshold&lt;/li&gt;
&lt;li&gt;Item count threshold&lt;/li&gt;
&lt;li&gt;Shipping country (one or many)&lt;/li&gt;
&lt;li&gt;Cart currency (one or many)&lt;/li&gt;
&lt;li&gt;Shipping method title contains a keyword&lt;/li&gt;
&lt;li&gt;First-time customer (no prior orders)&lt;/li&gt;
&lt;li&gt;Returning customer (≥ N prior orders)&lt;/li&gt;
&lt;li&gt;Early customer (≤ N prior orders)&lt;/li&gt;
&lt;li&gt;Big spender (lifetime amount-spent threshold)&lt;/li&gt;
&lt;li&gt;Customer has any of these tags&lt;/li&gt;
&lt;li&gt;Customer is missing all of these tags&lt;/li&gt;
&lt;li&gt;Product in cart has any of these tags&lt;/li&gt;
&lt;li&gt;Risk composite (heuristic combining first-time + cart total + flagged shipping countries — fully merchant-configurable)&lt;/li&gt;
&lt;li&gt;Customer prior risk (uses Shopify's order risk model — more on this below)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Actions (what does the rule do?)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hide a payment method at checkout&lt;/li&gt;
&lt;li&gt;Rename a payment method ("Cash on Delivery" → "Pay at door — $5 handling fee")&lt;/li&gt;
&lt;li&gt;Reorder payment methods (move Shop Pay to position 1 for repeat customers, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plus
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-condition rules with AND/OR logic&lt;/li&gt;
&lt;li&gt;One-click Shopify Scripts importer — reads your existing Ruby, converts the common patterns to PayLogic rules&lt;/li&gt;
&lt;li&gt;Checkout UI extension that displays a merchant-authored message when a method is hidden&lt;/li&gt;
&lt;li&gt;Auto tag-cache backfill on install (so tag rules work immediately, no manual setup)&lt;/li&gt;
&lt;li&gt;Rule versioning with one-click rollback (last 50 snapshots, Plus tier only)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tier breakdown
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Starter — $1.99/mo (3 active rules)&lt;/strong&gt;&lt;br&gt;
Cart total, country, currency, item count, shipping method, first-time/returning/early customer rules. Hide/rename/reorder actions. Scripts importer. Email support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standard — $4.99/mo (unlimited rules)&lt;/strong&gt;&lt;br&gt;
Everything in Starter, plus custom customer-tag and product-tag rules (read any tag from your Shopify admin, not a hardcoded list), plus the big-spender lifetime-value rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plus — $9.99/mo (unlimited rules + advanced)&lt;/strong&gt;&lt;br&gt;
Everything in Standard, plus the risk composite rule, plus the customer prior-risk rule, plus rule versioning with one-click rollback, plus priority support with a same-business-day reply target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free Development — free&lt;/strong&gt;&lt;br&gt;
Full feature parity for Shopify Partner development stores. Agencies can test PayLogic on every client project at zero cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  The differentiator that earns the Plus upgrade
&lt;/h3&gt;

&lt;p&gt;The customer prior-risk rule exposes Shopify's native order risk signal: "hide Cash on Delivery for customers whose past orders Shopify flagged HIGH or MEDIUM risk."&lt;/p&gt;

&lt;p&gt;Scripts couldn't see this data. Functions can. For COD-heavy markets (MENA, SEA, LATAM) where return-to-origin rates sit at 25-35%, this single rule typically cuts RTO 5-15 percentage points. On a store doing $50k/mo of COD volume, that's $7-9k/year of recovered freight. The app pays for itself in roughly a week.&lt;/p&gt;

&lt;p&gt;This is the rule that exists &lt;em&gt;because&lt;/em&gt; the platform changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why $1.99 when competitors charge $9-25
&lt;/h2&gt;

&lt;p&gt;Most apps in the Shopify payment customization space price at $9-$25/mo with no free tier. I priced PayLogic far below that on purpose.&lt;/p&gt;

&lt;p&gt;The math: most payment Scripts in production do $1-50/month of value for the merchant — they stop the occasional bad order, not transform the business. If the app costs $20/mo, the value gap is thin and most merchants churn within a month.&lt;/p&gt;

&lt;p&gt;I'd rather be the obvious "yes" pick at the entry tier and earn the upgrade to $9.99 Plus via the risk rule. The Free Dev plan is bait for agencies who'd otherwise have to budget the app on every client install.&lt;/p&gt;

&lt;p&gt;Am I leaving money on the table? Maybe. I'll know once I have ~50 paid installs to look at the conversion mix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug that ate my Friday
&lt;/h2&gt;

&lt;p&gt;V1.3 (the custom-tag rules) shipped Thursday. I tested it on the dev store. Cash on Delivery wouldn't hide for the tagged customer. Spent ~8 hours debugging this.&lt;/p&gt;

&lt;p&gt;Surface symptom: the rule's condition (&lt;code&gt;customer_has_any_tag: ["myopia-tier-2"]&lt;/code&gt;) evaluated to false even though the customer clearly had the tag in Shopify admin.&lt;/p&gt;

&lt;p&gt;The actual cause was a 4-layer onion:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Function reads tags from a metafield (&lt;code&gt;paylogic.tags-cache&lt;/code&gt;), not the live tag field. We cache via webhook.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;customers/update&lt;/code&gt; webhook payload contains a &lt;code&gt;tags&lt;/code&gt; field. I trusted it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shopify redacts PCD-gated fields in webhook payloads&lt;/strong&gt; independently of Admin API access. The &lt;code&gt;tags&lt;/code&gt; field is redacted even when PCD Level 1 is approved. So &lt;code&gt;payload.tags&lt;/code&gt; was always empty.&lt;/li&gt;
&lt;li&gt;The handler wrote &lt;code&gt;{"tags":[]}&lt;/code&gt; to the cache every time. Worse: every metafield write itself fires a &lt;code&gt;customers/update&lt;/code&gt; webhook → which writes empty again → permanent feedback loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fix: ignore &lt;code&gt;payload.tags&lt;/code&gt; entirely. Use the customer ID from the payload to query Admin GraphQL for the real tags. The Admin API respects PCD properly (returns real tags when granted, errors when not).&lt;/p&gt;

&lt;p&gt;If you're building a Shopify app that touches PCD fields, you almost certainly need to know this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture (for the curious)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built on Shopify Functions (Rust → WASM), runs at Shopify's edge with sub-50ms p95 latency&lt;/li&gt;
&lt;li&gt;No carrier-service callback hacks — fully Functions-native&lt;/li&gt;
&lt;li&gt;Webhook-cached tag system: the Function reads tags from a metafield kept fresh by &lt;code&gt;customers/update&lt;/code&gt; and &lt;code&gt;products/update&lt;/code&gt; webhook handlers (so tag-based rules match against any tag with no scope or latency penalties)&lt;/li&gt;
&lt;li&gt;Rule config stored in payment customization metafields; full version history kept in Prisma on the app backend&lt;/li&gt;
&lt;li&gt;Free &lt;a href="https://paylogic.dev/scripts-converter/" rel="noopener noreferrer"&gt;Scripts → Rules converter&lt;/a&gt; on paylogic.dev runs the same parser as the in-app importer, so what merchants see in the converter is exactly what they'd get on install&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The product is done for V1. Bottleneck now is distribution, not features.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product Hunt launch in ~10 days (the converter tool is the marquee asset)&lt;/li&gt;
&lt;li&gt;Cold email to 50-100 Scripts-using Plus merchants sourced via BuiltWith&lt;/li&gt;
&lt;li&gt;This post&lt;/li&gt;
&lt;li&gt;Long-form blog content for SEO (already 2 posts up: Scripts migration guide and "5 ways to hide Cash on Delivery compared")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;13-month window until the deadline. The product is ready; distribution is the actual job for the next year.&lt;/p&gt;

&lt;p&gt;If you're on Shopify Plus and use Scripts, the free converter at &lt;a href="https://paylogic.dev/scripts-converter/" rel="noopener noreferrer"&gt;paylogic.dev/scripts-converter/&lt;/a&gt; might save you 10 minutes. Genuinely useful feedback if it misses patterns your scripts use.&lt;/p&gt;

&lt;p&gt;If you're building a Shopify app or pricing indie SaaS, happy to swap notes — pricing strategy, Shopify Functions, distribution tactics, all of it.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>saas</category>
      <category>buildinpublic</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
