ডকুমেন্টেশন · বর্তমান বিল্ড

PrizeX ডকুমেন্টেশন

PrizeX ইনস্টল করা, কনফিগার করা আর চালানোর জন্য যা যা দরকার সবই এখানে — অকশন, লটারি, মিস্ট্রি বক্স, আর্কেড গেম, মাল্টিভেন্ডর শপ আর ওয়ালেট/কয়েন অর্থনীতির পেছনে থাকা সেলফ-হোস্টেড PHP প্ল্যাটফর্ম। এই পেজ কোডবেসকে যেভাবে পাঠানো হয় ঠিক সেভাবেই তুলে ধরে, এটি কোনো মার্কেটিং সারাংশ নয়।

PHP 7.4+ MySQL / MariaDB Composer 38টি পেমেন্ট গেটওয়ে প্লাগইন 5টি স্টোরফ্রন্ট থিম

PrizeX আসলে কী

PrizeX একটি PHP-ভিত্তিক প্রাইজ, গেমিং ও মার্কেটপ্লেস প্ল্যাটফর্ম: অকশন, লটারি, মিস্ট্রি বক্স, একটি আর্কেড গেম ক্লাস্টার, মাল্টিভেন্ডর ই-কমার্স শপ আর ওয়ালেট/কয়েন অর্থনীতি — সবই একটিমাত্র সেলফ-হোস্টেড অ্যাপ্লিকেশনে। এটি আসে একটি প্লাগইন/থিম আর্কিটেকচার, একটি অ্যাডমিন প্যানেল আর 38টি পেমেন্ট গেটওয়ে প্লাগইন নিয়ে, যেগুলো কার্ড, ওয়ালেট, ক্রিপ্টো আর আঞ্চলিক প্রসেসর কভার করে; সাথে কার্নেল থেকেই বসানো 3টি ম্যানুয়াল পেমেন্ট পদ্ধতিও থাকে।

কোনো SaaS লক-ইন নেই: আপনি নিজের হোস্টিংয়ে এটি ইনস্টল করেন, ডাটাবেসের মালিক আপনি নিজেই, আর লাইসেন্সের সাথে আজীবন আপডেট পান। প্রতিটি ভার্টিক্যাল (অকশন, লটারি, মিস্ট্রি বক্স, গেম, শপ) অ্যাডমিন প্যানেল থেকে আলাদা আলাদাভাবে চালু বা বন্ধ করা যায় — একটি নতুন ইনস্টল শুধু একটি ভার্টিক্যালের পণ্য হিসেবেও চলতে পারে, আবার পুরো স্যুট হিসেবেও।

আর্কিটেকচার
প্লাগইন ও থিম চালিত

মূল কোড কখনোই কোনো প্লাগইনের উপর কঠোরভাবে নির্ভর করে না। প্রতিটি ভার্টিক্যাল, পেমেন্ট গেটওয়ে আর সোশ্যাল লগইন হলো plugins/-এর অধীনে একেকটি প্লাগইন, যেগুলোকে সাইটের বাকি অংশ না ভেঙেই অ্যাক্টিভেট, ডিঅ্যাক্টিভেট বা ডিলিট করা যায়।

ডেটা
MySQL / MariaDB, সরাসরি mysqli

টেবিল প্রিফিক্স tbl_, কোনো ORM নেই, বেশিরভাগই প্রিপেয়ার্ড স্টেটমেন্ট। প্রতিটি প্লাগইন একটি আইডেমপোটেন্ট db_delta() ইনস্টলারের মাধ্যমে নিজের টেবিলগুলোর মালিকানা রাখে আর সেগুলোর মাইগ্রেশন নিজেই সামলায়।

কীসের উপর চলে

PrizeX সাধারণ শেয়ার্ড হোস্টিং বা VPS-এ চলে — রিরাইট-সক্ষম একটি ওয়েব সার্ভার ছাড়া বিশেষ কোনো সার্ভার কনফিগারেশন লাগে না।

রানটাইম
PHP 7.4+
GD ও cURL এক্সটেনশন
ডাটাবেস
MySQL / MariaDB
মাইগ্রেশনের জন্য MariaDB লাগবেই*
ডিপেনডেন্সি
Composer
PHP প্যাকেজ ম্যানেজার
ওয়েব সার্ভার
Apache / LiteSpeed
কনফিগ উদাহরণসহ nginx সমর্থিত

