SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,319
Folders
408
Scanned Size
3.84 GB
PHP Files
879
Editable Text Files
12,580
File viewer
guarded to /htdocs
/SI/operations/dashboard.php
<?php declare(strict_types=1); require_once __DIR__ . '/bootstrap.php'; session_name('SI_OPS'); if (session_status() !== PHP_SESSION_ACTIVE) session_start(['cookie_httponly'=>true,'cookie_secure'=>true,'cookie_samesite'=>'Strict']); $error=''; $notice=''; if (isset($_POST['access_key'])) { $key=defined('SI_SMS_DASHBOARD_KEY')?(string)SI_SMS_DASHBOARD_KEY:''; if ($key!=='' && hash_equals($key,trim((string)$_POST['access_key']))) { session_regenerate_id(true); $_SESSION['si_ops']=true; } else $error='Access key not accepted.'; } if (isset($_POST['logout'])) { $_SESSION=[]; session_destroy(); header('Location: dashboard.php'); exit; } $authorized=($_SESSION['si_ops']??false)===true; if ($authorized && $_SERVER['REQUEST_METHOD']==='POST') { if (isset($_POST['send_sms'])) { $to=si_ops_e164((string)($_POST['to']??'')); $body=trim((string)($_POST['message']??'')); if ($to===''||$body==='') $error='Enter a valid number and message.'; else { $r=si_ops_twilio('Messages',['To'=>$to,'From'=>(string)TWILIO_PHONE_NUMBER,'Body'=>mb_substr($body,0,1500)]); $r['ok']?$notice='Text submitted.':$error=$r['error']; } } if (isset($_POST['place_call'])) { $target=si_ops_e164((string)($_POST['call_to']??'')); $operator=defined('SI_TRANSFER_NUMBER')?si_ops_e164((string)SI_TRANSFER_NUMBER):''; if ($target===''||$operator==='') $error='Enter a valid destination number.'; else { $url=si_ops_base_url().'/SI/operations/bridge.php?target='.rawurlencode($target); $r=si_ops_twilio('Calls',['To'=>$operator,'From'=>(string)TWILIO_PHONE_NUMBER,'Url'=>$url,'Method'=>'POST','StatusCallback'=>si_ops_base_url().'/SI/phone/status.php','StatusCallbackMethod'=>'POST']); $r['ok']?$notice='Calling Keith now; the destination will connect after pickup.':$error=$r['error']; } } } $calls=$authorized?si_ops_log_rows('si_phone'):[]; $texts=$authorized?si_ops_log_rows('si_sms'):[]; $events=[]; foreach($calls as $r){$r['_channel']='call';$events[]=$r;} foreach($texts as $r){$r['_channel']='text';$events[]=$r;} usort($events,fn($a,$b)=>strcmp((string)($b['time']??''),(string)($a['time']??''))); $events=array_slice($events,0,100); $voicemails=array_values(array_filter($calls,fn($r)=>str_contains((string)($r['event']??''),'voicemail'))); $twilioReady=defined('TWILIO_ACCOUNT_SID')&&defined('TWILIO_PHONE_NUMBER'); $aiReady=defined('OPENAI_API_KEY')&&!str_contains((string)OPENAI_API_KEY,'PASTE_'); function h(string $v):string{return htmlspecialchars($v,ENT_QUOTES,'UTF-8');} ?><!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SI Spatial Operations</title> <style> :root{color-scheme:dark;--bg:#050711;--panel:#101426cc;--line:#ffffff18;--text:#f7f8ff;--muted:#99a2bf;--cyan:#62e6ff;--violet:#a77bff;--pink:#ff6ac2;--ok:#65f6b2;--bad:#ff718b}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 14% 12%,#243c7d77,transparent 30%),radial-gradient(circle at 88% 8%,#702c8766,transparent 28%),linear-gradient(145deg,#04060d,#090d1c 55%,#050711);color:var(--text);font:15px Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}.orb{position:fixed;border-radius:50%;filter:blur(1px);opacity:.35;pointer-events:none}.o1{width:260px;height:260px;background:#29d9ff33;right:9%;top:22%;box-shadow:0 0 90px #29d9ff66}.o2{width:190px;height:190px;background:#bd55ff33;left:6%;bottom:8%;box-shadow:0 0 90px #bd55ff55}.shell{width:min(1480px,95vw);margin:28px auto;position:relative}.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.brand{display:flex;align-items:center;gap:14px}.mark{width:52px;height:52px;border-radius:18px;background:linear-gradient(135deg,var(--cyan),var(--violet),var(--pink));box-shadow:0 12px 45px #6b7dff66;display:grid;place-items:center;color:#080a13;font-size:22px;font-weight:900}.brand h1{margin:0;font-size:clamp(24px,3vw,40px)}.brand p{margin:3px 0 0;color:var(--muted)}.glass{background:linear-gradient(135deg,#151b31d9,#0c1020c9);border:1px solid var(--line);box-shadow:0 26px 80px #0008,inset 0 1px #ffffff12;backdrop-filter:blur(24px);border-radius:26px}.layout{display:grid;grid-template-columns:290px minmax(0,1fr) 360px;gap:16px}.side,.rail{padding:18px}.main{padding:20px;min-height:760px}.nav{display:grid;gap:8px}.nav a{padding:13px 14px;border-radius:14px;color:var(--muted);text-decoration:none}.nav a.active,.nav a:hover{color:var(--text);background:#ffffff0c}.status{margin-top:28px}.status-row{display:flex;justify-content:space-between;align-items:center;padding:10px 4px;color:var(--muted)}.dot{width:9px;height:9px;border-radius:50%;display:inline-block;background:var(--ok);box-shadow:0 0 15px var(--ok)}.hero{padding:22px;border-radius:22px;background:linear-gradient(120deg,#182a50aa,#281b4baa);border:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.hero h2{font-size:28px;margin:0 0 6px}.hero p{margin:0;color:var(--muted)}.pulse{width:78px;height:78px;border-radius:50%;display:grid;place-items:center;background:#ffffff0b;border:1px solid #ffffff1a;box-shadow:0 0 0 14px #6ee7ff08,0 0 55px #6ee7ff3d;font-size:30px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:16px 0}.metric{padding:16px}.metric span{color:var(--muted);font-size:12px}.metric strong{display:block;font-size:25px;margin-top:7px}.section-head{display:flex;justify-content:space-between;align-items:center;margin:24px 0 10px}.section-head h3{margin:0}.feed{display:grid;gap:9px}.event{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:13px;border-radius:16px;background:#ffffff07;border:1px solid #ffffff0d}.icon{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:linear-gradient(135deg,#54ddff22,#b56eff22);color:var(--cyan)}.event b{display:block}.event p{margin:4px 0 0;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:560px}.event time{color:var(--muted);font-size:12px}.tabs{display:flex;gap:7px}.tab{border:1px solid var(--line);border-radius:999px;background:#ffffff08;color:var(--muted);padding:7px 11px}.rail h3{margin:4px 0 14px}.card{padding:16px;margin-bottom:13px;border-radius:20px;background:#ffffff07;border:1px solid #ffffff0d}label{display:block;color:var(--muted);font-size:12px;margin:10px 0 6px}input,textarea,button{width:100%;font:inherit;color:var(--text);background:#070a15aa;border:1px solid #ffffff18;border-radius:13px;padding:11px}textarea{min-height:86px;resize:vertical}button{border:0;background:linear-gradient(120deg,var(--cyan),var(--violet));color:#070911;font-weight:850;cursor:pointer;margin-top:10px;box-shadow:0 10px 28px #6f7cff30}.secondary{background:#ffffff09;color:var(--text);box-shadow:none;border:1px solid var(--line)}.alert{padding:12px 15px;border-radius:15px;margin-bottom:14px}.error{background:#56182b}.notice{background:#124735}.login{max-width:470px;margin:12vh auto;padding:28px}.login h1{margin-top:0}.empty{padding:30px;text-align:center;color:var(--muted)}@media(max-width:1100px){.layout{grid-template-columns:220px 1fr}.rail{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:14px}.rail h3{grid-column:1/-1}.metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.layout{grid-template-columns:1fr}.side{display:none}.rail{display:block}.metrics{grid-template-columns:1fr 1fr}.event{grid-template-columns:40px 1fr}.event time{display:none}.hero .pulse{display:none}} @media(max-width:720px){body{font-size:16px;-webkit-text-size-adjust:100%}.shell{width:100%;margin:0;padding:max(16px,env(safe-area-inset-top)) 12px max(20px,env(safe-area-inset-bottom))}.top{align-items:flex-start;gap:12px}.brand{gap:10px}.mark{width:44px;height:44px;border-radius:14px}.brand h1{font-size:23px;line-height:1.08}.brand p{font-size:13px;line-height:1.35}.top form{flex:0 0 auto}.top button{padding:11px 12px}.main,.rail{padding:14px;border-radius:22px}.hero{padding:18px}.hero h2{font-size:24px}.hero p{font-size:15px;line-height:1.45}.metrics{grid-template-columns:1fr 1fr;gap:9px}.metric{padding:14px}.metric strong{font-size:22px}.section-head{align-items:flex-start;gap:10px;flex-direction:column}.tabs{width:100%;overflow-x:auto;padding-bottom:3px}.tab{white-space:nowrap}.event{padding:13px 11px;align-items:start}.event p{white-space:normal;max-width:none;line-height:1.45}.rail{margin-top:0}.card{padding:17px}.card h4{font-size:18px;margin:0 0 7px}input,textarea,button{min-height:48px;font-size:16px;padding:13px}textarea{min-height:110px}.login{margin:7vh 12px;padding:22px}.o1{right:-120px}.o2{left:-100px}} @media(max-width:390px){.metrics{grid-template-columns:1fr}.brand p{max-width:230px}.top .secondary{font-size:13px}.main,.rail{padding:11px}.hero{padding:16px}} </style></head><body><i class="orb o1"></i><i class="orb o2"></i> <?php if(!$authorized):?><main class="login glass"><div class="brand"><div class="mark">SI</div><div><h1>Spatial Operations</h1><p>Private communications console</p></div></div><?php if($error):?><p class="alert error"><?=h($error)?></p><?php endif?><form method="post"><label>Dashboard access key</label><input type="password" name="access_key" required autofocus><button>Enter operations</button></form></main> <?php else:?><main class="shell"><header class="top"><div class="brand"><div class="mark">SI</div><div><h1>Spatial Operations</h1><p>Calls, messages, intelligence and system health</p></div></div><form method="post"><button class="secondary" name="logout">Sign out</button></form></header><?php if($error):?><div class="alert error"><?=h($error)?></div><?php endif?><?php if($notice):?><div class="alert notice"><?=h($notice)?></div><?php endif?> <div class="layout"><aside class="side glass"><nav class="nav"><a class="active" href="#overview">◈ Overview</a><a href="#calls">◉ Calls</a><a href="#voicemail">◒ Voicemail</a><a href="#messages">◇ Messages</a><a href="#alerts">△ Alerts</a></nav><div class="status"><h4>System field</h4><div class="status-row"><span><i class="dot"></i> Twilio</span><b><?=$twilioReady?'Online':'Setup'?></b></div><div class="status-row"><span><i class="dot"></i> OpenAI</span><b><?=$aiReady?'Online':'Setup'?></b></div><div class="status-row"><span><i class="dot"></i> Website</span><b>Live</b></div></div></aside> <section class="main glass" id="overview"><div class="hero"><div><h2>Good day, Keith.</h2><p>SI is monitoring your communications field.</p></div><div class="pulse">◉</div></div><div class="metrics"><div class="metric glass"><span>CALL EVENTS</span><strong><?=count($calls)?></strong></div><div class="metric glass"><span>TEXT EVENTS</span><strong><?=count($texts)?></strong></div><div class="metric glass"><span>VOICEMAILS</span><strong><?=count($voicemails)?></strong></div><div class="metric glass"><span>OPEN ALERTS</span><strong>0</strong></div></div><div class="section-head"><h3>Live activity</h3><div class="tabs"><span class="tab">All</span><span class="tab">Calls</span><span class="tab">Texts</span></div></div><div class="feed"><?php if(!$events):?><div class="empty">Activity will appear here after the first call or message.</div><?php endif?><?php foreach($events as $r):$d=(array)($r['details']??[]);$body=(string)($d['transcript']??$d['body']??$d['message']??$d['recording_url']??'');?><article class="event"><div class="icon"><?=$r['_channel']==='call'?'☎':'✦'?></div><div><b><?=h(ucwords(str_replace('_',' ',(string)($r['event']??$r['_channel']))))?></b><p><?=h($body?:'Event received by SI')?></p></div><time><?=h((string)($r['time']??''))?></time></article><?php endforeach?></div></section> <aside class="rail glass"><h3>Command deck</h3><div class="card"><h4>Spatial dialer</h4><p style="color:var(--muted)">SI calls you first, then connects the destination.</p><form method="post"><label>Number to call</label><input name="call_to" placeholder="+1 555 555 0123" required><button name="place_call">Place call</button></form></div><div class="card"><h4>Send message</h4><form method="post"><label>Recipient</label><input name="to" value="<?=h(defined('SI_TRANSFER_NUMBER')?(string)SI_TRANSFER_NUMBER:'')?>" required><label>Message</label><textarea name="message" placeholder="Type a message…" required></textarea><button name="send_sms">Send text</button></form></div><div class="card" id="voicemail"><h4>Latest voicemail</h4><?php if(!$voicemails):?><p style="color:var(--muted)">No voicemail recorded yet.</p><?php else:$v=$voicemails[0];$vd=(array)($v['details']??[]);?><p><?=h((string)($vd['transcript']??'Transcription pending'))?></p><?php if(!empty($vd['recording_url'])):?><audio controls style="width:100%" src="<?=h((string)$vd['recording_url'])?>"></audio><?php endif?><?php endif?></div></aside></div></main><?php endif?></body></html> "card" id="voicemail"><h4>Latest voicemail</h4><?php if(!$voicemails):?><p style="color:var(--muted)">No voicemail recorded yet.</p><?php else:$v=$voicemails[0];$vd=(array)($v['details']??[]);?><p><?=h((string)($vd['transcript']??'Transcription pending'))?></p><?php if(!empty($vd['recording_url'])):?><audio controls style="width:100%" src="<?=h((string)$vd['recording_url'])?>"></audio><?php endif?><?php endif?></div></aside></div></main><?php endif?><script src="sphere-bg.js" defer></script></body></html>
Save file
Quick jump
open a path
Open