From cb36b4cd64f06f72c441b80c82087e5eb116e9da Mon Sep 17 00:00:00 2001
From: Tajim
Date: Fri, 28 Aug 2026 20:09:56 +0600
Subject: [PATCH 1/2] Update static pages, policies, documentation and
contributor guidelines
---
CONTRIBUTING.md | 72 ++++--
README.md | 126 +++++-----
docs/storage-cleanup.md | 26 ++-
resources/js/components/Footer.vue | 8 +-
resources/js/pages/ContributorGuide.vue | 7 +-
resources/js/pages/legal/ContentPolicy.vue | 160 ++++++++-----
resources/js/pages/legal/PrivacyPolicy.vue | 137 ++++++-----
resources/js/pages/legal/TermsConditions.vue | 227 ++++++++++++++-----
8 files changed, 502 insertions(+), 261 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index df00fc4..83fa322 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# Contributing to HSCStack
-Thanks for your interest in HSCStack! This project is built by and for HSC students in Bangladesh, and we welcome help from fellow developers.
+Thanks for your interest in HSCStack! This project is built by and for HSC & SSC students in Bangladesh, and we welcome help from fellow developers.
## Before You Start
@@ -10,16 +10,21 @@ HSCStack's codebase is **not open for general, unsolicited pull requests**. To c
2. Once your application is reviewed and accepted, you'll be onboarded to the codebase.
3. After that, you're free to open issues, pick up tasks, and submit PRs following the workflow below.
-If you're not yet a core developer but found a bug or have a suggestion, please [open a GitHub Issue](https://github.com/trtajim/hscstack/issues) instead — no membership required for that.
+If you're not yet a core developer but found a bug or have a suggestion, please [open a GitHub Issue](https://github.com/hscstack/platform/issues) instead — no membership required for that.
## Tech Stack
-| Layer | Technology |
-|--------------|------------------------|
-| Backend | Laravel (PHP) |
-| Frontend | Vue.js via Inertia.js |
-| Storage | Public file storage |
-| Admin Panel | Built-in Laravel admin |
+| Layer | Technology |
+| ------------------ | ------------------------------------- |
+| **Backend** | Laravel 12 (PHP) |
+| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
+| **Styling** | Tailwind CSS v4 |
+| **Realtime** | Pusher Channels + Laravel Echo |
+| **Storage** | AWS S3 / Cloudflare R2 |
+| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
+| **Analytics** | PostHog |
+| **Permissions** | Spatie Laravel Permission |
+| **PWA** | vite-plugin-pwa |
## Development Setup
@@ -46,6 +51,15 @@ php artisan serve
pnpm dev
```
+### Additional Setup (Optional)
+
+- **Google OAuth:** Configure `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, and `GOOGLE_REDIRECT_URI` in `.env` for authentication.
+- **Pusher:** Configure `PUSHER_APP_ID`, `PUSHER_APP_KEY`, `PUSHER_APP_SECRET` in `.env` for live chat.
+- **S3/R2 Storage:** Configure `AWS_*` or `CLOUDFLARE_*` keys for file uploads.
+- **PostHog:** Configure `POSTHOG_*` keys for analytics.
+- **YouTube Data API:** Configure `YOUTUBE_API_KEY` for playlist imports.
+- **Short.io:** Configure `SHORT_IO_*` keys for URL shortening.
+
## Workflow
1. Create a new branch off `main`:
@@ -90,44 +104,54 @@ php artisan test
General guidelines:
- Follow existing Laravel conventions (FormRequests for validation, resource controllers, etc.).
-- Keep Vue components under `resources/js/Pages` and `resources/js/Components` organized and reusable.
+- Keep Vue components under `resources/js/pages/` and `resources/js/components/` organized and reusable.
- Avoid passing non-database fields into mass assignment (`create()`/`update()`); validate and filter explicitly.
- Keep PRs focused — one feature or fix per PR is easier to review.
+- Use TypeScript types defined in `resources/js/types/` for all component props and API responses.
+- Follow the existing cache invalidation pattern using Observers when adding new cacheable models.
## Project Structure
```
-hscstack/
+platform/
├── app/
-│ ├── Models/ # Subject, Node, Resource models
-│ ├── Http/Controllers/ # Web + Admin controllers
-│ └── ...
+│ ├── Models/ # Eloquent models (User, Subject, Node, Resource, Blog, etc.)
+│ ├── Http/Controllers/ # Web + Admin + API controllers
+│ ├── Mail/ # Mailable classes (Welcome, Notifications, Broadcasts)
+│ ├── Observers/ # Cache invalidation observers
+│ ├── Services/ # Business logic services
+│ └── Console/Commands/ # Artisan CLI commands
├── resources/
│ ├── js/
-│ │ ├── Pages/ # Inertia Vue pages
-│ │ └── Components/ # Reusable Vue components
-│ └── views/ # Blade layouts
+│ │ ├── pages/ # Inertia Vue pages
+│ │ ├── components/ # Reusable Vue components
+│ │ ├── layouts/ # App layouts
+│ │ └── types/ # TypeScript type definitions
+│ └── views/ # Blade templates
├── routes/
-│ ├── web.php # Public routes
-│ └── admin.php # Admin routes
-├── public/storage/ # Uploaded files
-├── .env.example
+│ ├── web.php # Public & auth routes
+│ ├── admin.php # Admin panel routes
+│ └── api.php # API routes (chat, auth, short URLs)
+├── database/migrations/ # Database schema migrations
+├── config/ # App configuration
+├── docs/ # Developer documentation
└── README.md
```
## Content Contributions (Non-Code)
-If you want to contribute academic resources (notes, PDFs, questions, etc.) rather than code, you don't need to touch this repository at all. Instead:
+If you want to contribute academic resources (notes, PDFs, questions, images, videos) rather than code, you don't need to touch this repository at all. Instead:
1. Become a member at [hscstack.site/join](https://hscstack.site/join)
-2. Log in to the platform and upload your resource under the relevant subject and chapter.
-3. Your submission goes live after a quick admin review.
+2. Log in with Google and navigate to the relevant subject and chapter.
+3. Upload your resource with a clear title and content.
+4. Your submission goes live after admin review.
Please only upload content you created or have permission to share, and avoid copyrighted textbooks or board materials.
## Reporting Bugs & Requesting Features
-- Use [GitHub Issues](https://github.com/trtajim/hscstack/issues) for bugs and feature requests.
+- Use [GitHub Issues](https://github.com/hscstack/platform/issues) for bugs and feature requests.
- Include steps to reproduce, expected vs. actual behavior, and screenshots if relevant (for UI bugs).
## Questions?
diff --git a/README.md b/README.md
index 9f49e5c..31d5851 100644
--- a/README.md
+++ b/README.md
@@ -5,13 +5,15 @@
> A curated resource platform for HSC & SSC students of Bangladesh — built by members, for everyone.
-HSCStack is a lightweight, structured platform where verified members share academic resources — practicals, notes, PDFs, videos, and questions — organized by subject and chapter, so every SSC & HSC student can find what they need in one place.
+HSCStack is a structured platform where verified members share academic resources — notes, questions, PDFs, images, and videos — organized by subject and chapter, so every SSC & HSC student can find what they need in one place. On top of that, we've got a real-time community chat, an educational blog, study progress tracking, and an AI learning assistant — all completely free and ad-free.
---
## 🌟 What is HSCStack?
-HSCStack is built for students preparing for the **Higher Secondary Certificate (HSC)** & **Secoondary School Certificate (SSC)** exams in Bangladesh. It brings together a trusted library of student-made resources, organized neatly by subject and chapter — no more digging through WhatsApp groups or random Facebook posts.
+HSCStack is built for students preparing for the **Higher Secondary Certificate (HSC)** and **Secondary School Certificate (SSC)** exams in Bangladesh. It brings together a trusted library of student-made resources, organized neatly by subject and chapter — no more digging through WhatsApp groups or random Facebook posts.
+
+You can switch between HSC and SSC curricula seamlessly. Each subject has nested chapters and topics, so you can drill down to exactly what you're looking for. Resources are uploaded by verified members to keep quality high, and the community votes on the best folders to surface them to the top.
Browsing is open to everyone. But to **contribute**, you need to be an HSCStack member first — keeping the content quality high and the community trustworthy.
@@ -19,25 +21,33 @@ Browsing is open to everyone. But to **contribute**, you need to be an HSCStack
## ✨ Features
-- 📂 **Subject Archive** — Resources organized under subjects with visual themes and icons.
-- 🗂️ **Chapter-based Structure** — Each subject has nested chapters (nodes) so you can find exactly what you need.
-- 📄 **Multiple Resource Types** — Notes, PDFs, images, videos, and exam questions — all in one place.
-- 🔒 **Members-Only Uploads** — Only verified HSCStack members can contribute content.
-- 🛠️ **Admin Panel** — Full control over subjects, chapters, and resources via a clean admin area.
-- ☁️ **File Upload Support** — Resources are stored and served from public storage.
-- 🆓 **Free to Browse** — No account needed to read or download resources.
-- 📝 **Educational Blog** — Read study tips, announcements, learning guides, and educational articles.
+- 📂 **Dual Curriculum** — Switch between HSC and SSC. Subjects organized with custom icons, color-coded badges, and sort order.
+- 🗂️ **Deep Folder Structure** — Infinite nesting: subject → chapter → topic → sub-topic. Breadcrumb navigation with caching for speed.
+- 📄 **5 Resource Types** — Notes, questions, PDFs, images, and videos. Direct uploads to S3/R2 or external links.
+- ⬆️ **Community Voting** — Upvote/downvote folders. Best content rises to the top.
+- ✅ **Progress Tracking** — Mark resources as "Completed." See completion counts and who's been studying.
+- 🎥 **Custom YouTube Player** — Watch classes without YouTube ads or distracting recommendations. Custom controls with variable speed (0.75x–2x), 5-second skip, and fullscreen.
+- 💬 **Live Chat** — Real-time global chat with message replies, @mentions, emoji reactions, and a smart profanity filter. Community reporting with auto-ban for repeat offenders.
+- 👤 **Public Profiles** — Vanity URLs (`/u/{username}`) with bio, institution, avatar, social links, and a unified activity stream.
+- ❤️ **Peer Appreciations** — Appreciate members with milestone email notifications.
+- ✍️ **Blog** — Full CMS with slug URLs, featured images, SEO tags, love reactions, and threaded comments.
+- 🤖 **AI Assistant** — Dedicated interface organized by STEM subjects and chapters.
+- 🔗 **URL Shortener** — Floating share bar on every page, powered by Short.io.
+- 📱 **PWA** — Install it like an app. Works offline with a service worker.
+- 🔔 **Notice Banner** — Site-wide announcements with images and CTA buttons.
+- 🔒 **Google Sign-in** — One-click OAuth 2.0 authentication.
---
## 📚 Resource Types
-| Type | Description |
-| ---------- | ------------------------------------------------- |
-| **Notes** | Handwritten or typed notes by fellow students |
-| **PDFs** | Formatted documents, guides, and reference sheets |
-| **Images** | Diagrams, charts, and visual study aids |
-| **Videos** | Classes from Youtube |
+| Type | Description |
+| ------------- | ------------------------------------------------- |
+| **Notes** | Handwritten or typed notes by fellow students |
+| **Questions** | Exam questions and practice problems |
+| **PDFs** | Formatted documents, guides, and reference sheets |
+| **Images** | Diagrams, charts, and visual study aids |
+| **Videos** | Ad-free YouTube classes via custom native player |
---
@@ -46,7 +56,7 @@ Browsing is open to everyone. But to **contribute**, you need to be an HSCStack
### For Students (Browsing)
1. Visit [HSCStack][website] — no account needed.
-2. Pick your subject and chapter.
+2. Pick your curriculum (HSC or SSC), then select a subject and chapter.
3. Browse, read, or download any resource freely.
### For Members (Contributing)
@@ -54,68 +64,71 @@ Browsing is open to everyone. But to **contribute**, you need to be an HSCStack
Only HSCStack members can upload resources. To become a member:
1. Join at 👉 **[hscstack.site/join][join]**
-2. Once accepted, log in and go to the relevant subject and chapter.
-3. Upload your resource — add a title, type, and short description.
-4. Your contribution goes live after a quick admin review.
+2. Once accepted, sign in with Google and go to the relevant subject and chapter.
+3. Upload your resource — add a title, type, and content.
+4. Your contribution goes live after admin review.
-> **Why membership?** We keep uploads member-only to maintain quality and ensure content is relevant, accurate, and trustworthy for all HSC students.
+> **Why membership?** We keep uploads member-only to maintain quality and ensure content is relevant, accurate, and trustworthy for all students.
---
## 🛠️ Tech Stack
-| Layer | Technology |
-| --------------- | --------------------------- |
-| **Backend** | Laravel (PHP) |
-| **Frontend** | Vue.js via Inertia.js |
-| **Storage** | Public file storage |
-| **Admin Panel** | Built-in Laravel admin area |
+| Layer | Technology |
+| ------------------ | ------------------------------------- |
+| **Backend** | Laravel 12 (PHP) |
+| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
+| **Styling** | Tailwind CSS v4 |
+| **Realtime** | Pusher Channels + Laravel Echo |
+| **Storage** | AWS S3 / Cloudflare R2 |
+| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
+| **Analytics** | PostHog |
+| **Permissions** | Spatie Laravel Permission |
+| **PWA** | vite-plugin-pwa |
+| **Backup** | Google Drive API (automated) |
---
## 📖 Developer Documentation
-Additional documentation for developers:
-
-- [Google Drive Backup](docs/google-drive-backup.md)
+- [Google Drive Backup Setup](docs/google-drive-backup.md)
+- [Storage Cleanup Command](docs/storage-cleanup.md)
---
-## 🤝 Contributing to the Codebase
-
-HSCStack is not open for general pull requests. To contribute code, you must be a **core developer** on the team.
-
-To apply, join via 👉 **[hscstack.site/join][join]** — once your application is reviewed and accepted, we'll onboard you to the codebase.
+## 🤝 Contributing
-Once you're a core developer:
+HSCStack welcomes contributions from core developers. See [CONTRIBUTING.md](CONTRIBUTING.md) for the development setup, workflow, and code style guidelines.
-1. Clone the repository
-2. Create a new branch: `git checkout -b feature/your-feature-name`
-3. Commit your changes: `git commit -m "Add: your feature"`
-4. Push to your branch: `git push origin feature/your-feature-name`
-5. Open a Pull Request for review
+Not a developer? You can still contribute academic resources (notes, PDFs, questions) by joining at **[hscstack.site/join][join]**.
---
## 📁 Project Structure
```
-hscstack/
+platform/
├── app/
-│ ├── Models/ # Subject, Node, Resource models
-│ ├── Http/Controllers/ # Web + Admin controllers
-│ └── ...
+│ ├── Models/ # Eloquent models (User, Subject, Node, Resource, Blog, etc.)
+│ ├── Http/Controllers/ # Web + Admin + API controllers
+│ ├── Mail/ # Mailable classes
+│ ├── Observers/ # Cache invalidation observers
+│ ├── Services/ # Business logic services
+│ └── Console/Commands/ # Artisan CLI commands (backup, sitemap, cleanup)
├── resources/
│ ├── js/
-│ │ ├── Pages/ # Inertia Vue pages
-│ │ └── Components/ # Reusable Vue components
-│ └── views/ # Blade layouts
+│ │ ├── pages/ # Inertia Vue pages
+│ │ ├── components/ # Reusable Vue components
+│ │ ├── layouts/ # App layouts
+│ │ └── types/ # TypeScript type definitions
+│ └── views/ # Blade templates
├── routes/
-│ ├── web.php # Public routes
-│ └── admin.php # Admin routes
-├── public/storage/ # Uploaded files
-├── .env.example
-└── README.md
+│ ├── web.php # Public & auth routes
+│ ├── admin.php # Admin panel routes
+│ └── api.php # API routes (chat, auth, short URLs)
+├── database/migrations/ # Database schema
+├── config/ # App configuration
+└── docs/ # Developer docs
```
---
@@ -125,12 +138,14 @@ hscstack/
HSCStack's value comes from the quality of what's shared. Please follow these rules:
- ✅ Only upload content **you created** or have permission to share.
-- ✅ Keep everything **relevant to the HSC Bangladesh curriculum**.
+- ✅ Keep everything **relevant to the HSC/SSC Bangladesh curriculum**.
- ✅ Add **clear titles and descriptions** so others can find your resource.
+- ✅ Be respectful in live chat and comments.
- ❌ Do not upload copyrighted textbooks or board materials without permission.
- ❌ No spam, duplicate, or off-topic content.
+- ❌ No profanity, harassment, or hate speech in chat.
-Breaking these rules may result in content removal or membership revocation.
+Breaking these rules may result in content removal, chat bans, or account suspension.
---
@@ -140,6 +155,7 @@ Have a question, found a bug, or want to get involved?
- 📧 Email: `com.tajim@gmail.com`
- 🐛 Issues: [Open a GitHub Issue](../../issues)
+- ❤️ Support: [hscstack.site/support](https://hscstack.site/support)
---
diff --git a/docs/storage-cleanup.md b/docs/storage-cleanup.md
index a0fa294..b9f7635 100644
--- a/docs/storage-cleanup.md
+++ b/docs/storage-cleanup.md
@@ -2,17 +2,24 @@
## Purpose
-The `resources:clean-unused-images` Artisan command removes orphaned files from `storage/app/public/resources`.
+The `resources:clean-unused-images` Artisan command removes orphaned files from S3/R2 cloud storage.
-A file is considered unused when:
-- It exists in storage
-- Its path is not referenced by any `resources.file_url` database record
+It scans four storage directories and cross-references them against the database:
+
+| Storage Directory | Database Check |
+| ----------------- | --------------------------------------- |
+| `resources/` | `resources.file_path` |
+| `users/` | `users.image_path` |
+| `blogs/` | `blogs.featured_image_path` |
+| `notices/` | `notices.image` (non-HTTP paths only) |
+
+A file is considered unused when it exists in storage but its path is not referenced by any database record.
## Why this exists
-Resources can be deleted using database cascade deletion. Since database cascades do not trigger Laravel model events, associated files may remain in storage.
+Resources, users, blogs, and notices can be deleted via database cascade or admin actions. Since database cascades do not trigger Laravel model events, associated files may remain in storage.
-This command cleans those orphan files.
+This command cleans those orphan files across all upload directories.
## Usage
@@ -22,3 +29,10 @@ Always run dry-run first:
```bash
php artisan resources:clean-unused-images --dry-run
+```
+
+### Delete unused files
+
+```bash
+php artisan resources:clean-unused-images
+```
diff --git a/resources/js/components/Footer.vue b/resources/js/components/Footer.vue
index 0587cd4..48ef995 100644
--- a/resources/js/components/Footer.vue
+++ b/resources/js/components/Footer.vue
@@ -80,12 +80,10 @@ const isFullFooter = computed(() => {
class="mt-4 hidden text-xs font-medium text-slate-400 md:block dark:text-gray-500"
>
A concern of
- TajimTajim
diff --git a/resources/js/pages/ContributorGuide.vue b/resources/js/pages/ContributorGuide.vue
index 38fdd5e..4560365 100644
--- a/resources/js/pages/ContributorGuide.vue
+++ b/resources/js/pages/ContributorGuide.vue
@@ -846,9 +846,10 @@ onUnmounted(() => {
class="text-sm leading-relaxed font-normal text-slate-600 sm:text-base dark:text-gray-400"
>
যেকোনো সময় আপনি আপনার account details update করতে
- পারবেন। Profile photo-এর জন্য Imgur বা PostImages-এর মতো
- কোনো service-এ ছবি আপলোড করে, সেই direct link আপনার
- profile-এ ব্যবহার করুন।
+ পারবেন। Profile photo সরাসরি আপলোড করুন — PNG, JPG বা
+ WEBP ফরম্যাটে, সর্বোচ্চ 2MB সাইজের মধ্যে। এছাড়া bio,
+ institution, এবং social links (Facebook, Instagram,
+ GitHub) যোগ করতে পারবেন।
diff --git a/resources/js/pages/legal/ContentPolicy.vue b/resources/js/pages/legal/ContentPolicy.vue
index ad0cd0f..9453f3c 100644
--- a/resources/js/pages/legal/ContentPolicy.vue
+++ b/resources/js/pages/legal/ContentPolicy.vue
@@ -5,10 +5,12 @@ import {
FileText,
Users,
ShieldAlert,
+ MessageSquare,
Share2,
UserMinus,
Youtube,
PenLine,
+ ThumbsUp,
Copyright,
RefreshCw,
} from 'lucide-vue-next';
@@ -36,7 +38,7 @@ import {
- সর্বশেষ আপডেট: জুলাই ২০২৬
+ সর্বশেষ আপডেট: আগস্ট ২০২৬
@@ -77,11 +79,11 @@ import {
-
Contributor-submitted notes
-
Educational resources
-
Embedded YouTube classes
+
৫ ধরনের রিসোর্স (Notes, Questions, PDFs, Images, Videos)
- কন্ট্রিবিউটররা HSCStack-এ নোট বা শিক্ষামূলক উপকরণ জমা
- দেওয়ার মাধ্যমে নিশ্চিত করেন যে:
+ কন্ট্রিবিউটররা HSCStack-এ নোট বা যেকোনো শিক্ষামূলক উপকরণ (Questions, PDFs, Images, Videos ইত্যাদি) জমা দেওয়ার মাধ্যমে নিশ্চিত করেন যে:
- HSCStack-এ প্রকাশিত নোটগুলো শিক্ষার্থীদের শেখার সুবিধার
- জন্য প্রদান করা হয়। কোনো কন্ট্রিবিউটর নোট জমা দিলে,
- HSCStack সেই নোট প্ল্যাটফর্মে সংরক্ষণ, প্রদর্শন এবং
+ HSCStack-এ প্রকাশিত রিসোর্সগুলো শিক্ষার্থীদের শেখার সুবিধার
+ জন্য প্রদান করা হয়। কোনো কন্ট্রিবিউটর কনটেন্ট জমা দিলে (S3/Cloudflare R2-তে আপলোড বা এক্সটার্নাল লিংকের মাধ্যমে),
+ HSCStack সেই কনটেন্ট প্ল্যাটফর্মে সংরক্ষণ, প্রদর্শন এবং
শিক্ষার্থীদের কাছে বিতরণের অনুমতি পায় — তবে কনটেন্টের
মূল মালিকানা কন্ট্রিবিউটরের কাছেই থাকে।
-
+
- কপিরাইট লঙ্ঘনকারী বা চুরি করা (stolen) নোট বা
- কনটেন্ট।
+ কপিরাইট লঙ্ঘনকারী বা চুরি করা (stolen) কনটেন্ট।
- ক্ষতিকর ফাইল, ম্যালওয়্যার, বা সন্দেহজনক
- এক্সিকিউটেবল সম্বলিত আপলোড।
+ লাইভ চ্যাটে অশালীন ভাষা (profanity), হয়রানি, বিদ্বেষমূলক বক্তব্য (hate speech) বা হুমকি।
- ব্যক্তিগত বা সংবেদনশীল তথ্য (personal information)
- প্রকাশ করে এমন কনটেন্ট।
+ ইচ্ছাকৃতভাবে বিভ্রান্তিকর বা ভুল শিক্ষামূলক তথ্যসম্বলিত (misleading academic content) কনটেন্ট।
- স্প্যাম, প্রোমোশনাল, বা পুনরাবৃত্তিমূলক (repetitive)
- submission।
+ কারো ব্যক্তিগত বা সংবেদনশীল তথ্য শেয়ার করা বা ডক্সিং (doxxing)।
+
+
+ ক্ষতিকর ফাইল, ম্যালওয়্যার, বা সন্দেহজনক
+ এক্সিকিউটেবল সম্বলিত আপলোড।
- ইচ্ছাকৃতভাবে বিভ্রান্তিকর বা ভুল তথ্যসম্বলিত
- (misleading) কনটেন্ট।
+ স্প্যাম, প্রোমোশনাল, বা পুনরাবৃত্তিমূলক (repetitive)
+ submission।
-
শিক্ষামূলক উদ্দেশ্যের সাথে সম্পর্কহীন কনটেন্ট।
+
+
+
+
+
+
+ ৪. লাইভ চ্যাট কনটেন্ট নীতিমালা
+
+
+ HSCStack-এর রিয়েল-টাইম লাইভ চ্যাটে শিক্ষার্থীদের একটি সুস্থ পরিবেশ বজায় রাখার জন্য আমাদের একটি স্বয়ংক্রিয় মডারেশন সিস্টেম রয়েছে:
+
+
+
+ Smart Profanity Filter: আমাদের সিস্টেমে স্বয়ংক্রিয়ভাবে গালিগালাজ শনাক্ত করার প্রযুক্তি রয়েছে, যা leet-speak (যেমন @->a, $->s, 1->i) এবং পুনরাবৃত্তিমূলক অক্ষর (repeated char collapse) শনাক্ত করতে সক্ষম। কনফিগারযোগ্য নিষিদ্ধ শব্দগুলো স্বয়ংক্রিয়ভাবে ফিল্টার হয়ে যায়।
+
+
+ Community Reporting: চ্যাটের কোনো মেসেজ আপত্তিকর মনে হলে ব্যবহারকারীরা নির্দিষ্ট কারণ উল্লেখ করে সেটি রিপোর্ট করতে পারেন।
+
+
+ Auto-Suspension: কোনো ব্যবহারকারী ৫টি বা তার বেশি রিপোর্ট পেলে সিস্টেম স্বয়ংক্রিয়ভাবে তাকে ২৪ ঘণ্টার জন্য চ্যাট থেকে সাসপেন্ড করবে।
+
+
+ Message Pruning: প্ল্যাটফর্মের গতি ঠিক রাখতে চ্যাটে রোলিং মেসেজ প্রুনিং ব্যবহার করা হয়, যেখানে সর্বশেষ প্রায় ২০০টি মেসেজ সংরক্ষিত থাকে।
+
+
+ Staff Moderation: অ্যাডমিন এবং মডারেটররা যেকোনো সময় আপত্তিকর মেসেজ ডিলিট করার বা ব্যবহারকারীকে ব্যান করার অধিকার রাখেন।
+
+
+
+
+
+
- ৪. Attribution এবং Redistribution
+ ৫. Attribution এবং Redistribution
- HSCStack থেকে ডাউনলোড করা নোট শিক্ষার্থীরা ব্যক্তিগত
+ HSCStack থেকে ডাউনলোড করা ফাইল শিক্ষার্থীরা ব্যক্তিগত
ও শিক্ষামূলক ব্যবহারের জন্য ব্যবহার করতে পারবেন।
@@ -235,14 +275,13 @@ import {
জমা দেওয়া কনটেন্টের মূল মালিকানা ধরে রাখলেও,
HSCStack-এ প্রকাশের মাধ্যমে HSCStack-কে সেই কনটেন্ট
সংরক্ষণ, প্রদর্শন এবং শিক্ষামূলক উদ্দেশ্যে বিতরণের
- অনুমতি প্রদান করেন। যদি তা HSCStack-এর মাধ্যমে
- প্রকাশের জন্য অনুমোদিত হয়ে থাকে।
+ অনুমতি প্রদান করেন।
HSCStack কিছু ক্ষেত্রে YouTube-এ প্রকাশিত শিক্ষামূলক
- ভিডিও ক্লাস embed করতে পারে। আমরা:
+ ভিডিও ক্লাস আমাদের Custom Native Player-এর মাধ্যমে embed করতে পারে। আমরা:
-
+
- ৭. Blogs এবং Articles
+ ৮. Blogs এবং Articles
- কিছু লেখায় থাকতে পারে External links, reference
- sources, অথবা short quotations। এসব ক্ষেত্রে প্রাসঙ্গিক
- attribution এবং fair use principles অনুসরণ করার চেষ্টা
- করা হয়।
+ ব্লগগুলোতে পাঠকরা Love reactions দিতে পারেন এবং Threaded comments-এর মাধ্যমে মতামত জানাতে পারেন। আমরা গঠনমূলক আলোচনা এবং শালীন ভাষা ব্যবহারের জন্য উৎসাহিত করি। এছাড়াও, নির্দিষ্ট মাইলফলক অর্জনে কন্ট্রিবিউটররা নোটিফিকেশন পাবেন।
-
+
+
+
+
+
+
+
+ ৯. কমিউনিটি ইন্টারঅ্যাকশন
+
+
+ HSCStack-এ একটি সহায়ক ও ইতিবাচক শিক্ষামূলক পরিবেশ গড়ে তোলার জন্য কমিউনিটির ইন্টারঅ্যাকশন অত্যন্ত গুরুত্বপূর্ণ:
+
+
+
Folder Voting: ব্যবহারকারীরা ফোল্ডার আপভোট বা ডাউনভোট করার ক্ষেত্রে সততা বজায় রাখবেন। গঠনমূলক মূল্যায়ন অন্য শিক্ষার্থীদের সঠিক কনটেন্ট খুঁজে পেতে সাহায্য করবে।
+
Appreciations: প্রোফাইলে অন্যদের প্রশংসা (appreciations) প্রদান করার ক্ষেত্রে সম্মানজনক ভাষা ব্যবহার করতে হবে।
+
Profile Content: ব্যবহারকারীর প্রোফাইলের কনটেন্ট এবং কার্যকলাপের সম্পূর্ণ দায়ভার ওই ব্যবহারকারীর।
+
+
+
+
+
- ৮. Copyright এবং Removal Requests
+ ১০. Copyright এবং Removal Requests
-
+
- ৯. Content Review and Modification
+ ১১. Content Review and Modification
- HSCStack:
+ HSCStack অ্যাডমিন প্যানেলের মাধ্যমে প্ল্যাটফর্মের কনটেন্ট পরিচালনার ক্ষমতা রাখে:
-
কনটেন্ট যাচাই করতে পারে।
-
- প্রয়োজন অনুযায়ী কনটেন্ট edit, hide বা remove করতে
- পারে।
-
-
- প্ল্যাটফর্মের মান বজায় রাখার জন্য submission reject
- করতে পারে।
-
+
অ্যাডমিন বা এডিটররা যেকোনো সাবজেক্ট, নোড, রিসোর্স বা ব্লগ তৈরি, সম্পাদনা বা ডিলিট করতে পারেন।
+
প্রয়োজন অনুযায়ী Bulk operations পরিচালনা করা হতে পারে।
+
প্ল্যাটফর্মের মান বজায় রাখার জন্য কনটেন্ট যাচাই করতে পারে এবং যেকোনো submission reject করতে পারে।
- সর্বশেষ আপডেট: জুলাই ২০২৬
+ সর্বশেষ আপডেট: আগস্ট ২০২৬
@@ -67,26 +69,28 @@ import {
- আমরা জিনিসগুলো fast এবং clean রাখার চেষ্টা করি । একটা
- ভালো experience দেওয়ার জন্য যতটুকু প্রয়োজন, ঠিক ততটুকু
- তথ্যই আমরা সংগ্রহ করি:
+ প্ল্যাটফর্মের ফিচারগুলো নিরবচ্ছিন্নভাবে প্রদানের জন্য আমরা কিছু নির্দিষ্ট তথ্য সংগ্রহ করি:
Usage Data:অ্যাকাউন্ট ডেটা:
- layout পারফরম্যান্স অপটিমাইজ করার জন্য ব্রাউজার টাইপ
- এবং ভিজিট করা পেজের মতো non-personal ডেটা।
+ Google OAuth 2.0 এর মাধ্যমে লগইন করার সময় আপনার নাম, ইমেইল, Google ID এবং প্রোফাইল ছবি সংগ্রহ করা হয়।
Search Queries:প্রোফাইল ডেটা:
- সাবজেক্ট instantly ফিল্টার করার জন্য আপনার সার্চ
- ইনপুট আপনার ডিভাইসেই locally প্রসেস করা হয়।
+ আপনার বায়ো, শিক্ষাপ্রতিষ্ঠানের নাম, অ্যাভাটার এবং সোশ্যাল লিংক (Facebook, Instagram, GitHub)।
+
+
+ ইউজার অ্যাক্টিভিটি:
+ চ্যাট মেসেজ, রিসোর্স কমপ্লিশন স্ট্যাটাস, ফোল্ডার আপভোট/ডাউনভোট, অ্যাপ্রিসিয়েশন, ব্লগ কমেন্ট ও রিঅ্যাকশন এবং আপলোড করা ফাইলসমূহ।
@@ -108,14 +112,7 @@ import {
- আপনার visual preference (যেমন লেআউট সাইজিং বা cached
- data) মনে রাখার জন্য আমরা lightweight local storage বা
- কুকিজ ব্যবহার করি, যাতে ব্রাউজিং সেশনটা seamless হয়।
- আমরা তৃতীয় পক্ষের বিজ্ঞাপন বা cross-site advertising
- tracking এর মাধ্যমে আপনাকে অনুসরণ করি না। আমরা কিছু
- privacy-focused analytics টুলও ব্যবহার করি, যেগুলোর
- বিস্তারিত বর্ণনা ৬ নম্বর সেকশনে ("অ্যানালিটিক্স ও
- ট্র্যাকিং") দেওয়া আছে।
+ একটি সুরক্ষিত এবং seamless অভিজ্ঞতা নিশ্চিত করতে আমরা কুকিজ ও লোকাল স্টোরেজ ব্যবহার করি। এর মধ্যে রয়েছে Session Cookies এবং CSRF টোকেন যা সিকিউরিটির জন্য জরুরি। পাশাপাশি আপনার সিলেক্ট করা কোর্সের জন্য preferred_course কুকি এবং আমাদের PWA অ্যাপের জন্য Service Worker ব্যবহার করা হয়। আমরা কোনো ধরনের থার্ড-পার্টি অ্যাডভার্টাইজিং কুকিজ ব্যবহার করি না।
@@ -136,12 +133,17 @@ import {
- অনলাইনে থাকতে এবং দ্রুত পারফর্ম করতে আমাদের আর্কাইভ
- modern hosting platform এবং lightweight analytics টুল
- ব্যবহার করে। এই থার্ড পার্টিগুলো আপনার basic operational
- data নিরাপদে এবং কড়া security compliance নিয়ম মেনে
- হ্যান্ডেল করে।
+ প্ল্যাটফর্মের কার্যক্রম পরিচালনার জন্য আমরা কিছু নির্ভরযোগ্য থার্ড-পার্টি সার্ভিস ব্যবহার করি:
+
+
অথেন্টিকেশন: Google OAuth
+
রিয়েল-টাইম সার্ভিস: Pusher (WebSockets)
+
স্টোরেজ: AWS S3 / Cloudflare R2
+
অ্যানালিটিক্স: PostHog
+
অন্যান্য: Short.io (লিংক শর্টেনার), YouTube (এম্বেড করা ভিডিও) এবং নির্ভরযোগ্য ইমেইল প্রোভাইডার (Postmark/Resend/SES)।
+
@@ -161,11 +163,7 @@ import {
- প্ল্যাটফর্মের safety নিশ্চিত করতে আমরা strict, clean
- codebase practice অনুসরণ করি। এই ডিজিটাল আর্কাইভ
- সুরক্ষিত রাখতে আমরা যথাসাধ্য চেষ্টা করলেও, মনে
- রাখবেন—অনলাইনে absolute নেটওয়ার্ক সিকিউরিটি বলে কিছু
- নেই।
+ আপনার ডেটার সর্বোচ্চ নিরাপত্তা নিশ্চিত করতে আমরা HTTPS এনক্রিপশন, সিকিউর ক্লাউড স্টোরেজ, মজবুত পাসওয়ার্ড হ্যাশিং এবং প্রোডাকশন লেভেলের সেফগার্ড ব্যবহার করি। স্প্যাম রোধে রয়েছে রেট লিমিটিং ব্যবস্থা। এছাড়া ডেটা লস এড়াতে আমাদের ডাটাবেস এবং ফাইলগুলো স্বয়ংক্রিয়ভাবে Google Drive-এ ব্যাকআপ নেওয়া হয়। তবে অনলাইনে কোনো সিস্টেমই ১০০% সুরক্ষিত নয়।
@@ -181,24 +179,12 @@ import {
- ৫. কনট্রিবিউটর তথ্য
+ ৫. কনট্রিবিউটর ও ব্যবহারকারী তথ্য
- কনট্রিবিউটর হিসেবে কাজ করার জন্য আপনি যে তথ্য প্রদান
- করেন (যেমন নাম, ইমেইল বা প্রোফাইল তথ্য), তা কনট্রিবিউটর
- management, কনটেন্ট attribution এবং প্ল্যাটফর্ম
- পরিচালনার জন্য ব্যবহার করা হয়। কনট্রিবিউটররা তাদের
- অ্যাকাউন্ট মুছে ফেলার অনুরোধ করতে পারেন, তবে অ্যাকাউন্ট
- মুছে ফেলার অর্থ এই নয় যে তাদের পূর্বে প্রকাশিত কনটেন্টও
- স্বয়ংক্রিয়ভাবে মুছে যাবে — বিস্তারিত জানতে আমাদের
- Content Policy
-
- দেখুন।
+ Google sign-in থেকে প্রাপ্ত আপনার প্রোফাইল তথ্য এবং আপলোড করা কনটেন্ট অন্যান্য ব্যবহারকারীরা দেখতে পারেন। আপনি চাইলে সেটিংস থেকে প্রোফাইল ভিজিবিলিটি নিয়ন্ত্রণ করতে পারেন এবং ইমেইল প্রেফারেন্স (receive_emails) অন/অফ করতে পারেন। প্ল্যাটফর্মে কোনো কনটেন্ট আপলোড করলে তার সাথে আপনার নাম সংযুক্ত (Attribution) থাকে।
@@ -219,15 +205,7 @@ import {
- ব্যবহারকারীর অভিজ্ঞতা এবং প্ল্যাটফর্মের কার্যকারিতা
- উন্নত করার জন্য আমরা বিভিন্ন analytics এবং performance
- monitoring tool ব্যবহার করতে পারি। এর মধ্যে Cloudflare
- Analytics, Microsoft Clarity এবং আমাদের নিজস্ব internal
- analytics system অন্তর্ভুক্ত হতে পারে। এসব সিস্টেম
- সাধারণত ভিজিট, ব্রাউজার, ডিভাইস, পেজ interaction এবং
- ট্রাফিক pattern-এর মতো non-personal usage data সংগ্রহ
- করে। আমরা এই তথ্য কোনো নির্দিষ্ট ব্যক্তিকে শনাক্ত করার
- উদ্দেশ্যে ব্যবহার করি না।
+ প্ল্যাটফর্ম উন্নত করার উদ্দেশ্যে আমরা মূলত PostHog ব্যবহার করি যা pageviews, unique visitors, active users এবং referrers সম্পর্কে ধারণা দেয়। পাশাপাশি Cloudflare ও আমাদের ইন্টার্নাল অ্যানালিটিক্স কাজ করে। এসব ডেটা সম্পূর্ণ রূপে non-personal এবং শুধু এগ্রিগেট আকারে ব্যবহৃত হয়।
@@ -237,30 +215,65 @@ import {
-
+
- ৭. ব্যক্তিগত তথ্য মুছে ফেলার অনুরোধ
+ ৭. ইমেইল কমিউনিকেশন
- HSCStack সাধারণ দর্শকদের কাছ থেকে কোনো ব্যক্তিগত
- অ্যাকাউন্ট তথ্য সংগ্রহ বা সংরক্ষণ করে না। তাই সাধারণ
- ব্যবহারকারীদের জন্য আলাদা data deletion request প্রযোজ্য
- নয়। তবে কনট্রিবিউটর অ্যাকাউন্টের ক্ষেত্রে,
- ব্যবহারকারীরা তাদের অ্যাকাউন্ট মুছে ফেলার অনুরোধ করতে
- পারেন — যদিও তাদের পূর্বে প্রকাশিত কনটেন্ট প্ল্যাটফর্মে
- থেকে যেতে পারে, যেমনটি Content Policy-তে ব্যাখ্যা করা
- হয়েছে।
+ ব্যবহারকারীদের সাথে যোগাযোগ রাখার জন্য আমরা ওয়েলকাম ইমেইল, নির্দিষ্ট মাইলস্টোন নোটিফিকেশন, ব্লগে কমেন্ট অ্যালার্ট এবং গুরুত্বপূর্ণ ঘোষণা (bulk announcements) পাঠিয়ে থাকি। আপনি চাইলে যেকোনো সময় আপনার অ্যাকাউন্ট সেটিংস বা ইমেইলের নিচে থাকা আনসাবস্ক্রাইব লিংকে ক্লিক করে এসব ইমেইল বন্ধ করতে পারেন।
+
+
+
+
+
+
+ ৮. লাইভ চ্যাট ডেটা
+
+
+ আমাদের রিয়েল-টাইম লাইভ চ্যাটে পাঠানো মেসেজ, রিপ্লাই এবং রিঅ্যাকশন ডাটাবেসে সেভ করা হয়। চ্যাটের পারফরম্যান্স ঠিক রাখতে আমরা সাধারণত নির্দিষ্ট সংখ্যক (যেমন ~২০০) লেটেস্ট মেসেজ রেখে পুরনো মেসেজ মুছে ফেলি (rolling pruning)। এছাড়া চ্যাটের সুষ্ঠু পরিবেশ বজায় রাখার জন্য ইউজার রিপোর্ট সেভ করা হয় এবং নিয়ম ভাঙলে অটো-ব্যান মেকানিজম রয়েছে। শুধুমাত্র প্ল্যাটফর্মের মডারেটর বা স্টাফরা নিয়মভঙ্গকারী মেসেজ ডিলিট করতে পারেন।
+
+
+
+
+
+
+
+
+
+
+
+ ৯. ব্যক্তিগত তথ্য মুছে ফেলার অনুরোধ
+
+
+ আপনি চাইলে যেকোনো সময় আপনার অ্যাকাউন্ট ডিলিট করার অনুরোধ করতে পারেন। অ্যাকাউন্ট মুছে ফেললে আপনার প্রোফাইল তথ্য এবং পার্সোনাল ডেটা মুছে যাবে, তবে পূর্বে আপলোড করা রিসোর্স বা কনটেন্ট প্ল্যাটফর্মে থেকে যেতে পারে (কনটেন্ট রিটেনশন পলিসি অনুযায়ী)। বিস্তারিত আমাদের Content Policy-তে দেখুন।
+
+
+
+
+
- ৮. কনটেন্ট সম্পর্কিত তথ্য
+ ১০. কনটেন্ট সম্পর্কিত তথ্য
import { Head, Link } from '@inertiajs/vue3';
-import { Scale, FileText, HelpCircle, AlertCircle, Ban } from 'lucide-vue-next';
+import {
+ Scale,
+ FileText,
+ HelpCircle,
+ AlertCircle,
+ Ban,
+ UserCircle,
+ Users,
+ MessageSquare,
+ BookOpen,
+ ThumbsUp,
+ RefreshCw
+} from 'lucide-vue-next';
@@ -22,7 +34,7 @@ import { Scale, FileText, HelpCircle, AlertCircle, Ban } from 'lucide-vue-next';
- সর্বশেষ আপডেট: জুলাই ২০২৬
+ সর্বশেষ আপডেট: আগস্ট ২০২৬
@@ -33,10 +45,10 @@ import { Scale, FileText, HelpCircle, AlertCircle, Ban } from 'lucide-vue-next';
- এই আর্কাইভ অ্যাক্সেস বা ব্রাউজ করার মাধ্যমে, আপনি নিচের Terms &
+ এই প্ল্যাটফর্মটি অ্যাক্সেস বা ব্যবহার করার মাধ্যমে, আপনি নিচের Terms &
Conditions মেনে চলতে এবং এতে বাউন্ড থাকতে সম্মত হচ্ছেন। এই
- নিয়মের কোনো অংশের সাথে আপনি একমত না হলে, আমাদের educational
- directory ব্যবহার থেকে বিরত থাকুন।
+ নিয়মের কোনো অংশের সাথে আপনি একমত না হলে, আমাদের প্ল্যাটফর্ম
+ ব্যবহার থেকে বিরত থাকুন।
@@ -57,27 +69,83 @@ import { Scale, FileText, HelpCircle, AlertCircle, Ban } from 'lucide-vue-next';
- এই প্ল্যাটফর্ম HSC & SSC স্টুডেন্টদের জন্য একটা fast,
- distraction-free স্টাডি আর্কাইভ হিসেবে কাজ করে। আমরা
- হোস্ট করি:
+ HSCStack হলো HSC ও SSC স্টুডেন্টদের জন্য একটি comprehensive open-learning প্ল্যাটফর্ম। এটি শুধু একটি সাধারণ আর্কাইভ নয়, বরং এখানে রয়েছে:
-
- ব্যক্তিগতভাবে হাতে লেখা নোট, প্র্যাকটিক্যাল রেকর্ড,
- এবং structural গাইড।
-
-
সিলেবাস-এলাইনড publicly available কনটেন্ট।
-
- আগের পরীক্ষার সাইকেলের ঐতিহাসিক public question
- bank।
-
+
Dual curriculum (HSC ও SSC) ভিত্তিক কন্টেন্ট।
+
৫ ধরনের স্ট্রাকচার্ড রিসোর্স: নোটস, প্রশ্ন, PDF, ছবি এবং ভিডিও।
+
রিয়েল-টাইম কমিউনিটি লাইভ চ্যাট, এডুকেশনাল ব্লগ এবং ইউজার প্রোফাইল।
+
রিসোর্স কমপ্লিশন ট্র্যাকিং এবং এআই অ্যাসিস্ট্যান্ট সুবিধা।
+
+
+
+
+
+
+ ২. অ্যাকাউন্ট ও প্রমাণীকরণ
+
+
+ আমাদের প্ল্যাটফর্মে গুগল ওঅথ (Google OAuth 2.0) এর মাধ্যমে নিরাপদ লগইন ব্যবস্থা রয়েছে, সাধারণ পাসওয়ার্ড রেজিস্ট্রেশনের প্রয়োজন নেই। নতুন অ্যাকাউন্টের ক্ষেত্রে স্বয়ংক্রিয়ভাবে একটি ইউজারনেম (যেমন: student_1234) তৈরি হয়। ব্যবহারকারীরা তাদের প্রোফাইল কাস্টমাইজ করতে পারবেন। নিজের অ্যাকাউন্টের নিরাপত্তা এবং অ্যাকাউন্টের অধীনে হওয়া সকল কার্যকলাপের দায়ভার সম্পূর্ণভাবে ব্যবহারকারীর নিজের।
+
+
+
+
+
+
+
+
+
+
+
+ ৩. ব্যবহারকারীর আচরণবিধি
+
+
+ প্ল্যাটফর্মে একটি সুস্থ শিক্ষার পরিবেশ বজায় রাখতে সকল ব্যবহারকারীকে সম্মানজনক আচরণ করতে হবে। স্প্যামিং, হয়রানি বা কাউকে আক্রমণ করে কথা বলা সম্পূর্ণ নিষিদ্ধ। প্ল্যাটফর্মের চ্যাট এবং অন্যান্য অংশে profanity filter স্বয়ংক্রিয়ভাবে কাজ করে। এই নিয়মাবলী ভঙ্গ করলে যেকোনো সময় অ্যাকাউন্ট সাসপেন্ড বা বাতিল করা হতে পারে।
+
+
+
+
+
+
+
+
+
+
+
+ ৪. লাইভ চ্যাট নিয়মাবলী
+
+
+ কমিউনিটি লাইভ চ্যাটে অশালীন বা আপত্তিকর শব্দ ব্যবহার করা কঠোরভাবে নিষিদ্ধ, যা স্বয়ংক্রিয় profanity filter দ্বারা নিয়ন্ত্রিত। স্প্যাম রোধে মেসেজ পাঠানোর মাঝে নির্দিষ্ট সময়ের cooldown বা রেট লিমিট প্রযোজ্য। চ্যাটে আপত্তিকর মেসেজ দেখলে ব্যবহারকারীরা রিপোর্ট করতে পারবেন। ৫ বা ততোধিক রিপোর্ট জমা হলে স্বয়ংক্রিয়ভাবে ২৪ ঘণ্টার জন্য চ্যাট থেকে ব্যান করা হবে। প্ল্যাটফর্মের স্টাফ বা মডারেটরদের যেকোনো মেসেজ ডিলিট করা বা ব্যবহারকারীকে ব্যান করার সম্পূর্ণ অধিকার রয়েছে।
+
+
+
+
+
- ২. Intellectual Property ও Fair Use
+ ৫. Intellectual Property ও Fair Use
- আমাদের original টেক্সট লেআউট, সিস্টেম স্ক্রিপ্ট, এবং
- আমাদের নিজস্বভাবে লেখা নোটের মালিকানা আমাদের।
- কনট্রিবিউটরদের জমা দেওয়া নোট বা কনটেন্টের মূল মালিকানা
- সংশ্লিষ্ট কনট্রিবিউটরের কাছেই থাকে — এই ক্ষেত্রে তারা
- শুধুমাত্র HSCStack-কে সংরক্ষণ, প্রদর্শন ও বিতরণের একটি
+ আমাদের original টেক্সট লেআউট, সিস্টেম স্ক্রিপ্ট, কোড এবং
+ নিজস্ব ব্লগ আর্টিকেলের মালিকানা আমাদের।
+ কনট্রিবিউটরদের জমা দেওয়া নোট, ব্লগ বা অন্যান্য কনটেন্টের মূল মালিকানা
+ সংশ্লিষ্ট কনট্রিবিউটরের কাছেই থাকে — তবে তারা
+ HSCStack-কে এগুলো সংরক্ষণ, প্রদর্শন ও বিতরণের একটি
লাইসেন্স প্রদান করেন, যেমনটি আমাদের
Content Policy-তে বিস্তারিত ব্যাখ্যা করা হয়েছে। স্টুডেন্টদের
- প্রাইভেট স্টাডি ব্যবহারের জন্য অ্যাক্সেস দেওয়া হয়।
- অফিশিয়াল state board evaluation প্রশ্ন বা public
- question structure সম্পূর্ণভাবে
+ >-তে বিস্তারিত ব্যাখ্যা করা হয়েছে।
+ অফিশিয়াল বোর্ডের প্রশ্ন বা পাবলিক question
+ structure সম্পূর্ণভাবে
Fair Use নীতির
- আওতায় শেয়ার করা হয়, স্পষ্ট educational backup হিসেবে।
- অফিশিয়াল বোর্ড আইটেমের ওপর আমরা কোনো dynamic entity
- right দাবি করি না। প্ল্যাটফর্মের ডেটা বাল্ক scrape করা
+ আওতায় শেয়ার করা হয়, স্পষ্ট educational backup হিসেবে। প্ল্যাটফর্মের ডেটা বাল্ক scrape করা
বা resell করা কঠোরভাবে নিষিদ্ধ।
-
+
+
+
+
+
+
+
+ ৬. কনটেন্ট ও ব্লগ
+
+
+ ব্লগ সেকশনে শিক্ষামূলক ও তথ্যবহুল আর্টিকেল পাবলিশ করার সুযোগ রয়েছে। ব্লগে অন্য ব্যবহারকারীদের আর্টিকেলে কমেন্ট করা এবং রিঅ্যাকশন (love) দেওয়ার ব্যবস্থা আছে। ব্যবহারকারীদের উচিত মানসম্মত ও গঠনমূলক ব্লগ পাবলিশ করা এবং কমেন্ট সেকশনে ভদ্রতা বজায় রাখা। অন্যের কপিরাইটযুক্ত লেখা নিজের নামে পাবলিশ করা যাবে না।
+
+
+
+
+
+
+
+
+
+
+
+ ৭. কমিউনিটি ফিচার
+
+
+ HSCStack-এ রয়েছে ফোল্ডার ভোটিং (আপভোট/ডাউনভোট), প্রোফাইল অ্যাক্টিভিটি স্ট্রিম, সাজেস্টেড মেম্বারস এবং ইউজার অ্যাপ্রিসিয়েশন (appreciations)। এই ফিচারগুলো একে অপরকে সাহায্য করার জন্য ডিজাইন করা হয়েছে। কমিউনিটির ভোটিং সিস্টেম বা অ্যাপ্রিসিয়েশন ফিচারের কোনো অপব্যবহার বা ম্যানিপুলেশন করা কঠোরভাবে নিষিদ্ধ।
+
+
+
+
+
- ৩. এডুকেশনাল Accuracy সংক্রান্ত Disclaimer
+ ৮. এডুকেশনাল Accuracy সংক্রান্ত Disclaimer
- আমরা clean curation এবং accuracy বজায় রাখার চেষ্টা
+ আমরা clean curation এবং accuracy বজায় রাখার সর্বোচ্চ চেষ্টা
করলেও, সবকিছু "as-is" ভিত্তিতে শেয়ার করা হয়। আমরা কোনো
- performance warranty দিই না, এবং সঠিক লার্নিং
+ performance warranty বা শতভাগ সঠিকতার গ্যারান্টি দিই না। সঠিক লার্নিং
প্যারামিটার বজায় রাখতে ব্যবহারকারীদের উচিত অফিশিয়াল
- টেক্সটবুকের সাথে ডেটা স্ট্রিম মিলিয়ে দেখা।
+ টেক্সটবুক এবং শিক্ষকদের গাইডলাইনের সাথে ডেটা মিলিয়ে দেখা।
- আর্কাইভাল কনটেন্ট ব্যবহারের কারণে সরাসরি বা পরোক্ষভাবে
- ঘটা কোনো internal data outage, গ্রেডিং ডিসক্রেপ্যান্সি,
- বা contextual error-এর জন্য আমাদের প্ল্যাটফর্ম এবং
- ডেভেলপমেন্ট মেইনটেইনাররা কোনো আইনি দায়বদ্ধতার সম্মুখীন
- হবে না।
+ প্ল্যাটফর্মে থাকা কোনো রিসোর্স, রিয়েল-টাইম লাইভ চ্যাট বা থার্ড-পার্টি কনটেন্ট ব্যবহারের কারণে সরাসরি বা পরোক্ষভাবে
+ ঘটা কোনো অ্যাকাডেমিক ক্ষতি, গ্রেডিং ডিসক্রেপ্যান্সি, বা ডেটা হারানোর জন্য আমাদের প্ল্যাটফর্ম এবং
+ ডেভেলপাররা কোনো আইনি দায়বদ্ধতার সম্মুখীন হবেন না। প্ল্যাটফর্মটি ব্যবহারকারীকে নিজ দায়িত্বে ব্যবহার করতে হবে।
-
+
- ৫. অ্যাকাউন্ট স্থগিতকরণ ও বাতিলকরণ
+ ১০. অ্যাকাউন্ট স্থগিতকরণ ও বাতিলকরণ
- HSCStack এই Terms & Conditions, আমাদের
+ আমাদের Terms & Conditions,
Content Policy, অথবা প্ল্যাটফর্মের জন্য নিরাপত্তাঝুঁকি তৈরি করে এমন
- যেকোনো অ্যাকাউন্ট (কনট্রিবিউটর বা ব্যবহারকারী) সীমিত,
- স্থগিত বা স্থায়ীভাবে বাতিল করার অধিকার সংরক্ষণ করে। এর
- মধ্যে থাকতে পারে — কপিরাইট লঙ্ঘন, স্প্যাম বা
- প্রতারণামূলক submission, ক্ষতিকর ফাইল আপলোড, অথবা
- প্ল্যাটফর্মের সিস্টেম বা অন্য ব্যবহারকারীদের ক্ষতি করার
- চেষ্টা। সিদ্ধান্ত নেওয়ার আগে HSCStack পরিস্থিতি
- অনুযায়ী পর্যালোচনা করার চেষ্টা করবে, তবে গুরুতর
- নিরাপত্তা ঝুঁকির ক্ষেত্রে তাৎক্ষণিক ব্যবস্থা নেওয়া হতে
- পারে।
+ >, অথবা প্ল্যাটফর্মের নিরাপত্তা বিঘ্নিত করলে মডারেটর বা অ্যাডমিন যেকোনো অ্যাকাউন্ট (ছাত্র বা কনট্রিবিউটর) স্থগিত বা বাতিল করার অধিকার রাখেন। লাইভ চ্যাটে স্বয়ংক্রিয় ব্যান ছাড়াও মডারেটররা ম্যানুয়ালি ব্যবস্থা নিতে পারেন। গুরুতর নিয়মভঙ্গ, স্প্যামিং বা কপিরাইট লঙ্ঘনের ক্ষেত্রে কোনো পূর্ব নোটিশ ছাড়াই কন্টেন্ট রিমুভ বা অ্যাকাউন্ট স্থায়ীভাবে ডিলিট করা হতে পারে।
+
+
+
+
+
+
+
+
+
+
+
+ ১১. পরিবর্তন ও আপডেট
+
+
+ HSCStack যেকোনো সময় এই Terms & Conditions আপডেট বা পরিবর্তন করার অধিকার সংরক্ষণ করে। গুরুত্বপূর্ণ কোনো পরিবর্তন হলে তা প্ল্যাটফর্মে নোটিফিকেশন বা ঘোষণার মাধ্যমে জানিয়ে দেওয়া হবে। পরিবর্তিত শর্তাবলী মেনে নিয়ে প্ল্যাটফর্ম ব্যবহার চালিয়ে যাওয়া মানে আপনি নতুন শর্তাবলীতে সম্মত।
From 00d895812c111e96dab4938e451c08162f9e7e1f Mon Sep 17 00:00:00 2001
From: Tajim
Date: Fri, 28 Aug 2026 20:11:28 +0600
Subject: [PATCH 2/2] Fix code style and formatting with prettier and eslint
---
CONTRIBUTING.md | 41 +++---
README.md | 24 ++--
docs/storage-cleanup.md | 12 +-
resources/js/app.ts | 2 +-
resources/js/pages/Chat/Index.vue | 19 ++-
resources/js/pages/legal/ContentPolicy.vue | 122 +++++++++++-----
resources/js/pages/legal/PrivacyPolicy.vue | 85 +++++++++--
resources/js/pages/legal/TermsConditions.vue | 141 +++++++++++++------
8 files changed, 314 insertions(+), 132 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 83fa322..a01dd28 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,17 +14,17 @@ If you're not yet a core developer but found a bug or have a suggestion, please
## Tech Stack
-| Layer | Technology |
-| ------------------ | ------------------------------------- |
-| **Backend** | Laravel 12 (PHP) |
-| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
-| **Styling** | Tailwind CSS v4 |
-| **Realtime** | Pusher Channels + Laravel Echo |
-| **Storage** | AWS S3 / Cloudflare R2 |
-| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
-| **Analytics** | PostHog |
-| **Permissions** | Spatie Laravel Permission |
-| **PWA** | vite-plugin-pwa |
+| Layer | Technology |
+| --------------- | ------------------------------------ |
+| **Backend** | Laravel 12 (PHP) |
+| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
+| **Styling** | Tailwind CSS v4 |
+| **Realtime** | Pusher Channels + Laravel Echo |
+| **Storage** | AWS S3 / Cloudflare R2 |
+| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
+| **Analytics** | PostHog |
+| **Permissions** | Spatie Laravel Permission |
+| **PWA** | vite-plugin-pwa |
## Development Setup
@@ -63,18 +63,18 @@ pnpm dev
## Workflow
1. Create a new branch off `main`:
- ```bash
- git checkout -b feature/your-feature-name
- ```
+ ```bash
+ git checkout -b feature/your-feature-name
+ ```
2. Make your changes, following the code style guidelines below.
3. Commit with a clear, descriptive message:
- ```bash
- git commit -m "Add: your feature"
- ```
+ ```bash
+ git commit -m "Add: your feature"
+ ```
4. Push your branch and open a Pull Request:
- ```bash
- git push origin feature/your-feature-name
- ```
+ ```bash
+ git push origin feature/your-feature-name
+ ```
5. Fill out the PR description explaining what changed and why, and link any related issue.
### Branch naming
@@ -103,6 +103,7 @@ php artisan test
```
General guidelines:
+
- Follow existing Laravel conventions (FormRequests for validation, resource controllers, etc.).
- Keep Vue components under `resources/js/pages/` and `resources/js/components/` organized and reusable.
- Avoid passing non-database fields into mass assignment (`create()`/`update()`); validate and filter explicitly.
diff --git a/README.md b/README.md
index 31d5851..1df2c80 100644
--- a/README.md
+++ b/README.md
@@ -74,18 +74,18 @@ Only HSCStack members can upload resources. To become a member:
## 🛠️ Tech Stack
-| Layer | Technology |
-| ------------------ | ------------------------------------- |
-| **Backend** | Laravel 12 (PHP) |
-| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
-| **Styling** | Tailwind CSS v4 |
-| **Realtime** | Pusher Channels + Laravel Echo |
-| **Storage** | AWS S3 / Cloudflare R2 |
-| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
-| **Analytics** | PostHog |
-| **Permissions** | Spatie Laravel Permission |
-| **PWA** | vite-plugin-pwa |
-| **Backup** | Google Drive API (automated) |
+| Layer | Technology |
+| --------------- | ------------------------------------ |
+| **Backend** | Laravel 12 (PHP) |
+| **Frontend** | Vue 3 + TypeScript via Inertia.js v3 |
+| **Styling** | Tailwind CSS v4 |
+| **Realtime** | Pusher Channels + Laravel Echo |
+| **Storage** | AWS S3 / Cloudflare R2 |
+| **Auth** | Google OAuth 2.0 (Laravel Socialite) |
+| **Analytics** | PostHog |
+| **Permissions** | Spatie Laravel Permission |
+| **PWA** | vite-plugin-pwa |
+| **Backup** | Google Drive API (automated) |
---
diff --git a/docs/storage-cleanup.md b/docs/storage-cleanup.md
index b9f7635..6ec6e10 100644
--- a/docs/storage-cleanup.md
+++ b/docs/storage-cleanup.md
@@ -6,12 +6,12 @@ The `resources:clean-unused-images` Artisan command removes orphaned files from
It scans four storage directories and cross-references them against the database:
-| Storage Directory | Database Check |
-| ----------------- | --------------------------------------- |
-| `resources/` | `resources.file_path` |
-| `users/` | `users.image_path` |
-| `blogs/` | `blogs.featured_image_path` |
-| `notices/` | `notices.image` (non-HTTP paths only) |
+| Storage Directory | Database Check |
+| ----------------- | ------------------------------------- |
+| `resources/` | `resources.file_path` |
+| `users/` | `users.image_path` |
+| `blogs/` | `blogs.featured_image_path` |
+| `notices/` | `notices.image` (non-HTTP paths only) |
A file is considered unused when it exists in storage but its path is not referenced by any database record.
diff --git a/resources/js/app.ts b/resources/js/app.ts
index 0083c31..456b325 100644
--- a/resources/js/app.ts
+++ b/resources/js/app.ts
@@ -1,8 +1,8 @@
import { createInertiaApp, router } from '@inertiajs/vue3';
import { registerSW } from 'virtual:pwa-register';
-import { initPwa } from './lib/usePwa';
import AdminLayout from './layouts/AdminLayout.vue';
import AppLayout from './layouts/AppLayout.vue';
+import { initPwa } from './lib/usePwa';
const appName = import.meta.env.VITE_APP_NAME || 'Laravel';
diff --git a/resources/js/pages/Chat/Index.vue b/resources/js/pages/Chat/Index.vue
index 46a63bc..33f587d 100644
--- a/resources/js/pages/Chat/Index.vue
+++ b/resources/js/pages/Chat/Index.vue
@@ -186,10 +186,12 @@ const availableMentionUsers = computed(() => {
// Scan loaded messages from latest to oldest so active participants appear first
for (let i = messages.value.length - 1; i >= 0; i--) {
const u = messages.value[i]?.user;
+
if (u && u.id && u.username) {
if (currentId && Number(u.id) === currentId) {
continue;
}
+
if (!userMap.has(Number(u.id))) {
userMap.set(Number(u.id), u);
}
@@ -201,9 +203,11 @@ const availableMentionUsers = computed(() => {
const filteredMentionUsers = computed(() => {
const q = mentionQuery.value.toLowerCase().trim();
+
if (!q) {
return [];
}
+
return availableMentionUsers.value
.filter(
(u) =>
@@ -216,6 +220,7 @@ const filteredMentionUsers = computed(() => {
const checkMentionTrigger = () => {
if (!messageInputRef.value) {
showMentionSuggestions.value = false;
+
return;
}
@@ -243,6 +248,7 @@ const handleInputKeydown = (e: KeyboardEvent) => {
if (e.key === 'Escape') {
e.preventDefault();
showMentionSuggestions.value = false;
+
return;
}
@@ -253,16 +259,21 @@ const handleInputKeydown = (e: KeyboardEvent) => {
if (e.key === 'ArrowDown') {
e.preventDefault();
selectedMentionIndex.value =
- (selectedMentionIndex.value + 1) % filteredMentionUsers.value.length;
+ (selectedMentionIndex.value + 1) %
+ filteredMentionUsers.value.length;
} else if (e.key === 'ArrowUp') {
e.preventDefault();
selectedMentionIndex.value =
- (selectedMentionIndex.value - 1 + filteredMentionUsers.value.length) %
+ (selectedMentionIndex.value -
+ 1 +
+ filteredMentionUsers.value.length) %
filteredMentionUsers.value.length;
} else if (e.key === 'Enter' || e.key === 'Tab') {
if (filteredMentionUsers.value[selectedMentionIndex.value]) {
e.preventDefault();
- insertMention(filteredMentionUsers.value[selectedMentionIndex.value]);
+ insertMention(
+ filteredMentionUsers.value[selectedMentionIndex.value],
+ );
}
}
};
@@ -1596,7 +1607,7 @@ onUnmounted(() => {
mentionQuery.trim() &&
filteredMentionUsers.length > 0
"
- class="max-h-48 overflow-y-auto space-y-0.5 pt-1"
+ class="max-h-48 space-y-0.5 overflow-y-auto pt-1"
>