<?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: VyaparNext</title>
    <description>The latest articles on DEV Community by VyaparNext (@vyaparnext).</description>
    <link>https://dev.to/vyaparnext</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4176429%2F97b3921d-713b-4ce3-93ed-960eb4138c01.png</url>
      <title>DEV Community: VyaparNext</title>
      <link>https://dev.to/vyaparnext</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vyaparnext"/>
    <language>en</language>
    <item>
      <title>One Catalogue, Two Channels: How We Think About Sharing Stock Between the Counter and the Website</title>
      <dc:creator>VyaparNext</dc:creator>
      <pubDate>Tue, 27 Oct 2026 05:50:20 +0000</pubDate>
      <link>https://dev.to/vyaparnext/one-catalogue-two-channels-how-we-think-about-sharing-stock-between-the-counter-and-the-website-3h45</link>
      <guid>https://dev.to/vyaparnext/one-catalogue-two-channels-how-we-think-about-sharing-stock-between-the-counter-and-the-website-3h45</guid>
      <description>&lt;p&gt;A garment shop in Surat has one maroon kurti left in size M. At 7:40 pm a customer at the counter picks it up. At 7:41 pm someone on the shop's website orders the same kurti, same size, same colour. (This is a composite example, not a real shop.)&lt;/p&gt;

&lt;p&gt;If the counter and the website keep separate stock counts, both sales go through. Someone has to phone the online customer the next morning and apologise. Do that a few times during Diwali and people stop trusting the website.&lt;/p&gt;

&lt;p&gt;We build VyaparNext by Smart Byte Labs, garment shop billing software made in Surat. This post isn't a tour of our code. It's how we think about one catalogue serving two channels, and the questions we'd ask of any system that claims to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two shops, one shelf
&lt;/h2&gt;

&lt;p&gt;Most shops that go online start with two systems: billing software at the counter and a separate e-commerce site. Each has its own product list and its own stock count. Someone reconciles them by hand, usually late at night, usually from memory.&lt;/p&gt;

&lt;p&gt;The idea behind sharing stock is simple to say: &lt;strong&gt;there is one shelf, so there should be one stock count.&lt;/strong&gt; A sale at the counter and an order on the website should both draw from the same number for that exact size and colour.&lt;/p&gt;

&lt;p&gt;It's harder than it sounds, for three reasons.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The catalogue has to be the same catalogue
&lt;/h2&gt;

&lt;p&gt;Sharing stock only works if both channels agree on what a "thing" is. In the &lt;a href="https://dev.to/vyaparnext/modelling-clothing-variants-why-a-kurti-isnt-one-product-2ei0"&gt;previous post in this series&lt;/a&gt; we argued that stock lives on the variant (one size in one colour), never on the design.&lt;/p&gt;

&lt;p&gt;That matters twice as much here. If the website sells "Kurti A, M, Maroon" and the counter scans a barcode that means "Kurti A (assorted)", there's nothing to share. The two channels have to point at the same variant rows, with the same sizes, colours and barcodes.&lt;/p&gt;