* database/migrations/-এর বেশ কয়েকটি ফাইলে শুধু MariaDB-তেই থাকা ADD COLUMN IF NOT EXISTS এক্সটেনশনটি ব্যবহার করা হয়েছে। সাধারণ MySQL 8.0/8.4 সেটি নেয় না — ডাটাবেসের জন্য ডেভেলপমেন্ট আর প্রোডাকশন দুই জায়গাতেই MariaDB ব্যবহার করুন।

নতুন ইনস্টল চালু করা

নতুন সেটআপের জন্য কোনো ইনস্টল উইজার্ড নেই — আপনি সরাসরি স্কিমা ইমপোর্ট করে এনভায়রনমেন্ট ফাইলটি কনফিগার করে নেন।

  1. PHP ডিপেনডেন্সি ইনস্টল করুন:
    composer install
  2. এনভায়রনমেন্ট টেমপ্লেটটি কপি করে আপনার ডাটাবেস ক্রেডেনশিয়াল বসান:
    cp .env.example .env
  3. আপনার .env-এ যে ডাটাবেসের নাম দেওয়া আছে, তাতে database/production.sql ইমপোর্ট করুন — এতেই পুরো স্কিমা তৈরি হয়ে যায়।
  4. সাথে আসা অ্যাডমিন অ্যাকাউন্টটি বদলে ফেলুন (নিচের নোটটি দেখুন), তারপর /admin/-এ লগ ইন করুন।
সাথে আসা অ্যাকাউন্ট দিয়ে লগ ইন করবেন না। database/production.sql-এর সাথে একটি tbl_admin রো আসে (admin@wowcodes.in), যার পাসওয়ার্ড হ্যাশ প্রতিটি ইনস্টলেই হুবহু এক। লাইভে যাওয়ার আগে সেটি মুছে নিজেরটি বসিয়ে নিন:
php -r "echo password_hash('your-password', PASSWORD_BCRYPT), \"\n\";"
DELETE FROM tbl_admin; INSERT INTO tbl_admin (username, email, password, image, status, permission_settings) VALUES ('yourname', 'you@example.com', '<hash from the command above>', '', 1, 1);

লোকাল ডেভেলপমেন্টের জন্য Apache ছাড়াই PHP-র বিল্ট-ইন সার্ভার কাজ করে: php -S localhost:8000 router.php — তবে মনে রাখবেন, এই সার্ভার .htaccess পুরোপুরি উপেক্ষা করে, তাই router.php-এ একই রাউটিং নিয়মগুলো হাতে করে আবার বসানো আছে (দেখুন ওয়েব সার্ভার সেটআপ)।

এনভায়রনমেন্ট ভেরিয়েবল

এনভায়রনমেন্ট-নির্দিষ্ট সব সেটিংস থাকে .env-এ, যা vlucas/phpdotenv দিয়ে লোড হয়। .env.example কপি করে .env বানান (এটি git-ignored) আর প্রতিটি এনভায়রনমেন্টের জন্য আসল মানগুলো বসান — অন্তত ডাটাবেস ক্রেডেনশিয়াল, স্কিমা ইমপোর্টের আগেই।

যেসব সাইট-ওয়াইড সেটিংস এনভায়রনমেন্ট-নির্দিষ্ট নয় (অ্যাপের নাম, মুদ্রা, সক্রিয় প্লাগইন, সক্রিয় থিম আর ভার্টিক্যাল অনুযায়ী টগল) সেগুলো ফাইলে নয়, ডাটাবেসের tbl_settings-এ থাকে আর অ্যাডমিন প্যানেল থেকেই সামলানো হয়।

ওয়েব সার্ভার সেটআপ

রাউটিং ও সিকিউরিটির নিয়মগুলো — সুন্দর URL, .env/connection.php/লগ ফাইলে সরাসরি অ্যাক্সেস বন্ধ করা, আর আপলোড করা কনটেন্টকে PHP হিসেবে চলতে না দেওয়া — প্রজেক্ট জুড়ে ছড়িয়ে থাকা .htaccess ফাইলগুলোতে সংজ্ঞায়িত আছে। Apache আর LiteSpeed/OpenLiteSpeed এগুলো নিজে থেকেই পড়ে নেয়।

nginx-এ nginx.conf.example ব্যবহার করুন, যেখানে ওই প্রতিটি নিয়মই একটি nginx server{} ব্লক হিসেবে হুবহু ধরা আছে — আপনার এনভায়রনমেন্ট অনুযায়ী server_name, root আর PHP-FPM সকেটটি ঠিক করে নিন।

