Scaling Jeenax Without App Bloat
Rebuilding a high-volume D2C fashion store natively in Liquid to eliminate $148/mo in recurring app fees and streamline mobile shopping.
Apps Removed
App Fees Saved
The Project
Jeenax
Jeenax is a direct-to-consumer apparel and lifestyle brand delivering thousands of monthly orders across India.
Technologies Used
The Architecture Challenge
A generic Shopify theme accumulated 6 paid third-party apps for basic UX features, injecting unoptimized JavaScript libraries onto every page view.
Independent app scripts for slide carts, sticky buy bars, size charts, and bundling created render-blocking execution chains on mobile devices, slowing down interaction.
Execution Timeline
Script Audit
Mapped DOM execution pathways and identified the script payload of every third-party widget.
Native Theme Shell
Constructed a custom Shopify Liquid theme shell without external framework bloat.
Native Cart Drawer
Coded a native AJAX slide-out cart drawer, replacing third-party cart app scripts.
Product Utilities
Integrated sticky buy bars and size guides natively into the theme liquid files.
Engineering Decisions
How We Solved the Bottlenecks
Problem
Six distinct app subscriptions cost $148/mo and loaded external third-party assets.
Root Cause
Relying on standard App Store widgets for straightforward UI functionalities.
Solution
Wrote clean custom Liquid templates and native JavaScript to handle carts, sizes, and bundle flows locally.
Architectural Result
Reduced monthly app costs to $0 and removed over 700KB of external JavaScript.
Problem
External app scripts blocked initial page rendering on mobile networks.
Root Cause
Render-blocking script tags executed synchronously before visual elements could paint.
Solution
Implemented asynchronous script loading, responsive image markup, and clean DOM structures.
Architectural Result
Streamlined the critical rendering path for mobile visitors.
/* Native AJAX Cart Drawer Update Handler */
async function updateCartDrawer() {
try {
const response = await fetch('/cart.js');
const cart = await response.json();
// Update drawer item count badges
document.querySelectorAll('.cart-count').forEach(badge => {
badge.textContent = cart.item_count;
});
// Dynamically render cart items container
const cartItemsContainer = document.getElementById('cart-drawer-items');
if (cart.items.length === 0) {
cartItemsContainer.innerHTML = '<p class="text-gray-500 text-center py-8">Your cart is empty.</p>';
return;
}
cartItemsContainer.innerHTML = cart.items.map(item => `
<div class="flex gap-4 py-4 border-b border-white/5">
<img src="${item.image}" class="w-16 h-16 rounded object-cover" alt="${item.product_title}" />
<div class="flex-1">
<h4 class="text-xs font-bold text-white">${item.product_title}</h4>
<p class="text-[10px] text-gray-400">${item.variant_title || ''}</p>
<div class="flex justify-between items-center mt-2">
<span class="text-xs text-indigo-400">${item.quantity} x ${Shopify.formatMoney(item.price)}</span>
</div>
</div>
</div>
`).join('');
} catch (error) {
console.error('Error updating cart drawer:', error);
}
}Next Step
Explore our engagement models and price segments
Case Study FAQ
Frequently Asked Questions
Why replace Shopify apps with native Liquid code?
↓
Do native features support standard Shopify functionality?
↓
You May Also Like
Shopify Theme & Script Optimization
How we replaced slow third-party apps with native Liquid features to reduce script payloads and eliminate monthly app fees.
Headless E-Commerce Reference Architecture for 143 Fragrance
An internal prototype exploring how a decoupled Next.js + MongoDB storefront eliminates third-party script bloat and speeds up product navigation.
Ready to optimize your storefront's conversion?
Schedule a free strategy consult with our engineers. We will inspect your theme logic, locate load-blocking scripts, and deliver a detailed speed increase action plan.
