মূল কনটেন্টে যান
gm-libs packages in the homelab console

gm-libs, যে প্যাকেজে শুরু Webanion-এর প্রতিটি ফ্রন্টএন্ড ও ব্যাকএন্ড

Webanion brand logoWebanionঅতিরিক্ত সেবাজুন 15, 2026৫ মাস

ভার্সন করা, ফ্রেমওয়ার্ক-নিরপেক্ষ প্যাকেজের একটি পরিবার, যা থেকে Webanion-এর প্রতিটি ফ্রন্টএন্ড ও ব্যাকএন্ড শুরু হয়, সার্ভারে একটি NestJS স্তর আর ক্লায়েন্টে React, Vue ও Expo বাইন্ডিংসহ: পাসকি ও সিঙ্গল সাইন-অনসহ অথেনটিকেশন, ফিচার ফ্ল্যাগ, অডিট ট্রেইল, মাল্টি-টেন্যান্ট ডেটা, এনক্রিপশন, ফাইল, ডকুমেন্ট, বার্তা, রিয়েল-টাইম ও অফলাইন, ওয়েবহুক, ওয়ার্কার আর একটি UI কিট। প্রতিটি থাকে নিজস্ব প্রাইভেট রিপোজিটরিতে, নিজস্ব রিলিজসহ, ইনস্টল হয় স্টুডিওর প্রাইভেট npm রেজিস্ট্রি থেকে, আর স্টুডিওর কনসোল দেখায় কোন কনজিউমার কোন রিলিজে পিছিয়ে আছে।

NestJSTypeScriptNode.jsPostgreSQLOpenFGATemporalDockerSoftware ArchitectureSaaSVerdaccio
Md Moniruzzaman Image

Md Moniruzzaman

পুরো গল্পটা

অথেনটিকেশন, অডিট আর ফিচার ফ্ল্যাগ একবার সমাধান করে, ভার্সন দিয়ে, সবখানে আবার ব্যবহার করলে কেন একটি স্টুডিওর ক্লায়েন্টরা লাভবান হন।

প্রতিটি ব্যাকএন্ড শুরু হচ্ছিল শূন্য থেকে

ক্লায়েন্ট যে ব্যাকএন্ডের জন্য টাকা দেন, ক্লায়েন্টের কাছে গুরুত্বপূর্ণ কোনো কাজ করার আগেই তার প্রত্যেকটির একই ভিত লাগে: সাইন ইন, সেশন, পারমিশন, কনফিগারেশন, ফাইল স্টোরেজ, ইমেইল, PDF, ব্যাকগ্রাউন্ড জব আর একটি অডিট ট্রেইল। প্রতিটি প্রজেক্টের জন্য নতুন করে লিখলে এই অংশগুলোতে কয়েক সপ্তাহ চলে যায়, প্রজেক্ট থেকে প্রজেক্টে এগুলো আলাদা হয়, আর প্রত্যেকটির থাকে নিজস্ব বাগ।

gm-libs হলো এর উত্তর: যে কাজে এই ভিতের কোড আগেই নিজেকে প্রমাণ করেছে, সেখান থেকে তুলে এনে ভার্সন, ডকুমেন্টেশন ও চেঞ্জলগসহ প্যাকেজ হিসেবে মজবুত করা, আর স্টুডিও যে ফ্রন্টএন্ড ও ব্যাকএন্ডগুলো বানায় সেগুলোতে বারবার ব্যবহার করা।

সাইন ইন আর পারমিশন, একবারেই সমাধান