&lt;p&gt;A rough way to picture it (illustrative only, not VyaparNext's schema):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Illustrative only: a way to think about it, not our code.&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// "KURTI-A-M-MAROON"&lt;/span&gt;
  &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// "M"&lt;/span&gt;
  &lt;span class="nl"&gt;colour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// "Maroon"&lt;/span&gt;
  &lt;span class="nl"&gt;barcode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// printed on the tag&lt;/span&gt;
  &lt;span class="nl"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      &lt;span class="c1"&gt;// ONE number, used by both channels&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;StockMovement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// -1 for a sale, +n for a purchase or return&lt;/span&gt;
  &lt;span class="nl"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;counter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;website&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;reference&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// bill number or order number&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both channels write movements against the same variant. Neither one owns the stock.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Movements beat overwrites
&lt;/h2&gt;

&lt;p&gt;The easy way to "sync" is to copy a number: the counter says M maroon is 3, so set the website to 3. That breaks the moment both sides sell between copies. One sale quietly overwrites the other and stock comes out wrong.&lt;/p&gt;

&lt;p&gt;We think about stock as a history of movements instead. A purchase adds pieces, a bill removes one, a website order removes one, a return adds one back. The current count is the result of all of them. When two channels sell close together, both movements are kept, so the count stays honest even if it goes to zero (or briefly below it, which tells you exactly which sale needs attention).&lt;/p&gt;

&lt;p&gt;The same thinking runs through VyaparNext's Cloud Sync for counters: stock is recalculated from sales and purchases across devices rather than copied blindly, and when the same product is edited on two devices, the conflict is flagged so a person chooses what to keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The counter can go offline. The website can't wait.
&lt;/h2&gt;

&lt;p&gt;A garment shop counter has to keep billing when the internet drops. That's the whole point of &lt;a href="https://vyaparnext.com/cloud-sync" rel="noopener noreferrer"&gt;offline billing software with cloud backup&lt;/a&gt;. But a website keeps taking orders all night, whether the counter is online or not.&lt;/p&gt;

&lt;p&gt;So there's always a window where the two channels can't see each other. Good design admits that window instead of pretending it doesn't exist. The questions we keep asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What happens to the last piece?&lt;/strong&gt; For fast-moving sizes, some shops keep a small buffer off the website during the festive rush, so the last one or two pieces are sold at the counter only. It's a business choice, not a technical one, but the system should make it easy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who gets told when both sides sold the last piece?&lt;/strong&gt; A clear list of oversold orders beats a stock count that silently goes negative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does the counter catch up on its own?&lt;/strong&gt; When the connection comes back, bills made offline should flow in as movements, not as a pile of numbers to type in again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'd rather be plain about this than promise "instant" anything. Sync takes time, and a shop owner who knows how long it takes can plan around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where VyaparNext's plans fit
&lt;/h2&gt;

&lt;p&gt;This is how it maps to what we sell today, from the live &lt;a href="https://vyaparnext.com/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;POS Lite&lt;/strong&gt; is free to start on one counter. Billing, purchases and stock stay on that device, and there's no automatic cloud sync.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Sync&lt;/strong&gt; (₹299/month + GST) keeps counters in step about every hour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store&lt;/strong&gt; (₹25,000 setup + GST, then ₹1,200/month + GST) is a managed online store. It doesn't include the counter POS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commerce&lt;/strong&gt; (₹35,000 setup + GST, then ₹1,800/month + GST) is the plan where the counter and the website share inventory, orders and customers. A sale at the counter and an order on the website draw from the same stock.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a shop only needs the counter for now, POS Lite is enough. The shared-stock question only starts to matter once a website is actually selling the same pieces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three questions to ask any "one stock" system
&lt;/h2&gt;

&lt;p&gt;Whether you're building this or choosing a &lt;a href="https://vyaparnext.com/clothing-store-pos" rel="noopener noreferrer"&gt;POS software for garment shops&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do the counter and the website sell the same variant rows, down to size and colour?&lt;/li&gt;
&lt;li&gt;Is stock kept as movements (sales, purchases, returns) or copied as a number?&lt;/li&gt;
&lt;li&gt;What happens, and who is told, when both channels sell the last piece?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start free with POS Lite on one counter, or book a free demo on WhatsApp: +91 8160356061. More at &lt;a href="https://vyaparnext.com" rel="noopener noreferrer"&gt;vyaparnext.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Previously in this series: &lt;a href="https://dev.to/vyaparnext/modelling-clothing-variants-why-a-kurti-isnt-one-product-2ei0"&gt;Modelling Clothing Variants: Why a Kurti Isn't One Product&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>retail</category>
      <category>ecommerce</category>
      <category>india</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Modelling Clothing Variants: Why a Kurti Isn't One Product</title>
      <dc:creator>VyaparNext</dc:creator>
      <pubDate>Tue, 20 Oct 2026 05:58:00 +0000</pubDate>
      <link>https://dev.to/vyaparnext/modelling-clothing-variants-why-a-kurti-isnt-one-product-2ei0</link>
      <guid>https://dev.to/vyaparnext/modelling-clothing-variants-why-a-kurti-isnt-one-product-2ei0</guid>
      <description>&lt;p&gt;A shop owner points at a rack and says "that's one kurti." It's one design. It is not one product, at least not to the software at the counter.&lt;/p&gt;

&lt;p&gt;Take one straight-cut kurti in five sizes (S to XXL) and three colours. That's 5 × 3 = 15 things the shop can run out of separately. Fifteen stock counts, fifteen tags, fifteen answers to "do you have this in M?" (These are example numbers, not a real shop's catalogue.)&lt;/p&gt;

