{"id":57542,"date":"2025-12-03T15:51:52","date_gmt":"2025-12-03T10:21:52","guid":{"rendered":"https:\/\/officechai.com\/?page_id=57542"},"modified":"2025-12-05T16:15:25","modified_gmt":"2025-12-05T10:45:25","slug":"ai-layoffs-tracker","status":"publish","type":"page","link":"https:\/\/officechai.com\/ai-layoffs-tracker\/","title":{"rendered":""},"content":{"rendered":"\n<!-- === AI LAYOFFS TRACKER (Enhanced with Sorting, Scroll, Charts) === -->\n<style>\n  body {\n    font-family: 'Inter', system-ui, sans-serif;\n    background: #f8fafc;\n    color: #1e293b;\n  }\n\n  .tracker-container {\n    max-width: 1100px;\n    margin: 2rem auto;\n    padding: 1rem;\n  }\n\n  h1 {\n    font-size: 2rem;\n    font-weight: 700;\n    margin-bottom: 0.5rem;\n  }\n\n  p.intro {\n    color: #475569;\n    margin-bottom: 2rem;\n    line-height: 1.6;\n  }\n\n  \/* === Metric cards === *\/\n  .stats-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n    gap: 1rem;\n    margin-bottom: 2rem;\n  }\n\n  .stat-card {\n    color: #fff;\n    border-radius: 14px;\n    padding: 1.5rem 1rem;\n    text-align: center;\n    box-shadow: 0 3px 8px rgba(0,0,0,0.15);\n    background: linear-gradient(135deg, #ea580c, #9a3412);\n  }\n\n  .stat-card h2 {\n    margin: 0;\n    font-size: 2.4rem;\n    font-weight: 700;\n  }\n\n  .stat-card span {\n    display: block;\n    opacity: 0.95;\n    margin-top: 0.6rem;\n    font-size: 1.4rem;\n    font-weight: 600;\n    letter-spacing: 0.3px;\n  }\n\n  \/* === Search & Table === *\/\n  .search-box {\n    margin-bottom: 1rem;\n    text-align: right;\n  }\n\n  .search-box input {\n    padding: 0.6rem 0.8rem;\n    width: 260px;\n    border: 1px solid #cbd5e1;\n    border-radius: 8px;\n  }\n\n  .table-responsive {\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    margin-bottom: 1rem;\n  }\n\n  .table-scroll {\n    max-height: 600px;\n    overflow-y: auto;\n    border-radius: 12px;\n  }\n\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    background: #fff;\n    border-radius: 12px;\n    overflow: hidden;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n  }\n\n  th, td {\n    padding: 12px 14px;\n    text-align: left;\n  }\n\n  th {\n    background: #f1f5f9;\n    font-weight: 600;\n    text-transform: uppercase;\n    font-size: 0.85rem;\n    color: #334155;\n    cursor: pointer;\n  }\n\n  th.sorted-asc::after { content: \" \u2191\"; }\n  th.sorted-desc::after { content: \" \u2193\"; }\n\n  tr:nth-child(even) {\n    background: #f9fafb;\n  }\n\n  .footer-note {\n    margin-top: 2rem;\n    color: #64748b;\n    font-size: 0.9rem;\n    text-align: center;\n  }\n\n  a.source-link {\n    color: #2563eb;\n    text-decoration: none;\n  }\n  a.source-link:hover {\n    text-decoration: underline;\n  }\n\n  canvas {\n    margin-top: 2rem;\n    background: #fff;\n    padding: 1rem;\n    border-radius: 12px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n  }\n<\/style>\n\n<div class=\"tracker-container\">\n  <h1>AI Layoffs Tracker<\/h1>\n\n  <p class=\"intro\">\n    Tracking AI-related layoffs across all companies and sectors.\n  <\/p>\n\n  <div class=\"stats-grid\" id=\"stats\">\n    <div class=\"stat-card\">\n      <h2 id=\"totalJobs\">0<\/h2>\n      <span>Total Job Losses<\/span>\n    <\/div>\n    <div class=\"stat-card\">\n      <h2 id=\"companies\">0<\/h2>\n      <span>Companies Impacted<\/span>\n    <\/div>\n    <div class=\"stat-card\">\n      <h2 id=\"events\">0<\/h2>\n      <span>Layoff Events<\/span>\n    <\/div>\n  <\/div>\n\n  <div class=\"search-box\">\n    <input type=\"text\" id=\"search\" placeholder=\"Search company, industry, or location...\" \/>\n  <\/div>\n\n  <div class=\"table-responsive\">\n    <div class=\"table-scroll\">\n      <table id=\"layoffsTable\">\n        <thead>\n          <tr>\n            <th>Date<\/th>\n            <th>Company<\/th>\n            <th>Employees<\/th>\n            <th>Industry<\/th>\n            <th>Location<\/th>\n            <th>Roles<\/th>\n            <th>Reason<\/th>\n            <th>Source<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"tableBody\"><\/tbody>\n      <\/table>\n    <\/div>\n  <\/div>\n\n  <canvas id=\"eventsChart\" height=\"200\"><\/canvas>\n  <canvas id=\"jobsChart\" height=\"200\"><\/canvas>\n\n  <p class=\"footer-note\">\n    Verified from public sources; for informational use only.\n  <\/p>\n<\/div>\n\n<!-- Chart.js CDN -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\n\n<script>\n  const sheetURL = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQRTyh2mdemvaZMn8zAPmQOeqRkW7hK6TccNVaxA-vQToTDNukCm95vlAJgOTqQzYJzCrxvPi6b-HWC\/pub?output=csv\";\n\n  \/\/ --- CSV to array ---\n  function csvToArray(str) {\n    const rows = str.trim().split(\/\\r?\\n\/);\n    const headers = rows.shift().split(',');\n    return rows.map(r => {\n      const vals = r.split(',');\n      const obj = {};\n      headers.forEach((h, i) => obj[h.trim()] = vals[i] ? vals[i].trim() : '');\n      return obj;\n    });\n  }\n\n  const tbody = document.getElementById(\"tableBody\");\n\n  \/\/ --- Render table (all rows) ---\n  function renderTable(data) {\n    tbody.innerHTML = data.map(row => `\n      <tr>\n        <td>${row.Date}<\/td>\n        <td>${row.Company}<\/td>\n        <td>${row.Employees}<\/td>\n        <td>${row.Industry}<\/td>\n        <td>${row.Location}<\/td>\n        <td>${row.Roles}<\/td>\n        <td>${row.Reason}<\/td>\n        <td>${row.Source ? `<a class=\"source-link\" href=\"${row.Source}\" target=\"_blank\" rel=\"nofollow\">Link<\/a>` : ''}<\/td>\n      <\/tr>\n    `).join(\"\");\n  }\n\n \/\/ --- Parse dd\/mm\/yyyy -> YYYY-MM for grouping ---\nfunction parseToMonthKey(dateStr) {\n  if (!dateStr || !\/^\\d{1,2}\\\/\\d{1,2}\\\/\\d{4}$\/.test(dateStr)) return null;\n  const [day, month, year] = dateStr.split('\/').map(Number);\n  const mm = String(month).padStart(2, '0');\n  return `${year}-${mm}`;\n}\n\n\n  fetch(sheetURL)\n    .then(r => r.text())\n    .then(csv => {\n      const data = csvToArray(csv);\n      let sortDirection = 1;\n      renderTable(data);\n\n      \/\/ --- Stats ---\n      const totalJobs = data.reduce((sum, d) => {\n        const val = d.Employees.includes('%') ? NaN : parseInt(d.Employees.replace(\/[^0-9]\/g, ''), 10);\n        return sum + (isNaN(val) ? 0 : val);\n      }, 0);\n      const companies = new Set(data.map(d => d.Company)).size;\n      const events = data.length;\n      document.getElementById(\"totalJobs\").textContent = totalJobs.toLocaleString();\n      document.getElementById(\"companies\").textContent = companies;\n      document.getElementById(\"events\").textContent = events;\n\n      \/\/ --- Search ---\n      document.getElementById(\"search\").addEventListener(\"input\", e => {\n        const q = e.target.value.toLowerCase();\n        const filtered = data.filter(d =>\n          Object.values(d).some(v => v.toLowerCase().includes(q))\n        );\n        renderTable(filtered);\n      });\n\n      \/\/ --- Sort toggle ---\n      document.querySelectorAll(\"#layoffsTable th\").forEach((th, idx) => {\n        th.addEventListener(\"click\", () => {\n          const key = Object.keys(data[0])[idx];\n          const isNumeric = key === \"Employees\";\n          const sorted = [...data].sort((a, b) => {\n            let valA = a[key] || \"\";\n            let valB = b[key] || \"\";\n            if (isNumeric) {\n              valA = parseInt(valA.replace(\/[^0-9]\/g, ''), 10) || 0;\n              valB = parseInt(valB.replace(\/[^0-9]\/g, ''), 10) || 0;\n            }\n            return (valA > valB ? 1 : valA < valB ? -1 : 0) * sortDirection;\n          });\n          sortDirection *= -1;\n          document.querySelectorAll(\"#layoffsTable th\").forEach(h => h.classList.remove('sorted-asc', 'sorted-desc'));\n          th.classList.add(sortDirection === 1 ? 'sorted-asc' : 'sorted-desc');\n          renderTable(sorted);\n        });\n      });\n\n      \/\/ --- Charts ---\n      const monthly = {};\n      data.forEach(d => {\n        const key = parseToMonthKey(d.Date);\n        if (!key) return;\n        const emp = d.Employees.includes('%') ? 0 : parseInt(d.Employees.replace(\/[^0-9]\/g, ''), 10) || 0;\n        if (!monthly[key]) monthly[key] = { count: 0, jobs: 0 };\n        monthly[key].count++;\n        monthly[key].jobs += emp;\n      });\n\n      const months = Object.keys(monthly).sort();\n      const eventsOverTime = months.map(m => monthly[m].count);\n      const jobsOverTime = months.map(m => monthly[m].jobs);\n\n      if (months.length > 0) {\n        new Chart(document.getElementById(\"eventsChart\"), {\n          type: 'line',\n          data: {\n            labels: months,\n            datasets: [{\n              label: 'Layoff Events per Month',\n              data: eventsOverTime,\n              borderColor: '#ea580c',\n              backgroundColor: 'rgba(234,88,12,0.15)',\n              tension: 0.3,\n              fill: true\n            }]\n          },\n          options: { responsive: true, scales: { y: { beginAtZero: true } } }\n        });\n\n        new Chart(document.getElementById(\"jobsChart\"), {\n          type: 'line',\n          data: {\n            labels: months,\n            datasets: [{\n              label: 'Layoff Numbers per Month',\n              data: jobsOverTime,\n              borderColor: '#9a3412',\n              backgroundColor: 'rgba(154,52,18,0.15)',\n              tension: 0.3,\n              fill: true\n            }]\n          },\n          options: { responsive: true, scales: { y: { beginAtZero: true } } }\n        });\n      } else {\n        document.getElementById(\"eventsChart\").outerHTML = \"<p>No valid date data for charts.<\/p>\";\n        document.getElementById(\"jobsChart\").remove();\n      }\n    })\n    .catch(err => {\n      tbody.innerHTML = `<tr><td colspan=\"8\">Error loading data. Check your Google Sheet URL.<\/td><\/tr>`;\n      console.error(err);\n    });\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>AI Layoffs Tracker Tracking AI-related layoffs across all companies and sectors. 0 Total Job Losses 0 Companies Impacted 0 Layoff Events Date Company&#8230;<\/p>\n","protected":false},"author":1,"featured_media":57631,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-fullwidth.php","meta":{"footnotes":""},"class_list":["post-57542","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>- OfficeChai<\/title>\n<meta name=\"description\" content=\"Tracking AI layoffs across companies, sectors and industries around the world.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/officechai.com\/ai-layoffs-tracker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"- OfficeChai\" \/>\n<meta property=\"og:description\" content=\"Tracking AI layoffs across companies, sectors and industries around the world.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/officechai.com\/ai-layoffs-tracker\/\" \/>\n<meta property=\"og:site_name\" content=\"OfficeChai\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/OfficeChai\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-05T10:45:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@OfficeChai\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/officechai.com\/ai-layoffs-tracker\/\",\"url\":\"https:\/\/officechai.com\/ai-layoffs-tracker\/\",\"name\":\"- OfficeChai\",\"isPartOf\":{\"@id\":\"https:\/\/officechai.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1\",\"datePublished\":\"2025-12-03T10:21:52+00:00\",\"dateModified\":\"2025-12-05T10:45:25+00:00\",\"description\":\"Tracking AI layoffs across companies, sectors and industries around the world.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/officechai.com\/ai-layoffs-tracker\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1\",\"width\":1024,\"height\":1024,\"caption\":\"ai layoffs tracker\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/officechai.com\/#website\",\"url\":\"https:\/\/officechai.com\/\",\"name\":\"OfficeChai\",\"description\":\"Startups, Businesses And Careers\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/officechai.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"- OfficeChai","description":"Tracking AI layoffs across companies, sectors and industries around the world.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/officechai.com\/ai-layoffs-tracker\/","og_locale":"en_US","og_type":"article","og_title":"- OfficeChai","og_description":"Tracking AI layoffs across companies, sectors and industries around the world.","og_url":"https:\/\/officechai.com\/ai-layoffs-tracker\/","og_site_name":"OfficeChai","article_publisher":"https:\/\/www.facebook.com\/OfficeChai\/","article_modified_time":"2025-12-05T10:45:25+00:00","og_image":[{"width":1024,"height":1024,"url":"http:\/\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@OfficeChai","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/officechai.com\/ai-layoffs-tracker\/","url":"https:\/\/officechai.com\/ai-layoffs-tracker\/","name":"- OfficeChai","isPartOf":{"@id":"https:\/\/officechai.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage"},"image":{"@id":"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1","datePublished":"2025-12-03T10:21:52+00:00","dateModified":"2025-12-05T10:45:25+00:00","description":"Tracking AI layoffs across companies, sectors and industries around the world.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/officechai.com\/ai-layoffs-tracker\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/officechai.com\/ai-layoffs-tracker\/#primaryimage","url":"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1","contentUrl":"https:\/\/i0.wp.com\/officechai.com\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-03-at-15.50.34.jpeg?fit=1024%2C1024&ssl=1","width":1024,"height":1024,"caption":"ai layoffs tracker"},{"@type":"WebSite","@id":"https:\/\/officechai.com\/#website","url":"https:\/\/officechai.com\/","name":"OfficeChai","description":"Startups, Businesses And Careers","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/officechai.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_shortlink":"https:\/\/wp.me\/P685C6-eY6","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/pages\/57542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/comments?post=57542"}],"version-history":[{"count":14,"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/pages\/57542\/revisions"}],"predecessor-version":[{"id":57671,"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/pages\/57542\/revisions\/57671"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/media\/57631"}],"wp:attachment":[{"href":"https:\/\/officechai.com\/wp-json\/wp\/v2\/media?parent=57542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}