Shatoronji carpet rugs are a type of handwoven carpet that are produced in the Rangpur district of Bangladesh. "Shatoronji" is a Bengali word that means "hundreds colors", which refers to the large number of vibrant colors used in these carpets.
The production of Shatoronji carpet rugs in Rangpur is a traditional craft that has been passed down through generations of skilled weavers. The rugs are made using a handloom, which is a wooden frame with vertical threads that are used to create the base of the rug. The weaver then adds horizontal threads to create the pattern of the rug, using a technique called "tufting".
The wool used in Shatoronji carpet rugs is sourced locally from jute and cotton that are raised in the surrounding area. The wool is dyed using natural dyes, which are made from plants, roots, and other natural materials. This gives the rugs their vibrant colors and unique patterns.
Shatoronji carpet rugs are known for their durability and high quality. They are often used as decorative pieces in homes, as well as in hotels and other public spaces. They are also a popular export item, with demand coming from countries all over the world.
In recent years, there has been a renewed interest in the traditional craft of making Shatoronji carpet rugs, and efforts are being made to promote and preserve this important part of Bangladesh's cultural heritage.
Chrome, Safari iOS/Mac, FB/Insta In-App সহ সকল ব্রাউজারের অর্ডার সমর্থিত
সকল মেনু সংযোজন-বিয়োজন ও সেভ কন্ট্রোল (মোবাইল ভিউ ও ডেস্কটপ ভিউ)
টপবার মেনু, "সাইজ অনুযায়ী শতরঞ্জি" ড্রপডাউন মেনু, "শতরঞ্জি সাইজ ও কালেকশন" ট্যাব এবং ফুটারের "জনপ্রিয় সাইজ ও কালেকশন" মেনু এখান থেকে সংযোজন (+), বিয়োজন (-), এডিট ও সেভ করুন।
সেভ করলে ডেস্কটপ নেভিগেশন এবং মোবাইল ড্রয়ার মেনু উভয় মাধ্যমেই তাৎক্ষণিক আপডেট হবে।
সাইজ, মূল্য ও ইনভেন্টরি স্টক এডিটর
প্রতিটি পণ্যের সাইজ, বিক্রয়মূল্য, পূর্বমূল্য ও স্টক সংখ্যা সরাসরি এডিট, নতুন সাইজ যোগ বা মুছে সেভ করুন।
ওয়েবসাইটের সম্পূর্ণ তথ্য ও বিবরণী এডিটর (সহজে এডিট, সংযোজন ও বিয়োজন)
কোনো কোডিং ছাড়াই সাইটের হেডার, হিরো ব্যানার, স্পেসিফিকেশন, পণ্যের বিবরণ, পলিসি পেজ, ফুটার এবং নতুন তথ্য ব্লক এক ক্লিকে এডিট, সংযোজন (+) বা বিয়োজন (-) করুন।
Chrome, Safari iOS/Mac, Firefox, Edge, Samsung Internet, Opera, Facebook/Instagram In-App Browser সহ যেকোনো ব্রাউজার থেকে গ্রাহক অর্ডার কনফার্ম করলেই নিমেষেই স্বয়ংক্রিয়ভাবে Google Sheets-এ নতুন রো যুক্ত হবে এবং অ্যাডমিন প্যানেলে লাইভ চলে আসবে।
গোপনীয়তা সুরক্ষা সক্রিয়: ওয়েব অ্যাপ URL ব্রাউজারের View-Source থেকে সম্পূর্ণ লুকানো (XOR Byte-Vault Encrypted) রয়েছে।
সহজ ৩-ধাপ সেটআপ:
১. sheets.new ওপেন করে Extensions > Apps Script এ যান।
২. নিচের কোডটি কপি করে Code.gs এ পেস্ট করুন।
৩. Deploy > New deployment > Select type: Web app সিলেক্ট করুন। Execute as: Me এবং Who has access: Anyone দিয়ে Deploy চাপুন এবং প্রাপ্ত Web App URL টি উপরের বক্সে পেস্ট করুন।
Universal Code.gs (doPost & doGet + JSONP):
/**
* Satranji Mart - Google Sheets 2-Way Universal Webhook (doPost & doGet)
* 100% Cross-Browser Engine: Chrome, Safari iOS/Mac, Firefox, Edge, Samsung Internet, Facebook & Instagram In-App WebViews
*/
var SHEET_NAME = "Orders";
var ADMIN_READ_TOKEN = "SC_ADMIN_PRIVATE_9928";
function doGet(e) {
// Public Store Configuration fetch (for real-time sync across any browser on Blogger)
if (e && e.parameter && e.parameter.action === 'getConfig') {
var savedCfg = PropertiesService.getScriptProperties().getProperty('STORE_CONFIG');
var cfgObj = savedCfg ? JSON.parse(savedCfg) : {};
return respond({ status: 'success', config: cfgObj }, e);
}
var reqToken = (e && e.parameter && e.parameter.authToken) ? String(e.parameter.authToken) : "";
if (reqToken !== ADMIN_READ_TOKEN) {
return respond({
status: "protected",
message: "🔒 Unauthorized Access Denied: Customer data is private and restricted to authorized Satranji Mart Admin only."
}, e);
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME) || ss.getActiveSheet();
var data = sheet.getDataRange().getValues();
if (data.length <= 1) {
return respond({ status: "empty", orders: [] }, e);
}
var orders = [];
for (var r = 1; r < data.length; r++) {
var row = data[r];
if (row[1]) {
orders.push({
date: String(row[0] || ''),
id: String(row[1] || ''),
customerName: String(row[2] || ''),
customerPhone: String(row[3] || '').replace(/^'/, ''),
customerAltPhone: String(row[4] || '').replace(/^'/, ''),
customerDistrict: String(row[5] || ''),
customerUpazila: String(row[6] || ''),
customerAddress: String(row[7] || ''),
items: [{ productTitle: String(row[8] || 'শতরঞ্জি কার্পেট'), size: 'প্রিমিয়াম', price: Number(row[9]) || 0, quantity: 1 }],
subtotal: Number(row[9]) || 0,
deliveryFee: Number(row[10]) || 0,
discount: Number(row[11]) || 0,
total: Number(row[12]) || 0,
paymentMethod: String(row[13] || 'cod').toLowerCase(),
trxId: String(row[14] || ''),
senderPhone: String(row[15] || '').replace(/^'/, ''),
status: String(row[16] || 'confirmed'),
orderNote: String(row[17] || '')
});
}
}
return respond({ status: "success", orders: orders }, e);
}
function doPost(e) {
var lock = LockService.getScriptLock();
try {
lock.waitLock(30000);
var rawText = (e && e.postData && e.postData.contents) ? e.postData.contents : "";
var body = {};
try { body = JSON.parse(rawText); } catch(err) { body = (e && e.parameter) ? e.parameter : {}; }
// Store Config Save Action
if (body && body.action === 'saveConfig' && body.config) {
PropertiesService.getScriptProperties().setProperty('STORE_CONFIG', JSON.stringify(body.config));
return respond({ status: 'success', message: 'Config saved to Google Sheets' }, e);
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME) || ss.insertSheet(SHEET_NAME);
// Auto setup Bengali headers with styling
if (sheet.getLastRow() === 0) {
var headers = [
"তারিখ ও সময়", "অর্ডার আইডি", "গ্রাহকের নাম", "মোবাইল নম্বর", "বিকল্প নম্বর",
"জেলা", "উপজেলা", "সম্পূর্ণ ঠিকানা", "পণ্য ও সাইজ", "উপমোট ৳", "ডেলিভারি ৳",
"ডিসকাউন্ট ৳", "সর্বমোট ৳", "পেমেন্ট মেথড", "TrxID", "প্রেরক নম্বর", "স্ট্যাটাস", "নোট/ব্রাউজার"
];
sheet.appendRow(headers);
var headerRange = sheet.getRange(1, 1, 1, headers.length);
headerRange.setBackground("#0a1128").setFontColor("#ffffff").setFontWeight("bold");
sheet.setFrozenRows(1);
}
// Parse order from e.postData.contents, e.parameter.data, or e.parameter (100% universal across all browsers & webviews)
var raw = "";
if (e && e.postData && e.postData.contents) {
raw = e.postData.contents;
} else if (e && e.parameter && e.parameter.data) {
raw = e.parameter.data;
} else if (e && e.parameter && e.parameter.orderData) {
raw = e.parameter.orderData;
}
var data = {};
if (raw) {
try {
data = JSON.parse(raw);
} catch(ex) {
if (raw.indexOf('data=') !== -1) {
try {
var sub = raw.substring(raw.indexOf('data=') + 5).trim();
data = JSON.parse(sub);
} catch(e2) {}
}
if (!data.id && raw.indexOf('{"') !== -1) {
try {
var jsonStart = raw.indexOf('{"');
var jsonEnd = raw.lastIndexOf('}');
if (jsonStart !== -1 && jsonEnd !== -1) {
data = JSON.parse(raw.substring(jsonStart, jsonEnd + 1));
}
} catch(e3) {}
}
if (!data.id) {
data = e.parameter || {};
}
}
} else if (e && e.parameter) {
data = e.parameter;
}
// Handle Status Update in-place if existing order row is found
if (data.action === "updateStatus" || (data.customerName && String(data.customerName).indexOf("SC_STATUS_UPDATE::") === 0)) {
var targetId = data.targetOrderId || String(data.customerName || "").replace("SC_STATUS_UPDATE::", "").trim();
var newSt = data.status || "pending";
var allVals = sheet.getDataRange().getValues();
var updatedRow = false;
for (var rIdx = 1; rIdx < allVals.length; rIdx++) {
if (String(allVals[rIdx][1] || "").trim().toUpperCase() === String(targetId).trim().toUpperCase()) {
sheet.getRange(rIdx + 1, 17).setValue(newSt);
updatedRow = true;
}
}
if (updatedRow) {
return respond({ status: "success", orderId: targetId, updatedStatus: newSt }, e);
}
}
// Smart deduplication: prevent duplicate rows if multi-layer delivery arrives almost concurrently
if (data.id) {
var lastRow = sheet.getLastRow();
if (lastRow > 1) {
var numCheck = Math.min(50, lastRow - 1);
var checkRange = sheet.getRange(lastRow - numCheck + 1, 2, numCheck, 1).getValues();
for (var i = 0; i < checkRange.length; i++) {
if (String(checkRange[i][0]).trim() === String(data.id).trim()) {
return respond({ status: "success", orderId: data.id, message: "Already recorded" }, e);
}
}
}
}
var formattedDate = Utilities.formatDate(new Date(), "Asia/Dhaka", "yyyy-MM-dd hh:mm:ss a");
var itemsSummary = "";
if (data.items && Array.isArray(data.items)) {
itemsSummary = data.items.map(function(i) {
var t = i.productTitle || i.title || "শতরঞ্জি";
return t + " (" + (i.size || "-") + ") x" + (i.quantity || 1) + " = ৳" + ((i.price || 0) * (i.quantity || 1));
}).join("; ");
} else {
itemsSummary = "শতরঞ্জি কার্পেট";
}
sheet.appendRow([
formattedDate,
data.id || ("ORD-" + Math.floor(1000 + Math.random() * 9000)),
data.customerName || "",
"'" + (data.customerPhone || ""),
data.customerAltPhone ? ("'" + data.customerAltPhone) : "",
data.customerDistrict || "",
data.customerUpazila || "",
data.customerAddress || "",
itemsSummary,
data.subtotal || 0,
data.deliveryFee || 0,
data.discount || 0,
data.total || 0,
(data.paymentMethod === "cod" ? "ক্যাশ অন ডেলিভারি" : (data.paymentMethod || "COD")).toUpperCase(),
data.trxId || "-",
data.senderPhone ? ("'" + data.senderPhone) : "-",
data.status || "confirmed",
(data.orderNote ? (data.orderNote + " ") : "") + (data.browser ? ("[" + data.browser + "]") : "")
]);
return respond({ status: "success", orderId: data.id }, e);
} catch (err) {
return respond({ status: "error", message: err.toString() }, e);
} finally {
lock.releaseLock();
}
}
function respond(obj, e) {
var json = JSON.stringify(obj);
if (e && e.parameter && e.parameter.callback) {
return ContentService.createTextOutput(e.parameter.callback + "(" + json + ")")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
return ContentService.createTextOutput(json)
.setMimeType(ContentService.MimeType.JSON);
}
মোবাইল ব্যাংকিং পেমেন্ট নম্বরসমূহ
সাধারণ ডেলিভারি চার্জ নির্ধারণ (টাকা)
ফ্রি ডেলিভারি চার্জ অফার পরিচালনা (Free Delivery Offer)
মোট অর্ডার0
মোট রাজস্ব৳০
গড় অর্ডার৳০
সম্পন্ন ডেলিভারি0
প্রতিষ্ঠানের লোগো ও ব্র্যান্ডিং পরিচালনা
আপনার শতরঞ্জি ক্রাফট ওয়েবসাইটের উপরের লোগো যেকোনো সময় পরিবর্তন করতে পারেন। ইমেজ লিংক দিয়ে অথবা ডিভাইস থেকে সরাসরি ছবি আপলোড করে সেভ করুন।
শতরঞ্জি ক্রাফট (GI-28 সার্টিফাইড)
হেডারে প্রিভিউ এভাবেই প্রদর্শিত হবে
হিরো ব্যানার এর ছবি পরিবর্তন ও পরিচালনা
ওয়েবসাইটের প্রধান হিরো সেকশনের (Hero Banner) আকর্ষণীয় শোকেস ছবি পরিবর্তন করুন। ইমেজ লিংক দিন অথবা সরাসরি মোবাইল/কম্পিউটার থেকে ছবি আপলোড করে সেভ করুন।
অ্যাডমিন পাসওয়ার্ড আপডেট ও সেভ
পাসওয়ার্ড ওয়েবসাইটের View-Source থেকে সম্পূর্ণ গোপন (Salted Hash Encrypted) থাকে।
হ্যাশ সুরক্ষা সক্রিয়
অ্যাডমিন প্যানেলের আলাদা গোপন লিংক (Dedicated URL)
সাধারণ ভিজিটরদের কাছ থেকে অ্যাডমিন প্যানেল সম্পূর্ণ গোপন রাখতে সাইটের ফুটার থেকে বাটন সরিয়ে নেওয়া হয়েছে। শুধুমাত্র নিচের আলাদা লিংক ভিজিট করে আপনি অ্যাডমিন প্যানেলে প্রবেশ করতে পারবেন:
১. আপনার সরাসরি অ্যাডমিন প্যানেল URL (বুকমার্ক করে রাখুন):
https://satranjimart.blogspot.com/?admin=portal
২. বিকল্প শর্টকাট লিংক:
https://satranjimart.blogspot.com/#admin-portal
শতরঞ্জি ক্রাফট — পোস্টিং ও ইউজার ম্যানুয়াল
১. ৪-থাম্বনেইল গ্যালারি ও বর্ণনা লেখার নিয়ম:
পোস্টে আপলোড করা ১ম ছবিটি প্রধান ডিসপ্লে হিসেবে প্রদর্শিত হবে। প্রথম ৪টি ছবি দিয়ে স্বয়ংক্রিয়ভাবে ৪টি থাম্বনেইল তৈরি হবে। ছবির নিচের বিবরণটি নিজে থেকেই প্রোডাক্ট ডেসক্রিপশন হিসেবে প্রদর্শিত হবে।
শতরঞ্জি ক্রাফট বাংলাদেশের যে কোনো প্রান্তে দ্রুত ও নির্ভরযোগ্য হোম ডেলিভারি নিশ্চিত করে।
ঢাকা সিটি কর্পোরেশন: হোম ডেলিভারি চার্জ মাত্র ৳৭০ (ডেলিভারি সময়: ২৪ থেকে ৪৮ ঘণ্টা)।
রংপুর সিটি কর্পোরেশন: লোকাল ডেলিভারি চার্জ মাত্র ৳৫০ (একই দিন বা ২৪ ঘণ্টা)।
ঢাকার বাইরে সমগ্র বাংলাদেশ: ক্যাশ অন হোম ডেলিভারি চার্জ মাত্র ৳১৩০ (সময়: ২ থেকে ৪ কার্যদিবস)।
ফ্রি ডেলিভারি অফার: ৫,০০০ টাকা বা তদূর্ধ্ব মূল্যের যেকোনো অর্ডারে ডেলিভারি চার্জ সম্পূর্ণ ফ্রি!
৩ দিনের রিটার্ন ও এক্সচেঞ্জ পলিসি:
আমাদের কাছে গ্রাহকের সন্তুষ্টিই সর্বোচ্চ অগ্রাধিকার। পার্সেল গ্রহণের পর যদি নিচের কোনো কারণ ঘটে, তবে আপনি ৩ দিনের মধ্যে পণ্য পরিবর্তনের সুযোগ পাবেন:
ডেলিভারির সময় পণ্যে কোনো সুতা ছেঁড়া বা তৈরির ত্রুটি পরিলক্ষিত হলে।
অর্ডারকৃত সাইজ অথবা রঙের পরিবর্তে ভুল পণ্য সরবরাহ করা হলে।
পণ্যটি অব্যবহৃত অবস্থায় মূল ট্যাগসহ রিটার্ন করতে হবে।
রিটার্ন বা এক্সচেঞ্জের জন্য আমাদের হেল্পলাইন +8801314116062 অথবা হোয়াটসঅ্যাপে ছবিসহ যোগাযোগ করুন।
শর্তাবলী ও ব্যবহার নির্দেশিকা:
শতরঞ্জি ক্রাফট প্ল্যাটফর্ম ব্যবহারের মাধ্যমে আপনি নিম্নলিখিত নিয়মাবলী মেনে নিতে সম্মত হচ্ছেন:
প্রতিটি শতরঞ্জি ১০০% হস্তনির্মিত হওয়ায় সাইজ বা প্যাটার্নে সামান্য মিলিমিটার তারতম্য হতে পারে, যা হস্তশিল্পের মৌলিক বৈশিষ্ট্য।
অর্ডার নিশ্চিত করার পূর্বে ডেলিভারির ঠিকানা ও মোবাইল নম্বর নির্ভুলভাবে প্রদান করার জন্য অনুরোধ করা হচ্ছে।
ক্যাশ অন ডেলিভারিতে পার্সেল রিসিভ করার সময় ডেলিভারি ম্যানের সামনে পণ্য যাচাই করার সুযোগ রয়েছে।
অনাকাঙ্ক্ষিত পরিস্থিতিতে কোনো পণ্যের স্টক শেষ হয়ে গেলে আমরা গ্রাহকের সাথে আলোচনা সাপেক্ষে দ্রুত বিকল্প ব্যবস্থা গ্রহণ করি।
গোপনীয়তা ও তথ্য নিরাপত্তা নীতি:
আপনার ব্যক্তিগত তথ্যের গোপনীয়তা রক্ষা করা আমাদের দায়িত্ব।
গ্রাহকের নাম, মোবাইল নম্বর ও ঠিকানা শুধুমাত্র পণ্য ডেলিভারি ও যোগাযোগ রক্ষার কাজে ব্যবহৃত হয়।
কোনো অবস্থাতেই গ্রাহকের সংবেদনশীল তথ্য তৃতীয় কোনো পক্ষের কাছে বিক্রি বা হস্তান্তর করা হয় না।
পেমেন্ট প্রক্রিয়াকরণে বিকাশ ও নগদ অফিসিয়াল প্ল্যাটফর্ম ব্যবহৃত হয়, যা শতভাগ এনক্রিপ্টেড ও নিরাপদ।
ঐতিহ্যের গল্প ও শতরঞ্জি ক্রাফট:
রংপুরের শতরঞ্জি বাংলাদেশের একটি অনন্য ভৌগোলিক নির্দেশক (GI-28) পণ্য। মুঘল আমল থেকে ব্রিটিশ শাসনামল পেরিয়ে আজ একবিংশ শতাব্দীতেও নিশবেতগঞ্জের তাঁতিদের হাত ধরে বেঁচে রয়েছে এই ঐতিহ্য।
শতরঞ্জি ক্রাফট সরাসরি স্থানীয় কারিগর ও তাঁতিদের সাথে কাজ করে মধ্যস্বত্বভোগী ছাড়াই ন্যায্যমূল্যে প্রিমিয়াম কোয়ালিটির সুতি ও পাট সুতোর শতরঞ্জি পৌঁছে দিচ্ছে সারা দেশের গ্রাহকদের কাছে।
আমাদের অঙ্গীকার: পরিবেশবান্ধব উপকরণ, টেকসই রঙ, আধুনিক অন্দরসজ্জার উপযোগী নান্দনিক নকশা এবং শতভাগ খাঁটি নিশবেতগঞ্জের তাঁতিদের হাতের বুনন।