&lt;p&gt;We build VyaparNext, a counter-first POS for Indian clothing shops (VyaparNext by Smart Byte Labs, Surat). This post isn't a schema dump of our code. It's how we think about modelling clothing so that the counter, the stock count and the tag on the garment all agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three layers: design, variant, the thing on the shelf
&lt;/h2&gt;

&lt;p&gt;When we think about a clothing catalogue, it helps to keep three ideas apart:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The design&lt;/strong&gt; (the "product"): the kurti as the customer describes it. Name, category, photos, description. Nobody can buy "the design"; they buy one piece of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The options&lt;/strong&gt;: the axes the design varies along. For our catalogues that means &lt;strong&gt;size and colour&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The variant&lt;/strong&gt; (often called the SKU): one exact combination, like &lt;em&gt;Kurti A, M, maroon&lt;/em&gt;. This is what has a stock count, what gets a barcode tag, and what goes on the bill.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A rough, illustrative shape (not our actual schema):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Illustrative only: a way to think about it, not VyaparNext's code.&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Design&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// "Straight-cut festive kurti"&lt;/span&gt;
  &lt;span class="nl"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;       &lt;span class="c1"&gt;// ["S", "M", "L", "XL", "XXL"]&lt;/span&gt;
    &lt;span class="nl"&gt;colour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;     &lt;span class="c1"&gt;// ["Maroon", "Mustard", "Teal"]&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;design&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Design&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// "M"&lt;/span&gt;
  &lt;span class="nl"&gt;colour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;         &lt;span class="c1"&gt;// "Maroon"&lt;/span&gt;
  &lt;span class="nl"&gt;barcode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// printed on the tag&lt;/span&gt;
  &lt;span class="nl"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// counted per variant, never per design&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rule we hold to: &lt;strong&gt;stock lives on the variant, never on the design.&lt;/strong&gt; "We have 40 of Kurti A" is not useful at 8 pm on a festive Saturday. "We have 0 in M maroon and 6 in L maroon" is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "one product with a size field" breaks
&lt;/h2&gt;

&lt;p&gt;The tempting shortcut is one product row with size and colour typed in as free text on the bill. It looks simpler. It fails in predictable ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stock can't be counted.&lt;/strong&gt; If the bill says "Kurti A (M, maroon)" as text, the system knows a kurti sold but not which one. The register says &lt;em&gt;maal hai&lt;/em&gt;; the shelf says no M.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spelling drift.&lt;/strong&gt; "Maroon", "maroon", "Mehroon" and "Mrn" become four colours. Free text on a busy counter always drifts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reorders go blind.&lt;/strong&gt; You can't see that M and L sell out while XXL sits, because nobody recorded which size actually left the shop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Making each size and colour a real variant fixes all three, because there's nothing to type. You pick or scan.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other mistake: fifteen unrelated products
&lt;/h2&gt;

