বাকি আছে (To Do)
চলমান (In Progress)
রিভিউ (Under Review)
সম্পন্ন (Completed)
সকল টাস্ক রেকর্ডস (`tasks_database`)
ওয়েবসাইট আপডেট ও অ্যাসাইনকৃত কাজের তালিকা
| ID | টাস্ক শিরোনাম | ওয়েবসাইট পেজ | ক্যাটাগরি | স্ট্যাটাস | প্রায়োরিটি | অ্যাসাইনি | ভার্সন | ডেডলাইন | অ্যাকশন |
|---|
ওয়েবসাইট আপডেট ও ভার্সন রিলিজ লগ
আপনার ওয়েবসাইটের প্রতিটি কোড রিলিজ, লাইভ আপডেট ও প্যাচ হিস্ট্রি `website_updates_log` টেবিলে সংরক্ষিত থাকে।
ডিপ্লয়মেন্ট হিস্ট্রি টাইমলাইন
৫টি রিলিজ রেকর্ড0
সব ক্যাটাগরি মিলিয়ে
0%
0
ইন-প্রগ্রেস ও রিভিউ
0
সফল ডিপ্লয়মেন্ট
ক্যাটাগরি ভিত্তিক টাস্ক বন্টন
ওয়েবসাইট পেজ ভিত্তিক আপডেট (Affected Routes)
টিম মেম্বার ও রোল ভিত্তিক টাস্ক প্রগ্রেস
সিস্টেম অডিট লগ ও অ্যাক্টিভিটি ট্র্যাকার (`audit_logs`)
ইউজার লগইন, স্ট্যাটাস পরিবর্তন, কনফিগ আপডেট ও রিলিজ ডিপ্লয়মেন্টের রেকর্ড
| Log ID | সময়কাল (Timestamp) | ইউজার ও রোল | অ্যাকশন টাইপ | টার্গেট আইটেম | বিস্তারিত বিবরণ (Details Log) | সিভিয়ারিটি |
|---|
টিম ডিরেক্টরি ও রোল ম্যানেজমেন্ট (`users_database`)
সিস্টেমের অনুমোদিত ইউজার, ইমেইল, রোল পারমিশন এবং অ্যাকাউন্ট স্ট্যাটাস
| User ID | নাম (Full Name) | ইমেইল (Login Email) | রোল (Role) | ডিপার্টমেন্ট | স্ট্যাটাস | সর্বশেষ লগইন | অ্যাকশন |
|---|
রোল ভিত্তিক অ্যাক্সেস পারমিশন ম্যাট্রিক্স (RBAC Policy)
| সিস্টেম ফিচার / অ্যাকশন | Admin | Developer | QA | Viewer |
|---|---|---|---|---|
| কানবান বোর্ড, টাস্ক তালিকা, অ্যানালিটিক্স ও CSV এক্সপোর্ট | ✓ | ✓ | ✓ | ✓ |
| নতুন টাস্ক তৈরি, এডিট ও কানবান স্ট্যাটাস পরিবর্তন | ✓ | ✓ | ✓ (QA/Review) | ✕ (Read-Only) |
| ওয়েবসাইট রিলিজ আপডেট লগ প্রকাশ ও অডিট লগ ভিউ | ✓ | ✓ | ✓ | ✕ |
| টাস্ক মুছে ফেলা (Delete) ও রিলিজ রেকর্ড ডিলিট | ✓ | ✕ | ✕ | ✕ |
| ইউজার ম্যানেজমেন্ট, সুপাবেস ড্যাশবোর্ড ও কনফিগারেশন | ✓ | ✕ | ✕ | ✕ |
Supabase PostgreSQL & Realtime ডাটাবেস সংযোগ
Admin Verified Local Fallback ModeGoogle Sheet-এর পরিবর্তে সকল টাস্ক (`tasks_database`), রিলিজ লগ (`website_updates_log`), অডিট (`audit_logs`) ও ইউজার (`users_database`) সরাসরি Supabase PostgreSQL ডাটাবেসে সংরক্ষিত ও রিয়েলটাইম সিঙ্ক হবে।
Supabase Project URL & Anon Key কনফিগারেশন
Configuration এখন Cloudflare Pages-এর server-side Environment Variables থেকে লোড হয়। পরিবর্তন করতে Cloudflare Dashboard ব্যবহার করুন।
পূর্ণাঙ্গ সুপাবেস সেটআপ গাইড (৪টি সহজ ধাপ)
Supabase প্রজেক্ট খুলুন
supabase.com-এ গিয়ে একটি নতুন প্রজেক্ট তৈরি করুন।
SQL Editor-এ কোড পেস্ট করুন
নিচের SQL কোডটি কপি করে Supabase-এর SQL Editor → New Query-তে পেস্ট করে Run চাপুন।
URL ও Anon Key কপি করুন
Project Settings → API থেকে Project URL এবং `anon` `public` Key কপি করুন।
উপরে বসিয়ে Save করুন
উপরের বক্সে URL ও Key বসিয়ে সংরক্ষণ ও সুপাবেস কানেক্ট করুন চাপুন।
Supabase SQL Schema & Seed Script (`supabase_setup.sql`)
এই SQL স্ক্রিপ্টটি ৪টি টেবিল (`users_database`, `tasks_database`, `website_updates_log`, `audit_logs`), RLS পলিসি, Realtime এবং প্রাথমিক ডাটা তৈরি করবে।
-- ============================================================================
-- WebTask Manager — Complete Supabase PostgreSQL Setup & Seed Script
-- Run this inside Supabase Dashboard -> SQL Editor -> New Query
-- ============================================================================
-- 1. USERS DATABASE TABLE (RBAC Authentication & Team Directory)
CREATE TABLE IF NOT EXISTS public.users_database (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'Viewer' CHECK (role IN ('Admin', 'Developer', 'QA', 'Viewer')),
department TEXT DEFAULT '',
status TEXT NOT NULL DEFAULT 'Active' CHECK (status IN ('Active', 'Inactive')),
last_login TEXT DEFAULT '-',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 2. TASKS DATABASE TABLE (Kanban Board & Task Records)
CREATE TABLE IF NOT EXISTS public.tasks_database (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
page TEXT NOT NULL DEFAULT '/',
category TEXT NOT NULL DEFAULT 'Feature',
status TEXT NOT NULL DEFAULT 'To Do' CHECK (status IN ('To Do', 'In Progress', 'Review', 'Completed')),
priority TEXT NOT NULL DEFAULT 'Medium' CHECK (priority IN ('High', 'Medium', 'Low')),
assigned_to TEXT DEFAULT 'Unassigned',
version TEXT DEFAULT 'v1.0.0',
due_date TEXT DEFAULT '',
last_updated TEXT DEFAULT '',
notes TEXT DEFAULT '',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 3. WEBSITE UPDATES LOG TABLE (Deployment & Release Changelog)
CREATE TABLE IF NOT EXISTS public.website_updates_log (
id TEXT PRIMARY KEY,
version TEXT NOT NULL,
title TEXT NOT NULL,
page TEXT NOT NULL DEFAULT '/all',
date TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'Live' CHECK (status IN ('Live', 'Staging', 'Rollback')),
summary TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 4. AUDIT LOGS TABLE (Security & Activity Tracker)
CREATE TABLE IF NOT EXISTS public.audit_logs (
id TEXT PRIMARY KEY,
timestamp TEXT NOT NULL,
user_name TEXT NOT NULL,
user_role TEXT NOT NULL,
action_type TEXT NOT NULL,
target_item TEXT NOT NULL,
details TEXT NOT NULL,
severity TEXT NOT NULL DEFAULT 'Low' CHECK (severity IN ('High', 'Medium', 'Low')),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_users_email ON public.users_database (LOWER(email));
CREATE INDEX IF NOT EXISTS idx_tasks_status ON public.tasks_database (status);
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_to ON public.tasks_database (assigned_to);
CREATE INDEX IF NOT EXISTS idx_updates_status ON public.website_updates_log (status);
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON public.audit_logs (timestamp DESC);
-- Enable Row Level Security (RLS)
ALTER TABLE public.users_database ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.tasks_database ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.website_updates_log ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.audit_logs ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Allow public access to users_database" ON public.users_database;
DROP POLICY IF EXISTS "Allow public access to tasks_database" ON public.tasks_database;
DROP POLICY IF EXISTS "Allow public access to website_updates_log" ON public.website_updates_log;
DROP POLICY IF EXISTS "Allow public access to audit_logs" ON public.audit_logs;
CREATE POLICY "Allow public access to users_database" ON public.users_database FOR ALL TO anon, authenticated USING (true) WITH CHECK (true);
CREATE POLICY "Allow public access to tasks_database" ON public.tasks_database FOR ALL TO anon, authenticated USING (true) WITH CHECK (true);
CREATE POLICY "Allow public access to website_updates_log" ON public.website_updates_log FOR ALL TO anon, authenticated USING (true) WITH CHECK (true);
CREATE POLICY "Allow public access to audit_logs" ON public.audit_logs FOR ALL TO anon, authenticated USING (true) WITH CHECK (true);
-- Enable Realtime on all 4 tables
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_publication_tables WHERE pubname = 'supabase_realtime' AND tablename = 'users_database') THEN
ALTER PUBLICATION supabase_realtime ADD TABLE public.users_database;
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_publication_tables WHERE pubname = 'supabase_realtime' AND tablename = 'tasks_database') THEN
ALTER PUBLICATION supabase_realtime ADD TABLE public.tasks_database;
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_publication_tables WHERE pubname = 'supabase_realtime' AND tablename = 'website_updates_log') THEN
ALTER PUBLICATION supabase_realtime ADD TABLE public.website_updates_log;
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_publication_tables WHERE pubname = 'supabase_realtime' AND tablename = 'audit_logs') THEN
ALTER PUBLICATION supabase_realtime ADD TABLE public.audit_logs;
END IF;
END $$;
-- Initial Users Seed
INSERT INTO public.users_database (id, name, email, password, role, department, status, last_login) VALUES
('USR-01', 'Sadia Islam', 'sadia@webtask.io', 'admin123', 'Admin', 'Product & Admin', 'Active', '2025-02-19 10:15'),
('USR-02', 'Tanvir Hasan', 'tanvir@webtask.io', 'dev123', 'Developer', 'Frontend Engineering', 'Active', '2025-02-19 09:40'),
('USR-03', 'Rafiq Ahmed', 'rafiq@webtask.io', 'dev123', 'Developer', 'Backend & Payments', 'Active', '2025-02-19 10:00'),
('USR-04', 'Nusrat Jahan', 'nusrat@webtask.io', 'qa123', 'QA', 'Quality Assurance', 'Active', '2025-02-18 16:20'),
('USR-05', 'Guest Visitor', 'viewer@webtask.io', 'view123', 'Viewer', 'Stakeholder', 'Active', '2025-02-19 08:30')
ON CONFLICT (id) DO NOTHING;