Six pillars, one data model

One platform. Every part of the sale.

Storefront, catalogue, checkout, fulfilment, point of sale and analytics — designed as one system, not six plugins glued together with webhooks.

Six pillars

Every pillar, one map.

Stock being counted against a tablet in a shop stockroom
Inventory, orders and payouts read from one source.

Storefront & builder

Sections, tokens, versions, instant rollback.

Catalogue & inventory

Options, variants, stock and Bangla copy on one product.

Checkout & payments

Four rails, one flow, tuned for COD-heavy baskets.

Fulfilment & couriers

Labels, pickups and delivery status inside the order.

POS & omnichannel

Same product, same stock, counter and web.

Analytics & API

Revenue, returns and rail mix — live, and exportable.

One product, many surfaces

The unified data model.

Most Bangladeshi merchants we've spoken with run at least three tools that each think they own the product record: a storefront theme, a spreadsheet for stock, and a courier panel for order status. Framique treats a product as one row with fan-out, not three rows kept in sync by hand.

A product has a canonical ID. Everything else — its storefront listing, its POS button, its stock ledger entry, its analytics dimension, its order line item — reads and writes against that same ID. There is no import job, no CSV round-trip, no "sync in progress" spinner between your shop and your counter.

What updates automatically when you edit one field
What updates automatically when you edit one fieldWhat updates without a second click
Price in the builderStorefront price, POS price, API price, cart already open on a customer's phone (on next fetch)
Stock count at checkoutAvailable-to-sell number on storefront, POS, and low-stock alerts
Bangla product nameStorefront (bn locale), receipt printed at POS, order confirmation SMS
Variant options (size/colour)SKU generation, per-variant stock, per-variant price, courier weight used for rate lookup
Order status from courier webhookOrder timeline, customer tracking page, analytics fulfilment-time metric

Assume a merchant sells a printed panjabi in three sizes and two colours — six SKUs from one product. A customer orders the medium, white variant from the storefront at 9:40pm. At 9:41pm the merchant sells the last medium, white unit in person at a physical counter using POS. Framique decrements the same stock ledger row twice, in order, and the storefront listing shows "out of stock — this size" before a third buyer can add it to cart. No separate stock file, no evening reconciliation.

The builder is where the shop becomes yours.

Drag sections, edit design tokens, publish a version — with instant rollback if a change hurts conversion. Every publish is a snapshot, not an overwrite.

Every publish is a version. Every version can be restored.
The builder is where the shop becomes yours. — capability table
The builder is where the shop becomes yours. — capability tableWhat it doesWho uses it
Section libraryHero, product grid, testimonial-free trust bands, FAQ, footer — drag to reorderStore owner, no developer
Token editorColour, type scale, spacing per store, inherited by every sectionStore owner or designer
Version historyEvery publish snapshotted; rollback in one clickStore owner
Custom domainPoint your own domain, TLS issued automaticallyStore owner
Draft/preview linksShare an unpublished version before go-liveStore owner, agency
Mobile-first canvasEvery section authored mobile-first, desktop is the enhancementBuilder engine

How a merchant actually uses this on a Tuesday

It's Eid-collection week. The merchant wants to swap the homepage hero for a festive banner without touching the rest of the site. She opens the builder, drags the existing hero section down one slot, drops in a new hero pointed at the Eid collection, and previews it on a draft link she sends to her business partner over WhatsApp. Her partner replies "the button colour is too dark to read" — she opens the token editor, nudges the CTA fill token, and the change propagates to every section using that token, not just the hero. She publishes. Forty minutes later a return customer complains the homepage looks different and she preferred the old layout — she opens version history and rolls back to the version from three days ago in one click, then re-applies just the button-colour fix on top of it.

Catalogue that speaks Bangla natively.

Options and variants generate real SKUs, each with its own stock and price. Bangla names and descriptions live on the same product record — not a translated mirror site.

One SKU, two languages, one stock number.
Catalogue that speaks Bangla natively. — capability table
Catalogue that speaks Bangla natively. — capability tableWhat it does
Options & variantsUp to 3 option dimensions (e.g. size, colour, material) auto-generate SKUs
Per-variant stockEach SKU carries its own available-to-sell count, reserved count, and reorder threshold
Bilingual fieldsName, description and search tags stored per-locale on one product record
Bulk import/exportCSV round-trip for merchants migrating an existing catalogue
Low-stock alertsThreshold per SKU, notification to owner and to any staff role with catalogue access
Category treeNested categories with per-category storefront sort order

How a merchant actually uses this on a Tuesday

A saree wholesaler restocks 40 units of a print across four colourways. She uploads a CSV with the new stock counts against existing SKU codes rather than recreating products from scratch. Before publishing the import, the system flags three rows where the SKU code doesn't match anything in the catalogue — likely a typo — so she fixes them in the CSV rather than silently creating four duplicate products. Stock updates instantly on the storefront and at the counter. That afternoon a customer messages in Bangla asking whether the maroon colourway is available in the largest size; the staff member checks the same product page, reads the Bangla name and description, and can answer from the same screen without switching to a translated mirror site.

