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,551
Folders
418
Scanned Size
3.85 GB
PHP Files
915
Editable Text Files
12,812
File viewer
guarded to /htdocs
/connlink/test1/ui/old/simon_feed_core.php
<?php declare(strict_types=1); define('SIMON_FEED_CORE_VERSION','2.1-consolidated'); function sf_root(){return __DIR__;} function sf_path($r){return rtrim(__DIR__,'/\\').'/'.ltrim($r,'/\\');} function sf_h($v){return htmlspecialchars((string)$v,ENT_QUOTES,'UTF-8');} function sf_dirs(){foreach(['cache/jobs','data/events','logs/jobs'] as $d){$p=sf_path($d);if(!is_dir($p))@mkdir($p,0775,true);}} function sf_registry_path(){return sf_path('carrier_registry.json');} function sf_load_registry(){ $f=sf_registry_path(); $j=is_file($f)?json_decode((string)@file_get_contents($f),true):[]; return is_array($j)?$j:['feeds'=>[]];} function sf_save_registry($r){$r['updated']=gmdate('c');return @file_put_contents(sf_registry_path(),json_encode($r,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES),LOCK_EX)!==false;} function sf_feeds($enabledOnly=false){$r=sf_load_registry();$out=[];foreach(($r['feeds']??[]) as $f){if(!is_array($f)||empty($f['id']))continue;$f['name']=$f['name']??ucfirst(str_replace('_',' ',$f['id']));$f['group']=$f['group']??($f['category']??'General');$f['category']=$f['category']??'general';$f['endpoint']=$f['endpoint']??($f['url']??'');$f['enabled']=(bool)($f['enabled']??true);$f['refresh']=(int)($f['refresh']??300);$f['priority']=(int)($f['priority']??50);$f['icon']=$f['icon']??'◌';if($enabledOnly&&!$f['enabled'])continue;$out[]=$f;}usort($out,fn($a,$b)=>($b['priority']<=>$a['priority'])?:strcmp($a['name'],$b['name']));return $out;} function sf_feed($id){foreach(sf_feeds(false) as $f)if($f['id']===$id)return $f;return null;} function sf_cache_file($id){$s=preg_replace('/[^a-zA-Z0-9_\-]/','_',$id)?:'unknown';return sf_path('cache/jobs/'.$s.'.json');} function sf_cache_read($id){$f=sf_cache_file($id);if(!is_file($f))return null;$j=json_decode((string)@file_get_contents($f),true);return is_array($j)?$j:null;} function sf_cache_write($id,$p){sf_dirs();$p['cached_at']=$p['cached_at']??gmdate('c');return @file_put_contents(sf_cache_file($id),json_encode($p,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES),LOCK_EX)!==false;} function sf_abs($url){if($url==='')return '';if(preg_match('~^https?://~i',$url))return $url;if(str_starts_with($url,'/')){$sch=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';$host=$_SERVER['HTTP_HOST']??'localhost';return $sch.'://'.$host.$url;}return $url;} function sf_fetch($url){$start=microtime(true);$abs=sf_abs($url);if($abs==='')return ['ok'=>false,'latency_ms'=>0,'json'=>null,'error'=>'missing_endpoint','url'=>''];$ctx=stream_context_create(['http'=>['method'=>'GET','timeout'=>18,'header'=>"Accept: application/json, text/plain, */*\r\nUser-Agent: SIMON-Feed-Core/2.1\r\n"]]);$raw=@file_get_contents($abs,false,$ctx);$lat=(int)round((microtime(true)-$start)*1000);if($raw===false)return ['ok'=>false,'latency_ms'=>$lat,'json'=>null,'error'=>'request_failed','url'=>$abs];$json=json_decode($raw,true);return ['ok'=>true,'latency_ms'=>$lat,'json'=>is_array($json)?$json:null,'error'=>is_array($json)?null:'non_json_response','url'=>$abs];} function sf_items($j){foreach(['items','articles','events','results','features','data'] as $k)if(isset($j[$k])&&is_array($j[$k]))return $j[$k];return array_is_list($j)?$j:[];} function sf_run_feed($id){$f=sf_feed($id);if(!$f)return ['ok'=>false,'id'=>$id,'name'=>$id,'status'=>'missing_feed','message'=>'Not in registry','items'=>[],'item_count'=>0,'latency_ms'=>0,'updated'=>gmdate('c')];if(empty($f['enabled'])){$r=['ok'=>false,'id'=>$id,'name'=>$f['name'],'category'=>$f['category'],'group'=>$f['group'],'status'=>'disabled','message'=>'Feed disabled','items'=>[],'item_count'=>0,'latency_ms'=>0,'updated'=>gmdate('c'),'endpoint'=>$f['endpoint']];sf_cache_write($id,$r);return $r;}$x=sf_fetch($f['endpoint']);$items=$x['json']?sf_items($x['json']):[];$r=['ok'=>$x['ok']&&$x['json']!==null,'id'=>$id,'name'=>$f['name'],'category'=>$f['category'],'group'=>$f['group'],'endpoint'=>$f['endpoint'],'request_url'=>$x['url'],'status'=>($x['ok']&&$x['json']!==null)?'online':'failed','message'=>$x['error']?:'Endpoint called successfully.','items'=>$items,'item_count'=>count($items),'latency_ms'=>$x['latency_ms'],'updated'=>gmdate('c')];sf_cache_write($id,$r);return $r;} function sf_run_all($limit=60){$out=[];foreach(array_slice(sf_feeds(true),0,$limit) as $f)$out[]=sf_run_feed($f['id']);return $out;} function sf_rows(){ $rows=[];foreach(sf_feeds(false) as $f){$c=sf_cache_read($f['id']);$items=is_array($c['items']??null)?$c['items']:[];$rows[]=['id'=>$f['id'],'name'=>$f['name'],'group'=>$f['group'],'category'=>$f['category'],'endpoint'=>$f['endpoint'],'enabled'=>$f['enabled'],'priority'=>$f['priority'],'refresh'=>$f['refresh'],'icon'=>$f['icon'],'status'=>$c['status']??($f['enabled']?'not_tested':'disabled'),'ok'=>(bool)($c['ok']??false),'items'=>$items,'item_count'=>count($items),'latency_ms'=>(int)($c['latency_ms']??0),'cached_at'=>$c['cached_at']??null,'message'=>$c['message']??''];}return $rows;} function sf_title($i){return (string)($i['title']??$i['name']??$i['headline']??$i['subject']??$i['event']??'(untitled)');} function sf_summary($i){return (string)($i['summary']??$i['snippet']??$i['description']??$i['body']??$i['message']??$i['text']??'');} function sf_url($i){return (string)($i['url']??$i['link']??$i['href']??'#');} function sf_words($text){$text=strtolower(strip_tags($text));$text=preg_replace('/[^a-z0-9\s]/',' ',$text);$parts=preg_split('/\s+/',(string)$text,-1,PREG_SPLIT_NO_EMPTY)?:[];$stop=array_flip(['the','and','for','with','from','this','that','news','http','https','www','com','said','says','new']);$out=[];foreach($parts as $p){if(strlen($p)<4||isset($stop[$p]))continue;$out[$p]=($out[$p]??0)+1;}arsort($out);return array_slice(array_keys($out),0,10);} function sf_events(){ $events=[];foreach(sf_rows() as $feed){foreach($feed['items'] as $item){if(!is_array($item))continue;$title=sf_title($item);$sum=sf_summary($item);$url=sf_url($item);$text=$title.' '.$sum;$events[]=['feed_id'=>$feed['id'],'source'=>$feed['name'],'category'=>$feed['category'],'title'=>$title,'summary'=>$sum,'url'=>$url,'keywords'=>sf_words($text),'importance'=>50,'signature'=>substr(sha1(strtolower($title.'|'.$url)),0,12)];}}return $events;} function sf_css(){return <<<'CSS' :root{--bg:#05041a;--line:rgba(75,227,255,.25);--text:#eaf2ff;--muted:#9aa3c4;--cyan:#4be3ff;--green:#7cff9e;--amber:#ffb347;--red:#ff6b8f;--pink:#ff5bd1;--vio:#7a5cff}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(900px 600px at 20% 0%,rgba(122,92,255,.25),transparent 60%),radial-gradient(700px 500px at 100% 10%,rgba(255,91,209,.18),transparent 60%),linear-gradient(180deg,#05041a,#08072a);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;padding:24px}body:before{content:"";position:fixed;inset:-10%;z-index:-2;background:radial-gradient(circle at 20% 25%,rgba(75,227,255,.18),transparent 25%),radial-gradient(circle at 80% 20%,rgba(255,91,209,.16),transparent 28%),radial-gradient(circle at 55% 75%,rgba(122,92,255,.18),transparent 30%);filter:blur(42px);animation:nebula 18s ease-in-out infinite alternate}@keyframes nebula{50%{transform:translate(2%,-1%) scale(1.04)}}.wrap{max-width:1240px;margin:0 auto}.top{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:18px}.brand{display:flex;align-items:center;gap:14px}.logo{width:54px;height:54px;border-radius:16px;background:conic-gradient(from 220deg,var(--vio),var(--cyan),var(--pink),var(--vio));box-shadow:0 0 38px rgba(75,227,255,.28);animation:pulse 3.8s ease-in-out infinite}@keyframes pulse{50%{filter:brightness(1.25);transform:translateY(-2px)}}h1{margin:0;font-size:30px}.sub,.muted,.small{color:var(--muted)}.kicker{color:var(--muted);font-size:11px;letter-spacing:.18em;text-transform:uppercase}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:18px 0}.card,.panel{background:linear-gradient(180deg,rgba(22,18,60,.88),rgba(14,10,40,.92));border:1px solid var(--line);border-radius:18px;padding:16px;box-shadow:0 18px 48px rgba(0,0,0,.35)}.card .k{color:var(--muted);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.card .v{font-size:28px;font-weight:900;margin-top:4px}.actions{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0 20px}a.btn,button.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:999px;border:1px solid var(--line);background:rgba(75,227,255,.08);color:var(--text);text-decoration:none;font:inherit;cursor:pointer}table{width:100%;border-collapse:separate;border-spacing:0 10px}th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.12em;padding:0 12px}td{background:rgba(16,14,48,.72);border-top:1px solid rgba(255,255,255,.07);border-bottom:1px solid rgba(255,255,255,.07);padding:13px 12px}td:first-child{border-left:1px solid rgba(255,255,255,.07);border-radius:14px 0 0 14px;font-weight:800}td:last-child{border-right:1px solid rgba(255,255,255,.07);border-radius:0 14px 14px 0}.pill{display:inline-flex;padding:4px 9px;border-radius:999px;border:1px solid rgba(255,255,255,.1);font-size:12px}.online{color:var(--green)}.warn{color:var(--amber)}.bad{color:var(--red)}.quick{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}.quick a{display:block;border:1px solid rgba(255,255,255,.08);border-radius:16px;background:rgba(255,255,255,.035);padding:12px;text-decoration:none;color:var(--text)}.quick span{display:block;color:var(--muted);font-size:12px}.list{display:grid;gap:10px}.event{border:1px solid rgba(255,255,255,.08);border-radius:16px;background:rgba(255,255,255,.035);padding:14px}.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.chip{font-size:11px;padding:3px 8px;border-radius:999px;border:1px solid rgba(75,227,255,.18);color:var(--cyan)}input,textarea{border:1px solid rgba(255,255,255,.08);background:rgba(0,0,0,.22);color:var(--text);border-radius:14px;padding:10px 12px;width:100%}label{display:grid;gap:5px;color:var(--muted);font-size:12px}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.checkrow{display:flex;gap:8px;align-items:center}.checkrow input{width:auto}.graph{position:relative;height:560px;overflow:hidden}.node{position:absolute;transform:translate(-50%,-50%);border:1px solid rgba(75,227,255,.26);background:rgba(16,14,48,.88);border-radius:999px;padding:10px 13px;box-shadow:0 0 28px rgba(75,227,255,.12);white-space:nowrap;font-weight:800}.node.core{font-size:18px;padding:18px 22px}.edge{position:absolute;height:1px;background:linear-gradient(90deg,transparent,rgba(75,227,255,.35),transparent);transform-origin:left center}@media(max-width:900px){.grid,.quick,.formgrid{grid-template-columns:1fr}body{padding:14px}table{font-size:12px}td,th{padding:10px 8px}} CSS;} function sf_page_top($title,$sub=''){echo '<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>'.sf_h($title).'</title><style>'.sf_css().'</style></head><body><div class="wrap"><div class="top"><div class="brand"><div class="logo"></div><div><div class="kicker">SIMON Feed Engine '.SIMON_FEED_CORE_VERSION.'</div><h1>'.sf_h($title).'</h1><div class="sub">'.sf_h($sub).'</div></div></div><div class="actions"><a class="btn" href="compat/compat.php">Compat</a><a class="btn" href="jobs_dashboard.php">Jobs</a><a class="btn" href="feed_manager.php">Feed Manager</a><a class="btn" href="ai_dashboard.php">AI</a><a class="btn" href="graph_dashboard.php">Graph</a></div></div>';} function sf_page_bottom(){echo '</div></body></html>';} ?>
Save file
Quick jump
open a path
Open