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,476
Folders
443
Scanned Size
3.86 GB
PHP Files
996
Editable Text Files
12,723
File viewer
guarded to /htdocs
/si/business/bootstrap.php
<?php declare(strict_types=1); require_once dirname(__DIR__).'/operations/bootstrap.php'; function si_business_path(string $name):string{return si_ops_private_root().'/memory/'.$name;} function si_business_read(string $name,array $fallback=[]):array{$file=si_business_path($name);if(!is_readable($file))return $fallback;$data=json_decode((string)file_get_contents($file),true);return is_array($data)?$data:$fallback;} function si_business_write(string $name,array $data):bool{$file=si_business_path($name);if(!is_dir(dirname($file))&&!@mkdir(dirname($file),0700,true)&&!is_dir(dirname($file)))return false;return file_put_contents($file,json_encode($data,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_INVALID_UTF8_SUBSTITUTE),LOCK_EX)!==false;} function si_business_append(string $name,array $row):bool{$file=si_business_path($name);if(!is_dir(dirname($file))&&!@mkdir(dirname($file),0700,true)&&!is_dir(dirname($file)))return false;$json=json_encode($row,JSON_UNESCAPED_SLASHES|JSON_INVALID_UTF8_SUBSTITUTE);return is_string($json)&&file_put_contents($file,$json.PHP_EOL,FILE_APPEND|LOCK_EX)!==false;} function si_business_id(string $prefix='SI'):string{return $prefix.'-'.gmdate('YmdHis').'-'.bin2hex(random_bytes(4));} function si_business_now():string{return gmdate('c');} function si_business_settings_defaults():array{return [ 'timezone'=>'America/Chicago','business_name'=>'Gaylord Sinclair × SIMON','keith_is_final_escalation'=>true,'answer_without_keith'=>true, 'approved_subjects'=>['Gaylord Sinclair','SIMON Enterprise','general business information','scheduling'], 'escalation_subjects'=>['emergency','legal threat','financial commitment','personal matter','explicit request for Keith'], 'debt_collector_transfer'=>false,'after_hours_start'=>'18:00','after_hours_end'=>'08:00','alert_channels'=>['dashboard','sms','email'], 'urgent_keywords'=>['emergency','urgent','hospital','police','fire','death','arrest','immediately'],'duplicate_window_seconds'=>45, 'greeting'=>'Thank you for calling Gaylord Sinclair. This is SI. How may I help?','si_voice'=>'Polly.Matthew','business_name_pronunciation'=>'Gaylord Sinclair','speech_language'=>'en-US','maximum_greeting_length'=>500,'silence_timeout'=>7,'misunderstood_retries'=>2,'transfer_confidence_threshold'=>0.78, 'after_hours_greeting'=>'Our office is closed. SI can take a message.','holiday_greeting'=>'Our office is closed for the holiday.','ai_failure_fallback'=>'I am unable to complete that request. Please leave a message for Keith.','recording_default'=>false,'recording_consent'=>true,'dual_channel_recording'=>true,'recording_callback'=>true,'automatic_transcription'=>true,'ai_voicemail_summary'=>true,'voicemail_maximum_seconds'=>180,'voicemail_silence_seconds'=>7,'delete_recording_keep_summary'=>false,'urgent_voicemail_immediate'=>true, 'dialer_call_keith_first'=>true,'outgoing_caller_id'=>'','answering_machine_detection'=>true,'leave_voicemail_automatically'=>false,'retry_unanswered'=>true,'retry_limit'=>2,'record_outgoing_calls'=>false,'confirm_international'=>true,'approved_destinations'=>[], 'notify_incoming_approved'=>true,'notify_missed_call'=>true,'notify_failed_transfer'=>true,'notify_new_voicemail'=>true,'notify_urgent_caller'=>true,'notify_repeated_caller'=>true,'notify_blocked_attempt'=>true,'notify_webhook_failure'=>true,'notify_phone_offline'=>true,'notify_transcription_failure'=>true,'daily_call_summary'=>true,'quiet_hours_start'=>'22:00','quiet_hours_end'=>'07:00', 'call_display_limit'=>100,'auto_refresh_seconds'=>60,'retention_days'=>365,'show_recordings'=>true,'show_transcripts'=>true,'show_twilio_errors'=>true,'mask_private_numbers'=>false, 'daily_briefing_time'=>'08:00','recording_retention_days'=>90,'weather_latitude'=>32.7767,'weather_longitude'=>-96.7970,'weather_label'=>'Dallas' ];} function si_business_settings():array{return array_replace(si_business_settings_defaults(),si_business_read('si_business_settings.json'));} function si_business_save_settings(array $input):bool{$allowed=si_business_settings_defaults();$clean=[];foreach($allowed as $key=>$default){if(!array_key_exists($key,$input)){$clean[$key]=$default;continue;}$value=$input[$key];if(is_bool($default))$clean[$key]=(bool)$value;elseif(is_int($default))$clean[$key]=max(0,(int)$value);elseif(is_float($default))$clean[$key]=(float)$value;elseif(is_array($default)){$clean[$key]=array_values(array_filter(array_map('trim',is_array($value)?$value:explode(';',(string)$value))));}else{$clean[$key]=substr(trim((string)$value),0,5000);}}return si_business_write('si_business_settings.json',$clean);} function si_business_is_urgent(string $text):bool{$text=strtolower($text);foreach((array)si_business_settings()['urgent_keywords'] as $word)if($word!==''&&str_contains($text,strtolower((string)$word)))return true;return false;} function si_business_event(array $data):array{return ['id'=>si_business_id('EV'),'time'=>si_business_now(),'channel'=>(string)($data['channel']??'system'),'event'=>(string)($data['event']??'business_event'),'from'=>(string)($data['from']??''),'to'=>(string)($data['to']??''),'subject'=>(string)($data['subject']??''),'body'=>(string)($data['body']??''),'priority'=>(string)($data['priority']??'normal'),'status'=>(string)($data['status']??'new'),'sid'=>(string)($data['sid']??''),'details'=>(array)($data['details']??[])];}
Save file
Quick jump
open a path
Open