এই তিনটিকে সবসময় মিলিয়ে রাখুন। .htaccess (প্রোডাকশন), router.php (লোকাল php -S ডেভ সার্ভার) আর nginx.conf.example (nginx) — তিনটিই একই রাউটিং নিয়ম আলাদা আলাদাভাবে আবার লিখে রেখেছে। নতুন কোনো সুন্দর-URL রুট যোগ করা মানে তিনটিতেই আপডেট করা।

রিকোয়েস্ট আর্কিটেকচার

প্রতিটি স্টোরফ্রন্ট পেজ (index.php, item.php, …) includes/header.php-এর মধ্য দিয়ে বুট হয়, ঠিক এই ক্রমে:

জিওলোকেশন ও ভাষা connection.php themes.php hooks.php plugins.php routes.php menus.php assets.php plugins_load()

connection.php সেশন শুরু করে, .env-এর ক্রেডেনশিয়াল দিয়ে mysqli-র মাধ্যমে সংযোগ করে, tbl_settings-কে APP_NAME আর CURRENCY-র মতো কনস্ট্যান্টে লোড করে, আর বর্তমান ব্যবহারকারীকে একটি ডিভাইস-ফিঙ্গারপ্রিন্ট রো-সহ লগ ইন করায়। plugins_load() প্রতিটি সক্রিয় প্লাগইন বুট করে plugins_loaded হুকটি চালায় — এই বিন্দুতে এসেই সক্রিয় ভার্টিক্যালগুলোর আসল, বর্তমান তালিকাটি জানা যায়, আর সেজন্যই header.php এর পরে লিগ্যাসি সেটিংস ফ্ল্যাগগুলো (shop, multivendor, auction, lottery) প্লাগইনের প্রকৃত সক্রিয় অবস্থার সাথে আবার মিলিয়ে দেখে।

অ্যাডমিন প্যানেল এই বুটস্ট্র্যাপটি আলাদা করে আবার করে না — admin/includes/connection.php অ্যাডমিন-নির্দিষ্ট সেশন/এরর কনফিগ ঠিক করে, তারপর মূল includes/connection.php-কেই ইনক্লুড করে।

প্লাগইন সিস্টেম

একটি প্লাগইন হলো plugins/<slug>/plugin.php — হেডার-কমেন্টে রাখা মেটাডেটা, যা ফাইলটি না চালিয়েই পড়া হয় — সাথে সমৃদ্ধ ক্যাটালগ তথ্যের জন্য ঐচ্ছিক একটি plugin.json। সক্রিয় প্লাগইনগুলো tbl_settings.active_plugins-এ একটি JSON অ্যারে হিসেবে জমা থাকে।

  • টেবিলের মালিকানা — প্রতিটি প্লাগইন নিজের includes/schema.php সংজ্ঞায়িত করে, যা অ্যাক্টিভেশনের সময় ডাকা হয় আর একটি আইডেমপোটেন্ট db_delta() হেলপার ব্যবহার করে (CREATE TABLE IF NOT EXISTS + শুধু-যোগ-করা ALTER TABLE ADD COLUMN)। কোনো প্লাগইন অন্য প্লাগইনের টেবিলে কখনোই হাত দেয় না।
  • রেজিস্ট্রি আগে লোড হয়add_admin_page, add_route, add_cron_job, add_api_route আর register_module সবই কোনো প্লাগইন লোড হওয়ার আগেই সংজ্ঞায়িত হয়ে যায়, তাই প্লাগইনটি শেষ পর্যন্ত নিষ্ক্রিয় থাকলেও তার টপ-লেভেল কলগুলো কখনও ফ্যাটাল এরর ঘটায় না।
  • পরিচ্ছন্নভাবে মুছে ফেলা — কোনো প্লাগইন ডিলিট করলে তার uninstall.php চলে আর ফোল্ডারটি সরে যায়; plugins/<slug>/-এর বাইরের কোনো কিছুরই তার ফাইলের উপর কঠোর নির্ভরতা থাকা উচিত নয়, ফলে প্লাগইনটি চলে গেলেও সাইটের বাকি অংশ চলতেই থাকে।

থিম সিস্টেম