&lt;p&gt;The opposite shortcut is to create fifteen separate products, "Kurti A M Maroon", "Kurti A L Maroon" and so on. Now stock is right, but the design has disappeared:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The website can't show one kurti with a size and colour picker.&lt;/li&gt;
&lt;li&gt;Changing the description or photos means editing fifteen rows.&lt;/li&gt;
&lt;li&gt;Reports can't answer "how did Kurti A do this Navratri?" without someone adding them up by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why we keep the three layers. The variant carries stock and the barcode; the design keeps the group together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Barcodes belong to variants
&lt;/h2&gt;

&lt;p&gt;For a clothing counter, the barcode is the variant's identity in the physical world. In VyaparNext, each size and colour can have its own barcode tag. The flow we design around:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A purchase comes in, and stock goes &lt;strong&gt;up&lt;/strong&gt; for that exact size and colour.&lt;/li&gt;
&lt;li&gt;Tags are printed for those variants before the pieces reach the shelf.&lt;/li&gt;
&lt;li&gt;At the counter, staff scan the tag. The bill picks up that variant, and stock for that exact size and colour goes &lt;strong&gt;down&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The bill prints as a tax invoice (one tax rate) on a thermal printer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The point of scanning isn't speed alone. It's that the stock decrement happens on the right row without anyone choosing from a dropdown while three customers wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  Combinations grow fast, so make setup cheap
&lt;/h2&gt;

&lt;p&gt;Variants multiply. Five sizes and three colours is 15; six sizes and eight colours is 48 for one design. Two things keep that manageable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate, don't type.&lt;/strong&gt; Define the size list and the colour list once, and let the system create the combinations. Delete the ones the shop doesn't actually stock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk import.&lt;/strong&gt; VyaparNext supports CSV import for products, so a catalogue doesn't have to be keyed in one variant at a time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's also worth knowing other platforms' limits before you design a catalogue. Shopify's help centre, for example, says a product can have up to three options and up to 2,048 variants. That's plenty for most catalogues; it's just a number worth knowing up front.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline doesn't change the model
&lt;/h2&gt;

&lt;p&gt;A variant-level model has to work when the internet doesn't. On VyaparNext's POS Lite, billing, purchases and stock changes happen on the counter device, so a scan still decrements the right variant with Wi-Fi off. With Cloud Sync, devices sync about every hour, stock is recalculated from sales and purchases across devices, and a conflict is flagged when the same product was edited on two devices, so a person decides rather than the software quietly picking one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leaves you
&lt;/h2&gt;

&lt;p&gt;If you're building retail software for clothing, or choosing some, three questions tell you most of what you need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does stock live on each size and colour, or on the design?&lt;/li&gt;
&lt;li&gt;Can each size and colour carry its own barcode?&lt;/li&gt;
&lt;li&gt;Does billing decrement that exact variant, even offline?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;POS Lite is free to start, and paid steps (Cloud Sync at ₹299/month + GST, then Connected POS, Store and Commerce) are on &lt;a href="https://vyaparnext.com/pricing" rel="noopener noreferrer"&gt;vyaparnext.com/pricing&lt;/a&gt;. More at &lt;a href="https://vyaparnext.com" rel="noopener noreferrer"&gt;vyaparnext.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Previously in this series: &lt;a href="https://dev.to/vyaparnext/offline-first-billing-how-we-think-about-a-retail-counter-that-survives-the-cloud-blinking-3m5b"&gt;Offline-First Billing: How We Think About a Retail Counter That Survives the Cloud Blinking&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>retail</category>
      <category>database</category>
      <category>india</category>
      <category>startup</category>
    </item>
    <item>
      <title>Offline-First Billing: How We Think About a Retail Counter That Survives the Cloud Blinking</title>
      <dc:creator>VyaparNext</dc:creator>
      <pubDate>Tue, 13 Oct 2026 05:56:09 +0000</pubDate>
      <link>https://dev.to/vyaparnext/offline-first-billing-how-we-think-about-a-retail-counter-that-survives-the-cloud-blinking-3m5b</link>
      <guid>https://dev.to/vyaparnext/offline-first-billing-how-we-think-about-a-retail-counter-that-survives-the-cloud-blinking-3m5b</guid>
      <description>&lt;p&gt;On 15 September 2026, Shopify merchants were locked out of their admin for about four hours. &lt;a href="https://statusgator.com/blog/shopify-admin-outage-on-september-15-2026-merchants-locked-out-and-how-statusgator-caught-it-early/" rel="noopener noreferrer"&gt;StatusGator's write-up&lt;/a&gt; puts first reports at 09:14 UTC and the last around 13:26 UTC (roughly 2:45 pm to 7 pm IST). Storefronts mostly stayed up; the back office didn't. Every cloud platform has days like that.&lt;/p&gt;

