প্রকল্প সম্পর্কে

NK Omladinac Niza হলো নিজা (Koška Municipality) থেকে আসা একই নামের ফুটবল ক্লাবের অফিসিয়াল ওয়েবসাইটের রিপোজিটরি। সাইটটি Astro, Tailwind CSS v4 এবং TypeScript দিয়ে তৈরি এবং GitHub Pages-এ হোস্ট করা আছে। খেলার তথ্যের লাইভ উৎস হলো HNS Semafor। প্রধান বৈশিষ্ট্য হলো স্বয়ংক্রিয় কনটেন্ট রিফ্রেশ। তিনটি স্ক্র্যাপার এবং একটি ম্যানুয়াল উৎস তথ্য সরবরাহ করে: 1. HNS Semafor (খেলার তথ্য) — scripts/scrape.mjs স্ক্রিপ্টটি Cheerio পার্সার ব্যবহার করে ক্লাবের নাম, স্টেডিয়াম, ঠিকানা, ক্রেস্ট, বর্তমান প্রতিযোগিতা ও মৌসুম, ক্রেস্ট ও ফর্মসহ সম্পূর্ণ লিগ টেবিল, সব প্রতিযোগিতার (লিগ ও কাপ) মৌসুমের সব ম্যাচ, খেলা ম্যাচের বিবরণ (লাইনআপ, গোল, কার্ড, রেফারি, দর্শক), ছবি, নম্বর, পজিশন ও উপস্থিতি পরিসংখ্যানসহ খেলোয়াড় এবং সর্বোচ্চ গোলদাতা, কার্ড ও সর্বাধিক ম্যাচ খেলা খেলোয়াড়দের র‍্যাঙ্কিং তালিকা সংগ্রহ করে। ক্লাব যেসব প্রতিযোগিতায় অংশ নেয় সেগুলোর সব বয়সী গ্রুপের (সিনিয়র এবং U-11 beginners) জন্য স্ক্র্যাপ করা হয়, এবং প্রতিযোগিতার তালিকা Semafor-এর getCompetitions হ্যান্ডলারের মাধ্যমে আসে। ফলাফল হলো src/data/hns.json, যেখানে প্রতিটি প্রতিযোগিতার তথ্য এবং একীভূত সিনিয়র ভিউ থাকে। 2. Facebook news — scripts/scrape-facebook.mjs Graph API v21.0 ব্যবহার করে @omladinacniza পেজ থেকে সাম্প্রতিক পোস্ট আনে। ছবি স্থানীয়ভাবে ডাউনলোড করা হয় কারণ FB CDN URL এক থেকে দুই সপ্তাহের মধ্যে মেয়াদোত্তীর্ণ হয়ে যায়। GitHub Secrets FB_PAGE_ID এবং FB_ACCESS_TOKEN প্রয়োজন। 3. Facebook albums (gallery) — scripts/scrape-facebook-albums.mjs সব অ্যালবাম ও ছবির মেটাডেটা আনে, প্রতি ক্যালেন্ডার বছরে একটি কোটা (FB_PHOTOS_PER_YEAR, ডিফল্ট 200) সহ। প্রতিটি ছবির জন্য 500 px WebP থাম্বনেইল এবং মাত্রা সংরক্ষণ করা হয়; গ্রিডে থাম্বনেইল দেখানো হয়, আর লাইটবক্সে মূল ছবি দেখানো হয়। প্রোফাইল ও কভার ছবি বাদ দেওয়া হয়। 4. Friendly matches — একমাত্র ফাইল যা ম্যানুয়ালি সম্পাদনা করা যায় তা হলো src/data/friendlies.json, যার নির্দেশনা friendlies.README.md-এ আছে; এটি GitHub-এর মাধ্যমে ফোন থেকেও সম্পাদনা করা যায়। স্ক্র্যাপারগুলো কেবল তখনই ফাইল লেখে যখন কনটেন্ট পরিবর্তিত হয়, তাই এরা অপ্রয়োজনীয় কমিট ও ডিপ্লয় তৈরি করে না। GitHub Action ওয়ার্কফ্লো scrape-and-deploy.yml প্রতি 30 মিনিটে cron শিডিউলে, main-এ প্রতিটি push-এ এবং ম্যানুয়ালি চলে। এটি তিনটি স্ক্র্যাপারই চালায়, পরিবর্তনগুলো কমিট করে, তারপর রিবিল্ড ও ডিপ্লয় করে; বিল্ড জব ইচ্ছাকৃতভাবে আবার স্ক্র্যাপ করে না যাতে প্রকাশিত সাইট ও রিপোজিটরির মধ্যে পার্থক্য তৈরি না হয়। প্রজেক্ট স্ট্রাকচারে আছে components (Header, Footer, cards, table), SEO/OG/favicon/manifest/RSS/View Transitions সেটিংসহ একটি layout, বেস পাথ, একীভূত ম্যাচ, ক্রোয়েশিয়ান সংখ্যা ডিক্লেনশন এবং Facebook পোস্ট ফরম্যাটিংয়ের লাইব্রেরি, এবং পেজ: স্ট্যাটিক .astro পেজ, প্লেয়ার প্রোফাইল, ম্যাচের বিবরণ, প্রতি ম্যাচে ডায়নামিক OG ইমেজ (satori ও resvg), RSS ফিড, সাবস্ক্রিপশনের জন্য .ics ফরম্যাটে শিডিউল, এবং একটি PWA manifest। স্টাইলে ক্লাবের রং ও ফন্টসহ Tailwind v4 @theme ব্যবহার করা হয়। লোকাল ডেভেলপমেন্টের জন্য Node.js 22.12+ প্রয়োজন। স্ক্রিপ্টগুলোর মধ্যে আছে হট রিলোডসহ dev server, scrape:hns, scrape:facebook, scrape:fb-albums, scrape (তিনটিই), WebP থাম্বনেইলের জন্য thumbs, build (যা স্বয়ংক্রিয়ভাবে আগে স্ক্র্যাপ করে), স্ক্র্যাপ ছাড়া astro build, টাইপ চেকিংয়ের জন্য check, এবং প্রোডাকশন বিল্ডের preview। ডিপ্লয়মেন্ট GitHub Actions-এর মাধ্যমে GitHub Pages-এ করা হয়, public/CNAME (deSEC DNS) দিয়ে omladinacniza.hr ডোমেইন কনফিগার করা আছে, অন্যদিকে SITE ও BASE astro.config.mjs-এ সেট করা আছে এবং ASTRO_SITE ও ASTRO_BASE ভেরিয়েবল দিয়ে ওভাররাইড করা যায়। সব ক্লাব কনটেন্ট (লোগো, ছবি, ইতিহাস) NK Omladinac Niza-এর সম্পত্তি, এবং কোডটি অন্য ক্লাবগুলোর অনুপ্রেরণার জন্য অবাধে উপলব্ধ।