একটি থিম থাকে assets/themes/<slug>/-এ — একটি manifest.php, theme.css, থিম হুকের জন্য functions.php আর ঐচ্ছিক একটি components/। সক্রিয় থিমটি tbl_settings.active_theme-এ জমা থাকে, আর কিছুই সেট করা না থাকলে editorial ফলব্যাক হিসেবে কাজ করে।

কম্পোনেন্ট খোঁজা হয় এই ক্রমে: প্রথমে সক্রিয় থিমের নিজের components/ ফোল্ডার, তারপর কোনো প্লাগইনের register_module()-এ ঘোষিত কম্পোনেন্ট ডিরেক্টরি, তারপর শেয়ার করা রুট components/। বাস্তবে এর মানে হলো, শেয়ার করা ডিফল্টটি components/-এ একবারই থাকে, আর যেকোনো থিম — কিংবা সক্রিয় কোনো ভার্টিক্যাল প্লাগইন — নিজের কপি দিয়ে নির্দিষ্ট একটি কম্পোনেন্ট পাথ ওভাররাইড করতে পারে।

ডাটাবেস

টেবিল প্রিফিক্স tbl_, সরাসরি mysqli, বেশিরভাগই প্রিপেয়ার্ড স্টেটমেন্ট। SQL ফাইলগুলো, কর্তৃত্বের ক্রম অনুযায়ী:

  • database/core-schema.sql — হাতে রক্ষণাবেক্ষণ করা, শুধু কার্নেলের টেবিল; ভার্টিক্যাল/প্লাগইনের টেবিল ইচ্ছাকৃতভাবেই বাদ রাখা হয়েছে।
  • database/production.sql — জেনারেট করা (কোর স্কিমা + প্রতিটি প্লাগইনের নিজস্ব ইনস্টল রুটিন, একটি স্ক্র্যাচ ডাটাবেস থেকে ডাম্প করা)। নতুন ইনস্টলের জন্য আপনি এটিই ইমপোর্ট করবেন।
  • database/sandbox.sql — লোকাল ডেভেলপমেন্টের জন্য ডেমো/সিড ডেটাসেট।
  • database/migration.sql — চালু থাকা ইনস্টলের জন্য একত্রিত, আইডেমপোটেন্ট আপগ্রেড স্ক্রিপ্ট।
  • database/migrations/<slug>/up.sql (+ যেখানে ফিরিয়ে আনা সম্ভব সেখানে down.sql) — প্রতিটি আলাদা মাইগ্রেশনের জন্য একটি করে ফাইল।

মডিউল

প্রতিটি মডিউল একই ইনস্টলেশনের সাথেই আসে আর অ্যাডমিন প্যানেল থেকে আলাদাভাবে চালু-বন্ধ করা যায়।

অকশন

মাল্টিভেন্ডর সেলার পোর্টাল আর কমিশন ইঞ্জিনসহ লাইভ বিডিং। কোর প্লাগইন: plugins/auction

auction-anti-snipeauction-autobidderauction-buy-nowauction-notify-meauction-premiumauction-shippingauction-unlock

লটারি

নিজের মতো সাজানো সময়সূচি, পুরস্কার আর বিজয়ীকে জানানোর ব্যবস্থাসহ টিকিটভিত্তিক ড্র। কোর প্লাগইন: plugins/lottery

lottery-live-tickerlottery-print-ticket

মিস্ট্রি বক্স

রিভিল অ্যানিমেশনসহ নিজের মতো সাজানো প্রাইজ পুল — ব্যবহারকারী একটি বক্স কিনে সাথে সাথেই দেখতে পান কী জিতলেন। প্লাগইন: plugins/mystery-box

গেম ও রিওয়ার্ড

games/-এর অধীনে একটি আর্কেড ক্লাস্টার, সাথে এনগেজমেন্ট/আয়ের প্লাগইন:

2048bamboo-fortuneclick-speedemoji-funhex-burstodd-one-outword-search
earn-gamesearn-daily-bonusearn-offerwallsearn-watch-earn

শপ ও মার্কেটপ্লেস

প্রোমোশন আর মার্চেন্ডাইজিং টুলসহ একটি মাল্টিভেন্ডর ই-কমার্স স্তর। কোর প্লাগইন: plugins/shop, plugins/multivendor

couponsgift-cardsshop-abandoned-cartshop-b2bshop-flash-salesshop-merchandisingshop-opsshop-shippingdigital-assetsesim-store

ওয়ালেট, কয়েন ও ইনভেস্টিং

