165	    ['Universities update', 'events', 'Medium', '', '', 0],
166	    ['Follow up on Anthropic contacts', 'vendor', 'High', '', '', 1],
167	    ['Genspark credit issue resolution', 'vendor', 'Medium', '', '', 1],
168	    ['Survey for AI Champions — measure performance', 'ai', 'High', '', '', 0],
169	  ];
170
171	  const seedTasks = db.transaction(() => {
172	    for (const t of tasks) insertTask.run(...t);
173	  });
174	  seedTasks();
175
176	  // Seed people from CAIO Batch 3 - AlSheraa Shift (yellow-highlighted)
177	  const seededPeopleV2 = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
178	  if (!seededPeopleV2) {
179	    db.prepare('DELETE FROM people').run();
180	    const insertPerson = db.prepare(`
181	      INSERT OR IGNORE INTO people (name, pr_number, designation)
182	      VALUES (?, ?, ?)
183	    `);
184	    const teamMembers = [
185	      ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
186	      ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
187	      ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
188	      ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
189	      ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
190	      ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
191	      ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
192	      ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
193	      ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
194	      ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
195	      ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
196	      ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
197	      ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
198	      ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
199	      ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
200	      ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
201	      ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
202	      ['Prasanth Pillai',                        '99009407', 'External Contractor'],
203	      ['Marouane Basta',                         '99000698', 'External Contractor'],
204	      ['Ismail',                                 '',         'External Contractor'],
205	      ['Chandini',                               '',         'External Contractor'],
206	      ['Saravana Kumar',                         '',         'External Contractor'],
207	      ['Nixson Jesuraj',                         '',         'External Contractor'],
208	      ['Ankur Jain',                             '',         'External Contractor'],
209	      ['Anusha',                                 '',         'External Contractor'],
210	      ['Nora',                                   '',         'External Contractor'],
211	      ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
212	      ['Fatehali',                               '',         'External Contractor'],
213	      ['Tharakeswar',                            '',         'External Contractor'],
214	      ['Kamalesh',                               '',         'External Contractor'],
215	      ['Kamlesh Manker',                         '99006876', 'External Contractor'],
216	    ];
217	    const seedPeople = db.transaction(() => {
218	      for (const [name, pr, des] of teamMembers) insertPerson.run(name, pr, des);
219	    });
220	    seedPeople();
221	    db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
222	  }
223	}
224
225	initDb();
226
227	module.exports = db;
228

    ['Universities update', 'events', 'Medium', '', '', 0],
    ['Follow up on Anthropic contacts', 'vendor', 'High', '', '', 1],
    ['Genspark credit issue resolution', 'vendor', 'Medium', '', '', 1],
    ['Survey for AI Champions — measure performance', 'ai', 'High', '', '', 0],
  ];

  const seedTasks = db.transaction(() => {
    for (const t of tasks) insertTask.run(...t);
  });
  seedTasks();

  // Seed people from CAIO Batch 3 - AlSheraa Shift (yellow-highlighted)
  const seededPeopleV2 = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
  if (!seededPeopleV2) {
    db.prepare('DELETE FROM people').run();
    const insertPerson = db.prepare(`
      INSERT OR IGNORE INTO people (name, pr_number, designation)
      VALUES (?, ?, ?)
    `);
    const teamMembers = [
      ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
      ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
      ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
      ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
      ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
      ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
      ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
      ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
      ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
      ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
      ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
      ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
      ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
      ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
      ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
      ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
      ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
      ['Prasanth Pillai',                        '99009407', 'External Contractor'],
      ['Marouane Basta',                         '99000698', 'External Contractor'],
      ['Ismail',                                 '',         'External Contractor'],
      ['Chandini',                               '',         'External Contractor'],
      ['Saravana Kumar',                         '',         'External Contractor'],
      ['Nixson Jesuraj',                         '',         'External Contractor'],
      ['Ankur Jain',                             '',         'External Contractor'],
      ['Anusha',                                 '',         'External Contractor'],
      ['Nora',                                   '',         'External Contractor'],
      ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
      ['Fatehali',                               '',         'External Contractor'],
      ['Tharakeswar',                            '',         'External Contractor'],
      ['Kamalesh',                               '',         'External Contractor'],
      ['Kamlesh Manker',                         '99006876', 'External Contractor'],
    ];
    const seedPeople = db.transaction(() => {
      for (const [name, pr, des] of teamMembers) insertPerson.run(name, pr, des);
    });
    seedPeople();
    db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
  }
}

initDb();

module.exports = db;


Edit

  // Seed people from CAIO Batch 3 - AlSheraa Shift (yellow-highlighted)
  const seededPeopleV2 = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
  if (!seededPeopleV2) {
    db.prepare('DELETE FROM people').run();
    const insertPerson = db.prepare(`
      INSERT OR IGNORE INTO people (name, pr_number, designation)
      VALUES (?, ?, ?)
    `);
    const teamMembers = [
      ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
      ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
      ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
      ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
      ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
      ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
      ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
      ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
      ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
      ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
      ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
      ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
      ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
      ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
      ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
      ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
      ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
      ['Prasanth Pillai',                        '99009407', 'External Contractor'],
      ['Marouane Basta',                         '99000698', 'External Contractor'],
      ['Ismail',                                 '',         'External Contractor'],
      ['Chandini',                               '',         'External Contractor'],
      ['Saravana Kumar',                         '',         'External Contractor'],
      ['Nixson Jesuraj',                         '',         'External Contractor'],
      ['Ankur Jain',                             '',         'External Contractor'],
      ['Anusha',                                 '',         'External Contractor'],
      ['Nora',                                   '',         'External Contractor'],
      ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
      ['Fatehali',                               '',         'External Contractor'],
      ['Tharakeswar',                            '',         'External Contractor'],
      ['Kamalesh',                               '',         'External Contractor'],
      ['Kamlesh Manker',                         '99006876', 'External Contractor'],
    ];
    const seedPeople = db.transaction(() => {
      for (const [name, pr, des] of teamMembers) insertPerson.run(name, pr, des);
    });
    seedPeople();
    db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
  }
}

initDb();

}

function seedPeopleV2() {
  const already = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
  if (already) return;
  db.prepare('DELETE FROM people').run();
  const ins = db.prepare('INSERT OR IGNORE INTO people (name, pr_number, designation) VALUES (?, ?, ?)');
  const members = [
    ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
    ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
    ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
    ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
    ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
    ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
    ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
    ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
    ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
    ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
    ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
    ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
    ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
    ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
    ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
    ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
    ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
    ['Prasanth Pillai',                        '99009407', 'External Contractor'],
    ['Marouane Basta',                         '99000698', 'External Contractor'],
    ['Ismail',                                 '',         'External Contractor'],
    ['Chandini',                               '',         'External Contractor'],
    ['Saravana Kumar',                         '',         'External Contractor'],
    ['Nixson Jesuraj',                         '',         'External Contractor'],
    ['Ankur Jain',                             '',         'External Contractor'],
    ['Anusha',                                 '',         'External Contractor'],
    ['Nora',                                   '',         'External Contractor'],
    ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
    ['Fatehali',                               '',         'External Contractor'],
    ['Tharakeswar',                            '',         'External Contractor'],
    ['Kamalesh',                               '',         'External Contractor'],
    ['Kamlesh Manker',                         '99006876', 'External Contractor'],
  ];
  db.transaction(() => { for (const [n, p, d] of members) ins.run(n, p, d); })();
  db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
  console.log('✅ People seeded (v2) — 31 team members');
}

initDb();
seedPeopleV2();


The file /Users/khalidbinkalban/my-workspace/server/db.js has been updated successfully.

}

function seedPeopleV2() {
  const already = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
  if (already) return;
  db.prepare('DELETE FROM people').run();
  const ins = db.prepare('INSERT OR IGNORE INTO people (name, pr_number, designation) VALUES (?, ?, ?)');
  const members = [
    ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
    ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
    ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
    ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
    ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
    ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
    ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
    ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
    ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
    ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
    ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
    ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
    ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
    ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
    ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
    ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
    ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
    ['Prasanth Pillai',                        '99009407', 'External Contractor'],
    ['Marouane Basta',                         '99000698', 'External Contractor'],
    ['Ismail',                                 '',         'External Contractor'],
    ['Chandini',                               '',         'External Contractor'],
    ['Saravana Kumar',                         '',         'External Contractor'],
    ['Nixson Jesuraj',                         '',         'External Contractor'],
    ['Ankur Jain',                             '',         'External Contractor'],
    ['Anusha',                                 '',         'External Contractor'],
    ['Nora',                                   '',         'External Contractor'],
    ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
    ['Fatehali',                               '',         'External Contractor'],
    ['Tharakeswar',                            '',         'External Contractor'],
    ['Kamalesh',                               '',         'External Contractor'],
    ['Kamlesh Manker',                         '99006876', 'External Contractor'],
  ];
  db.transaction(() => { for (const [n, p, d] of members) ins.run(n, p, d); })();
  db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
  console.log('✅ People seeded (v2) — 31 team members');
}

initDb();
seedPeopleV2();

const Database = require('better-sqlite3');
const path = require('path');
const fs = require('fs');

const DB_PATH = path.join(__dirname, '../data/workspace.db');
const dataDir = path.dirname(DB_PATH);
if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });

const db = new Database(DB_PATH);
db.pragma('journal_mode = WAL');
db.pragma('foreign_keys = ON');

// Migrate people table — add columns if not present
;['pr_number','grade','designation','department','section','reporting_line','mobile_number','place'].forEach(col => {
  try { db.exec(`ALTER TABLE people ADD COLUMN ${col} TEXT DEFAULT ''`); } catch {}
});