অথেনটিকেশন প্যাকেজে আছে Argon2id দিয়ে পাসওয়ার্ড হ্যাশিং, রোটেট হওয়া রিফ্রেশ সেশনসহ স্বল্পমেয়াদি অ্যাক্সেস টোকেন, আর OpenFGA-র ওপর সম্পর্কভিত্তিক পারমিশন, ফলে “শাখার কর্মীরা শুধু নিজের শাখা দেখবেন” এমন একটি নিয়ম কোডজুড়ে ছড়িয়ে থাকা চেক নয়, বরং একটি ঘোষিত মডেল। এতে আরও আছে অ্যাকাউন্ট লিংকিংসহ সোশ্যাল ও OIDC সাইন ইন, পাসওয়ার্ড ছাড়া সাইন ইন, মাল্টি-ফ্যাক্টর অথেনটিকেশন, পাসকি আর সিঙ্গল সাইন-অন। নতুন একটি ব্যাকএন্ড একটি মডিউল ইমপোর্ট করেই এর সবকিছু পেয়ে যায়।

ক্লায়েন্টের জন্য এর মানে এমন নিরাপত্তা, যা আগেই একটি ফাইন্যান্স প্ল্যাটফর্মে মজবুত ও পরীক্ষিত হয়েছে, ডেডলাইনের চাপে নতুন করে বানানো নয়।

Brand colour backdrop
Sign in and permissions from one module: Argon2id, rotating sessions, OpenFGA relationship checks
The console's consumer drift for the finance platform's backend: every @gm-libs dependency, auth among them, resolves to its latest release

নিরাপদে চালু হয় ফিচার

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

ক্লায়েন্টরা একটি ফিচার আগে একটি শাখা বা একজন ব্যক্তির জন্য চালু করে নজর রাখতে পারেন, তারপর নতুন ডিপ্লয় ছাড়াই সেটি আরও বড় পরিসরে ছড়াতে পারেন, আর Al-Insaf দল নিজেদের ফিচারগুলো এভাবেই চালায়।

Brand colour backdrop
Al-Insaf feature management, where the flags are set per role and per person
Two gates on every request: the feature flag and the permission must both say yes

এমন অডিট ট্রেইল, যা কাউকে ধীর করে না

অডিট প্যাকেজ প্রতিটি রাইট অপারেশনে কে কী করেছে, কোথায় আর কখন, তা রেকর্ড করে, ক্যাটাগরি ও গুরুত্বের মাত্রা অনুযায়ী ভাগ করে, আর প্রতিটি এন্ট্রি রিকোয়েস্টের পথ থেকে সরিয়ে দেয়, যাতে সেগুলো ব্যাচে লেখা হয়। অডিট স্টোর ধীর হলে বা বিকল হলে তা লগ করা হয়, কিন্তু সিস্টেম ব্যবহার করা মানুষটিকে কখনো আটকে রাখে না, আর এ কারণেই গুরুত্বপূর্ণ সবকিছু অডিট করা নিরাপদ।

Brand colour backdrop
One audited write: the entry is built on the request and stored in batches off it

প্রতিটি প্যাকেজ, একটি কাজ