সব মডিউল জুড়ে ভাগ করা একটিমাত্র প্ল্যাটফর্ম-ওয়াইড ওয়ালেট।

finance-coin-pricingfinance-exchange-ratesfinance-tax-settingswallet-transferinvestwithdrawals

রেফারেল ও রিওয়ার্ড

referralsreferrals-multilevel

অথেনটিকেশন, ট্রাস্ট ও কমপ্লায়েন্স

google-loginfacebook-loginapple-loginemail-otprecaptchafraud-preventionrolesmembershipuser-impersonation

ইউটিলিটি

blogcachetawk-chatinsightsmanual-gateway-buildermobile-app-settings

অ্যাডমিন প্যানেল

অ্যাডমিন প্যানেল থাকে admin/-এর অধীনে, আর এটি স্টোরফ্রন্টের বুটস্ট্র্যাপ আলাদা করে আবার করে না — এটি অ্যাডমিন-নির্দিষ্ট সেশন/এরর কনফিগ ঠিক করে, তারপর মূল includes/connection.php-কেই ইনক্লুড করে। পেজগুলো রেজিস্টার হয় add_admin_page()-এর মাধ্যমে, যা সাইডবারের এন্ট্রি, ক্যাপাবিলিটি গেটিং, CSRF আর অথেনটিকেশনের কাঠামো সামলায়; শুধু-অ্যাডমিন JSON অ্যাকশনগুলো add_admin_ajax()-এর মাধ্যমে রেজিস্টার হয়ে admin/ajax.php?action=<slug> দিয়ে ডিসপ্যাচ হয়।

ক্যাটালগ ও কনটেন্ট

আইটেম, ব্যানার, পেজ, মেনু, ব্লগ।

পেমেন্ট

স্বয়ংক্রিয় ও ম্যানুয়াল গেটওয়ে ব্যবস্থাপনা, ম্যানুয়াল পেমেন্ট রিভিউ, পেআউট এক্সপোর্ট।

ব্যবহারকারী ও সেলার

ইউজার গ্রুপ, রোল, সেলারের তথ্য, ইম্পারসোনেশন।

রিপোর্ট ও লগ

লেনদেন/অর্ডার/ব্যবহারকারীর এক্সপোর্ট, ক্রন লগ, এরর ট্র্যাকিং, অ্যাডমিন অ্যাক্টিভিটি লগ।

মার্কেটিং

ইমেইল ক্যাম্পেইন, টেমপ্লেট, নিউজলেটার, পুশ নোটিফিকেশন, নোটিফিকেশন লগ।

প্লাগইন, থিম ও SEO

প্লাগইন ও থিম চালু/বন্ধ করা, পেজ অনুযায়ী SEO সেটিংস, সাইট-ওয়াইড সেটিংস।

স্টোরফ্রন্ট থিম

assets/themes/-এর অধীনে পাঁচটি থিম আসে, প্রতিটি ইনস্টলে অ্যাডমিন প্যানেল থেকেই বদলে নেওয়া যায়। প্রতিটি থিম শেয়ার করা কম্পোনেন্টগুলোর নিজস্ব কপি নিজের components/ ফোল্ডারেই রাখে।

Classic

সাদা কার্ড আর নরম ছায়াসহ সহজ, আধুনিক একটি চেহারা — প্রায় যেকোনো ধরনের দোকানের জন্যই নিরাপদ ও বহুমুখী পছন্দ।

Editorial

উষ্ণ কাগজি রং আর ঝকঝকে টাইপোগ্রাফিসহ পরিচ্ছন্ন, ম্যাগাজিন-ধাঁচের চেহারা — পরিপাটি ও নির্ভরযোগ্য স্টোরফ্রন্টের জন্য।

ডিফল্ট ফলব্যাক থিম
Casino

সোনালি ছোঁয়াসহ সাহসী, বিলাসবহুল একটি ডার্ক থিম — উত্তেজনা আর অভিজাত ভাব আনতেই তৈরি।

Bazaar

চিরাচরিত বাজার থেকে অনুপ্রাণিত উষ্ণ, সমৃদ্ধভাবে সাজানো চেহারা — ডান-থেকে-বাঁয়ে ভাষার সাপোর্টসহ।

Halloween

ভুতুড়ে, উৎসবমুখর মৌসুমি চেহারা — গাঢ় বেগুনি পটভূমিতে জ্বলজ্বলে কুমড়ো-কমলা হাইলাইট।

পেমেন্ট গেটওয়ে