function initDb() {
  db.exec(`
    CREATE TABLE IF NOT EXISTS projects (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT NOT NULL,
      category TEXT NOT NULL DEFAULT 'adhoc',
      status TEXT NOT NULL DEFAULT 'Open',
      priority TEXT NOT NULL DEFAULT 'Medium',
      description TEXT DEFAULT '',
      last_update TEXT DEFAULT '',
      next_step TEXT DEFAULT '',
      created_at TEXT DEFAULT (datetime('now')),
      updated_at TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS tasks (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT NOT NULL,
      notes TEXT DEFAULT '',
      project_id INTEGER REFERENCES projects(id) ON DELETE SET NULL,
      category TEXT NOT NULL DEFAULT 'adhoc',
      priority TEXT NOT NULL DEFAULT 'Medium',
      status TEXT NOT NULL DEFAULT 'Open',
      assignee TEXT DEFAULT '',
      due_date TEXT DEFAULT '',
      is_follow_up INTEGER DEFAULT 0,
      is_today_focus INTEGER DEFAULT 0,
      completed_at TEXT DEFAULT '',
      created_at TEXT DEFAULT (datetime('now')),
      updated_at TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS notes (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT NOT NULL,
      body TEXT DEFAULT '',
      project_id INTEGER REFERENCES projects(id) ON DELETE SET NULL,
      date TEXT DEFAULT (date('now')),
      created_at TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS people (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT NOT NULL UNIQUE,
      role TEXT DEFAULT '',
      created_at TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS settings (
      key TEXT PRIMARY KEY,
      value TEXT
    );

    CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
    CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project_id);
    CREATE INDEX IF NOT EXISTS idx_tasks_today ON tasks(is_today_focus);
    CREATE INDEX IF NOT EXISTS idx_tasks_followup ON tasks(is_follow_up);
    CREATE INDEX IF NOT EXISTS idx_projects_category ON projects(category);
    CREATE INDEX IF NOT EXISTS idx_notes_date ON notes(date);
  `);

  const seeded = db.prepare("SELECT value FROM settings WHERE key = 'seeded'").get();
  if (!seeded) {
    seedData();
    db.prepare("INSERT INTO settings (key, value) VALUES ('seeded', 'true')").run();
    console.log('✅ Database seeded with initial data');
  }
}

function seedData() {
  const insertProject = db.prepare(`
    INSERT INTO projects (name, category, status, priority) VALUES (?, ?, ?, ?)
  `);

  const projects = [
    // AI Adoption & Strategy
    ['Microsoft Copilot Rollout', 'ai', 'In Progress', 'High'],
    ['DEWA AI Academy', 'ai', 'In Progress', 'High'],
    ['AI Command Center RFP', 'ai', 'Open', 'High'],
    ['AI Champions Program', 'ai', 'In Progress', 'High'],
    ['AI OS Initiative', 'ai', 'In Progress', 'Urgent'],
    ['COE End-to-End', 'ai', 'In Progress', 'High'],
    ['GitHub Copilot Plan', 'ai', 'Open', 'High'],
    ['WalkMe & SAP Joule', 'ai', 'In Progress', 'Medium'],
    ['Rummana at Work', 'ai', 'Open', 'Medium'],
    ['Blink App AI Adoption', 'ai', 'Open', 'Medium'],
    // Vendor & Partnerships
    ['Google Partnership & NDA', 'vendor', 'Waiting', 'Urgent'],
    ['Polynome Engagement', 'vendor', 'In Progress', 'High'],
    ['Genspark Engagement', 'vendor', 'Waiting', 'Medium'],
    ['IMD Proposal', 'vendor', 'Open', 'Medium'],
    ['Ducont Wave 2', 'vendor', 'In Progress', 'High'],
    ['ElevenLabs Engagement', 'vendor', 'Open', 'Medium'],
    ['Dell Engagement', 'vendor', 'Open', 'Medium'],
    ['Coursera / Udemy Licenses', 'vendor', 'In Progress', 'Medium'],
    // Governance & Reporting
    ['I&TF Quarterly Report', 'gov', 'In Progress', 'Urgent'],
    ['AI Charter & ISO 42001', 'gov', 'Open', 'High'],
    ['KPIs & Blueprint', 'gov', 'In Progress', 'High'],
    ['IETF Benchmark', 'gov', 'In Progress', 'High'],
    // People & Team
    ['Employees Rating', 'people', 'Open', 'High'],
    ['Data Champions Program', 'people', 'Open', 'Medium'],
    ['Outsource Assessment', 'people', 'In Progress', 'Medium'],
    ['AI Ambassadors Survey', 'people', 'In Progress', 'High'],
    // Events & External
    ['WEF Lighthouse', 'events', 'Open', 'High'],
    ['Gartner Data Summit', 'events', 'Open', 'Medium'],
    ['GenAI Week Emirates Towers', 'events', 'Open', 'Medium'],
    ['Microsoft Community Conference', 'events', 'Open', 'Medium'],
    // Strategic Initiatives
    ['AlHasbah Use Cases Phase I', 'strategic', 'In Progress', 'High'],
    ['Digital DEWA Direction', 'strategic', 'Open', 'High'],
    ['D2D Workshop', 'strategic', 'In Progress', 'High'],
    ['AICC ROI Tracking', 'strategic', 'Open', 'High'],
    // CAIO / EVP Ad Hoc
    ['EVP MD Finance Agent', 'adhoc', 'Open', 'Urgent'],
    ['CAIO AI OS Initiative', 'adhoc', 'In Progress', 'High'],
  ];

  const seedProjects = db.transaction(() => {
    for (const p of projects) insertProject.run(...p);
  });
  seedProjects();

  const insertTask = db.prepare(`
    INSERT INTO tasks (title, category, priority, assignee, due_date, is_follow_up, status)
    VALUES (?, ?, ?, ?, ?, ?, 'Open')
  `);

  const tasks = [
    ['Google NDA: meet Legal Affairs + Hadi + CAIO', 'vendor', 'Urgent', 'Hadi', '', 1],
    ['Chandini to provide process map of features announcement', 'ai', 'High', 'Chandini', '', 1],
    ['Copilot ROI analysis', 'ai', 'High', 'Self', '', 0],
    ['AlHasbah KPIs review with Shabeer', 'gov', 'High', 'Shabeer', '', 1],
    ['I&TF Quarterly report — Wafa, Ayesha, Umme, Nixon, Chandini', 'gov', 'Urgent', '', '2026-03-27', 0],
    ['EVP asked for MD Finance Agent', 'adhoc', 'Urgent', '', '', 0],
    ['WEF Lighthouse document — shared with Hamid and Ahmad AlShehhi', 'events', 'High', 'Hamid', '', 1],
    ['Check Udemy license distribution across divisions', 'ai', 'Medium', '', '', 0],
    ['GitHub Copilot end-to-end plan', 'ai', 'High', '', '', 0],
    ['Benchmark presentation meeting on 13 Apr', 'gov', 'High', 'Hamid', '2026-04-13', 1],
    ['Polynome NDA to be signed', 'vendor', 'High', '', '', 1],
    ['AI Ethics & Governance workshop for AI Champions', 'ai', 'High', '', '', 0],
    ['Copilot Studio Kit demo with Yasa', 'ai', 'High', 'Yasa', '', 0],
    ['Check with Microsoft to connect Viva Learning team', 'vendor', 'Medium', '', '', 0],
    ['D2D issue still open', 'strategic', 'High', '', '', 0],
    ['Staff mobile allowance', 'people', 'Medium', '', '', 0],
    ['Universities update', 'events', 'Medium', '', '', 0],
    ['Follow up on Anthropic contacts', 'vendor', 'High', '', '', 1],
    ['Genspark credit issue resolution', 'vendor', 'Medium', '', '', 1],
    ['Survey for AI Champions — measure performance', 'ai', 'High', '', '', 0],
  ];

  const seedTasks = db.transaction(() => {
    for (const t of tasks) insertTask.run(...t);
  });
  seedTasks();

  // Seed people from CAIO Batch 3 - AlSheraa Shift (yellow-highlighted)
  const seededPeopleV2 = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();
  if (!seededPeopleV2) {
    db.prepare('DELETE FROM people').run();
    const insertPerson = db.prepare(`
      INSERT OR IGNORE INTO people (name, pr_number, designation)
      VALUES (?, ?, ?)
    `);
    const teamMembers = [
      ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],
      ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],
      ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],
      ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],
      ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],
      ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],
      ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],
      ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],
      ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],
      ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],
      ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],
      ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],
      ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],
      ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],
      ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],
      ['Ummehani Rangwala',                      '99007665', 'External Contractor'],
      ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],
      ['Prasanth Pillai',                        '99009407', 'External Contractor'],
      ['Marouane Basta',                         '99000698', 'External Contractor'],
      ['Ismail',                                 '',         'External Contractor'],
      ['Chandini',                               '',         'External Contractor'],
      ['Saravana Kumar',                         '',         'External Contractor'],
      ['Nixson Jesuraj',                         '',         'External Contractor'],
      ['Ankur Jain',                             '',         'External Contractor'],
      ['Anusha',                                 '',         'External Contractor'],
      ['Nora',                                   '',         'External Contractor'],
      ['Ashwin Kaleeswaran',                     '',         'External Contractor'],
      ['Fatehali',                               '',         'External Contractor'],
      ['Tharakeswar',                            '',         'External Contractor'],
      ['Kamalesh',                               '',         'External Contractor'],
      ['Kamlesh Manker',                         '99006876', 'External Contractor'],
    ];
    const seedPeople = db.transaction(() => {
      for (const [name, pr, des] of teamMembers) insertPerson.run(name, pr, des);
    });
    seedPeople();
    db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();
  }
}

initDb();

module.exports = db;

-  // Seed people from CAIO Batch 3 - AlSheraa Shift (yellow-highlighted)

-  const seededPeopleV2 = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();

-    db.prepare('DELETE FROM people').run();

-      INSERT OR IGNORE INTO people (name, pr_number, designation)

-      ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],

-      ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],

-      ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],

-      ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],

-      ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],

-      ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],

-      ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],

-      ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],

-      ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],

-      ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],

-      ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],

-      ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],

-      ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],

-      ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],

-      ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],

-      ['Ummehani Rangwala',                      '99007665', 'External Contractor'],

-      ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],

-      ['Prasanth Pillai',                        '99009407', 'External Contractor'],

-      ['Marouane Basta',                         '99000698', 'External Contractor'],

-      ['Ismail',                                 '',         'External Contractor'],

-      ['Chandini',                               '',         'External Contractor'],

-      ['Saravana Kumar',                         '',         'External Contractor'],

-      ['Nixson Jesuraj',                         '',         'External Contractor'],

-      ['Ankur Jain',                             '',         'External Contractor'],

-      ['Anusha',                                 '',         'External Contractor'],

-      ['Nora',                                   '',         'External Contractor'],

-      ['Ashwin Kaleeswaran',                     '',         'External Contractor'],

-      ['Fatehali',                               '',         'External Contractor'],

-      ['Tharakeswar',                            '',         'External Contractor'],

-      ['Kamalesh',                               '',         'External Contractor'],

-      ['Kamlesh Manker',                         '99006876', 'External Contractor'],

