{"id":7,"date":"2026-03-27T13:27:30","date_gmt":"2026-03-27T13:27:30","guid":{"rendered":"https:\/\/track.chorerinc.com\/?page_id=7"},"modified":"2026-03-30T15:57:45","modified_gmt":"2026-03-30T15:57:45","slug":"home","status":"publish","type":"page","link":"https:\/\/track.chorerinc.com\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7\" class=\"elementor elementor-7\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a8603fc e-flex e-con-boxed e-con e-parent\" data-id=\"a8603fc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4cef5dd elementor-widget elementor-widget-html\" data-id=\"4cef5dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Chorer Inc.<\/title>\r\n\r\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\r\n\r\n<style>\r\n.tab-btn { padding: 0.75rem; flex:1; text-center font-medium cursor:pointer; transition: all 0.3s; }\r\n.tab-btn.active { border-bottom: 3px solid; color: white; }\r\n\r\n.tab-dashboard.active { background-color: #3b82f6; border-color:#2563eb; }\r\n.tab-outreach.active { background-color: #10b981; border-color:#059669; }\r\n.tab-tasks.active { background-color: #f59e0b; border-color:#d97706; }\r\n\r\n.tab-content { display:none; }\r\n.tab-content.active { display:block; }\r\n\r\ntd, th { white-space: nowrap; }\r\n\r\n.spinner-inline {\r\n  border: 3px solid rgba(0,0,0,0.1);\r\n  border-left-color: #3b82f6;\r\n  border-radius: 50%;\r\n  width: 20px; height: 20px;\r\n  animation: spin 1s linear infinite;\r\n  display: inline-block;\r\n  margin-left: 0.5rem;\r\n  vertical-align: middle;\r\n}\r\n@keyframes spin { 100% { transform: rotate(360deg); } }\r\n\r\n@media (max-width:640px) {\r\n.table-container table, .table-container thead, .table-container tbody, .table-container th, .table-container td, .table-container tr { display: block; }\r\n.table-container thead tr { display: none; }\r\n.table-container tr { margin-bottom: 1rem; background: #fff; padding: 0.75rem; border-radius: 0.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\r\n.table-container td { display: flex; justify-content: space-between; padding: 0.5rem 0; }\r\n.table-container td::before { content: attr(data-label); font-weight: bold; color:#555; }\r\n}\r\n\r\n.modal { display:none; }\r\n.modal.active { display:flex; justify-content:center; align-items:center; position:fixed; inset:0; background:rgba(0,0,0,0.5); z-index:50; }\r\n.modal-content { background:white; padding:1.5rem; border-radius:1rem; width:90%; max-width:400px; position:relative; }\r\n.modal-close { position:absolute; top:0.5rem; right:0.5rem; font-size:1.25rem; cursor:pointer; color:#999; transition:0.2s;}\r\n.modal-close:hover { color:#333; }\r\n<\/style>\r\n<\/head>\r\n\r\n<body class=\"bg-slate-50 text-slate-800\">\r\n\r\n<header class=\"bg-white p-4 flex justify-between shadow\">\r\n<h1 class=\"font-black text-lg\">Chorer Inc.<\/h1>\r\n<div id=\"status\" class=\"text-xs font-bold text-amber-500 flex items-center gap-2\">\r\n<span id=\"status-text\">Connecting...<\/span>\r\n<\/div>\r\n<\/header>\r\n\r\n<nav class=\"flex justify-around bg-white border-b text-sm\">\r\n<div class=\"tab-btn tab-dashboard active\" onclick=\"tab('dashboard')\">Dashboard<\/div>\r\n<div class=\"tab-btn tab-outreach\" onclick=\"tab('outreach')\">Outreach<\/div>\r\n<div class=\"tab-btn tab-tasks\" onclick=\"tab('tasks')\">Tasks<\/div>\r\n<\/nav>\r\n\r\n<main class=\"p-4 max-w-7xl mx-auto space-y-6\">\r\n\r\n<div id=\"dashboard\" class=\"tab-content active space-y-6\">\r\n<div class=\"bg-white p-6 rounded-xl shadow\">\r\n<h2 class=\"text-xs text-slate-400\">Closed Deals<\/h2>\r\n<div id=\"closed\" class=\"text-5xl font-black text-blue-600\">0<\/div>\r\n<\/div>\r\n<div class=\"grid md:grid-cols-2 gap-6\">\r\n<canvas id=\"chart1\"><\/canvas>\r\n<canvas id=\"chart2\"><\/canvas>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"outreach\" class=\"tab-content\">\r\n<button onclick=\"openModal('oModal')\" class=\"bg-blue-600 text-white px-4 py-3 rounded-xl mb-4\">\r\n+ Add Lead\r\n<\/button>\r\n\r\n<div class=\"bg-white rounded-xl shadow overflow-hidden border table-container\">\r\n<table class=\"min-w-full text-sm\">\r\n<thead class=\"bg-slate-100 text-slate-600 uppercase text-xs\">\r\n<tr>\r\n<th class=\"p-3 text-left\">Date<\/th>\r\n<th class=\"p-3 text-left\">Name<\/th>\r\n<th class=\"p-3 text-left\">Channel<\/th>\r\n<th class=\"p-3 text-left\">Status<\/th>\r\n<th class=\"p-3 text-left\">Outcome<\/th>\r\n<th><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody id=\"otable\" class=\"divide-y\"><\/tbody>\r\n<\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"tasks\" class=\"tab-content\">\r\n<button onclick=\"openModal('tModal')\" class=\"bg-blue-600 text-white px-4 py-3 rounded-xl mb-4\">\r\n+ Add Task\r\n<\/button>\r\n\r\n<div class=\"bg-white rounded-xl shadow overflow-hidden border table-container\">\r\n<table class=\"min-w-full text-sm table-auto\">\r\n<thead class=\"bg-slate-100 text-slate-600 uppercase text-xs\">\r\n<tr>\r\n<th class=\"p-3 text-left\">Date<\/th>\r\n<th class=\"p-3 text-left\">Objective<\/th>\r\n<th class=\"p-3 text-left\">Tasks<\/th>\r\n<th class=\"p-3 text-left\">Blockers<\/th>\r\n<th class=\"p-3 text-left\">Tomorrow<\/th>\r\n<th><\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody id=\"ttable\" class=\"divide-y\"><\/tbody>\r\n<\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<!-- Outreach Modal -->\r\n<div id=\"oModal\" class=\"modal\">\r\n<div class=\"modal-content\">\r\n<span class=\"modal-close\" onclick=\"closeModal('oModal')\">&times;<\/span>\r\n<h2 class=\"font-bold text-lg mb-3\">New Lead<\/h2>\r\n<form id=\"oForm\" class=\"space-y-3\">\r\n<input name=\"date\" type=\"date\" required class=\"w-full border p-2 rounded\">\r\n<input name=\"name\" placeholder=\"Client \/ Lead Name\" required class=\"w-full border p-2 rounded\">\r\n<div class=\"grid grid-cols-2 gap-2\">\r\n<select name=\"channel\" class=\"border p-2 rounded\">\r\n<option>LinkedIn<\/option>\r\n<option>Email<\/option>\r\n<option>Call<\/option>\r\n<option>Referral<\/option>\r\n<option>Website<\/option>\r\n<option>Other<\/option>\r\n<\/select>\r\n<select name=\"status\" class=\"border p-2 rounded\">\r\n<option>Initial Outreach<\/option>\r\n<option>Follow-up<\/option>\r\n<option>Negotiation<\/option>\r\n<option>Contract Sent<\/option>\r\n<option>On Hold<\/option>\r\n<option>Other<\/option>\r\n<\/select>\r\n<\/div>\r\n<label class=\"flex items-center gap-2\">\r\n<input type=\"checkbox\" name=\"closed\"> Closed Deal\r\n<\/label>\r\n<button id=\"oSaveBtn\" class=\"bg-blue-600 text-white w-full p-2 rounded\">Save<\/button>\r\n<\/form>\r\n<\/div>\r\n<\/div>\r\n\r\n<!-- Task Modal -->\r\n<div id=\"tModal\" class=\"modal\">\r\n<div class=\"modal-content\">\r\n<span class=\"modal-close\" onclick=\"closeModal('tModal')\">&times;<\/span>\r\n<h2 class=\"font-bold text-lg mb-3\">Daily Task Log<\/h2>\r\n<form id=\"tForm\" class=\"space-y-3\">\r\n<input name=\"objective\" placeholder=\"Main Objective\" required class=\"w-full border p-2 rounded\">\r\n<textarea name=\"tasks\" placeholder=\"Tasks Completed\" required class=\"w-full border p-2 rounded\"><\/textarea>\r\n<textarea name=\"blockers\" placeholder=\"Blockers \/ Challenges\" class=\"w-full border p-2 rounded\"><\/textarea>\r\n<textarea name=\"tomorrow\" placeholder=\"Plan for Tomorrow\" class=\"w-full border p-2 rounded\"><\/textarea>\r\n<button id=\"tSaveBtn\" class=\"bg-blue-600 text-white w-full p-2 rounded\">Save<\/button>\r\n<\/form>\r\n<\/div>\r\n<\/div>\r\n\r\n<!-- Login Modal -->\r\n<div id=\"loginModal\" class=\"modal active\">\r\n<div class=\"modal-content\">\r\n<h2 class=\"font-bold text-xl mb-4\">Login<\/h2>\r\n<form id=\"loginForm\" class=\"space-y-3\">\r\n<input type=\"text\" name=\"username\" placeholder=\"Username\" required class=\"w-full border p-2 rounded\">\r\n<input type=\"password\" name=\"password\" placeholder=\"Password\" required class=\"w-full border p-2 rounded\">\r\n<button class=\"bg-blue-600 text-white w-full p-2 rounded\">Login<\/button>\r\n<\/form>\r\n<\/div>\r\n<\/div>\r\n\r\n<script>\r\nconst URL=\"https:\/\/script.google.com\/macros\/s\/AKfycbzn5AEZLHzjzDH65KPDDPJsvVdSlNgXerYyCi0xOgpdghPtV80JlaGr6O0N7NUuybOlGQ\/exec\";\r\n\r\nlet outreach=JSON.parse(localStorage.getItem(\"outreach\")||\"[]\");\r\nlet tasks=JSON.parse(localStorage.getItem(\"tasks\")||\"[]\");\r\n\r\nfunction rowSpinner(sel, show){\r\n  let next = sel.nextElementSibling;\r\n  if(show){\r\n    if(!next || !next.classList.contains('spinner-inline')){\r\n      let s = document.createElement('span');\r\n      s.className='spinner-inline';\r\n      sel.parentNode.appendChild(s);\r\n    }\r\n  } else if(next && next.classList.contains('spinner-inline')){\r\n    next.remove();\r\n  }\r\n}\r\n\r\nasync function load(){\r\n  try{\r\n    const res=await fetch(URL+\"?t=\"+Date.now());\r\n    const data=await res.json();\r\n    outreach=data.outreach||outreach;\r\n    tasks=data.tasks||tasks;\r\n    saveLocal(); render();\r\n    status(\"LIVE\",\"green\");\r\n  }catch{\r\n    status(\"OFFLINE\",\"red\");\r\n  }\r\n}\r\n\r\nfunction saveLocal(){ \r\n  localStorage.setItem(\"outreach\",JSON.stringify(outreach));\r\n  localStorage.setItem(\"tasks\",JSON.stringify(tasks));\r\n}\r\n\r\nasync function save(){ \r\n  try{ render(); await fetch(URL,{method:\"POST\",headers:{\"Content-Type\":\"text\/plain\"},body:JSON.stringify({outreach,tasks})}); status(\"SYNCED\",\"green\"); } \r\n  catch{ status(\"OFFLINE (Saved Locally)\",\"red\"); }\r\n}\r\n\r\nfunction render(){\r\ndocument.getElementById(\"closed\").innerText=outreach.filter(x=>x.Outcome===\"CLOSED\").length;\r\n\r\n\/\/ Outreach Table - latest first\r\notable.innerHTML=[...outreach].reverse().map((o,i)=>`\r\n<tr class=\"hover:bg-slate-50 transition\">\r\n<td data-label=\"Date\" class=\"p-3\">${o.Date}<\/td>\r\n<td data-label=\"Name\" class=\"p-3 font-medium\">${o.Name}<\/td>\r\n<td data-label=\"Channel\" class=\"p-3\">\r\n<select class=\"border p-1 rounded w-full\" onchange=\"updateField(this,${outreach.length-1-i},'Channel')\">\r\n<option ${o.Channel==='LinkedIn'?'selected':''}>LinkedIn<\/option>\r\n<option ${o.Channel==='Email'?'selected':''}>Email<\/option>\r\n<option ${o.Channel==='Call'?'selected':''}>Call<\/option>\r\n<option ${o.Channel==='Referral'?'selected':''}>Referral<\/option>\r\n<option ${o.Channel==='Website'?'selected':''}>Website<\/option>\r\n<option ${o.Channel==='Other'?'selected':''}>Other<\/option>\r\n<\/select>\r\n<\/td>\r\n<td data-label=\"Status\" class=\"p-3\">\r\n<select class=\"border p-1 rounded w-full\" onchange=\"updateField(this,${outreach.length-1-i},'Status')\">\r\n<option ${o.Status==='Initial Outreach'?'selected':''}>Initial Outreach<\/option>\r\n<option ${o.Status==='Follow-up'?'selected':''}>Follow-up<\/option>\r\n<option ${o.Status==='Negotiation'?'selected':''}>Negotiation<\/option>\r\n<option ${o.Status==='Contract Sent'?'selected':''}>Contract Sent<\/option>\r\n<option ${o.Status==='On Hold'?'selected':''}>On Hold<\/option>\r\n<option ${o.Status==='Other'?'selected':''}>Other<\/option>\r\n<\/select>\r\n<\/td>\r\n<td data-label=\"Outcome\" class=\"p-3\">\r\n<select class=\"border p-1 rounded w-full\" onchange=\"updateField(this,${outreach.length-1-i},'Outcome')\">\r\n<option ${o.Outcome==='OPEN'?'selected':''}>OPEN<\/option>\r\n<option ${o.Outcome==='CLOSED'?'selected':''}>CLOSED<\/option>\r\n<\/select>\r\n<\/td>\r\n<td class=\"p-3\"><\/td>\r\n<\/tr>`).join(\"\");\r\n\r\n\/\/ Tasks Table - latest first, lock older than 24h\r\nconst now=Date.now();\r\nttable.innerHTML=[...tasks].reverse().map((t,i)=>{\r\nlet taskTime=new Date(t.Date).getTime();\r\nlet editable=(now-taskTime)<24*60*60*1000; \/\/ 24h lock\r\nreturn `<tr class=\"hover:bg-slate-50 transition\">\r\n<td data-label=\"Date\" class=\"p-3\">${t.Date}<\/td>\r\n<td data-label=\"Objective\" class=\"p-3\">\r\n<input type=\"text\" ${!editable?'readonly':''} class=\"border p-1 rounded w-full\" value=\"${t.Objective}\" onchange=\"updateTask(this,${tasks.length-1-i}, 'Objective')\">\r\n<\/td>\r\n<td data-label=\"Tasks\" class=\"p-3\">\r\n<textarea ${!editable?'readonly':''} class=\"border p-1 rounded w-full\" onchange=\"updateTask(this,${tasks.length-1-i}, 'Tasks')\">${t.Tasks}<\/textarea>\r\n<\/td>\r\n<td data-label=\"Blockers\" class=\"p-3\">\r\n<textarea ${!editable?'readonly':''} class=\"border p-1 rounded w-full\" onchange=\"updateTask(this,${tasks.length-1-i}, 'Blockers')\">${t.Blockers||''}<\/textarea>\r\n<\/td>\r\n<td data-label=\"Tomorrow\" class=\"p-3\">\r\n<textarea ${!editable?'readonly':''} class=\"border p-1 rounded w-full\" onchange=\"updateTask(this,${tasks.length-1-i}, 'Tomorrow')\">${t.Tomorrow||''}<\/textarea>\r\n<\/td>\r\n<td class=\"p-3\"><\/td>\r\n<\/tr>`;\r\n}).join(\"\");\r\n}\r\n\r\n\/\/ Generic update for any outreach dropdown\r\nfunction updateField(sel,i,field){\r\n  rowSpinner(sel,true);\r\n  outreach[i][field]=sel.value;\r\n  save().then(()=>rowSpinner(sel,false));\r\n}\r\n\r\n\/\/ Task inline update\r\nfunction updateTask(el,i,field){\r\n  rowSpinner(el,true);\r\n  tasks[i][field]=el.value;\r\n  save().then(()=>rowSpinner(el,false));\r\n}\r\n\r\n\/\/ Form submissions\r\noForm.onsubmit=e=>{\r\ne.preventDefault();\r\nconst btn=oSaveBtn;\r\nbtn.disabled=true;\r\nbtn.innerHTML='Saving<span class=\"spinner-inline\"><\/span>';\r\nconst f=new FormData(e.target);\r\noutreach.push({ Date:f.get(\"date\"), Name:f.get(\"name\"), Channel:f.get(\"channel\"), Status:f.get(\"status\"), Outcome:f.get(\"closed\")?\"CLOSED\":\"OPEN\" });\r\nsave().then(()=>{\r\nrender();\r\ncloseModal('oModal');\r\nbtn.disabled=false;\r\nbtn.innerHTML='Save';\r\n});\r\n};\r\n\r\ntForm.onsubmit=e=>{\r\ne.preventDefault();\r\nconst btn=tSaveBtn;\r\nbtn.disabled=true;\r\nbtn.innerHTML='Saving<span class=\"spinner-inline\"><\/span>';\r\nconst f=new FormData(e.target);\r\ntasks.push({ Date:new Date().toLocaleString(), Objective:f.get(\"objective\"), Tasks:f.get(\"tasks\"), Blockers:f.get(\"blockers\"), Tomorrow:f.get(\"tomorrow\") });\r\nsave().then(()=>{\r\nrender();\r\ncloseModal('tModal');\r\nbtn.disabled=false;\r\nbtn.innerHTML='Save';\r\n});\r\n};\r\n\r\n\/\/ Tabs\r\nfunction tab(id){\r\n  document.querySelectorAll(\".tab-content\").forEach(x=>x.classList.remove(\"active\"));\r\n  document.getElementById(id).classList.add(\"active\");\r\n  \r\n  document.querySelectorAll(\".tab-btn\").forEach(x=>x.classList.remove(\"active\"));\r\n  if(id===\"dashboard\") document.querySelector(\".tab-dashboard\").classList.add(\"active\");\r\n  if(id===\"outreach\") document.querySelector(\".tab-outreach\").classList.add(\"active\");\r\n  if(id===\"tasks\") document.querySelector(\".tab-tasks\").classList.add(\"active\");\r\n}\r\n\r\n\/\/ Modals\r\nfunction openModal(id){document.getElementById(id).classList.add(\"active\");}\r\nfunction closeModal(id){document.getElementById(id).classList.remove(\"active\");}\r\n\r\n\/\/ Click outside modal closes\r\ndocument.querySelectorAll(\".modal\").forEach(mod=>{\r\n  mod.addEventListener(\"click\", e=>{\r\n    if(e.target===mod && mod.id!==\"loginModal\") mod.classList.remove(\"active\");\r\n  });\r\n});\r\n\r\n\/\/ Status\r\nfunction status(t,c){statusText.innerText=t;statusText.className=\"text-xs font-bold text-\"+c+\"-500\";}\r\nconst statusText=document.getElementById(\"status-text\");\r\n\r\n\/\/ LOGIN MULTIUSER\r\nconst users = { \"admin\":\"1234\", \"user1\":\"pass1\", \"user2\":\"pass2\", \"lydia\":\"lydia\" };\r\nconst loginModal = document.getElementById(\"loginModal\");\r\nconst loginForm = document.getElementById(\"loginForm\");\r\nif(!localStorage.getItem(\"loggedIn\")) loginModal.classList.add(\"active\"); else { render(); load(); }\r\nloginForm.onsubmit = e=>{\r\n  e.preventDefault();\r\n  const f = new FormData(e.target);\r\n  const username = f.get(\"username\");\r\n  const password = f.get(\"password\");\r\n\r\n  if(users[username] && users[username]===password){\r\n    localStorage.setItem(\"loggedIn\",\"true\");\r\n    loginModal.classList.remove(\"active\");\r\n    render(); load();\r\n  } else alert(\"Invalid credentials!\");\r\n}\r\n\r\n\/\/ INIT - autosync every 5s\r\nsetInterval(load,5000);\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Chorer Inc. Chorer Inc. Connecting&#8230; Dashboard Outreach Tasks Closed Deals 0 + Add Lead Date Name Channel Status Outcome + Add Task Date Objective Tasks Blockers Tomorrow &times; New Lead LinkedInEmailCallReferralWebsiteOther Initial OutreachFollow-upNegotiationContract SentOn HoldOther Closed Deal Save &times; Daily Task Log Save Login Login<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/comments?post=7"}],"version-history":[{"count":154,"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":171,"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/pages\/7\/revisions\/171"}],"wp:attachment":[{"href":"https:\/\/track.chorerinc.com\/index.php\/wp-json\/wp\/v2\/media?parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}