Checkout built around cash on delivery.

COD is a first-class method, not a fallback: it carries its own fraud rules, its own return path and its own reconciliation, alongside bKash, Nagad, Rocket, Upay and card.

COD returns land back on the order, automatically.
Checkout built around cash on delivery. — capability table
Checkout built around cash on delivery. — capability tableReconciliationTypical use
Cash on delivery (COD)Matched against courier remittance report per orderMajority of first-time and rural buyers
bKashMatched against bKash merchant statement, per transaction IDRepeat urban buyers, small-ticket
NagadMatched against Nagad settlement reportRepeat urban buyers
RocketMatched against Rocket statementLegacy mobile-money customers
UpayMatched against Upay settlementGrowing segment, telecom-linked wallets
Card (Visa/Mastercard via gateway)Matched against gateway settlement batchHigher-ticket, urban, B2B

How a merchant actually uses this on a Tuesday

A customer in Rangpur adds three items to cart and chooses COD, because they've never paid this shop before and don't want to send money to an unfamiliar bKash number first. The order is created immediately with a fraud score computed from the customer's phone number, delivery area and order value — this one clears. The merchant's staff hand it to the courier that afternoon. Two days later the customer refuses one item at the door. The courier logs a partial return; Framique receives that status and updates the order to reflect the returned item and the adjusted amount actually collected, without the merchant needing to manually edit the order total or issue a separate refund record.

Labels, pickups and delivery status inside the order.

Book a courier, print a label and watch delivery status update on the order timeline — no separate courier dashboard open in another tab.

One order. One timeline. Every courier update lands on it.
Labels, pickups and delivery status inside the order. — capability table
Labels, pickups and delivery status inside the order. — capability tableBookingRate lookupStatus webhook
SteadFastIn-order bookingBy weight + areaLive
Pathao CourierIn-order bookingBy weight + areaLive
RedXIn-order bookingBy weight + areaLive
PaperflyIn-order bookingBy weight + areaLive
Manual/own riderManual status entryN/AManual update

How a merchant actually uses this on a Tuesday

Ten orders came in overnight. The merchant opens the order queue, filters to "ready to ship," and books all ten with one courier in a single batch action rather than opening each order separately. Labels print as a single PDF batch. Two hours later, one parcel is marked "failed delivery attempt" by the courier's webhook; that status appears on the order timeline automatically and the order moves into a "needs follow-up" view without anyone refreshing a courier's own tracking page. The merchant calls the customer, reschedules, and re-books the same label rather than creating a duplicate order.

Same product, same stock, counter and web.

Ring up a sale at a physical counter and the storefront stock count moves in the same instant — because it's the same row, not a synced copy.

The counter and the storefront read the same stock ledger.
Same product, same stock, counter and web. — capability table
Same product, same stock, counter and web. — capability tableWhat it does
Counter sale flowBarcode/search product, take payment (cash, bKash, card), print or SMS receipt
Shared stock ledgerSame availability number online and at counter, decremented at time of sale
Offline queueCounter can take sales during a connectivity drop; syncs when back online
Staff shift logEach POS sale is attributed to the logged-in staff account
Returns at counterRefund or exchange against the original order, whether it was placed online or in person

How a merchant actually uses this on a Tuesday

A shop has a small storefront and a physical counter in the same neighbourhood. A walk-in buys the last unit of a scarf that's also listed online. The staff member rings it up at POS; the online listing shows out-of-stock before the next online visitor can add it to cart. Later that day the shop's internet drops for twenty minutes during a routine outage — the counter keeps taking sales locally and queues them, syncing the stock decrements the moment connectivity returns, rather than freezing the till or trusting an outdated printed stock sheet.

Analytics you can defend in a meeting.

Every number traces to rows you can export. No modelled estimates, no rounded vanity metrics — and a REST API when you need the number somewhere else.

Every metric has a query behind it.
Analytics you can defend in a meeting. — capability table
Analytics you can defend in a meeting. — capability tableWhat it does
Live revenue dashboardOrders, revenue, average order value, updated per new order
Rail mix reportShare of revenue by payment method (COD/bKash/Nagad/Rocket/Upay/card)
Return-rate reportReturns by product, by rail, by delivery area
CSV exportAny report exports to CSV with the underlying row-level data
REST APIProducts, orders, inventory, customers — read and write, token-scoped
Webhook eventsOrder created, order status changed, payment settled, stock threshold crossed

How a merchant actually uses this on a Tuesday