38টি স্বয়ংক্রিয় গেটওয়ের মালিকানা প্লাগইনের হাতেই — প্রতিটি থাকে নিজের plugins/gateway-<slug>/ ফোল্ডারে আর add_payment_gateway()-এর মাধ্যমে নিজেকে কার্নেলে রেজিস্টার করে। একটি অ্যাক্টিভেট করলেই সেটি কাজ করতে শুরু করে; চেকআউট ডিসপ্যাচারে (payment_processor.php) কোনো নির্দিষ্ট গেটওয়ে হার্ডকোড করা নেই।

কার্ড ও গ্লোবাল প্রসেসর
2CheckoutAmazon PayAuthorize.NetBlueSnapCheckout.comMollieNMIPayPalPayeerSkrillStripeVenmoWise
আঞ্চলিক ও স্থানীয় প্রসেসর
AamarpayBkashCashfreeCashmaalFlutterwaveGoCardlessInstamojoInTouchMercado PagoMidtransM-PesaNagadOpenPixPaystackPaytmPayURazorpaySSLCommerz
ক্রিপ্টোকারেন্সি
BinanceBlockchain.comCoinbase CommerceCoinGateCoinPaymentsMoonPayNOWPayments
ম্যানুয়াল (নির্দেশনা / QR ভিত্তিক)
UPIBank TransferPayTM QR

3টি ম্যানুয়াল পদ্ধতি কার্নেল থেকেই বসানো gateway_type = 'manual' রো, কনফিগার করার মতো কোনো init/verify কোড এদের নেই — এগুলো শুধু পেমেন্টের নির্দেশনা বা একটি QR কোড দেখায়। manual-gateway-builder প্লাগইনটি অ্যাডমিনকে কোডে হাত না দিয়েই আরও কাস্টম ম্যানুয়াল পেমেন্ট পদ্ধতি যোগ করতে দেয়।

কিছু গেটওয়ে (Stripe, Razorpay, Midtrans, Venmo) এমন চেকআউট ফ্লোর জন্য একটি render হুকও রেজিস্টার করে যেগুলোর ক্লায়েন্ট-সাইড JS দরকার হয় — একটি Stripe Checkout বুটস্ট্র্যাপ, কিংবা এমন কোনো Razorpay/Midtrans/Braintree SDK যার জন্য আগে সার্ভারে একটি অর্ডার ID বা টোকেন তৈরি করে নিতে হয়। বাকি প্রতিটি গেটওয়ে কার্নেলে বাড়তি কোনো তার না জুড়েই কাজ করে।