অথ, ফ্ল্যাগ আর অডিটের পাশাপাশি এই পরিবার একটি ফ্রন্টএন্ড ও একটি ব্যাকএন্ডের বাকি প্রয়োজনগুলোও মেটায়, প্রতিটি প্যাকেজ একটি কাজ করে এবং একইভাবে যুক্ত হয়: নিচে ফ্রেমওয়ার্ক-নিরপেক্ষ কোড, সার্ভারের জন্য একটি NestJS স্তর, আর যেখানে কোনো প্যাকেজ ক্লায়েন্ট পর্যন্ত পৌঁছায় সেখানে React, Vue ও Expo বাইন্ডিং।

  • ভিত ও ডেটা: core (এরর, রিকোয়েস্ট কনটেক্সট, ক্রেডেনশিয়াল আড়াল করা লগার, কোনো সিক্রেট না থাকলে সঙ্গে সঙ্গে থেমে যাওয়া টাইপড কনফিগারেশন, টাকার হিসাব, পেজিনেশন, রেট লিমিটিং, আইডেমপোটেন্সি, হেলথ) আর db (মাল্টি-টেন্যান্ট Postgres, প্রতিটি টেন্যান্টের জন্য আলাদা ডাটাবেস, মাইগ্রেশন ও মডেলসহ)।
  • পরিচয় ও অ্যাক্সেস: auth, flags, audit, আর নিয়মিত বদলানো কী দিয়ে ফিল্ড ও সিক্রেটের এনভেলপ এনক্রিপশনের জন্য crypto।
  • ফাইল, ডকুমেন্ট ও বার্তা: স্টোরেজ ও সাইন করা আপলোডের জন্য media, pdf, স্ট্রিমিং CSV ও XLSX এক্সপোর্ট এবং যাচাই করা ইমপোর্টের জন্য tabular, ইমেইল, SMS, পুশ ও টিম চ্যাটের জন্য notifications, আর রিয়েল-টাইম কথোপকথনের জন্য chat।
  • রিয়েল টাইম ও অফলাইন: প্রমাণীকৃত চ্যানেলভিত্তিক ইভেন্টের জন্য realtime, React, Vue ও Expo-র জন্য আবার নিজে থেকে যুক্ত হওয়া একটি ক্লায়েন্টসহ, আর offline, প্রতিটি ব্যবহারকারীর ক্যাশ ও ঠিক একবার পাঠানো একটি রাইট কিউয়ের জন্য, ব্রাউজারে এবং Expo অ্যাপে।
  • ইন্টিগ্রেশন ও রানটাইম: Standard Webhooks স্পেক মেনে সাইন করা webhooks, Temporal-এর জন্য worker, মজবুত হেডলেস ব্রাউজার ও ভেতরের ঠিকানা ফিরিয়ে দেওয়া আউটবাউন্ড ফেচের জন্য web, স্ট্রিমিং ও এনক্রিপ্টেড ডাটাবেস ব্যাকআপের জন্য datavault, আর MCP সার্ভার বানানোর জন্য mcp।
  • ইন্টারফেস: ui, ডিজাইন টোকেন থেকে React, Vue, Next.js ও Expo কম্পোনেন্ট পর্যন্ত।

এগুলোর পাশে devkit হলো সেই যাচাই, যা প্রতিটি লাইব্রেরি রিলিজের আগে চালায়। প্রতিটি প্যাকেজ থাকে নিজস্ব প্রাইভেট রিপোজিটরিতে, নিজস্ব রিলিজসহ, তাই কোনো ক্লায়েন্টের সিস্টেম তখনই বদলায় যখন তার দল নতুন ভার্সন নেয়।

Brand colour backdrop
Drawn map of the gm-libs packages grouped by job: foundation and data, identity and access, files, documents and messages, real time and offline, integration and runtime, and interface, with the devkit as the shared release check
The console's delivery table filtered to the gm-libs organisation: each library repository with what merging it deploys, its concurrency group and whether it may be merged from the board

একটি ফিক্স, প্রতিটি সিস্টেমে

স্টুডিওর ফ্রন্টএন্ড ও ব্যাকএন্ডগুলো একই ভিতের ওপর দাঁড়িয়ে আছে বলে একবার করা একটি সিকিউরিটি ফিক্স বা উন্নতি একটি ভার্সন বাম্পের মাধ্যমে সবগুলোতে পৌঁছে যায়, সঙ্গে থাকে একটি চেঞ্জলগ, যাতে লেখা থাকে কী বদলেছে এবং কেন। প্রতিটি রিলিজে সিমেন্টিক ভার্সন মেনে চলা হয়, তাই অন্য কোনো ক্লায়েন্টের নতুন কিছু দরকার হয়েছিল বলে কোনো ক্লায়েন্টের সিস্টেম ভেঙে যায় না, আর কোন কনজিউমার এখনও কোনো রিলিজ নেয়নি, কনসোল সেদিনই তা দেখিয়ে দেয়।

ক্লায়েন্টদের জন্য ফলাফল হলো দ্রুত ডেলিভারি, কম অপ্রত্যাশিত ঝামেলা, আর এমন অংশ দিয়ে তৈরি পণ্য যা আগেই অন্য জায়গায় প্রোডাকশন পেরিয়ে এসেছে, যার মধ্যে আছে Al-Insaf-এর গল্পে থাকা লেজার-মানের ফাইন্যান্স প্ল্যাটফর্ম।