At the end of the month, a merchant's accountant asks for the COD-versus-digital-payment split for a bank loan application. Rather than estimating, the merchant opens the rail-mix report, filters to the month, and exports the CSV — the accountant can trace every row back to an order ID if the bank asks for backup. Separately, the merchant's developer has built a small internal tool that emails a daily summary to the owner's phone; it polls the REST API for the previous day's orders rather than scraping the dashboard, because the numbers in the API and the numbers on screen are guaranteed to be the same query.

Integrations

Every rail, every courier — one checkout.

A courier rider collecting parcels for delivery
Courier booking and tracking without leaving the order.

Payment rails and couriers

bKashNagadRocketUpayCardCash on deliverySteadFastPathao CourierRedXPaperfly

Reduced motion stops the track and falls back to a static wrapped list.

The five official themes — and when each fits

Framique ships five official themes today. Each is a starting point you can still edit token-by-token in the builder — choosing a theme is not a lock-in decision.

Storefront theme variations previewed side by side
Themes change the storefront, never the data behind it.

Classic

General retail, apparel, giftingBalanced grid, neutral type scale, safe default
6–8 bands

Modern

Fashion, beauty, higher-margin goodsLarger imagery, tighter type, fewer bands per page
5–7 bands

Landing

Single-product or campaign launchesBuilt to convert one SKU or one collection, minimal navigation
3–5 bands

Supershop

Wide catalogues, groceries, multi-categoryDense grid, category rail up front, search-forward
8–10 bands

B2B

Wholesale, trade accounts, quote-based sellingLogin-gated pricing, quantity breaks, quote-request flow instead of instant checkout
6–9 bands

If the catalogue is under 30 SKUs and centred on one collection, start with Landing. If it's a wide multi-category shop with daily repeat buyers, start with Supershop. If pricing depends on the buyer's account (trade, wholesale), start with B2B — its checkout flow assumes a login before price is shown. Everything else starts with Classic or Modern depending on whether the aesthetic priority is breadth (Classic) or image-led minimalism (Modern).

Multi-language, Bangla-first

Bangla is not a translated skin.

Product fields, storefront copy, receipts, SMS notifications and staff-facing labels are stored per-locale from the schema up. Type never clips a matra: Bangla display type keeps a 1.35+ line-height box and drops inherited Latin negative tracking to zero. A product page is one record, two reading experiences — editing the Bangla name field fills a locale slot on the same SKU, so stock, price and variant logic stay singular even when the storefront is bilingual.

English

Printed panjabi — size M

বাংলা

প্রিন্টেড পাঞ্জাবি — সাইজ এম

Bangla support by surface
Bangla support by surfaceBangla support today
Storefront (customer-facing)Full: product, cart, checkout, order-status page
POS (staff-facing)Full: search, product labels, receipt
Order confirmation SMSFull, per-store default language setting
Analytics dashboardEnglish only today (see honesty band)
Admin/builder UIEnglish only today (see honesty band)

Roles & permissions

Scoped by role, not by trust.

A shop is rarely run by one person. Framique scopes access by role rather than giving every logged-in staff member full owner access.

Roles and permissions
Roles and permissionsCan seeCan do
OwnerEverythingEverything, including billing and staff management
ManagerOrders, catalogue, analyticsEdit catalogue, process orders and returns, cannot change billing
Catalogue staffProducts, stockAdd/edit products and stock, cannot see revenue reports
Counter/POS staffProducts, stock, POS salesRing up sales, process counter returns, no storefront/builder access
Fulfilment staffOrders, courier statusBook couriers, print labels, update manual delivery status
Read-only/accountantAnalytics, exportsView and export reports, no edit access anywhere

A shop owner hires a part-time counter assistant for Eid week. She's given the Counter/POS role — she can ring up sales and see stock, but cannot see the store's overall revenue report or change any product's price. When the temporary hire's contract ends, the owner deactivates the role in one action rather than needing to change a shared password everyone knew.

Automation & webhooks

The escape hatch for technical buyers.

Not every workflow fits inside the dashboard. Webhooks and the REST API let a merchant or their developer react to events the moment they happen.

Webhook events and typical automations
Webhook events and typical automationsTypical automation built on it
order.createdSend a custom WhatsApp confirmation via a third-party messaging tool
order.status_changedTrigger an SMS when a courier marks a parcel out for delivery
payment.settledPush a row into an external accounting spreadsheet or tool
inventory.threshold_crossedNotify a supplier's messaging channel to trigger a reorder
customer.createdAdd the customer to an email or SMS marketing list

A merchant's supplier only accepts reorders by a specific spreadsheet format sent over email. Rather than checking stock manually every few days, the merchant's developer subscribes to inventory.threshold_crossed, and a small script formats the affected SKUs into the supplier's expected spreadsheet and emails it automatically the moment stock crosses the reorder line — turning a recurring manual check into a one-time integration.

Read the webhook reference

Performance budget