&lt;p&gt;We build VyaparNext, a counter-first POS for Indian clothing shops (Smart Byte Labs, Surat). This isn't a stack deep-dive. It's how we think about one design question that outage raises for anyone building retail software: &lt;strong&gt;when the network goes, which tasks still have to work?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Works offline" is a per-task property
&lt;/h2&gt;

&lt;p&gt;As &lt;a href="https://www.posnic.com/offline-pos-software" rel="noopener noreferrer"&gt;Posnic points out&lt;/a&gt;, offline isn't one switch. So we think about it task by task:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task at the counter&lt;/th&gt;
&lt;th&gt;Needs network on the counter device?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scan a size/colour barcode and make the bill&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print the tax invoice on a thermal printer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update stock on a sale or purchase&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record payment as cash or Google Pay/PhonePe&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The customer's own UPI app completing the payment&lt;/td&gt;
&lt;td&gt;Yes, on &lt;em&gt;their&lt;/em&gt; phone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sync with other devices&lt;/td&gt;
&lt;td&gt;Yes (Cloud Sync, about hourly)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That UPI row is the one people forget. POS Lite can record a Google Pay or PhonePe payment without Wi-Fi, but the customer's UPI app still needs network. If the whole market is down, keep a cash fallback.&lt;/p&gt;

&lt;h2&gt;
  
  
  The principles we hold ourselves to
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The counter device owns the bill.&lt;/strong&gt; A sale is made and recorded on the device. Nothing in the billing path waits for a server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync helps; it never gates billing.&lt;/strong&gt; Cloud Sync (₹299/month + GST) runs about hourly across devices, recalculates stock, keeps seven daily snapshots (India time), and lets a new device load the shop's data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paying less should degrade features, not break the counter.&lt;/strong&gt; If Cloud Sync is cancelled, POS Lite keeps working on each device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One catalogue going upward.&lt;/strong&gt; On the Commerce plan, the counter and the online store share inventory, orders and customers, so the website reads the same stock count rather than a nightly copy.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The hard part: the hour after reconnecting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.bc4.com/blog/running-retail-pos-offline-and-syncing-sales-later" rel="noopener noreferrer"&gt;BC4&lt;/a&gt; says retailers often lose money "not during the outage itself, but in the hour after it ends." Two devices can change the same thing while apart.&lt;/p&gt;

&lt;p&gt;Our approach: when Cloud Sync runs, it recalculates stock and &lt;strong&gt;flags a conflict when the same product was edited on two devices&lt;/strong&gt;, so a person decides instead of the software silently picking a winner. Because sync is about hourly, not instant, a shop running two counters should still keep an eye on fast-moving pieces on peak nights.&lt;/p&gt;

&lt;p&gt;At closing, the end-of-day report shows totals, top items and a staff breakdown, which turns "yeh UPI kiska tha?" into a quick match against the drawer and the UPI app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost ladder, and what it says about the design
&lt;/h2&gt;