প্রতিটি প্যাকেজ, প্রকাশিত ও নজরে রাখা

প্রতিটি প্যাকেজ ইনস্টল হয় স্টুডিওর প্রাইভেট npm রেজিস্ট্রি থেকে, আর স্টুডিওর কনসোল সেই রেজিস্ট্রি পড়ে ঠিক যেভাবে একজন কনজিউমার পড়ে। এটি রেজিস্ট্রিকে পিং করে, প্রতিটি প্যাকেজের প্রতিটি ভার্সন তার প্রকাশের সময়, প্যাক করা আকার ও ইন্টেগ্রিটিসহ পড়ে, আর কনজিউমারদের নিজস্ব ম্যানিফেস্ট তাদের ডিফল্ট ব্রাঞ্চ থেকে পড়ে যাচাই করে প্রতিটি ডিপেন্ডেন্সি সর্বশেষ রিলিজে পৌঁছায় কি না। একটি লাইব্রেরি পরিবার ততটাই কাজের, যতটা প্রমাণ থাকে যে সেটি ব্যবহার করা প্রতিটি সিস্টেম হালনাগাদ, আর সেই প্রমাণ থাকে এখানেই।

ছবি নেওয়ার দিন, ৩০ সেপ্টেম্বর ২০২৬, ভিউটিতে দেখা গিয়েছিল রেজিস্ট্রি চালু, প্রতিটি প্যাকেজ প্রকাশিত, রেজিস্ট্রির নিজের একটি সাম্প্রতিক ব্যাকআপ, আর স্টুডিওর নিজস্ব টুলস ছাড়া প্রতিটি কনজিউমার সর্বশেষ রিলিজে, সেই টুলস তখনও core ও pdf-এর পুরোনো রিলিজে ছিল।

Brand colour backdrop
The console's Packages view of the private npm registry: the registry up, every package published, the age of the registry backup, and the consumer drift table with any dependency that is behind flagged
The Packages table: every @gm-libs package with its latest version, publish age, packed size, published state and version count

GitHub Release থেকে npm install পর্যন্ত, স্টুডিওর রেজিস্ট্রির মধ্য দিয়ে

কোনো লাইব্রেরিতে একটি ট্যাগ দিলে GitHub-এ তার রিলিজ চলে এবং রিলিজে একটি প্যাক করা ফাইল যুক্ত হয়। ক্লাস্টারের ভেতরের একটি সিঙ্ক প্রতি পাঁচ মিনিটে ঠিক সেই ফাইলটিই প্রকাশ করে, ফলে রিলিজ আর রেজিস্ট্রিতে একই বাইট থাকে, যা প্রতি রাতে আবার যাচাই করা হয়। পড়তে লগইন লাগে, আর পাবলিক নামটি কোনো লেখা গ্রহণ করে না। GitHub Packages বাদ দেওয়া হয়েছিল, কারণ লাইব্রেরিগুলো আর তাদের কনজিউমাররা আলাদা আলাদা অর্গানাইজেশনে থাকে।

Brand colour backdrop
Drawn path of a library version: a tag, the GitHub release with one packed file, the sync in the cluster publishing that exact file every five minutes, the nightly check against the release, and npm install from the private registry with a login

আপনার আরও ভালো লাগতে পারে

fully booked brand logo
Fully Booked Video Editing
অতিরিক্ত সেবা
২ বছর ৩ মাস
fully booked brand logo

Fully Booked - প্রচারমূলক এবং টিউটোরিয়াল ভিডিও প্রোডাকশন

