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

Floodcast-Gurugram হলো ভারতের গুরুগ্রামের (Gurgaon) জন্য একটি সিভিক-টেক বন্যা পূর্বাভাস ওয়েব অ্যাপ। এটি একটি নির্দিষ্ট প্রশ্নের উত্তর দিতে তৈরি করা হয়েছে যা সাধারণ আবহাওয়া অ্যাপ বা বন্যাপ্রবণ স্থানের তালিকা দিতে পারে না: লাইভ বৃষ্টিপাতের পূর্বাভাসের ভিত্তিতে, আগামী কয়েক ঘণ্টার মধ্যে একটি নির্দিষ্ট রুট কি প্লাবিত হবে, ঠিক কখন বন্যা শুরু হবে এবং কখন পানি কমবে। কেবল একটি ঝুঁকির স্কোর দেওয়ার পরিবর্তে, এটি প্রতিটি সিদ্ধান্তের সাথে একটি নির্দিষ্ট সময়ের উইন্ডো যুক্ত করে। এটি যা করে - টাইম-উইন্ডোড রিস্ক: লাইভ প্রতি ঘণ্টার বৃষ্টিপাতকে ৭৩টি নিবন্ধিত বন্যা পয়েন্টের সাথে তুলনা করে একটি পয়েন্ট কখন প্লাবিত হবে এবং কখন পানি কমবে তা গণনা করা হয়, যেখানে IMD-স্টাইল ওয়ার্নিং ব্যান্ড এবং স্পষ্ট শুরু ও শেষ সময় ব্যবহার করা হয়। - রুট ভার্ডিক্টস: দুটি স্থানের নাম নির্ধারিত হলে তাদের মধ্যবর্তী সরলরেখার ১.৫ কিমি বাফারের মধ্যে থাকা হটস্পটগুলো খুঁজে বের করা হয়; অ্যাপটি সবচেয়ে খারাপ পয়েন্ট এবং সবচেয়ে খারাপ সময়ের উইন্ডো রিপোর্ট করে। - প্রতি ঘণ্টার টাইমলাইন: ব্যবহারকারীরা পূর্বাভাসের মধ্য দিয়ে সামনে এগিয়ে যেতে পারেন এবং সেই সময়ের ম্যাপ, সিদ্ধান্ত এবং রেজিস্টার দেখতে পারেন। - বৃষ্টিপাত সিমুলেটর: যেহেতু গুরুগ্রাম বছরের বেশিরভাগ সময় শুষ্ক থাকে, ব্যবহারকারীরা ২০, ৩৫ বা ৫৫ মিমি/ঘণ্টা বৃষ্টিপাতে কী ঘটবে তা দেখতে পারেন এবং লাইভ ভার্ডিক্টের মতো একই ইঞ্জিনের মাধ্যমে রেজিস্টারের প্রতিক্রিয়া পর্যবেক্ষণ করতে পারেন। - নাগরিক রিপোর্ট: একটি ক্যামেরার ছবি, নির্ভুলতার সাথে একটি GPS ফিক্স এবং পর্যবেক্ষণ করা পানির গভীরতা। রিপোর্টগুলো প্রথমে ডিভাইসে সংরক্ষিত হয় এবং পাবলিক ডিসপ্লের আগে মডারেট করা হয়। - CPCB National AQI: ভেন্ডর-ভিত্তিক ১-৫ ইনডেক্সের পরিবর্তে ২৪ ঘণ্টার দূষক গড় থেকে গণনা করা ভারতীয় ০-৫০০ স্কেল। ডেটা প্রোভেন্যান্স বা তথ্যের উৎসকে একটি প্রোডাক্ট ফিচার হিসেবে বিবেচনা করা হয়েছে। ৭৩টি নিবন্ধিত পয়েন্টের মধ্যে ৩৯টি সোর্সড: ৪টি MCG-র জোন ১ হটস্পট তালিকা থেকে, ২৬টি ২০২২ থেকে ২০২৫ সালের দুই বা ততোধিক স্বতন্ত্র নিউজ রিপোর্ট থেকে এবং ৯টি বর্তমান বর্ষাকালের জন্য তারিখযুক্ত প্রাতিষ্ঠানিক উৎস থেকে। বাকি ২৪টিকে সম্ভাব্য কিন্তু অসমর্থিত ওয়াচলিস্ট এন্ট্রি হিসেবে বর্ণনা করা হয়েছে এবং ১০টি রিকনস্ট্রাক্টেড প্লেসহোল্ডার রাখা হয়েছে যাতে MCG-র অফিসিয়াল ৩৬-পয়েন্ট কাউন্ট বজায় থাকে। README-তে স্পষ্টভাবে বলা হয়েছে যে রেজিস্টার সম্প্রসারণের ফলে মূল ৩৬টির তুলনায় গড় আত্মবিশ্বাস কমেছে এবং অ্যাপের 'What's real' ট্যাবটি এই স্তরগুলোকে প্রকাশ করে, যেখানে ম্যাপের মার্কার ফিল নিশ্চিততার মাত্রা নির্দেশ করে। সব ৭৩টি সারির স্থানাঙ্ক (coordinates) যাচাইহীন হিসেবে চিহ্নিত করা হয়েছে; একটি স্ক্রিপ্ট OpenStreetMap-এর সাথে সেগুলোর অডিট করে রিপোর্ট লেখে কিন্তু ডেটা এডিট করে না। রুট ম্যাচিং স্পষ্টভাবে সরলরেখা করিডোর ম্যাচিং, টার্ন-বাই-টার্ন রাউটিং নয় এবং প্রতিটি রুট উত্তরের সাথে এটি প্রকাশ করা হয়। লার্নিং লুপ ৫০০ মিটারের মধ্যে রিপোর্ট করা স্থানগুলোকে একটি স্থান হিসেবে গণ্য করা হয়। দুটি আলাদা দিনে ৩টি রিপোর্টের পর একটি স্থান নিজস্ব বন্যা পয়েন্টে উন্নীত হয়, যা আলাদাভাবে নেওয়া হয় এবং ৭৩টি গবেষণালব্ধ সারির সাথে কখনও মার্জ করা হয় না। একটি পয়েন্টের পরিমাপকৃত থ্রেশহোল্ড কেবল তখনই প্রকাশিত হয় যখন দুটি আলাদা দিনে হাঁটু সমান বা তার বেশি পানি এবং প্রতি ঘণ্টায় ১ মিমি-র বেশি বৃষ্টিপাত দেখা যায়; প্রকাশিত সংখ্যাটি হলো সেই সর্বনিম্ন বৃষ্টিপাত যা ওই স্থানটিকে প্লাবিত করতে দেখা গেছে। Open-Meteo প্রতিটি অনুমোদিত রিপোর্টের আগে কত বৃষ্টিপাত হয়েছে তা সরবরাহ করে। রিপোর্ট কাউন্ট, ক্যালিব্রেশন পেয়ার এবং পর্যবেক্ষণ করা থ্রেশহোল্ডগুলো কেবল ডেটাবেস ট্রিগার দ্বারা রাইটেবল, যা কলাম গ্র্যান্টস দ্বারা প্রয়োগ করা হয়, যাতে একজন মডারেটর হাতে কোনো পরিমাপ টাইপ করতে না পারেন। আর্কিটেকচার এবং স্ট্যাক অ্যাপটি একটি স্ট্যাটিক সাইট: React 19 এবং TypeScript দিয়ে তৈরি, Vite (rolldown) দ্বারা বিল্ড করা এবং Leaflet দিয়ে রেন্ডার করা হয়েছে। এটি একটি ইনস্টলযোগ্য অফলাইন-ফার্স্ট PWA হিসেবে শিপ করা হয়েছে এবং স্ট্যাটিক হোস্টিংয়ে ডেপ্লয় করা হয়েছে। হটস্পট রেজিস্টার (৬২ KB স্ট্যাটিক সারি) বান্ডেলের ভেতরেই থাকে, তাই নেটওয়ার্ক রিকোয়েস্টের আগেই ম্যাপ এবং লিস্ট রেন্ডার হয়। স্কোরিং হলো ওই সারিগুলোর ওপর বিশুদ্ধ গাণিতিক হিসাব এবং এটি ডিভাইসেই চলে। একমাত্র সব সময়ের জন্য সক্রিয় কলটি হলো Open-Meteo, যার কোনো API কি প্রয়োজন হয় না এবং ক্রস-অরিজিন অ্যাক্সেস দেয়, তাই এটি ভিজিটরের নিজস্ব IP থেকে কল করা হয়; রেজিস্টারে নেই এমন স্থানগুলোর জন্য Nominatim-কে ফলব্যাক হিসেবে ব্যবহার করা হয়। Supabase ঐচ্ছিক: এটি ছাড়াও ফোরকাস্ট টুলটি পুরোপুরি কাজ করে এবং রিপোর্টগুলো ডিভাইসেই থাকে। README-তে পূর্বের একটি FastAPI-on-a-container ভার্সনের কথা উল্লেখ আছে যার কোল্ড স্টার্ট ছিল ৪২.৭ সেকেন্ড এবং যার ফোরকাস্ট কলগুলো স্থায়ীভাবে রেট-লিমিটেড ছিল, যা এই অল-ক্লায়েন্ট রিডিজাইনের অনুপ্রেরণা; মোট বান্ডেলটি গিজড (gzipped) অবস্থায় প্রায় ১৬০ KB। ডেটা পাইপলাইন এখানে কোনো ট্রেইনড মডেল নেই। ফিক্সড সিডসহ চারটি ডিটারমিনিস্টিক পাইথন জেনারেটর ধাপে ধাপে রেজিস্টার তৈরি করে (প্রথমে ৩৬টি সারি MCG-র স্ট্রাকচারে, তারপর ৩৬ থেকে ৬৪, তারপর ৬৪ থেকে ৭৩), এরপর একটি এক্সপোর্ট স্টেপ অ্যাপের জন্য JSON তৈরি করে এবং একটি ইন্টিগ্রিটি চেক করে। কন্টিনিউয়াস ইন্টিগ্রেশন প্রতি পুশে সব ধাপ পুনরায় তৈরি করে এবং আউটপুট কমিট করা তথ্যের সাথে ভিন্ন হলে ফেইল করে; কন্ট্রিবিউটরদের CSV-র পরিবর্তে জেনারেটর এডিট করতে বলা হয়। ক্যাচমেন্ট এরিয়ার জন্য GMDA-র প্রকাশিত ড্রেনেজ নেটওয়ার্ক (৪,৭০১ ম্যাপ করা স্ট্রিম সেগমেন্ট, ১০টি ওয়াটারশেড) সংগ্রহ করা হয়েছিল, তবে সেই ডেটা ইচ্ছাকৃতভাবে যেকোনো রিস্ক স্কোর থেকে বাদ দেওয়া হয়েছে এবং একটি টেস্ট এটি নিশ্চিত করে। উল্লেখযোগ্যভাবে, README রিপোর্ট করে যে মিডিয়ান ক্যাচমেন্ট সাইজের সাথে সেভিয়ারিটি টিয়ারের কোনো সম্পর্ক নেই এবং এই নেতিবাচক ফলাফলটি প্রকাশিত হয়েছে। কোনো সামগ্রিক নির্ভুলতার দাবি করা হয়নি, কারণ কোনো গ্রাউন্ড-ট্রুথ ফ্লাড লগ নেই; পরিবর্তে README একটি রেসপন্স কার্ভ রিপোর্ট করে (১০ মিমি/ঘণ্টায় কিছুই প্লাবিত হয় না, ২০ মিমি/ঘণ্টায় ১০টি সবচেয়ে খারাপ চৌক প্লাবিত হয়, ৩৫ মিমি/ঘণ্টায় ৭৩টির মধ্যে ৪৪টি পয়েন্টে পৌঁছায়, ৫৫ মিমি/ঘণ্টা টানা বৃষ্টিতে পুরো রেজিস্টার প্লাবিত হয়) এবং ৫৩ শতাংশ সোর্সিং রেট রিপোর্ট করে। সম্ভাব্য ব্যবহারকারীদের জন্য সতর্কতা সব স্থানাঙ্কগুলো জিওকোডেড পজিশনের পরিবর্তে আনুমানিক প্লেসমেন্ট; থ্রেশহোল্ডগুলো পরিমাপের পরিবর্তে সেভিয়ারিটি টিয়ার অনুযায়ী ইঞ্জিনিয়ারিং এস্টিমেট হিসেবে শুরু হয়েছিল এবং নাগরিক প্রমাণ জমা হওয়ার সাথে সাথে সেগুলো প্রতিস্থাপন করা হয়; রুট অ্যানালাইসিসে প্রকৃত রাস্তার পরিবর্তে সরলরেখা করিডোর ব্যবহার করা হয়; এবং রেজিস্টারটি আংশিকভাবে সোর্সড হলেও এটি কোনো অফিসিয়াল সরকারি ডেটাসেট নয়। প্রজেক্টের সাথে একটি লাইভ ডেমো, একটি MIT লাইসেন্স এবং ডেডিকেটেড প্রোভেন্যান্স ডকুমেন্টেশন রয়েছে।