&lt;p&gt;From &lt;a href="https://vyaparnext.com/pricing" rel="noopener noreferrer"&gt;vyaparnext.com/pricing&lt;/a&gt; (checked 12 Oct 2026):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Monthly&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;POS Lite&lt;/td&gt;
&lt;td&gt;Free to start&lt;/td&gt;
&lt;td&gt;₹0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Sync (add-on)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;₹299 + GST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connected POS&lt;/td&gt;
&lt;td&gt;₹10,000 + GST&lt;/td&gt;
&lt;td&gt;₹600 + GST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Store&lt;/td&gt;
&lt;td&gt;₹25,000 + GST&lt;/td&gt;
&lt;td&gt;₹1,200 + GST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commerce&lt;/td&gt;
&lt;td&gt;₹35,000 + GST&lt;/td&gt;
&lt;td&gt;₹1,800 + GST&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For shops that run their own server, there is also a Connected POS option at ₹450/month + GST.&lt;/p&gt;

&lt;p&gt;The rule behind the ladder: the free tier must be a complete offline counter, and each paid step adds sync or a storefront, never the ability to bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the ten-minute test
&lt;/h2&gt;

&lt;p&gt;Turn off Wi-Fi and data on the billing device. Make a bill, print it, check stock. Turn the network back on and see what catches up by itself and what gets flagged. It tells you more than any spec sheet, including ours.&lt;/p&gt;

&lt;p&gt;More at &lt;a href="https://vyaparnext.com" rel="noopener noreferrer"&gt;vyaparnext.com&lt;/a&gt;. Previously in this series: &lt;a href="https://dev.to/vyaparnext/1499-is-only-the-first-line-the-real-cost-of-shopify-for-an-indian-fashion-store-18ml"&gt;₹1,499 Is Only the First Line&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>offlinefirst</category>
      <category>startup</category>
      <category>retail</category>
      <category>india</category>
    </item>
    <item>
      <title>₹1,499 Is Only the First Line: The Real Cost of Shopify for an Indian Fashion Store</title>
      <dc:creator>VyaparNext</dc:creator>
      <pubDate>Sun, 11 Oct 2026 09:59:06 +0000</pubDate>
      <link>https://dev.to/vyaparnext/1499-is-only-the-first-line-the-real-cost-of-shopify-for-an-indian-fashion-store-18ml</link>
      <guid>https://dev.to/vyaparnext/1499-is-only-the-first-line-the-real-cost-of-shopify-for-an-indian-fashion-store-18ml</guid>
      <description>&lt;p&gt;&lt;em&gt;Kavita ben and her shop are a composite of women's wear shop owners we have met in Gujarat. Names and details are changed. The numbers come from public price pages, checked in October 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Kavita ben runs a kurti and dress material shop in Rajkot. Twelve years at the same counter, and a WhatsApp broadcast list that sells half her new stock before it reaches the shelf.&lt;/p&gt;

&lt;p&gt;This year her son Harsh said what every son says: "Mummy, we need a proper website." He opened Shopify's India pricing page, saw â‚¹1,499 a month, and said, "That's less than the electricity bill."&lt;/p&gt;

&lt;p&gt;He was right about the first line. The trouble is that a store's bill has more than one line.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number on the pricing page
&lt;/h2&gt;

&lt;p&gt;Shopify's India pricing page is clear. Basic is â‚¹1,499 a month when you pay yearly, or â‚¹1,994 when you pay month to month. Grow is â‚¹5,599 a month yearly (â‚¹7,447 monthly), and Advanced is â‚¹22,680 a month yearly (â‚¹30,164 monthly). There is also an offer for new stores of three days free, then â‚¹20 a month for three months.&lt;/p&gt;

&lt;p&gt;For hosting, checkout and a polished admin, that is fair pricing. But for an Indian fashion store, it is the start of the bill, not the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The line most people miss: the third-party fee
&lt;/h2&gt;

&lt;p&gt;Shopify Payments, Shopify's built-in payment processing, is not available in India. India is not on Shopify's list of supported countries, so an Indian store has to use a third-party payment gateway.&lt;/p&gt;