একটি প্রোমোশনাল ভিডিও, যা যুক্তরাজ্যের একজন মিনিবাস অপারেটরকে Fully Booked-এর সুবিধাগুলো তাদের গুরুত্বের ক্রমে দেখায়, স্টক ফুটেজ নয়, আসল অ্যাপ দিয়ে তৈরি। এটি শুরু হয় অপারেটরের নিজের সমস্যা দিয়ে, প্রতিটি সুবিধাকে একটি আসল স্ক্রিনে একটি করে মুহূর্ত দেয়, আর কয়েকটি দৈর্ঘ্যে কাটা হয়েছে, সোশ্যাল ফিডের কয়েক সেকেন্ডের হুক থেকে ল্যান্ডিং পেজ ও স্টোর লিস্টিংয়ের পূর্ণ সংস্করণ পর্যন্ত।

Md Moniruzzaman Image

Md Moniruzzaman

জুন 24, 2025

+1
Dominic Dormer
fully booked brand logo
Fully Booked Photoshop Design
অতিরিক্ত সেবা
২ বছর ৩ মাস
fully booked brand logo

Fully Booked - Photoshop সহ ভিজ্যুয়াল অ্যাসেট ডিজাইন

স্টোরের স্ক্রিনশট, একটি ফিচার গ্রাফিক, একটি অ্যাপ আইকন ও ইমেইলের আর্ট, আসল স্ক্রিন থেকে Photoshop-এ তৈরি, যাতে একটি নতুন প্ল্যাটফর্মও অপারেটরদের চোখে প্রতিষ্ঠিত দেখায়। স্ক্রিনশটগুলো Apple ও Google-এর চাওয়া প্রতিটি সাইজে পাঁচটি সোয়াইপে পুরো কথাটা বলে, প্রতিটি ইমেইল খোলে ব্র্যান্ডের রঙে নিজস্ব একটি ইলাস্ট্রেশন দিয়ে, আর আইকন ও স্প্ল্যাশ স্ক্রিনে থাকে দুটি হাত মেলানোর লোগো।

Md Moniruzzaman Image

Md Moniruzzaman

জুন 24, 2025

+1
Dominic Dormer
fully booked brand logo
Fully Booked UI UX Design
অতিরিক্ত সেবা
২ বছর ৩ মাস
fully booked brand logo

Fully Booked - মোবাইল অ্যাপ এবং অ্যাডমিন প্যানেলের জন্য UI/UX ডিজাইন

Fully Booked-এর প্রতিটি স্ক্রিন শুরু হয়েছে একটি স্কেচ হিসেবে, যা কোনো কোডের খরচ হওয়ার আগেই প্রতিষ্ঠাতা অনুমোদন করেছেন, আর প্রতিটিই কোনো অপারেটর বা গ্রাহকের একটি সমস্যার উত্তর। অপারেটরের হোম স্ক্রিন হয়ে উঠেছে আয়ের একটি মেনু, Get Covered তার হাতে আঁকা প্রবাহের ক্রম বজায় রেখেছে, কোট ও বাতিলের চিঠি এসেছে প্রতিষ্ঠাতার নিজের ভাষা থেকে, আর অ্যাডমিন পাঁচটি ওয়্যারফ্রেম করা ট্যাব থেকে বেড়ে হয়ে উঠেছে নেটওয়ার্কের কন্ট্রোল রুম। MVP-র স্ক্রিনগুলো ডিজাইন করেছিলেন Webanion-এর আরেকজন ডিজাইনার; ২, ৩ ও ৪ নম্বর ধাপ আমি নিজে Figma-তে রিডিজাইন করেছি, এই প্রবাহগুলোকে ভিত্তি করে।

Md Moniruzzaman Image

Md Moniruzzaman

জুন 24, 2025

+1
Dominic Dormer
Read the Md Moniruzzaman blog

ব্লগটি প্রোডাকশনের ময়দান থেকে লেখা নোট: আর্কিটেকচারের সিদ্ধান্ত, বাস্তব ব্যবহারকারীর মুখোমুখি টিকে যাওয়া AI সিস্টেম, আর নিজের খরচ নিজে তোলা অবকাঠামো। কাজ থেকে লেখা, কাজ নিয়ে গল্প নয়।