A budget, not a vague "fast."

Storefronts are judged on load time by both customers on mid-range Android phones over 3G/4G and by search engines. Framique enforces a performance budget at the platform level rather than leaving it to each theme's discretion.

Platform performance budget
Platform performance budgetBudgetWhy it matters here
Largest Contentful Paint≤ 2.5s on a simulated mid-tier Android + 4G profileMajority of storefront traffic in this market is mobile, not desktop
Total JS shipped per storefront page≤ 170KB gzippedKeeps parse/execute time low on lower-end CPUs
Image deliveryResponsive srcset, WebP/AVIF with fallback, lazy below the foldProduct photography is heavy; this keeps it from dominating load time
Time to first byte≤ 400ms from a Bangladesh-region edgeCheckout abandonment correlates strongly with delay at this exact step

What we do not do yet

Framique is not everything. Being direct about the edges of the current product saves an evaluating merchant time and avoids a bad-fit sale.

  • No native marketplace listing sync (Daraz, Facebook Shop) yet — orders from those channels still need manual entry or a third-party connector.
  • No built-in accounting/VAT filing — analytics exports the row-level data; a bookkeeper or an external accounting tool still does the filing.
  • No multi-warehouse routing logic yet — stock is per-store today; a merchant with two physical warehouses currently manages them as one pooled stock number, not an automatic nearest-warehouse split.
  • No built-in email marketing composer — webhooks and the API can feed an external tool, but there is no native campaign builder inside Framique yet.
  • Admin/builder UI is English-only today — Bangla covers every customer-facing and staff-facing surface, but the merchant-side settings screens are not yet localised.
  • No offline-first storefront — the POS has an offline sale queue; the customer-facing storefront requires connectivity to load and checkout.
Read how access and data are scoped

One platform vs. stitching separate tools

One platform vs. stitching separate tools
One platform vs. stitching separate toolsStitched tools (typical setup)Framique
StorefrontOne theme platform (often foreign hosting, foreign payment defaults)Built in, Bangladesh-first payment defaults
PaymentsSeparate gateway integration per rail, manual reconciliation spreadsheetbKash/Nagad/Rocket/Upay/card/COD reconciled against orders natively
Inventory sync between web and counterManual recount or a third-party sync plugin, often lagging by hoursSame stock ledger, same instant
Courier bookingLog into each courier's own panel separately, copy tracking numbers back into orders by handBooked from the order, status returns automatically
Bilingual catalogueDuplicate product records in two languages, kept in sync manuallyOne product, two locale fields
ReportingExport from each tool, reconcile in a spreadsheet before a meetingOne dashboard, exportable, one query per metric
Staff accessShared logins or no access control at allRole-scoped accounts per staff function
Point of integration failureEach sync job is a place data can silently driftOne data model — nothing to keep "in sync" because there's one record

Frequently asked

Does Framique support bKash, Nagad, Rocket and Upay at checkout, or only card payments?
All four local wallets, plus card and cash on delivery, are supported at checkout with per-rail reconciliation against orders.
Can I keep cash on delivery as my main payment method?
Yes. COD is treated as a first-class payment method with its own fraud rules and return handling, not a fallback bolted onto a card-first checkout.
Which couriers can I book directly from an order?
SteadFast, Pathao Courier, RedX and Paperfly are integrated for in-order booking, label printing and status webhooks. Any other courier can be tracked with manual status updates.
Is the storefront actually bilingual, or is Bangla just a translated overlay?
Bangla is stored as locale fields on the same product, order and customer records used by the English side — not a separate translated site kept in sync manually.
How many storefront themes are available, and can I customise them?
Five official themes ship today — Classic, Modern, Landing, Supershop and B2B. Every theme remains fully editable in the builder down to individual design tokens.
Do the physical counter and the online storefront share the same stock count?
Yes. POS and storefront read and write the same stock ledger row per SKU; a sale at the counter is reflected online in the same instant.
Can I limit what my staff can see and do?
Yes. Roles (owner, manager, catalogue staff, counter/POS staff, fulfilment staff, read-only) scope both visibility and edit rights per account.
Is there an API if I need to connect Framique to another tool?
Yes. A REST API covers products, orders, inventory and customers, and webhooks fire on order, payment and inventory events for custom automation.
What doesn't Framique do today that I should know before switching?
No native marketplace sync (e.g. Daraz), no built-in accounting/VAT filing, no automatic multi-warehouse routing, and the admin/builder UI is English-only today — see the honesty section above for the full list.
How fast does the storefront load on an average customer's phone?
The platform enforces a budget of 2.5 seconds largest contentful paint on a simulated mid-tier Android device over a 4G connection, and caps shipped JavaScript per storefront page at 170KB gzipped.

See it against your own catalogue.

Import your products, connect one payment rail and one courier, and judge the whole system on real data — not a demo store.