← Back to Portfolio
Pre-launch
VariantCastVariant-Level Collection Merchandising Router
VariantCast is a Shopify app that lets merchants on Basic through Advanced plans display specific product variants in specific collections — a feature locked behind Shopify Plus ($2,000/month). Uses Product Metafields (JSON) to store variant-to-collection mappings and an App Embed Block (<1KB JS) to dynamically render the correct variant thumbnail, price, and URL on the storefront. Features a 3-layer webhook loop prevention system using Redis for idempotency, write-stamp tracking, and atomic processing locks. Built with a theme-agnostic DOM walker that works on all Online Store 2.0 themes with zero code edits.
VariantCast app screenshot
VariantCast app screenshot
TECH STACK
Remix
TypeScript
React
Polaris
Prisma
PostgreSQL
Redis (Upstash)
Shopify GraphQL API
Theme App Extensions
Sentry
FEATURESVariant-Level Collection Merchandising Router
🎯Variant-to-Collection MappingThree-step Polaris UI: select a product, pick a variant, choose target collections. Maps are stored as JSON Metafields on the product for zero-latency storefront access.
App Embed DOM SwapA <1KB synchronous JavaScript snippet injects into the collection page <head>, swaps the product image, price, and URL on DOMContentLoaded. Theme-agnostic: works on all OS 2.0 themes.
🛡️3-Layer Webhook Loop PreventionPrevents infinite webhook loops via Redis-backed idempotency deduplication (24h TTL), write-stamp tracking (60s TTL), and field-level diffing. Atomic processing locks prevent race conditions.
💳Free + Pro BillingFree tier: 10 active mappings. Pro tier: $29/month, 14-day free trial, unlimited mappings. Uses Shopify's native recurring charge billing API.
📋Mapping DashboardFull CRUD management with pagination, search, bulk delete, and per-mapping status. Product and collection browsers with variant-level detail and mapping badges.
🔁Automatic Cache UpdatesListens to products/update and collections/update webhooks to auto-refresh cached prices, images, and titles. Handles collection renames gracefully by re-keying all affected Metafields.
Interested in VariantCast?Get early access or learn more about the project.
View on GitHub →