দ্বিভাষিক স্কুল প্ল্যাটফর্ম
একটি স্কুলের সম্পূর্ণ অপারেশন অনলাইনে আনে এমন তিন-অ্যাপের সিস্টেম — দ্বিভাষিক।
- লাইভ
- মে ২০২৫ থেকে
- ~১,০০০ ভিজিট / মাস

সংখ্যায়
- মাসিক ভিজিট
- ~1K
- কোডবেস
- 3
- সক্রিয়
- 15mo
- এন্টিটি স্কিমা
- 17
01সমস্যা
বাংলাদেশের স্কুলগুলো সাধারণত চলে কাগজ, WhatsApp আর একটা স্ট্যাটিক HTML পেজে। ভর্তি, অনুদান, নোটিশ আর লাইব্রেরি কন্টেন্ট আলাদা সিস্টেমে — অনলাইনে স্কুল অদৃশ্য, আর স্টাফদের কন্টেন্ট প্রকাশের একক উপায় নেই। প্রয়োজন ছিল দুটো জিনিস: ভর্তি, অনুদান, নোটিশ, ফ্যাকাল্টি, অডিও আর ভিডিও সামলাতে পারে এমন বিশ্বস্ত দ্বিভাষিক (ইংরেজি + বাংলা) পাবলিক উপস্থিতি, আর এমন একটি ব্যাকঅফিস যা নন-টেকনিক্যাল স্টাফরা কোড না ছুঁয়েও পরিচালনা করতে পারেন।
02যা তৈরি করেছি
- 01
একটি দ্বিভাষিক (ইংরেজি + বাংলা) পাবলিক সাইট, ৩০টির মতো পেজ টেমপ্লেট — ভর্তি, একাডেমিক তথ্য, ফ্যাকাল্টি, ব্লগ, ইভেন্ট, অডিও লাইব্রেরি, ভিডিও লাইব্রেরি, গ্যালারি, অনুদান এবং পাঁচটি পলিসি ও পাঁচটি লিগ্যাল ডকুমেন্ট, সঠিক রেন্ডারিংয়ের জন্য কাস্টম বাংলা ফন্ট সহ।
- 02
NextAuth-প্রটেক্টেড অ্যাডমিন CMS, প্রতিটি পাবলিক এন্টিটির পূর্ণ CRUD — ভর্তি, ব্লগ, অধ্যায় সহ বই, অডিও, অনুদান, যোগাযোগ, ফ্যাকাল্টি, নোটিশ, কারিকুলাম, ডিপার্টমেন্ট, সিলেবাস, ইতিহাস, লক্ষ্য — TanStack Table লিস্ট ভিউ আর TipTap রিচ-টেক্সট এডিটর দ্বারা চালিত।
- 03
NestJS REST API, Postgres-এ সতেরোটি এন্টিটি স্কিমা, JWT-প্রটেক্টেড স্টাফ রুট, Drizzle মাইগ্রেশন, সিড স্ক্রিপ্ট আর Swagger UI ডকুমেন্টেশন।
- 04
দুই-স্তরবিশিষ্ট বই → অধ্যায় রিসোর্স: প্রতিটি অধ্যায় markdown-এ লেখা, markdown-it দিয়ে সার্ভার-সাইডে রেন্ডার, পাবলিক সাইটে আলাদা পেজ হিসেবে পঠিত।
- 05
অডিও প্লেয়ার YouTube ID গ্রহণ করে এবং react-player দিয়ে প্লে করে — স্কুলের আগে থেকে রেকর্ড করা খুতবাহ ফ্রি YouTube হোস্টিংয়েই থাকে, পাবলিক UI এখনো নেটিভ অডিও প্লেয়ারের মতোই অনুভূত হয়।
- 06
ব্যাকআপ এন্ডপয়েন্ট: লাইভ Postgres ডাম্প আর প্রতিটি আপলোড করা ফাইল একসঙ্গে একটি ডাউনলোডযোগ্য আর্কাইভে জিপ করে — ছোট VPS-এর জন্য বেঁচে থাকার বীমা।
- 07
তিনটি GitHub Actions পাইপলাইন, তিনটি Docker কন্টেইনার, একটি VPS — main-এ পুশ মানেই লাইভ।
03স্ট্যাক
পাবলিক সাইট
- Next.js 15
- React 19
- Tailwind 4
- Redux Toolkit Query
- Radix UI
- react-markdown
- embla-carousel
- react-player
অ্যাডমিন CMS
- Next.js 15
- NextAuth v4
- TipTap
- TanStack Table
- Redux Toolkit Query
- react-dropzone
- shadcn/ui
JSON API
- NestJS 11
- Drizzle ORM
- PostgreSQL
- JWT + Passport
- Multer
- markdown-it
- Swagger
- Jest
04স্ক্রিনশট
05কঠিন অংশ
মূল সিদ্ধান্তগুলো স্ট্যাক নিয়ে ছিল না — ছিল এমন কন্টেন্ট মডেল করা যা একক টেক্সট ব্লব নয়। বই হয়ে দাঁড়াল দুই-স্তরের রিসোর্স: প্রতিটি বইয়ের অনেক অধ্যায়, প্রতিটি অধ্যায় markdown-এ লেখা, সার্ভার-সাইডে রেন্ডার, নিজস্ব পেজ হিসেবে পঠিত। এর মানে প্যারেন্ট-চাইল্ড ডেটা শেপ, নিজস্ব অ্যাডমিন ফ্লো, নিজস্ব পাবলিক ফ্লো আর নিজস্ব রেন্ডারিং পাইপলাইন।
আর অডিও ব্যাকএন্ড আসলে কোনো ব্যাকএন্ডই ছিল না। স্কুলের শত শত খুতবাহ আগে থেকেই YouTube-এ ছিল। পেইড স্টোরেজে রি-হোস্ট না করে অডিও প্লেয়ার YouTube ID গ্রহণ করে এবং react-player দিয়ে প্লে করে — সম্পূর্ণ অডিও লাইব্রেরি ফ্রি-টিয়ার হোস্টেড, কিন্তু পাবলিক UI নেটিভ অডিও প্লেয়ারের মতোই অনুভূত হয়। এই দুটি সিদ্ধান্ত একটি সাধারণ CMS-কে এমন সিস্টেমে রূপান্তরিত করেছে যা এই স্কুলের কন্টেন্ট তৈরির পদ্ধতির সঙ্গে মানানসই।
এবার আপনার পালা
আপনার অপারেশনের জন্য এরকম তৈরি করতে চান?
আমরা বছরে অল্প কিছু কাস্টম প্রকল্প গ্রহণ করি। এটা আপনার সমস্যার কাছাকাছি মনে হলে জানান।