&lt;p&gt;When you do that, Shopify adds its own third-party transaction fee: 2% on Basic, 1% on Grow and 0.6% on Advanced. That is on top of what the gateway charges. A typical Indian gateway's standard rate is about 2% per successful transaction, plus 18% GST on that fee.&lt;/p&gt;

&lt;p&gt;Here is a simple illustration. Say Harsh's website sells â‚¹2,00,000 a month on the Basic plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shopify's third-party fee at 2%: â‚¹4,000&lt;/li&gt;
&lt;li&gt;A gateway's fee at about 2%: â‚¹4,000, plus â‚¹720 GST on that fee&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is close to â‚¹8,700 a month in payment-related charges, already more than five times the plan fee. Grow cuts Shopify's share to 1%, but the plan costs more, so do the sum for your own shop.&lt;/p&gt;

&lt;p&gt;What about the 2026 Shopify Payments fee changes you may have read about? They mostly concern merchants who can use Shopify Payments. Reports describe a standardisation of older rates for some long-time US and Australian merchants from April, and a change from 6 April 2026 in how currency conversion fees are calculated. Parity, which tracks these rates, says standard US processing rates did not go up in 2026. For an Indian store, the line that matters is still the third-party fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  The apps a fashion store ends up needing
&lt;/h2&gt;

&lt;p&gt;Shopify keeps its core lean and lets apps fill the gaps. For a kurti shop, the gaps add up fast, and most apps are billed in US dollars every 30 days. Here is what we found on the Shopify App Store this month, with one example app for each job.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More options than size, colour and fabric.&lt;/strong&gt; Shopify allows three options per product. For a fourth, like fit or sleeve length, its own help centre points to an app. Globo Product Options has a free plan, and its add-on pricing starts at $9.90 a month. Infinite Options is $12.99 a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GST invoices.&lt;/strong&gt; Apps like GST Invoices India and GST Pro are free for up to 50 orders a month. Paid plans start at about $4.99 to $9.90 a month and go up with order volume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviews.&lt;/strong&gt; Judge.me has a generous free plan. Its paid plan is $15 a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp order updates.&lt;/strong&gt; For an Indian shop, this matters more than email. Apps start at about $3 to $5 a month, plus per-message charges as volume grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The theme.&lt;/strong&gt; Shopify's own themes are free. Paid themes in the Theme Store are a one-time purchase of about $100 to $500, with a median of about $300.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick one paid app for each of the first four jobs and the monthly app bill comes to roughly $30 to $45, before any message charges. None is outrageous alone. Together, they are a second subscription that grows as you grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The counter is a separate question
&lt;/h2&gt;

&lt;p&gt;Then there is the counter, where Kavita ben still makes most of her money.&lt;/p&gt;

&lt;p&gt;Shopify's plans include casual in-person selling for pop-ups and events. For a real shop, Shopify sells POS Pro, which adds staff roles, in-store inventory management and pickup. On its India page, POS Pro costs â‚¹7,000 a month per location. That is â‚¹84,000 a year for one shop.&lt;/p&gt;

&lt;p&gt;If you skip POS Pro and keep your old billing software, you now have two catalogues. The yellow anarkali in M sells at the counter at 6 pm, and the website still shows it in stock at 9 pm. Someone has to fix that by hand, every night, all through wedding season. We wrote about one family living this problem in &lt;a href="https://medium.com/@support_21429/one-kurta-144-variants-when-shopify-fits-an-indian-ethnic-wear-shop-and-when-it-doesnt-6f670f8d14b6" rel="noopener noreferrer"&gt;One Kurta, 144 Variants&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What one catalogue saves
&lt;/h2&gt;

&lt;p&gt;When Harsh added it all up for one shop on Shopify Basic, paid yearly, with POS Pro, the first year looked like this, before taxes, apps, theme and payment fees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic plan: â‚¹1,499 Ã— 12 = â‚¹17,988&lt;/li&gt;
&lt;li&gt;POS Pro, one location: â‚¹7,000 Ã— 12 = â‚¹84,000&lt;/li&gt;
&lt;li&gt;Total: about â‚¹1,02,000 a year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is when he called us.&lt;/p&gt;