API ও AJAX লেয়ার

  • api/v1/ — মোবাইল অ্যাপ আর বাইরের কনজিউমারদের জন্য JWT-অথেনটিকেটেড REST API। api/v1/middleware/*.php Authorization: Bearer <token> হেডারটি যাচাই করে। প্লাগইনগুলো add_api_route()-এর মাধ্যমে নিজেদের এন্ডপয়েন্ট যোগ করে।
  • ajax/ — স্টোরফ্রন্টের নিজস্ব JS-এর (কার্ট, কুপন, নোটিফিকেশন) জন্য সেশন-কুকি-অথেনটিকেটেড অভ্যন্তরীণ AJAX। কোনো টোকেন স্তর নেই — এটি connection.php-এর তৈরি করা PHP সেশনের উপরেই নির্ভর করে।
  • টপ-লেভেলে আলগা api/ — সংস্করণহীন বিবিধ এন্ডপয়েন্ট, যেমন geo_location.php, exchange-rate.php আর offerwall_postback.php

মোবাইল অ্যাপ

mobile/ একটি আলাদা Capacitor + Ionic প্রজেক্ট — লাইভ সাইটের চারপাশে একটি WebView মোড়ক, আলাদা কোনো SPA নয়, আবার শুধু api/v1-এর কনজিউমারও নয়। এর capacitor.config.ts ফাইলে server.url আপনার ডোমেইনের দিকে নির্দেশ করে। এর নিজের package.json আছে আর এটি প্রজেক্টের রুট থেকে বিল্ড হয় না:

cd mobile npm run sync npm run open:ios npm run open:android

আপডেট ও মাইগ্রেশন

কোনো লাইভ ডাটাবেসে database/migration.sql বা database/migrations/<slug>/up.sql চালানোর আগে একটি স্ন্যাপশট নিয়ে রাখুন:

mysqldump --single-transaction -u<user> -p<pass> <db> > pre-deploy-$(date +%Y%m%d-%H%M%S).sql

বেশিরভাগ মাইগ্রেশনের সাথেই মিলিয়ে একটি down.sql আসে, যা শুধু ওই একটি পরিবর্তনই ফিরিয়ে দেয়। যে কয়েকটি শুধু কাঠামো যোগ না করে বিদ্যমান ডেটাই বদলে দেয়, সেগুলোর সাথে আসা down.sql বরং লিখে রাখে কেন সেটি কিছুই করে না — ওগুলোর ক্ষেত্রে রোলব্যাক দরকার হলে ডিপ্লয়ের আগের ডাম্প থেকে ফিরিয়ে আনুন।

সিকিউরিটি নোট

  • ইমপোর্ট করার সাথে সাথেই সাথে-আসা অ্যাডমিন ক্রেডেনশিয়াল বদলে ফেলুন (দেখুন ইনস্টলেশন)।
  • .env, connection.php আর লগ ফাইলগুলোতে সরাসরি HTTP অ্যাক্সেস সাথে আসা .htaccess / nginx নিয়মেই বন্ধ করা আছে — ওই নিয়মগুলো সরাবেন না।
  • আপলোড করা কনটেন্ট এমনভাবে পরিবেশন করা হয় যাতে সেটি PHP হিসেবে চলতে না পারে — আর এটি অ্যাপ্লিকেশনের স্তরে নয়, ওয়েব-সার্ভার কনফিগের স্তরেই নিশ্চিত করা হয়।
  • পেমেন্ট গেটওয়ের ক্রেডেনশিয়াল প্রতিটি গেটওয়ের জন্য আলাদাভাবে অ্যাডমিন প্যানেল থেকে কনফিগার হয় আর সার্ভারেই জমা থাকে — স্টোরফ্রন্টে কখনোই সেগুলো প্রকাশ পায় না।

টেস্টিং

কোনো PHPUnit স্যুট নেই। composer test চালায় bin/run-probes.php, যা includes/_probes/ আর প্রতিটি প্লাগইনের নিজস্ব _probes/ ফোল্ডারের সব probe_*.php ফাইল একত্র করে, প্রতিটিকে আলাদা CLI সাবপ্রসেস হিসেবে চালায় আর তার এক্সিট কোড দেখে।

composer test # run every probe php plugins/<slug>/_probes/probe_*.php # run a single probe directly php bin/run-probes.php --all # also run destructive probes (skipped by default)

সচরাচর জিজ্ঞাসিত প্রশ্ন

না। অকশন, লটারি, মিস্ট্রি বক্স, গেম আর শপ/মার্কেটপ্লেস — প্রতিটিই আলাদা প্লাগইন। আপনার ব্যবসার জন্য যেটুকু দরকার শুধু সেটুকুই চালু করুন, পরে আবার নতুন করে ইনস্টল না করেই আরও যোগ করে নিতে পারবেন।
হ্যাঁ। কোনো প্লাগইন মুছলে তার নিজের আনইনস্টলার চলে আর শুধু তার নিজের টেবিল ও ফাইলগুলোই সরে যায় — সাইটের মূল কাজকর্ম এমনভাবেই বানানো যে তা কখনোই কোনো নির্দিষ্ট প্লাগইনের উপস্থিতির উপর নির্ভর করে না।
MariaDB। কিছু মাইগ্রেশন ফাইলে শুধু MariaDB-তেই চলে এমন SQL সিনট্যাক্স ব্যবহার করা হয়েছে, যা সাধারণ MySQL 8 নেয় না — ডেভেলপমেন্ট আর প্রোডাকশন দুই জায়গাতেই MariaDB ব্যবহার করুন।
38টি স্বয়ংক্রিয় গেটওয়ে প্লাগইন (কার্ড, ওয়ালেট, ক্রিপ্টো আর আঞ্চলিক প্রসেসর), সাথে কোর স্কিমা থেকে বসানো 3টি ম্যানুয়াল পদ্ধতি — UPI, Bank Transfer আর PayTM QR। একটি Manual Gateway Builder প্লাগইন দিয়ে কোড না লিখেই আরও ম্যানুয়াল পদ্ধতি যোগ করে নেওয়া যায়।

সাপোর্ট ও রিসোর্স

এখনও আটকে আছেন, নাকি এই পেজে নেই এমন কিছু দরকার?