-    const seedPeople = db.transaction(() => {

-      for (const [name, pr, des] of teamMembers) insertPerson.run(name, pr, des);

-    db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();

+  const already = db.prepare("SELECT value FROM settings WHERE key = 'people_v2'").get();

+  db.prepare('DELETE FROM people').run();

+  const ins = db.prepare('INSERT OR IGNORE INTO people (name, pr_number, designation) VALUES (?, ?, ?)');

+    ['Ayesha Mohd Ali Sarwashi',              '15610',    'Specialist - Digital Services'],

+    ['Saleha Obaid Essa',                      '24290',    'Sr Demand Analyst'],

+    ['Mohammad Saif Bin Sulaiman',             '29433',    'Sr Engr - Digital Asset Mgmt'],

+    ['Eiman Abdulla Alkindi',                  '23463',    'Sr Engr - Projects Govrnce'],

+    ['Ahmad Mohamad Bin Dakhan',               '25260',    'Sr Exec - Digital Comm'],

+    ['Noora Hassan Abdullatif Alsarah',        '24743',    'Sr Officer - Digital Products Mgmt'],

+    ['Ahmed Saleh Ahmed Alshehhi',             '22990',    'Sr Exec - Customer Haps'],

+    ['Wafa Mohd Mubarak Albalooshi',           '24911',    'Sr Exec - Admin'],

+    ['Ayesha Eissa Humaid Abdulla Alzaabi',    '26971',    'Sr Exec - Admin'],

+    ['Shamsa Ahmad Abdulla Alabdulla',         '29509',    'Sr Officer - Portfolio Delivery Mgmt'],

+    ['Abdulla Almuhairi',                      '14933',    'Sr Exec - Digital Products Mgmt'],

+    ['Majed Ahmed Mohamed Almarzouqi',         '30523',    'Analyst - Business Relationship Mgmt'],

+    ['Khalid Abdulmunem Ibrahim Bin Kalban',   '29184',    'Mgr - Digital Products Mgmt'],

+    ['Hamid Jasim Ahmed Mohamed Al-Ali',       '29295',    'Asst Mgr - Future Foresight Tech'],

+    ['Elsa Prakash',                           '25297',    'Sr Analyst - Digital Product Mgmt'],

+    ['Ummehani Rangwala',                      '99007665', 'External Contractor'],

+    ['Rakesh Gulaganji',                       '99009102', 'External Contractor'],

+    ['Prasanth Pillai',                        '99009407', 'External Contractor'],

+    ['Marouane Basta',                         '99000698', 'External Contractor'],

+    ['Ismail',                                 '',         'External Contractor'],

+    ['Chandini',                               '',         'External Contractor'],

+    ['Saravana Kumar',                         '',         'External Contractor'],

+    ['Nixson Jesuraj',                         '',         'External Contractor'],

+    ['Ankur Jain',                             '',         'External Contractor'],

+    ['Anusha',                                 '',         'External Contractor'],

+    ['Nora',                                   '',         'External Contractor'],

+    ['Ashwin Kaleeswaran',                     '',         'External Contractor'],

+    ['Fatehali',                               '',         'External Contractor'],

+    ['Tharakeswar',                            '',         'External Contractor'],

+    ['Kamalesh',                               '',         'External Contractor'],

+    ['Kamlesh Manker',                         '99006876', 'External Contractor'],

+  db.transaction(() => { for (const [n, p, d] of members) ins.run(n, p, d); })();

+  db.prepare("INSERT OR REPLACE INTO settings (key, value) VALUES ('people_v2', 'true')").run();

+  console.log('✅ People seeded (v2) — 31 team members');


Now verify it works:


Bash

node -e "
const db = require('./server/db');
const count = db.prepare('SELECT COUNT(*) as c FROM people').get().c;
const sample = db.prepare('SELECT name, pr_number, designation FROM people LIMIT 5').all();
console.log('Total people:', count);
sample.forEach(p => console.log(' -', p.name, '|', p.pr_number, '|', p.designation));
" 2>&1

Verify people seeded correctly


Total people: 31
 - Ayesha Mohd Ali Sarwashi | 15610 | Specialist - Digital Services
 - Saleha Obaid Essa | 24290 | Sr Demand Analyst
 - Mohammad Saif Bin Sulaiman | 29433 | Sr Engr - Digital Asset Mgmt
 - Eiman Abdulla Alkindi | 23463 | Sr Engr - Projects Govrnce
 - Ahmad Mohamad Bin Dakhan | 25260 | Sr Exec - Digital Comm


31 members seeded correctly. The **My Team** page is now a full sortable directory table with:

- **31 members** from the yellow-highlighted rows in the PDF, pre-loaded with their name, PR number, and designation
- **All columns**: Name, PR No., Grade, Designation, Department, Section, Reporting Line, Mobile, Place
- **Sortable** — click any column header to sort asc/desc
- **Searchable** — by name, designation, department, or PR number
- **Edit/Delete** buttons appear on row hover
- **Add Member** modal with all 9 fields to fill in
- **Mobile numbers** are clickable tel: links
- Empty fields show a `—` placeholder — ready for you to fill in Grade, Department, Section, Reporting Line, Mobile, Place for each person


create a new link for it as it got clashed with another project with Tailscale url and add MY Workspace


1	import { defineConfig } from 'vite';
2	import react from '@vitejs/plugin-react';
3
4	export default defineConfig({
5	  plugins: [react()],
6	  server: {
7	    port: 5173,
8	    host: '0.0.0.0',   // expose on all interfaces (Tailscale + LAN)
9	    proxy: {
10	      '/api': {
11	        target: 'http://localhost:3002',
12	        changeOrigin: true,
13	      },
14	    },
15	  },
16	  build: {
17	    outDir: '../dist',
18	    emptyOutDir: true,
19	  },
20	});
21

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    port: 5173,
    host: '0.0.0.0',   // expose on all interfaces (Tailscale + LAN)
    proxy: {
      '/api': {
        target: 'http://localhost:3002',
        changeOrigin: true,
      },
    },
  },
  build: {
    outDir: '../dist',
    emptyOutDir: true,
  },
});


client/index.html


1	<!DOCTYPE html>
2
3
4	    <meta charset="UTF-8" />
5	    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6	    <title>My Workspace</title>
7	    <link rel="preconnect" href="https://fonts.googleapis.com" />
8	    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9	    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
10	    <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%237C5CFC'/><path d='M16 7l2.5 5 5.5.8-4 3.9.9 5.5L16 19.5l-4.9 2.7.9-5.5-4-3.9 5.5-.8z' fill='white'/></svg>" />
11
12
13

14
15
16
17

<!DOCTYPE html>

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>My Workspace</title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
    <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%237C5CFC'/><path d='M16 7l2.5 5 5.5.8-4 3.9.9 5.5L16 19.5l-4.9 2.7.9-5.5-4-3.9 5.5-.8z' fill='white'/></svg>" />


The clash is on port 5173. I'll move this workspace to port **5174** so the Tailscale URL becomes `http://100.72.97.47:5174`. I'll also make the "My Workspace" branding more prominent:


The file /Users/khalidbinkalban/my-workspace/client/vite.config.js has been updated successfully.

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    port: 5173,
    host: '0.0.0.0',   // expose on all interfaces (Tailscale + LAN)
    proxy: {
      '/api': {
        target: 'http://localhost:3002',
        changeOrigin: true,
      },
    },
  },
  build: {
    outDir: '../dist',
    emptyOutDir: true,
  },
});


Now update the page title and add a favicon color that's distinct:


The file /Users/khalidbinkalban/my-workspace/client/index.html has been updated successfully.

<!DOCTYPE html>

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>My Workspace</title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
    <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%237C5CFC'/><path d='M16 7l2.5 5 5.5.8-4 3.9.9 5.5L16 19.5l-4.9 2.7.9-5.5-4-3.9 5.5-.8z' fill='white'/></svg>" />


Now update the sidebar branding to be more distinct:


59
60	  return (
61
62	      {/* Logo */}
63

64

65

66	            <Zap size={15} className="text-white" />
67

68

69
My Workspace

70
DEWA · Senior Manager

71

72

73

return (

      {/* Logo */}

            <Zap size={15} className="text-white" />

My Workspace

DEWA · Senior Manager


Edit

              MY
               Workspace

DEWA · Senior Manager


The file /Users/khalidbinkalban/my-workspace/client/src/components/Sidebar.jsx has been updated successfully.

              MY
               Workspace

DEWA · Senior Manager

import { useState, useEffect } from 'react';
import { NavLink, useNavigate } from 'react-router-dom';
import {
  CalendarDays, PenLine, FolderKanban, CheckSquare, FileText,
  Bell, Users, BarChart2, Search, Moon, Sun, Zap,
  ChevronDown, ChevronRight, Settings, LogOut, History
} from 'lucide-react';
import { useApp } from '../App';
import api from '../api';

const CATEGORY_DOT = {
  ai:        'bg-blue-500',
  vendor:    'bg-purple-500',
  gov:       'bg-amber-500',
  people:    'bg-teal-500',
  events:    'bg-orange-500',
  strategic: 'bg-green-500',
  adhoc:     'bg-red-500',
};
const CATEGORY_LABEL = {
  ai:        'AI & Strategy',
  vendor:    'Vendors',
  gov:       'Governance',
  people:    'People',
  events:    'Events',
  strategic: 'Strategic',
  adhoc:     'CAIO / EVP',
};

const NAV = [
  { to: '/today',         icon: CalendarDays, label: 'Dashboard'     },
  { to: '/inbox',         icon: PenLine,      label: 'Quick Note'    },
  { to: '/projects',      icon: FolderKanban, label: 'Projects'      },
  { to: '/tasks',         icon: CheckSquare,  label: 'Tasks'         },
  { to: '/notes',         icon: FileText,     label: 'Notes'         },
  { to: '/follow-ups',    icon: Bell,         label: 'Follow-ups'    },
  { to: '/people',        icon: Users,        label: 'My Team'       },
  { to: '/weekly-review', icon: BarChart2,    label: 'Weekly Review' },
  { to: '/history',       icon: History,      label: 'History'       },
];

export default function Sidebar({ onSearchOpen }) {
  const { darkMode, setDarkMode } = useApp();
  const [projects, setProjects] = useState([]);
  const [openCats, setOpenCats] = useState({ ai: true, vendor: true });
  const navigate = useNavigate();

  useEffect(() => {
    api.get('/projects').then(setProjects).catch(() => {});
  }, []);

  const grouped = projects.reduce((acc, p) => {
    if (!acc[p.category]) acc[p.category] = [];
    acc[p.category].push(p);
    return acc;
  }, {});

  const toggleCat = (cat) => setOpenCats(s => ({ ...s, [cat]: !s[cat] }));

  return (

      {/* Logo */}

            <Zap size={15} className="text-white" />

My Workspace

DEWA · Senior Manager

      {/* Search */}
      <button
        onClick={onSearchOpen}
        className="mx-3 mt-3 flex items-center gap-2 px-3 py-2 rounded-xl bg-gray-50 dark:bg-gray-800 text-gray-400 text-xs hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors group border border-gray-100 dark:border-gray-700"
      >
        <Search size={12} />
        Search…
        ⌘K
      </button>

      {/* Main nav */}

        {NAV.map(({ to, icon: Icon, label }) => (
          <NavLink key={to} to={to} className={({ isActive }) =>
            isActive ? 'nav-item-active flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium bg-primary/10 text-primary'
                     : 'nav-item flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-900 dark:hover:text-white transition-all'
          }>
            <Icon size={15} />
            {label}
          </NavLink>
        ))}

      {/* Projects grouped */}

Projects

        {Object.entries(grouped).map(([cat, items]) => (

            <button
              onClick={() => toggleCat(cat)}
              className="flex items-center gap-2 w-full px-2 py-1.5 text-xs font-semibold text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white transition-colors rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800"
            >
              <div className={`w-2 h-2 rounded-full shrink-0 ${CATEGORY_DOT[cat]}`} />
              {CATEGORY_LABEL[cat]}
              {items.length}
              {openCats[cat] ? <ChevronDown size={11} /> : <ChevronRight size={11} />}
            </button>
            {openCats[cat] && (

                {items.slice(0, 5).map(p => (
                  <button
                    key={p.id}
                    onClick={() => navigate(`/projects/${p.id}`)}
                    className="flex items-center gap-1.5 w-full px-2 py-1 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800 rounded-lg transition-colors text-left"
                  >
                    <div className={`w-1.5 h-1.5 rounded-full shrink-0 ${CATEGORY_DOT[cat]} opacity-60`} />
                    {p.name}
                  </button>
                ))}
                {items.length > 5 && (
                  <button onClick={() => navigate('/projects')} className="text-[10px] text-gray-400 hover:text-primary px-2 py-0.5 transition-colors">
                    +{items.length - 5} more
                  </button>
                )}

            )}

        ))}

      {/* Bottom */}

        <button
          onClick={() => setDarkMode(!darkMode)}
          className="flex items-center gap-2 w-full px-3 py-2 rounded-xl text-xs text-gray-500 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"
        >
          {darkMode ? <Sun size={13} /> : <Moon size={13} />}
          {darkMode ? 'Light mode' : 'Dark mode'}
        </button>

  );
}

+            <p className="text-sm font-bold leading-tight">


Now restart the dev server on the new port. Run these two commands in your terminal:

```bash
# Stop the current Vite process (Ctrl+C), then restart:
cd /Users/khalidbinkalban/my-workspace && npx vite client --port 5174
```

Or if using a start script:
```bash
cd /Users/khalidbinkalban/my-workspace/client && npm run dev
```

**New URLs:**
- **Tailscale:** `http://100.72.97.47:5174`
- **Local:** `http://localhost:5174`

**What changed:**
- Port moved **5173 → 5174** — no longer conflicts with your other project
- Browser tab now shows **"MY Workspace — DEWA"**
- Sidebar logo now shows **MY** in purple + **Workspace** in bold, making it visually distinct


remove the logo of the webist for now


<!DOCTYPE html>

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>MY Workspace — DEWA</title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
    <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%237C5CFC'/><path d='M16 7l2.5 5 5.5.8-4 3.9.9 5.5L16 19.5l-4.9 2.7.9-5.5-4-3.9 5.5-.8z' fill='white'/></svg>" />


Now remove the icon box from the sidebar, keeping just the text:


            <Zap size={15} className="text-white" />

              MY
               Workspace

DEWA · Senior Manager

            MY
             Workspace

DEWA · Senior Manager


            MY
             Workspace

DEWA · Senior Manager

import { useState, useEffect } from 'react';
import { NavLink, useNavigate } from 'react-router-dom';
import {
  CalendarDays, PenLine, FolderKanban, CheckSquare, FileText,
  Bell, Users, BarChart2, Search, Moon, Sun, Zap,
  ChevronDown, ChevronRight, Settings, LogOut, History
} from 'lucide-react';
import { useApp } from '../App';
import api from '../api';

const CATEGORY_DOT = {
  ai:        'bg-blue-500',
  vendor:    'bg-purple-500',
  gov:       'bg-amber-500',
  people:    'bg-teal-500',
  events:    'bg-orange-500',
  strategic: 'bg-green-500',
  adhoc:     'bg-red-500',
};
const CATEGORY_LABEL = {
  ai:        'AI & Strategy',
  vendor:    'Vendors',
  gov:       'Governance',
  people:    'People',
  events:    'Events',
  strategic: 'Strategic',
  adhoc:     'CAIO / EVP',
};

const NAV = [
  { to: '/today',         icon: CalendarDays, label: 'Dashboard'     },
  { to: '/inbox',         icon: PenLine,      label: 'Quick Note'    },
  { to: '/projects',      icon: FolderKanban, label: 'Projects'      },
  { to: '/tasks',         icon: CheckSquare,  label: 'Tasks'         },
  { to: '/notes',         icon: FileText,     label: 'Notes'         },
  { to: '/follow-ups',    icon: Bell,         label: 'Follow-ups'    },
  { to: '/people',        icon: Users,        label: 'My Team'       },
  { to: '/weekly-review', icon: BarChart2,    label: 'Weekly Review' },
  { to: '/history',       icon: History,      label: 'History'       },
];

export default function Sidebar({ onSearchOpen }) {
  const { darkMode, setDarkMode } = useApp();
  const [projects, setProjects] = useState([]);
  const [openCats, setOpenCats] = useState({ ai: true, vendor: true });
  const navigate = useNavigate();

  useEffect(() => {
    api.get('/projects').then(setProjects).catch(() => {});
  }, []);

  const grouped = projects.reduce((acc, p) => {
    if (!acc[p.category]) acc[p.category] = [];
    acc[p.category].push(p);
    return acc;
  }, {});

  const toggleCat = (cat) => setOpenCats(s => ({ ...s, [cat]: !s[cat] }));

  return (

      {/* Logo */}

            <Zap size={15} className="text-white" />

              MY
               Workspace

DEWA · Senior Manager

      {/* Search */}
      <button
        onClick={onSearchOpen}
        className="mx-3 mt-3 flex items-center gap-2 px-3 py-2 rounded-xl bg-gray-50 dark:bg-gray-800 text-gray-400 text-xs hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors group border border-gray-100 dark:border-gray-700"
      >
        <Search size={12} />
        Search…
        ⌘K
      </button>

      {/* Main nav */}

        {NAV.map(({ to, icon: Icon, label }) => (
          <NavLink key={to} to={to} className={({ isActive }) =>
            isActive ? 'nav-item-active flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium bg-primary/10 text-primary'
                     : 'nav-item flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-900 dark:hover:text-white transition-all'
          }>
            <Icon size={15} />
            {label}
          </NavLink>
        ))}

      {/* Projects grouped */}

Projects

        {Object.entries(grouped).map(([cat, items]) => (

            <button
              onClick={() => toggleCat(cat)}
              className="flex items-center gap-2 w-full px-2 py-1.5 text-xs font-semibold text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white transition-colors rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800"
            >
              <div className={`w-2 h-2 rounded-full shrink-0 ${CATEGORY_DOT[cat]}`} />
              {CATEGORY_LABEL[cat]}
              {items.length}
              {openCats[cat] ? <ChevronDown size={11} /> : <ChevronRight size={11} />}
            </button>
            {openCats[cat] && (

                {items.slice(0, 5).map(p => (
                  <button
                    key={p.id}
                    onClick={() => navigate(`/projects/${p.id}`)}
                    className="flex items-center gap-1.5 w-full px-2 py-1 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800 rounded-lg transition-colors text-left"
                  >
                    <div className={`w-1.5 h-1.5 rounded-full shrink-0 ${CATEGORY_DOT[cat]} opacity-60`} />
                    {p.name}
                  </button>
                ))}
                {items.length > 5 && (
                  <button onClick={() => navigate('/projects')} className="text-[10px] text-gray-400 hover:text-primary px-2 py-0.5 transition-colors">
                    +{items.length - 5} more
                  </button>
                )}

            )}

        ))}

      {/* Bottom */}

        <button
          onClick={() => setDarkMode(!darkMode)}
          className="flex items-center gap-2 w-full px-3 py-2 rounded-xl text-xs text-gray-500 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"
        >
          {darkMode ? <Sun size={13} /> : <Moon size={13} />}
          {darkMode ? 'Light mode' : 'Dark mode'}
        </button>

  );
}

<aside className="hidden md:flex flex-col w-[220px] shrink-0 bg-white dark:bg-gray-900 border-r border-gray-100 dark:border-gray-800 h-full">

<div className="px-4 py-4 border-b border-gray-100 dark:border-gray-800">

-        <div className="flex items-center gap-2.5">

-          <div className="w-8 h-8 rounded-xl bg-gradient-to-br from-primary to-brand-pink flex items-center justify-center shadow-glow">

-            <Zap size={15} className="text-white" />

-            <p className="text-sm font-bold leading-tight">

+          <p className="text-sm font-bold leading-tight">


Also remove the unused `Zap` import from Sidebar since it's no longer used:


5:  Bell, Users, BarChart2, Search, Moon, Sun, Zap,


Bell, Users, BarChart2, Search, Moon, Sun, Zap,

Bell, Users, BarChart2, Search, Moon, Sun,


import { useState, useEffect } from 'react';
import { NavLink, useNavigate } from 'react-router-dom';
import {
  CalendarDays, PenLine, FolderKanban, CheckSquare, FileText,
  Bell, Users, BarChart2, Search, Moon, Sun, Zap,
  ChevronDown, ChevronRight, Settings, LogOut, History
} from 'lucide-react';
import { useApp } from '../App';
import api from '../api';

const CATEGORY_DOT = {
  ai:        'bg-blue-500',
  vendor:    'bg-purple-500',
  gov:       'bg-amber-500',
  people:    'bg-teal-500',
  events:    'bg-orange-500',
  strategic: 'bg-green-500',
  adhoc:     'bg-red-500',
};
const CATEGORY_LABEL = {
  ai:        'AI & Strategy',
  vendor:    'Vendors',
  gov:       'Governance',
  people:    'People',
  events:    'Events',
  strategic: 'Strategic',
  adhoc:     'CAIO / EVP',
};

const NAV = [
  { to: '/today',         icon: CalendarDays, label: 'Dashboard'     },
  { to: '/inbox',         icon: PenLine,      label: 'Quick Note'    },
  { to: '/projects',      icon: FolderKanban, label: 'Projects'      },
  { to: '/tasks',         icon: CheckSquare,  label: 'Tasks'         },
  { to: '/notes',         icon: FileText,     label: 'Notes'         },
  { to: '/follow-ups',    icon: Bell,         label: 'Follow-ups'    },
  { to: '/people',        icon: Users,        label: 'My Team'       },
  { to: '/weekly-review', icon: BarChart2,    label: 'Weekly Review' },
  { to: '/history',       icon: History,      label: 'History'       },
];

export default function Sidebar({ onSearchOpen }) {
  const { darkMode, setDarkMode } = useApp();
  const [projects, setProjects] = useState([]);
  const [openCats, setOpenCats] = useState({ ai: true, vendor: true });
  const navigate = useNavigate();

  useEffect(() => {
    api.get('/projects').then(setProjects).catch(() => {});
  }, []);

  const grouped = projects.reduce((acc, p) => {
    if (!acc[p.category]) acc[p.category] = [];
    acc[p.category].push(p);
    return acc;
  }, {});

  const toggleCat = (cat) => setOpenCats(s => ({ ...s, [cat]: !s[cat] }));

  return (

      {/* Logo */}

            MY
             Workspace

DEWA · Senior Manager

      {/* Search */}
      <button
        onClick={onSearchOpen}
        className="mx-3 mt-3 flex items-center gap-2 px-3 py-2 rounded-xl bg-gray-50 dark:bg-gray-800 text-gray-400 text-xs hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors group border border-gray-100 dark:border-gray-700"
      >
        <Search size={12} />
        Search…
        ⌘K
      </button>

      {/* Main nav */}

        {NAV.map(({ to, icon: Icon, label }) => (
          <NavLink key={to} to={to} className={({ isActive }) =>
            isActive ? 'nav-item-active flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium bg-primary/10 text-primary'
                     : 'nav-item flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-900 dark:hover:text-white transition-all'
          }>
            <Icon size={15} />
            {label}
          </NavLink>
        ))}

      {/* Projects grouped */}

Projects

        {Object.entries(grouped).map(([cat, items]) => (

            <button
              onClick={() => toggleCat(cat)}
              className="flex items-center gap-2 w-full px-2 py-1.5 text-xs font-semibold text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white transition-colors rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800"
            >
              <div className={`w-2 h-2 rounded-full shrink-0 ${CATEGORY_DOT[cat]}`} />
              {CATEGORY_LABEL[cat]}
              {items.length}
              {openCats[cat] ? <ChevronDown size={11} /> : <ChevronRight size={11} />}
            </button>
            {openCats[cat] && (

                {items.slice(0, 5).map(p => (
                  <button
                    key={p.id}
                    onClick={() => navigate(`/projects/${p.id}`)}
                    className="flex items-center gap-1.5 w-full px-2 py-1 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800 rounded-lg transition-colors text-left"
                  >
                    <div className={`w-1.5 h-1.5 rounded-full shrink-0 ${CATEGORY_DOT[cat]} opacity-60`} />
                    {p.name}
                  </button>
                ))}
                {items.length > 5 && (
                  <button onClick={() => navigate('/projects')} className="text-[10px] text-gray-400 hover:text-primary px-2 py-0.5 transition-colors">
                    +{items.length - 5} more
                  </button>
                )}

            )}

        ))}

      {/* Bottom */}

        <button
          onClick={() => setDarkMode(!darkMode)}
          className="flex items-center gap-2 w-full px-3 py-2 rounded-xl text-xs text-gray-500 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"
        >
          {darkMode ? <Sun size={13} /> : <Moon size={13} />}
          {darkMode ? 'Light mode' : 'Dark mode'}
        </button>

  );
}

-  Bell, Users, BarChart2, Search, Moon, Sun, Zap,

+  Bell, Users, BarChart2, Search, Moon, Sun,


Done. Removed:
- The favicon from the browser tab (no more star icon)
- The purple gradient Zap icon box from the sidebar header — now shows just the **MY Workspace** / DEWA · Senior Manager text


Remove DEWA-Senior Manager
remove the logo for the task top bar


69:
DEWA · Senior Manager

69:
DEWA · Senior Manager


7:  Plus, User, Calendar, Zap, ArrowRight, FolderKanban,
279:              <Zap size={17} className="text-violet-600" />
282:
DEWA AI Workspace


import { useState, useEffect } from 'react';
import { NavLink, useNavigate } from 'react-router-dom';
import {
  CalendarDays, PenLine, FolderKanban, CheckSquare, FileText,
  Bell, Users, BarChart2, Search, Moon, Sun,
  ChevronDown, ChevronRight, Settings, LogOut, History
} from 'lucide-react';
import { useApp } from '../App';
import api from '../api';

const CATEGORY_DOT = {
  ai:        'bg-blue-500',
  vendor:    'bg-purple-500',
  gov:       'bg-amber-500',
  people:    'bg-teal-500',
  events:    'bg-orange-500',
  strategic: 'bg-green-500',
  adhoc:     'bg-red-500',
};
const CATEGORY_LABEL = {
  ai:        'AI & Strategy',
  vendor:    'Vendors',
  gov:       'Governance',
  people:    'People',
  events:    'Events',
  strategic: 'Strategic',
  adhoc:     'CAIO / EVP',
};

const NAV = [
  { to: '/today',         icon: CalendarDays, label: 'Dashboard'     },
  { to: '/inbox',         icon: PenLine,      label: 'Quick Note'    },
  { to: '/projects',      icon: FolderKanban, label: 'Projects'      },
  { to: '/tasks',         icon: CheckSquare,  label: 'Tasks'         },
  { to: '/notes',         icon: FileText,     label: 'Notes'         },
  { to: '/follow-ups',    icon: Bell,         label: 'Follow-ups'    },
  { to: '/people',        icon: Users,        label: 'My Team'       },
  { to: '/weekly-review', icon: BarChart2,    label: 'Weekly Review' },
  { to: '/history',       icon: History,      label: 'History'       },
];

export default function Sidebar({ onSearchOpen }) {
  const { darkMode, setDarkMode } = useApp();
  const [projects, setProjects] = useState([]);
  const [openCats, setOpenCats] = useState({ ai: true, vendor: true });
  const navigate = useNavigate();

  useEffect(() => {
    api.get('/projects').then(setProjects).catch(() => {});
  }, []);

  const grouped = projects.reduce((acc, p) => {
    if (!acc[p.category]) acc[p.category] = [];
    acc[p.category].push(p);
    return acc;
  }, {});

  const toggleCat = (cat) => setOpenCats(s => ({ ...s, [cat]: !s[cat] }));

  return (

      {/* Logo */}

            MY
             Workspace

DEWA · Senior Manager

      {/* Search */}
      <button
        onClick={onSearchOpen}
        className="mx-3 mt-3 flex items-center gap-2 px-3 py-2 rounded-xl bg-gray-50 dark:bg-gray-800 text-gray-400 text-xs hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors group border border-gray-100 dark:border-gray-700"
      >
        <Search size={12} />
        Search…
        ⌘K
      </button>

      {/* Main nav */}

        {NAV.map(({ to, icon: Icon, label }) => (
          <NavLink key={to} to={to} className={({ isActive }) =>
            isActive ? 'nav-item-active flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium bg-primary/10 text-primary'
                     : 'nav-item flex items-center gap-2.5 px-3 py-2 rounded-xl text-sm font-medium text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-900 dark:hover:text-white transition-all'
          }>
            <Icon size={15} />
            {label}
          </NavLink>
        ))}

      {/* Projects grouped */}

Projects

        {Object.entries(grouped).map(([cat, items]) => (

            <button
              onClick={() => toggleCat(cat)}
              className="flex items-center gap-2 w-full px-2 py-1.5 text-xs font-semibold text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white transition-colors rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800"
            >
              <div className={`w-2 h-2 rounded-full shrink-0 ${CATEGORY_DOT[cat]}`} />
              {CATEGORY_LABEL[cat]}
              {items.length}
              {openCats[cat] ? <ChevronDown size={11} /> : <ChevronRight size={11} />}
            </button>
            {openCats[cat] && (

                {items.slice(0, 5).map(p => (
                  <button
                    key={p.id}
                    onClick={() => navigate(`/projects/${p.id}`)}
                    className="flex items-center gap-1.5 w-full px-2 py-1 text-xs text-gray-500 dark:text-gray-400 hover:text-gray-800 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800 rounded-lg transition-colors text-left"
                  >
                    <div className={`w-1.5 h-1.5 rounded-full shrink-0 ${CATEGORY_DOT[cat]} opacity-60`} />
                    {p.name}
                  </button>
                ))}
                {items.length > 5 && (
                  <button onClick={() => navigate('/projects')} className="text-[10px] text-gray-400 hover:text-primary px-2 py-0.5 transition-colors">
                    +{items.length - 5} more
                  </button>
                )}

            )}

        ))}

      {/* Bottom */}

        <button
          onClick={() => setDarkMode(!darkMode)}
          className="flex items-center gap-2 w-full px-3 py-2 rounded-xl text-xs text-gray-500 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"
        >
          {darkMode ? <Sun size={13} /> : <Moon size={13} />}
          {darkMode ? 'Light mode' : 'Dark mode'}
        </button>

  );
}


Now remove the Zap icon box from the Today.jsx hero banner:


263	    { id: 'dashboard', label: 'Dashboard' },
264	    { id: 'all',       label: 'All Tasks'      },
265	    { id: 'projects',  label: 'Projects'       },
266	  ];
267
268	  return (
269

270
271	      {/* Hero banner */}
272

273

274

275

276

277

{ id: 'dashboard', label: 'Dashboard' },
    { id: 'all',       label: 'All Tasks'      },
    { id: 'projects',  label: 'Projects'       },
  ];

  return (

      {/* Hero banner */}


277

278

279	              <Zap size={17} className="text-violet-600" />
280

281

282
DEWA AI Workspace

283
{dateLabel}

284

285

286

287	            {[
288	              { label: 'Projects',     value: stats?.activeProjects ?? '—', Icon: FolderKanban },

              <Zap size={17} className="text-violet-600" />

DEWA AI Workspace

{dateLabel}

            {[
              { label: 'Projects',     value: stats?.activeProjects ?? '—', Icon: FolderKanban },


              <Zap size={17} className="text-violet-600" />

DEWA AI Workspace

{dateLabel}


The file /Users/khalidbinkalban/my-workspace/client/src/components/Today.jsx has been updated successfully.

import { useState, useEffect, useCallback } from 'react';
import {
  DndContext, DragOverlay, useDroppable, useDraggable,
  PointerSensor, TouchSensor, useSensor, useSensors, closestCenter
} from '@dnd-kit/core';
import {
  Plus, User, Calendar, Zap, ArrowRight, FolderKanban,
  CheckSquare, Bell, Target, AlertTriangle, MoreHorizontal, GripVertical, PenLine, Send
} from 'lucide-react';
import { Link, useNavigate } from 'react-router-dom';
import toast from 'react-hot-toast';
import api from '../api';
import TaskModal from './TaskModal';
import ConfirmDialog from './ConfirmDialog';
import { getCategoryClass, getPriorityClass, CATEGORIES, formatDate, isOverdue } from '../utils';

// ── Column config ────────────────────────────────────────────────────────────
const COLUMNS = [
  { id: 'focus',      title: "Today's Focus", color: 'text-primary',    bg: 'bg-primary/10',  border: 'border-l-primary'  },
  { id: 'inprogress', title: 'In Progress',   color: 'text-blue-600',   bg: 'bg-blue-50 dark:bg-blue-900/20',   border: 'border-l-blue-400'   },
  { id: 'followups',  title: 'Follow-ups',    color: 'text-amber-600',  bg: 'bg-amber-50 dark:bg-amber-900/20', border: 'border-l-amber-400'  },
  { id: 'open',       title: 'Open',          color: 'text-gray-500',   bg: 'bg-gray-100 dark:bg-gray-800',     border: 'border-l-gray-300'   },
];

const PRIORITY_BORDER = { Urgent:'border-l-red-500', High:'border-l-amber-400', Medium:'border-l-blue-400', Low:'border-l-green-400' };

function getColumnId(task) {
  if (task.status === 'Done') return null;
  if (task.is_today_focus)    return 'focus';
  if (task.status === 'In Progress') return 'inprogress';
  if (task.is_follow_up)      return 'followups';
  return 'open';
}

function columnUpdates(col, task) {
  const base = { ...task };
  if (col === 'focus')      return { ...base, is_today_focus: 1 };
  if (col === 'inprogress') return { ...base, status: 'In Progress', is_today_focus: 0 };
  if (col === 'followups')  return { ...base, is_follow_up: 1,  is_today_focus: 0 };
  if (col === 'open')       return { ...base, is_today_focus: 0, status: 'Open' };
  return base;
}

// ── Draggable card ───────────────────────────────────────────────────────────
function DraggableCard({ task, onEdit, onDelete, onMarkDone }) {
  const { attributes, listeners, setNodeRef, isDragging } = useDraggable({ id: task.id });
  const overdue = isOverdue(task.due_date);

  return (

          {/* Drag handle */}
          <button {...listeners} {...attributes}
            className="shrink-0 mt-0.5 text-gray-300 hover:text-gray-500 cursor-grab active:cursor-grabbing touch-none">
            <GripVertical size={14} />
          </button>

{task.title}

              <button onClick={() => onEdit(task)}
                className="shrink-0 opacity-0 group-hover:opacity-100 p-1 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-400 transition-all">
                <MoreHorizontal size={13} />
              </button>

            {task.notes &&
{task.notes}
}

              <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
                {CATEGORIES[task.category]?.label?.split(' ')[0] || task.category}

              <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
              {task.is_follow_up === 1 && Follow-up}

                {task.assignee ? (

                    {task.assignee[0].toUpperCase()}

                ) :
<User size={9} className="text-gray-400" />
}
                {task.assignee && {task.assignee}}

                {task.due_date && (
                  <span className={`flex items-center gap-0.5 text-[10px] ${overdue ? 'text-red-500 font-semibold' : 'text-gray-400'}`}>
                    {overdue && <AlertTriangle size={9} />}{formatDate(task.due_date)}

                )}
                <button onClick={() => onMarkDone(task)}
                  className="opacity-0 group-hover:opacity-100 text-[10px] px-2 py-0.5 bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400 rounded-full hover:bg-green-200 transition-all font-medium">
                  Done
                </button>

  );
}

// ── Drag overlay card (ghost while dragging) ─────────────────────────────────
function OverlayCard({ task }) {
  return (

{task.title}

        <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
        <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
          {CATEGORIES[task.category]?.label?.split(' ')[0]}

  );
}

// ── Droppable column ─────────────────────────────────────────────────────────
function DroppableColumn({ col, tasks, stats, onAddTask, onEdit, onDelete, onMarkDone }) {
  const { setNodeRef, isOver } = useDroppable({ id: col.id });

  return (

      {/* Column header */}

{col.title}

          <span className={`text-xs font-bold px-2 py-0.5 rounded-full ${col.bg} ${col.color}`}>{tasks.length}

        <button onClick={onAddTask}
          className="w-6 h-6 rounded-lg bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 flex items-center justify-center text-gray-400 hover:text-primary hover:border-primary transition-all shadow-sm">
          <Plus size={12} />
        </button>

      {/* Cards */}

        {tasks.length === 0 ? (

Drop here

        ) : (
          tasks.map(task => (
            <DraggableCard key={task.id} task={task} onEdit={onEdit} onDelete={onDelete} onMarkDone={onMarkDone} />
          ))
        )}

  );
}

// ── Main Dashboard ───────────────────────────────────────────────────────────
export default function Today() {
  const [allTasks, setAllTasks]     = useState([]);
  const [stats, setStats]           = useState(null);
  const [projects, setProjects]     = useState([]);
  const [loading, setLoading]       = useState(true);
  const [editTask, setEditTask]     = useState(null);
  const [deleteTask, setDeleteTask] = useState(null);
  const [showNew, setShowNew]       = useState(false);
  const [newDefaults, setNewDefaults] = useState({});
  const [activeTask, setActiveTask] = useState(null);
  const [activeTab, setActiveTab]   = useState('dashboard');
  const [quickInput, setQuickInput] = useState('');
  const navigate = useNavigate();

  const today = new Date();
  const dateLabel = today.toLocaleDateString('en-GB', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });

  const load = useCallback(async () => {
    try {
      const [tasks, st, pr] = await Promise.all([api.get('/tasks'), api.get('/tasks/stats'), api.get('/projects')]);
      setAllTasks(tasks); setStats(st); setProjects(pr);
    } finally { setLoading(false); }
  }, []);

  useEffect(() => { load(); }, [load]);

  // Bucket tasks into columns
  const columns = COLUMNS.map(col => ({
    ...col,
    tasks: allTasks.filter(t => getColumnId(t) === col.id),
  }));

  // DnD sensors — support mouse, touch (mobile), delay to prevent accidental drags
  const sensors = useSensors(
    useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),
    useSensor(TouchSensor,   { activationConstraint: { delay: 180, tolerance: 6 } })
  );

  const onDragStart = ({ active }) => {
    setActiveTask(allTasks.find(t => t.id === active.id) || null);
  };

  const onDragEnd = async ({ active, over }) => {
    setActiveTask(null);
    if (!over) return;
    const task = allTasks.find(t => t.id === active.id);
    if (!task) return;
    const targetCol = COLUMNS.find(c => c.id === over.id);
    if (!targetCol || getColumnId(task) === targetCol.id) return;

    // Optimistic update
    const updated = columnUpdates(targetCol.id, task);
    setAllTasks(prev => prev.map(t => t.id === task.id ? { ...t, ...updated } : t));
    try {
      await api.put(`/tasks/${task.id}`, updated);
      toast.success(`Moved to "${targetCol.title}"`);
    } catch (e) {
      toast.error('Failed to move task'); load();
    }
  };

  const markDone = async (task) => {
    setAllTasks(prev => prev.map(t => t.id === task.id ? { ...t, status: 'Done' } : t));
    await api.patch(`/tasks/${task.id}/status`, { status: 'Done' });
    toast.success('Marked as done');
  };

  const openNew = (defaults = {}) => { setNewDefaults(defaults); setShowNew(true); }

  const quickCapture = async (e) => {
    e.preventDefault();
    const title = quickInput.trim();
    if (!title) return;
    try {
      await api.post('/tasks', { title, priority: 'Medium', status: 'Open', category: 'adhoc', is_today_focus: 1 });
      setQuickInput('');
      toast.success('Task added to Today\'s Focus');
      load();
    } catch { toast.error('Failed to add task'); }
  };;

  const handleSave = async (form) => {
    try {
      if (editTask?.id) { await api.put(`/tasks/${editTask.id}`, form); toast.success('Task updated'); }
      else { await api.post('/tasks', { ...form, ...newDefaults }); toast.success('Task added'); }
      setEditTask(null); setShowNew(false); load();
    } catch (e) { toast.error(e.message); }
  };

  const handleDelete = async () => {
    await api.delete(`/tasks/${deleteTask.id}`);
    toast.success('Deleted'); setDeleteTask(null); load();
  };

  const TABS = [
    { id: 'dashboard', label: 'Dashboard' },
    { id: 'all',       label: 'All Tasks'      },
    { id: 'projects',  label: 'Projects'       },
  ];

  return (

      {/* Hero banner */}

              <Zap size={17} className="text-violet-600" />

DEWA AI Workspace

{dateLabel}

            {[
              { label: 'Projects',     value: stats?.activeProjects ?? '—', Icon: FolderKanban },
              { label: 'Open Tasks',   value: stats?.openTasks      ?? '—', Icon: CheckSquare  },
              { label: 'Follow-ups',   value: stats?.openFollowUps  ?? '—', Icon: Bell         },
              { label: "Today's Focus",value: stats?.todayFocus     ?? '—', Icon: Target       },
            ].map(({ label, value, Icon }) => (

{value}

                  <Icon size={9} />{label}

            ))}

      {/* Quick Capture bar */}

        <form onSubmit={quickCapture} className="flex items-center gap-2 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-2xl px-3 py-2 shadow-card focus-within:ring-2 focus-within:ring-primary/30 focus-within:border-primary/50 transition-all">
          <PenLine size={14} className="text-gray-400 shrink-0" />
          <input
            className="flex-1 bg-transparent text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400 outline-none"
            placeholder="Capture a quick task… (Enter to add to Today's Focus)"
            value={quickInput}
            onChange={e => setQuickInput(e.target.value)}
          />
          {quickInput.trim() && (
            <button type="submit" className="shrink-0 flex items-center gap-1 px-2.5 py-1 bg-primary text-white text-xs font-medium rounded-xl hover:bg-primary/90 transition-colors">
              <Send size={11} /> Add
            </button>
          )}
          <button type="button" onClick={() => navigate('/inbox')}
            className="shrink-0 text-[10px] text-gray-400 hover:text-primary transition-colors whitespace-nowrap">
            AI Parse →
          </button>
        </form>

      {/* Tabs */}

        {TABS.map(t => (
          <button key={t.id} onClick={() => setActiveTab(t.id)}
            className={`px-3.5 py-1.5 rounded-xl text-sm font-medium transition-all duration-150 ${
              activeTab === t.id
                ? 'bg-primary text-white shadow-sm'
                : 'text-gray-500 dark:text-gray-400 hover:bg-white dark:hover:bg-gray-800 hover:text-gray-800 dark:hover:text-white'
            }`}>
            {t.label}
          </button>
        ))}

        <button onClick={() => openNew({ is_today_focus: 1 })} className="btn-primary flex items-center gap-1 py-1.5 text-xs">
          <Plus size={12} /> New Task
        </button>

      {/* ── Kanban Board (drag & drop) ─────────────────────────────────── */}
      {loading ? (

          {[1,2,3,4].map(i =>
)}

      ) : (
        <>
          {activeTab === 'dashboard' && (
            <DndContext sensors={sensors} collisionDetection={closestCenter} onDragStart={onDragStart} onDragEnd={onDragEnd}>
              {/* Horizontal scrollable kanban — snaps on mobile */}

                {columns.map(col => (
                  <DroppableColumn
                    key={col.id} col={col} tasks={col.tasks}
                    onAddTask={() => openNew(
                      col.id === 'focus'      ? { is_today_focus: 1 } :
                      col.id === 'inprogress' ? { status: 'In Progress' } :
                      col.id === 'followups'  ? { is_follow_up: 1 } : {}
                    )}
                    onEdit={setEditTask}
                    onDelete={setDeleteTask}
                    onMarkDone={markDone}
                  />
                ))}

              {/* Drag overlay */}
              <DragOverlay dropAnimation={{ duration: 180, easing: 'cubic-bezier(0.18,0.67,0.6,1.22)' }}>
                {activeTask && <OverlayCard task={activeTask} />}
              </DragOverlay>
            </DndContext>
          )}

          {/* ALL TASKS — horizontal grid */}
          {activeTab === 'all' && (

                {allTasks.filter(t => t.status !== 'Done').map(task => (

 setEditTask(task)}>

{task.title}

                      <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
                      <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
                        {CATEGORIES[task.category]?.label?.split(' ')[0]}

                    {task.assignee && (

                          {task.assignee[0].toUpperCase()}

                        {task.assignee}

                    )}

                ))}

          )}

          {/* PROJECTS — horizontal grid */}
          {activeTab === 'projects' && (

                {projects.filter(p => p.status !== 'Done').map(p => (
                  <button key={p.id} onClick={() => navigate(`/projects/${p.id}`)}
                    className="card-hover text-left p-4 group">

                      <span className={`badge text-[10px] ${getCategoryClass(p.category)}`}>
                        {CATEGORIES[p.category]?.label?.split(' ')[0] || p.category}

                      <ArrowRight size={12} className="text-gray-300 group-hover:text-primary transition-colors" />

{p.name}

                      <span className={`font-semibold ${p.priority === 'Urgent' ? 'text-red-500' : p.priority === 'High' ? 'text-amber-500' : ''}`}>{p.priority}
                      {p.open_task_count || 0} tasks

                  </button>
                ))}

          )}
        </>
      )}

      {/* Modals */}
      {(showNew || editTask) && (
        <TaskModal task={editTask} projects={projects} onSave={handleSave} onClose={() => { setShowNew(false); setEditTask(null); }} />
      )}
      {deleteTask && (
        <ConfirmDialog title="Delete task?" message={`"${deleteTask.title}"`} onConfirm={handleDelete} onCancel={() => setDeleteTask(null)} />
      )}

  );
}

<div className="blob w-36 h-36 bg-pink-400 top-2 right-2"  style={{ animationDelay: '2s' }} />

<div className="blob w-28 h-28 bg-amber-300 -bottom-6 right-44" style={{ animationDelay: '4s' }} />

<div className="relative z-10 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3">

-          <div className="flex items-center gap-2.5">

-            <div className="w-9 h-9 bg-white/80 backdrop-blur rounded-xl flex items-center justify-center shadow-sm shrink-0">

-              <Zap size={17} className="text-violet-600" />

<div className="flex items-center gap-3 sm:gap-5 flex-wrap">


Clean up the now-unused `Zap` import:


Plus, User, Calendar, Zap, ArrowRight, FolderKanban,

Plus, User, Calendar, ArrowRight, FolderKanban,


import { useState, useEffect, useCallback } from 'react';
import {
  DndContext, DragOverlay, useDroppable, useDraggable,
  PointerSensor, TouchSensor, useSensor, useSensors, closestCenter
} from '@dnd-kit/core';
import {
  Plus, User, Calendar, Zap, ArrowRight, FolderKanban,
  CheckSquare, Bell, Target, AlertTriangle, MoreHorizontal, GripVertical, PenLine, Send
} from 'lucide-react';
import { Link, useNavigate } from 'react-router-dom';
import toast from 'react-hot-toast';
import api from '../api';
import TaskModal from './TaskModal';
import ConfirmDialog from './ConfirmDialog';
import { getCategoryClass, getPriorityClass, CATEGORIES, formatDate, isOverdue } from '../utils';

// ── Column config ────────────────────────────────────────────────────────────
const COLUMNS = [
  { id: 'focus',      title: "Today's Focus", color: 'text-primary',    bg: 'bg-primary/10',  border: 'border-l-primary'  },
  { id: 'inprogress', title: 'In Progress',   color: 'text-blue-600',   bg: 'bg-blue-50 dark:bg-blue-900/20',   border: 'border-l-blue-400'   },
  { id: 'followups',  title: 'Follow-ups',    color: 'text-amber-600',  bg: 'bg-amber-50 dark:bg-amber-900/20', border: 'border-l-amber-400'  },
  { id: 'open',       title: 'Open',          color: 'text-gray-500',   bg: 'bg-gray-100 dark:bg-gray-800',     border: 'border-l-gray-300'   },
];

const PRIORITY_BORDER = { Urgent:'border-l-red-500', High:'border-l-amber-400', Medium:'border-l-blue-400', Low:'border-l-green-400' };

function getColumnId(task) {
  if (task.status === 'Done') return null;
  if (task.is_today_focus)    return 'focus';
  if (task.status === 'In Progress') return 'inprogress';
  if (task.is_follow_up)      return 'followups';
  return 'open';
}

function columnUpdates(col, task) {
  const base = { ...task };
  if (col === 'focus')      return { ...base, is_today_focus: 1 };
  if (col === 'inprogress') return { ...base, status: 'In Progress', is_today_focus: 0 };
  if (col === 'followups')  return { ...base, is_follow_up: 1,  is_today_focus: 0 };
  if (col === 'open')       return { ...base, is_today_focus: 0, status: 'Open' };
  return base;
}

// ── Draggable card ───────────────────────────────────────────────────────────
function DraggableCard({ task, onEdit, onDelete, onMarkDone }) {
  const { attributes, listeners, setNodeRef, isDragging } = useDraggable({ id: task.id });
  const overdue = isOverdue(task.due_date);

  return (

          {/* Drag handle */}
          <button {...listeners} {...attributes}
            className="shrink-0 mt-0.5 text-gray-300 hover:text-gray-500 cursor-grab active:cursor-grabbing touch-none">
            <GripVertical size={14} />
          </button>

{task.title}

              <button onClick={() => onEdit(task)}
                className="shrink-0 opacity-0 group-hover:opacity-100 p-1 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-400 transition-all">
                <MoreHorizontal size={13} />
              </button>

            {task.notes &&
{task.notes}
}

              <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
                {CATEGORIES[task.category]?.label?.split(' ')[0] || task.category}

              <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
              {task.is_follow_up === 1 && Follow-up}

                {task.assignee ? (

                    {task.assignee[0].toUpperCase()}

                ) :
<User size={9} className="text-gray-400" />
}
                {task.assignee && {task.assignee}}

                {task.due_date && (
                  <span className={`flex items-center gap-0.5 text-[10px] ${overdue ? 'text-red-500 font-semibold' : 'text-gray-400'}`}>
                    {overdue && <AlertTriangle size={9} />}{formatDate(task.due_date)}

                )}
                <button onClick={() => onMarkDone(task)}
                  className="opacity-0 group-hover:opacity-100 text-[10px] px-2 py-0.5 bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400 rounded-full hover:bg-green-200 transition-all font-medium">
                  Done
                </button>

  );
}

// ── Drag overlay card (ghost while dragging) ─────────────────────────────────
function OverlayCard({ task }) {
  return (

{task.title}

        <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
        <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
          {CATEGORIES[task.category]?.label?.split(' ')[0]}

  );
}

// ── Droppable column ─────────────────────────────────────────────────────────
function DroppableColumn({ col, tasks, stats, onAddTask, onEdit, onDelete, onMarkDone }) {
  const { setNodeRef, isOver } = useDroppable({ id: col.id });

  return (

      {/* Column header */}

{col.title}

          <span className={`text-xs font-bold px-2 py-0.5 rounded-full ${col.bg} ${col.color}`}>{tasks.length}

        <button onClick={onAddTask}
          className="w-6 h-6 rounded-lg bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 flex items-center justify-center text-gray-400 hover:text-primary hover:border-primary transition-all shadow-sm">
          <Plus size={12} />
        </button>

      {/* Cards */}

        {tasks.length === 0 ? (

Drop here

        ) : (
          tasks.map(task => (
            <DraggableCard key={task.id} task={task} onEdit={onEdit} onDelete={onDelete} onMarkDone={onMarkDone} />
          ))
        )}

  );
}

// ── Main Dashboard ───────────────────────────────────────────────────────────
export default function Today() {
  const [allTasks, setAllTasks]     = useState([]);
  const [stats, setStats]           = useState(null);
  const [projects, setProjects]     = useState([]);
  const [loading, setLoading]       = useState(true);
  const [editTask, setEditTask]     = useState(null);
  const [deleteTask, setDeleteTask] = useState(null);
  const [showNew, setShowNew]       = useState(false);
  const [newDefaults, setNewDefaults] = useState({});
  const [activeTask, setActiveTask] = useState(null);
  const [activeTab, setActiveTab]   = useState('dashboard');
  const [quickInput, setQuickInput] = useState('');
  const navigate = useNavigate();

  const today = new Date();
  const dateLabel = today.toLocaleDateString('en-GB', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });

  const load = useCallback(async () => {
    try {
      const [tasks, st, pr] = await Promise.all([api.get('/tasks'), api.get('/tasks/stats'), api.get('/projects')]);
      setAllTasks(tasks); setStats(st); setProjects(pr);
    } finally { setLoading(false); }
  }, []);

  useEffect(() => { load(); }, [load]);

  // Bucket tasks into columns
  const columns = COLUMNS.map(col => ({
    ...col,
    tasks: allTasks.filter(t => getColumnId(t) === col.id),
  }));

  // DnD sensors — support mouse, touch (mobile), delay to prevent accidental drags
  const sensors = useSensors(
    useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),
    useSensor(TouchSensor,   { activationConstraint: { delay: 180, tolerance: 6 } })
  );

  const onDragStart = ({ active }) => {
    setActiveTask(allTasks.find(t => t.id === active.id) || null);
  };

  const onDragEnd = async ({ active, over }) => {
    setActiveTask(null);
    if (!over) return;
    const task = allTasks.find(t => t.id === active.id);
    if (!task) return;
    const targetCol = COLUMNS.find(c => c.id === over.id);
    if (!targetCol || getColumnId(task) === targetCol.id) return;

    // Optimistic update
    const updated = columnUpdates(targetCol.id, task);
    setAllTasks(prev => prev.map(t => t.id === task.id ? { ...t, ...updated } : t));
    try {
      await api.put(`/tasks/${task.id}`, updated);
      toast.success(`Moved to "${targetCol.title}"`);
    } catch (e) {
      toast.error('Failed to move task'); load();
    }
  };

  const markDone = async (task) => {
    setAllTasks(prev => prev.map(t => t.id === task.id ? { ...t, status: 'Done' } : t));
    await api.patch(`/tasks/${task.id}/status`, { status: 'Done' });
    toast.success('Marked as done');
  };

  const openNew = (defaults = {}) => { setNewDefaults(defaults); setShowNew(true); }

  const quickCapture = async (e) => {
    e.preventDefault();
    const title = quickInput.trim();
    if (!title) return;
    try {
      await api.post('/tasks', { title, priority: 'Medium', status: 'Open', category: 'adhoc', is_today_focus: 1 });
      setQuickInput('');
      toast.success('Task added to Today\'s Focus');
      load();
    } catch { toast.error('Failed to add task'); }
  };;

  const handleSave = async (form) => {
    try {
      if (editTask?.id) { await api.put(`/tasks/${editTask.id}`, form); toast.success('Task updated'); }
      else { await api.post('/tasks', { ...form, ...newDefaults }); toast.success('Task added'); }
      setEditTask(null); setShowNew(false); load();
    } catch (e) { toast.error(e.message); }
  };

  const handleDelete = async () => {
    await api.delete(`/tasks/${deleteTask.id}`);
    toast.success('Deleted'); setDeleteTask(null); load();
  };

  const TABS = [
    { id: 'dashboard', label: 'Dashboard' },
    { id: 'all',       label: 'All Tasks'      },
    { id: 'projects',  label: 'Projects'       },
  ];

  return (

      {/* Hero banner */}

DEWA AI Workspace

{dateLabel}

            {[
              { label: 'Projects',     value: stats?.activeProjects ?? '—', Icon: FolderKanban },
              { label: 'Open Tasks',   value: stats?.openTasks      ?? '—', Icon: CheckSquare  },
              { label: 'Follow-ups',   value: stats?.openFollowUps  ?? '—', Icon: Bell         },
              { label: "Today's Focus",value: stats?.todayFocus     ?? '—', Icon: Target       },
            ].map(({ label, value, Icon }) => (

{value}

                  <Icon size={9} />{label}

            ))}

      {/* Quick Capture bar */}

        <form onSubmit={quickCapture} className="flex items-center gap-2 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-2xl px-3 py-2 shadow-card focus-within:ring-2 focus-within:ring-primary/30 focus-within:border-primary/50 transition-all">
          <PenLine size={14} className="text-gray-400 shrink-0" />
          <input
            className="flex-1 bg-transparent text-sm text-gray-800 dark:text-gray-100 placeholder-gray-400 outline-none"
            placeholder="Capture a quick task… (Enter to add to Today's Focus)"
            value={quickInput}
            onChange={e => setQuickInput(e.target.value)}
          />
          {quickInput.trim() && (
            <button type="submit" className="shrink-0 flex items-center gap-1 px-2.5 py-1 bg-primary text-white text-xs font-medium rounded-xl hover:bg-primary/90 transition-colors">
              <Send size={11} /> Add
            </button>
          )}
          <button type="button" onClick={() => navigate('/inbox')}
            className="shrink-0 text-[10px] text-gray-400 hover:text-primary transition-colors whitespace-nowrap">
            AI Parse →
          </button>
        </form>

      {/* Tabs */}

        {TABS.map(t => (
          <button key={t.id} onClick={() => setActiveTab(t.id)}
            className={`px-3.5 py-1.5 rounded-xl text-sm font-medium transition-all duration-150 ${
              activeTab === t.id
                ? 'bg-primary text-white shadow-sm'
                : 'text-gray-500 dark:text-gray-400 hover:bg-white dark:hover:bg-gray-800 hover:text-gray-800 dark:hover:text-white'
            }`}>
            {t.label}
          </button>
        ))}

        <button onClick={() => openNew({ is_today_focus: 1 })} className="btn-primary flex items-center gap-1 py-1.5 text-xs">
          <Plus size={12} /> New Task
        </button>

      {/* ── Kanban Board (drag & drop) ─────────────────────────────────── */}
      {loading ? (

          {[1,2,3,4].map(i =>
)}

      ) : (
        <>
          {activeTab === 'dashboard' && (
            <DndContext sensors={sensors} collisionDetection={closestCenter} onDragStart={onDragStart} onDragEnd={onDragEnd}>
              {/* Horizontal scrollable kanban — snaps on mobile */}

                {columns.map(col => (
                  <DroppableColumn
                    key={col.id} col={col} tasks={col.tasks}
                    onAddTask={() => openNew(
                      col.id === 'focus'      ? { is_today_focus: 1 } :
                      col.id === 'inprogress' ? { status: 'In Progress' } :
                      col.id === 'followups'  ? { is_follow_up: 1 } : {}
                    )}
                    onEdit={setEditTask}
                    onDelete={setDeleteTask}
                    onMarkDone={markDone}
                  />
                ))}

              {/* Drag overlay */}
              <DragOverlay dropAnimation={{ duration: 180, easing: 'cubic-bezier(0.18,0.67,0.6,1.22)' }}>
                {activeTask && <OverlayCard task={activeTask} />}
              </DragOverlay>
            </DndContext>
          )}

          {/* ALL TASKS — horizontal grid */}
          {activeTab === 'all' && (

                {allTasks.filter(t => t.status !== 'Done').map(task => (

 setEditTask(task)}>

{task.title}

                      <span className={`badge text-[10px] py-0.5 ${getPriorityClass(task.priority)}`}>{task.priority}
                      <span className={`badge text-[10px] py-0.5 ${getCategoryClass(task.category)}`}>
                        {CATEGORIES[task.category]?.label?.split(' ')[0]}

                    {task.assignee && (

                          {task.assignee[0].toUpperCase()}

                        {task.assignee}

                    )}

                ))}

          )}

          {/* PROJECTS — horizontal grid */}
          {activeTab === 'projects' && (

                {projects.filter(p => p.status !== 'Done').map(p => (
                  <button key={p.id} onClick={() => navigate(`/projects/${p.id}`)}
                    className="card-hover text-left p-4 group">

                      <span className={`badge text-[10px] ${getCategoryClass(p.category)}`}>
                        {CATEGORIES[p.category]?.label?.split(' ')[0] || p.category}

                      <ArrowRight size={12} className="text-gray-300 group-hover:text-primary transition-colors" />

{p.name}

                      <span className={`font-semibold ${p.priority === 'Urgent' ? 'text-red-500' : p.priority === 'High' ? 'text-amber-500' : ''}`}>{p.priority}
                      {p.open_task_count || 0} tasks

                  </button>
                ))}

          )}
        </>
      )}

      {/* Modals */}
      {(showNew || editTask) && (
        <TaskModal task={editTask} projects={projects} onSave={handleSave} onClose={() => { setShowNew(false); setEditTask(null); }} />
      )}
      {deleteTask && (
        <ConfirmDialog title="Delete task?" message={`"${deleteTask.title}"`} onConfirm={handleDelete} onCancel={() => setDeleteTask(null)} />
      )}

  );
}

