HALO
Thornbury at Chase Oaks
Property Operations · Live
LIVE CONVERSATION

The work, talking back.

The fixed-seed HALO demo plays once, then becomes the live thread connected to the Base44 back office.

This is some text inside of a div block.
This is some text inside of a div block.

Every turn,
measured honestly.

A live 30-day operational record. The clock begins when the field job is entered and stops only after Dispatch clears every approved service.

Monthly average turn
Fully cleared turns only
Completed this month
All services cleared
Active turns
Stopwatches still running
Active average age
Live elapsed days

30-day turn-time tracker

Calendar month · refreshed daily at 8:00 AM Central

Completed averageToday
Month startToday
Live vacancy exposure · Thornbury
extrapolated monthly · $1,295/unit/month
First snapshotToday
HALO property analysis

Reading Thornbury’s verified turn data…

Search any unit.

See its approved scope, Dispatch clearance, live stopwatch, verified blockers and HALO’s daily Grok analysis.

Exact unit match · Thornbury at Chase Oaks
One live record.Search a unit to inspect every approved service and the timer that cannot stop early.

Service price book

Top 5 featured first
Loading live services…

Your vendor team

May Mahboob
Vendor Operations · Archangel Contractors
214-537-4570admin@archangelcontractors.com
POs needed
Rework
Approvals
+Number(n||0).toLocaleString(undefined,{minimumFractionDigits:2,maximumFractionDigits:2}); const esc=s=>String(s||'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])),money=n=>'$'+Number(n||0).toLocaleString(undefined,{maximumFractionDigits:0}); const clock=s=>{s=Math.max(0,Math.floor(s||0));const d=Math.floor(s/86400),h=Math.floor(s%86400/3600),m=Math.floor(s%3600/60),x=s%60;return d+'d '+String(h).padStart(2,'0')+':'+String(m).padStart(2,'0')+':'+String(x).padStart(2,'0')}; const renderServices=list=>{const el=document.getElementById('hrx-service-list');if(!el)return;el.innerHTML=(list.length?list.slice(0,40):[]).map((s,i)=>'
'+(i<5?'★ ':'')+esc(s.service||'Service')+''+esc(s.category||'standard')+(s.usage?' · used '+s.usage+'×':'')+'
'+money(s.price)+'
').join('')||'
No matching services.
'}; const renderReporting=d=>{const r=d.reporting||{},a=r.alerts||{};services=r.services||[];renderServices(services);document.getElementById('halo-po-alert').textContent=a.po_missing||0;document.getElementById('halo-rework-alert').textContent=a.rework||0;document.getElementById('halo-approval-alert').textContent=a.approvals||0}; const renderTracker=d=>{const s=d.snapshot||{},h=Array.isArray(d.history)?d.history:[];document.querySelector('[data-turn-metric=avg]').textContent=Number(s.avg_turn_days||0).toFixed(1)+'d';document.querySelector('[data-turn-metric=completed]').textContent=String(s.completed_units||0);document.querySelector('[data-turn-metric=active]').textContent=String(s.active_units||0);document.querySelector('[data-turn-metric=activeavg]').textContent=Number(s.active_avg_elapsed_days||0).toFixed(1)+'d';document.getElementById('hrx-turn-period').textContent=(d.period||'Current month')+' · refreshed daily at 8:00 AM Central';const values=h.map(x=>Number(x.avg_turn_days||0)),max=Math.max(1,...values,Number(s.active_avg_elapsed_days||0));const days=new Date().getDate(),byDate=new Map(h.map(x=>[Number(String(x.date||'').slice(-2)),x]));let html='';for(let day=1;day<=days;day++){const x=byDate.get(day),v=Number(x?.avg_turn_days||0),today=day===days;html+='
'+(x?('Day '+day+' · '+v.toFixed(1)+'d avg · '+Number(x.completed_units||0)+' cleared'):'Day '+day+' · awaiting snapshot')+'
'}document.getElementById('halo-turn-chart').innerHTML=html;document.getElementById('halo-report-live').textContent='Live · '+property}; const renderUnit=d=>{const u=d.unit||{},result=document.getElementById('hrx-unit-result'),variance=Number(u.projection?.variance_days||0),relation=variance>0?Math.abs(variance).toFixed(1)+' days behind':variance<0?Math.abs(variance).toFixed(1)+' days ahead':'at the property average';const bubbles=(u.scope||[]).map(s=>''+(s.status==='complete'?'✓ ':s.rework?'↻ ':'○ ')+esc(s.service)+'').join('');result.innerHTML='
THORNBURY · LIVE UNIT
Unit '+esc(u.unit_number)+'
'+clock(u.timer?.elapsed_seconds||0)+''+esc(u.timer?.state||'running')+' stopwatch
Projected '+Number(u.projection?.days||0).toFixed(1)+' days · '+relation+' ('+Number(d.property_average_days||0).toFixed(1)+'d)
Approved scope · green means Dispatch cleared
'+(bubbles||'Scope pending')+'
'+(u.blockers?.length?'
'+u.blockers.map(x=>''+esc(x)+'').join('')+'
':'')+'
HALO guidance'+(String(u.analysis_source||'').includes('grok')?'GROK · DAILY VERIFIED':'LIVE VERIFIED')+'
    '+(u.guidance||[]).map(x=>'
  • '+esc(x)+'
  • ').join('')+'
';clearInterval(timerInterval);timerBase=Number(u.timer?.elapsed_seconds||0);timerFetched=Date.now();if(u.timer?.state!=='complete')timerInterval=setInterval(()=>{const el=document.getElementById('hrx-live-clock');if(el)el.textContent=clock(timerBase+Math.floor((Date.now()-timerFetched)/1000))},1000)}; const loadUnit=async unit=>{const result=document.getElementById('hrx-unit-result');result.innerHTML='
Reading Unit '+esc(unit)+'…Matching the live scope, Dispatch review and event trail.
';try{const r=await fetch(TRACKER+'?mode=unit&property='+encodeURIComponent(property)+'&unit='+encodeURIComponent(unit)+'&_='+Date.now(),{cache:'no-store'}),d=await r.json();if(!r.ok||!d.ok)throw new Error(d.error==='unit not found'?'No exact unit found at Thornbury.':d.error||'Unit unavailable');renderUnit(d)}catch(e){result.innerHTML='
'+esc(e.message||'Could not load unit')+'Check the unit number and try again.
'}}; const load=async()=>{try{const [rr,tr]=await Promise.all([fetch(REPORT+'?property='+encodeURIComponent(property)),fetch(TRACKER+'?property='+encodeURIComponent(property)+'&_='+Date.now(),{cache:'no-store'})]);if(rr.ok)renderReporting(await rr.json());if(tr.ok)renderTracker(await tr.json())}catch(e){document.getElementById('halo-report-live').textContent='Reconnecting…'}}; document.getElementById('hrx-service-search').addEventListener('input',e=>{const q=e.target.value.toLowerCase();renderServices(services.filter(s=>(s.service+' '+s.category).toLowerCase().includes(q)))}); document.getElementById('hrx-unit-form').addEventListener('submit',e=>{e.preventDefault();const q=document.getElementById('hrx-unit-search').value.trim().replace(/^#/,'');if(q)loadUnit(q)}); document.getElementById('hrx-panic').addEventListener('click',async()=>{if(!confirm('Send an emergency request to Archangel Vendor Operations?'))return;const b=document.getElementById('hrx-panic'),s=document.getElementById('hrx-panic-status');b.disabled=true;s.textContent='Sending urgent request…';try{const r=await fetch(API+'?property='+encodeURIComponent(property),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({action:'emergency-request',detail:'Emergency assistance requested from the HALO property report.'})});if(!r.ok)throw new Error();s.textContent='Request sent. May and the vendor team have been alerted.';b.textContent='Emergency request sent'}catch(e){s.textContent='Could not send automatically. Call 214-537-4570 now.'}finally{b.disabled=false}}); const setView=view=>{const report=document.getElementById('halo-reporting-wrap'),metrics=view==='metrics';report?.classList.toggle('halo-metrics-active',metrics);document.body.classList.toggle('halo-metrics-view',metrics);document.querySelectorAll('.halo-view-tab').forEach(b=>b.classList.toggle('is-active',b.dataset.view===view));document.querySelectorAll('.halo-queuebar,.halo-chat-drawer,.halo-live-sync,.halo-focus-caption').forEach(el=>el.style.display=metrics?'none':'');if(metrics){report.scrollTop=0;load()}}; const ensureTabs=()=>{const brand=document.querySelector('.halo-nav-brand');if(!brand||document.getElementById('halo-view-tabs'))return false;brand.insertAdjacentHTML('beforeend','');document.querySelectorAll('.halo-view-tab').forEach(b=>b.onclick=()=>setView(b.dataset.view));return true};if(!ensureTabs()){const t=setInterval(()=>{if(ensureTabs())clearInterval(t)},150)}load();setInterval(()=>{if(!document.hidden&&document.body.classList.contains('halo-metrics-view'))load()},60000); })();
The widget will be available in preview / live mode.
PROPERTY OPERATIONS · LIVE

Shop Restock

Connecting to Base44…
Loading current restock items…