&lt;p&gt;We are VyaparNext, built by Smart Byte Labs in Surat. Our tagline is "Simple. Affordable. Connected." VyaparNext is a retail POS built for fashion shops first, with a built-in website that shares the same catalogue as the counter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variants that fit a fashion catalogue.&lt;/strong&gt; Size and colour are part of how products are set up, and each variant can have its own barcode. Staff scan the tag and the bill takes that exact variant's price and stock.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tax invoices and offline billing at the counter.&lt;/strong&gt; The bill is a tax invoice (one tax rate) and prints on a thermal printer. Billing keeps working when the internet drops. VyaparNext does not file your GST return, so your CA still has a job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One catalogue for the counter and the website.&lt;/strong&gt; On the Commerce plan, the counter and the website share inventory, orders and customers. When the yellow anarkali in M sells at 6 pm, the website draws from the same stock count.&lt;/p&gt;

&lt;p&gt;Here is what that costs, from &lt;a href="https://vyaparnext.com/pricing" rel="noopener noreferrer"&gt;vyaparnext.com/pricing&lt;/a&gt; (fees in INR, excluding 18% GST):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;POS Lite:&lt;/strong&gt; â‚¹0. Offline billing, purchases, stock and customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Sync:&lt;/strong&gt; â‚¹299/month + GST. Hourly sync across devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connected POS:&lt;/strong&gt; â‚¹10,000 + GST setup, then â‚¹600/month + GST. Cloud inventory sync, with a website optional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store:&lt;/strong&gt; â‚¹25,000 + GST setup, then â‚¹1,200/month + GST. A managed online store on your own domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commerce:&lt;/strong&gt; â‚¹35,000 + GST setup, then â‚¹1,800/month + GST. The counter and the website share inventory, orders and customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Kavita ben's shop, Commerce comes to â‚¹56,600 in the first year (â‚¹35,000 + â‚¹1,800 Ã— 12) and â‚¹21,600 a year after that, before GST. Online payments still carry your payment provider's charges, as they do on any platform, but our pricing page lists no extra per-order platform fee on top of the plan. And you don't have to start there. You can start on free POS Lite at the counter and switch the website on when you are ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Shopify is the right choice
&lt;/h2&gt;

&lt;p&gt;To be fair, Shopify is excellent at what it is built for. If you sell mostly online, ship across India or abroad, and want a huge app ecosystem and a proven checkout, Shopify may well be worth every rupee, especially for brands with a team to manage the apps. And on price alone, Shopify Basic is cheaper in the first year for a shop that only needs a website. VyaparNext earns its place when the counter is the heart of the business.&lt;/p&gt;

&lt;p&gt;But if your shop lives at the counter, your catalogue runs in sizes and colours, and your evenings go into matching the register with the website, add up the whole bill before you choose. Look at all of it, not just the first line.&lt;/p&gt;

&lt;p&gt;Prices change, on Shopify, on app stores and on ours. Check the live pages before you decide.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;VyaparNext is built by Smart Byte Labs in Surat. Simple. Affordable. Connected. POS Lite is free to start at &lt;a href="https://vyaparnext.com" rel="noopener noreferrer"&gt;vyaparnext.com&lt;/a&gt;, and every plan is on &lt;a href="https://vyaparnext.com/pricing" rel="noopener noreferrer"&gt;vyaparnext.com/pricing&lt;/a&gt;. Send us your current monthly Shopify bill on WhatsApp at +91 8160356061, and we will add up both sides with you, honestly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Pradip Parmar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I write a short weekly letter for shop owners who sell at the counter and online. It's free at &lt;a href="https://vyaparnext.substack.com" rel="noopener noreferrer"&gt;vyaparnext.substack.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>startup</category>
      <category>business</category>
    </item>
  </channel>
</rss>