-  Plus, User, Calendar, Zap, ArrowRight, FolderKanban,

+  Plus, User, Calendar, ArrowRight, FolderKanban,


Done:
- **Sidebar** — "DEWA · Senior Manager" subtitle removed, now just shows **MY Workspace**
- **Dashboard hero bar** — the purple Zap icon box removed, title text remains


[Image #1]
expand this utilize the empty space


[Image: source: /var/folders/vn/5x83t3r1077gs8kcsydcn2fw0000gn/T/TemporaryItems/NSIRD_screencaptureui_Zs00mQ/Screenshot 2026-04-05 at 1.58.04 PM.png]


This is the kanban board — the columns have a fixed 260px width leaving dead space to the right. I'll make them stretch to fill the full available width.


129	// ── Droppable column ─────────────────────────────────────────────────────────
130	function DroppableColumn({ col, tasks, stats, onAddTask, onEdit, onDelete, onMarkDone }) {
131	  const { setNodeRef, isOver } = useDroppable({ id: col.id });
132
133	  return (
134

138	      {/* Column header */}
139

140

141
{col.title}

142	          <span className={`text-xs font-bold px-2 py-0.5 rounded-full ${col.bg} ${col.color}`}>{tasks.length}
143

144	        <button onClick={onAddTask}
145	          className="w-6 h-6 rounded-lg bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 flex items-center justify-center text-gray-400 hover:text-primary hover:border-primary transition-all shadow-sm">
146	          <Plus size={12} />
147	        </button>
148

// ── Droppable column ─────────────────────────────────────────────────────────
function DroppableColumn({ col, tasks, stats, onAddTask, onEdit, onDelete, onMarkDone }) {
  const { setNodeRef, isOver } = useDroppable({ id: col.id });

  return (

      {/* Column header */}

{col.title}

          <span className={`text-xs font-bold px-2 py-0.5 rounded-full ${col.bg} ${col.color}`}>{tasks.length}

        <button onClick={onAddTask}
          className="w-6 h-6 rounded-lg bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 flex items-center justify-center text-gray-400 hover:text-primary hover:border-primary transition-all shadow-sm">
          <Plus size={12} />
        </button>