Disaster Recovery Plan
Run ID: 69cd32773e7fb09ff16a8e182026-04-01Infrastructure
PantheraHive BOS
BOS Dashboard

Generate a comprehensive disaster recovery plan with RTO/RPO targets, backup strategies, failover procedures, communication plans, and testing schedules.

This output addresses two distinct requests as identified in your prompt:

  1. A comprehensive Disaster Recovery Plan (DRP), which is the primary deliverable for "Step 1 of 3 for the workflow: 'Disaster Recovery Plan'".
  2. A comprehensive Marketing Strategy, as requested at the end of your prompt.

Disaster Recovery Plan (DRP) - Comprehensive Outline

This document outlines a comprehensive Disaster Recovery Plan (DRP) designed to minimize downtime, data loss, and operational impact in the event of a disruptive incident. It establishes clear objectives, procedures, and responsibilities to ensure business continuity and rapid recovery of critical systems and data.

Version: 1.0

Date: October 26, 2023

Prepared For: [Client Organization Name]

Prepared By: PantheraHive AI


1. Introduction and Purpose

The purpose of this Disaster Recovery Plan (DRP) is to provide a structured and actionable framework for responding to and recovering from significant disruptions that could impact [Client Organization Name]'s critical IT infrastructure, applications, and data. This plan aims to ensure the timely restoration of essential business functions, minimize financial losses, protect organizational reputation, and comply with relevant regulatory requirements.

2. Scope

This DRP covers all critical IT infrastructure, applications, and data identified as essential for [Client Organization Name]'s core business operations. This includes, but is not limited to:

  • Data Centers/Cloud Environments: Primary and secondary infrastructure locations.
  • Critical Applications: ERP, CRM, financial systems, core business applications, customer-facing portals.
  • Network Infrastructure: Routers, switches, firewalls, VPNs.
  • Servers: Physical and virtual servers (Windows, Linux, databases).
  • Data: Databases, file shares, critical documents, user data.
  • Communication Systems: Email, VoIP, collaboration tools.
  • Security Systems: Identity and Access Management (IAM), SIEM.

Out of scope: Business Continuity Planning (BCP) aspects beyond IT recovery (e.g., supply chain, human resources, physical site recovery not directly tied to IT). This DRP is a component of a broader BCP.

3. Key Personnel and Roles (Disaster Recovery Team)

A dedicated Disaster Recovery Team (DRT) will be established with clearly defined roles and responsibilities.

  • DR Coordinator/Incident Commander:

* Leads the overall DR effort.

* Authorizes DRP activation.

* Primary communication liaison for executive management.

  • IT Infrastructure Lead:

* Oversees network, server, and storage recovery.

* Manages hardware procurement/provisioning at recovery site.

  • Application Lead:

* Coordinates application restoration and configuration.

* Verifies application functionality.

  • Database Administrator (DBA) Lead:

* Manages database backup restoration and integrity checks.

* Ensures data consistency.

  • Network Operations Lead:

* Manages network connectivity, DNS, and routing at recovery site.

* Ensures secure external access.

  • Security Lead:

* Ensures security protocols are maintained during recovery.

* Monitors for new threats.

  • Communication Lead:

* Manages internal and external communications.

* Provides status updates.

Contact List: An up-to-date contact list for all DRT members, executive management, key vendors, and emergency services will be maintained in an accessible, off-site location (e.g., secure cloud document, printed copy).

4. Risk Assessment Summary (High-Level)

While a full risk assessment is a separate deliverable, this DRP acknowledges potential threats including:

  • Natural Disasters (e.g., fires, floods, earthquakes)
  • Cyber Attacks (e.g., ransomware, data breaches, DDoS)
  • Hardware/Software Failures (e.g., critical server failure, data corruption)
  • Human Error (e.g., accidental data deletion, misconfiguration)
  • Utility Outages (e.g., prolonged power loss, internet disruption)

This plan is designed to mitigate the impact of such events on critical IT services.

5. Recovery Objectives (RTO/RPO Targets)

Recovery objectives define the acceptable levels of data loss and downtime for critical systems. These targets are based on business impact analysis (BIA) and criticality.

| Critical System/Application | Recovery Time Objective (RTO) | Recovery Point Objective (RPO) | Business Impact Justification |

| :-------------------------- | :------------------------------ | :------------------------------ | :---------------------------- |

| Tier 0 (Mission Critical) | | | |

| Core ERP System | 4 hours | 1 hour | Direct revenue impact, legal/compliance risk |

| Primary Customer Portal | 2 hours | 30 minutes | Customer satisfaction, sales, brand reputation |

| Key Financial Systems | 4 hours | 1 hour | Financial reporting, legal/compliance |

| Tier 1 (Business Critical)| | | |

| CRM System | 8 hours | 4 hours | Sales operations, customer service |

| Email Services | 6 hours | 2 hours | Internal/external communication |

| Internal Collaboration Tools| 12 hours | 4 hours | Employee productivity |

| Tier 2 (Business Support) | | | |

| HR System | 24 hours | 8 hours | HR operations, payroll |

| Development/Test Environments| 48 hours | 24 hours | Project delays |

  • RTO (Recovery Time Objective): The maximum acceptable duration of time that a business process can be interrupted without causing unacceptable damage.
  • RPO (Recovery Point Objective): The maximum acceptable amount of data loss measured in time.

6. Backup and Data Recovery Strategy

A robust backup strategy is fundamental to achieving RPO targets.

6.1. Backup Types and Frequency

  • Full Backups: Weekly for all critical systems and data. Stored off-site.
  • Incremental Backups: Daily for all critical systems and data, capturing changes since the last backup. Stored off-site.
  • Differential Backups: (Optional, if applicable) Daily for specific high-change data, capturing changes since the last full backup. Stored off-site.
  • Database Transaction Logs: Continuously shipped (e.g., SQL AlwaysOn, Oracle Data Guard) or frequently backed up (every 15-30 minutes) for mission-critical databases to meet RPO targets.
  • Cloud Snapshots: Regular snapshots of critical VMs and cloud services (e.g., AWS EBS snapshots, Azure VM backups).

6.2. Backup Storage Locations and Retention

  • On-site: Short-term backups (e.g., 7 days) for quick recovery from minor incidents.
  • Off-site (Secure Data Center): Long-term backups (e.g., 30 days, 90 days, 1 year, 7 years for compliance) stored in a geographically separate, secure facility.
  • Cloud Storage (Immutable): Primary off-site storage for critical data, utilizing object storage with immutability features to protect against ransomware and accidental deletion. Encryption at rest and in transit is mandatory.
  • Retention Policy:

* Daily backups: 7 days

* Weekly full backups: 4 weeks

* Monthly full backups: 12 months

* Annual full backups: 7 years (or as per compliance requirements)

6.3. Data Restoration Procedures

  • Standard Operating Procedures (SOPs): Detailed, documented procedures for restoring different types of data (files, databases, entire VMs) from various backup sources.
  • Verification: Post-restoration data integrity checks and application functionality testing are mandatory.
  • Priority: Restoration will follow the RTO/RPO priority matrix (Section 5).

6.4. Encryption and Security

All backups, whether in transit or at rest, must be encrypted using industry-standard protocols (e.g., AES-256). Access to backup systems and storage locations will be restricted to authorized personnel only, utilizing multi-factor authentication (MFA) and least privilege principles.

7. Disaster Detection and Activation

7.1. Monitoring Systems

  • Infrastructure Monitoring: Tools (e.g., Nagios, Zabbix, Datadog) to monitor server health, network status, storage capacity, and application performance.
  • Security Information and Event Management (SIEM): Real-time monitoring for security incidents, unauthorized access, and anomalous behavior.
  • Environmental Monitoring: Sensors for power, temperature, humidity, and fire detection in data centers.

7.2. Incident Classification

Incidents will be classified based on severity and impact to determine if DRP activation is required.

  • Minor Incident: Localized outage, single server failure. Handled by standard IT operations.
  • Major Incident: Multiple critical systems down, significant data loss risk, extended outage. DRP activation may be considered.
  • Disaster: Catastrophic failure of primary data center/site, widespread system failure, inability to recover within RTOs using standard procedures. DRP Activation Required.

7.3. DRP Activation Criteria

The DR Coordinator, in consultation with executive management, will activate the DRP if any of the following conditions are met:

  • Inability to restore critical services within their defined RTO using standard operational procedures.
  • Physical destruction or inaccessibility of the primary data center/site.
  • Widespread data corruption or loss impacting multiple critical systems.
  • A declared emergency by public authorities impacting the primary facility.
  • Significant cyberattack rendering primary systems unusable and unrecoverable without invoking DR.

8. Failover and Recovery Procedures

This section outlines the step-by-step process for recovering from a declared disaster.

8.1. Phase 1: Notification and Assessment (0-1 hour)

  1. Detect Disaster: Monitoring systems alert or personnel report incident.
  2. Verify Incident: Initial assessment by IT Operations to confirm the nature and scope of the event.
  3. Notify DR Coordinator: Immediate notification to the DR Coordinator.
  4. DR Coordinator Decision: DR Coordinator assesses the situation and decides whether to activate the DRP.
  5. Assemble DR Team: Activate DRT via pre-defined communication channels (SMS, conference bridge).
  6. Initial Briefing: DRT convenes to review the situation, confirm DRP activation, and assign initial tasks.

8.2. Phase 2: Activation and Isolation (1-2 hours)

  1. Isolate Primary Systems: If the primary site is compromised (e.g., cyberattack), ensure full isolation to prevent further damage or spread.
  2. Declare Disaster: Official declaration by DR Coordinator.
  3. Notify Stakeholders: Initiate internal and external communication as per the Communication Plan (Section 9).
  4. Access Recovery Site: Ensure secure access to the designated recovery environment (e.g., secondary data center, cloud region).

8.3. Phase 3: Recovery Site Infrastructure Activation (2-4 hours)

  1. Network Configuration: Configure network connectivity, firewalls, VPNs, and DNS at the recovery site.
  2. Server Provisioning: Provision or scale up virtual machines/instances in the recovery environment based on critical system requirements.
gemini Output

This document outlines the Disaster Recovery Plan (DRP) for PantheraHive, designed to ensure the swift and effective recovery of critical IT systems and business operations in the event of a disaster. This plan provides detailed strategies for data backup, system recovery, communication protocols, and regular testing to minimize downtime and data loss, adhering to defined Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs).


Disaster Recovery Plan: PantheraHive

Document Version: 1.0

Date: October 26, 2023

Prepared By: PantheraHive Operations Team

Review Date: April 26, 2024


1. Executive Summary

This Disaster Recovery Plan (DRP) serves as a comprehensive guide for PantheraHive to respond to and recover from disruptive events that may impact our critical IT infrastructure and business operations. The primary goal is to restore essential services within acceptable timeframes, minimize financial losses, and maintain customer trust. This plan details the strategies, procedures, and responsibilities required to achieve our defined Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs), ensuring business continuity and resilience.

2. Introduction

2.1 Purpose

The purpose of this Disaster Recovery Plan is to:

  • Provide a structured framework for responding to and recovering from various disaster scenarios (e.g., natural disasters, cyberattacks, major system failures).
  • Minimize the impact of disruptive events on critical business functions.
  • Define clear roles, responsibilities, and procedures for the Disaster Recovery Team.
  • Ensure the timely recovery of critical IT systems and data within established RTOs and RPOs.
  • Facilitate effective communication with internal and external stakeholders during a disaster.
  • Establish a regular testing and maintenance schedule to ensure the plan remains current and effective.

2.2 Scope

This DRP covers all critical IT infrastructure, applications, data, and associated services essential for PantheraHive's core business operations. This includes, but is not limited to:

  • Primary data centers and cloud environments.
  • Core business applications (e.g., CRM, ERP, financial systems, production platforms).
  • Network infrastructure (LAN, WAN, VPN).
  • Databases and associated data.
  • Communication systems (email, VoIP, collaboration tools).
  • Employee workstations and remote access capabilities.

2.3 Objectives

The key objectives of this DRP are to:

  • Minimize Downtime: Reduce the duration of service outages for critical systems.
  • Minimize Data Loss: Recover data to the most recent possible point, as defined by RPOs.
  • Ensure Business Continuity: Enable critical business functions to resume operations quickly.
  • Protect Assets: Safeguard IT infrastructure, data, and intellectual property.
  • Maintain Reputation: Uphold customer trust and company credibility.
  • Comply with Regulations: Meet relevant industry and legal compliance requirements.

3. Disaster Declaration Criteria

A disaster is declared when a critical event occurs that renders primary systems or facilities unavailable and significantly impacts business operations beyond the scope of routine incident management. The criteria for declaring a disaster include, but are not limited to:

  • Prolonged System Outage: Unavailability of a critical system or application for a period exceeding its defined RTO threshold.
  • Major Data Loss: Irrecoverable loss of critical data that cannot be restored through standard backup procedures.
  • Facility Unavailability: Damage to or inaccessibility of primary data center(s) or critical office locations.
  • Widespread Network Failure: Loss of connectivity impacting a significant portion of the organization.
  • Cybersecurity Incident: A successful cyberattack (e.g., ransomware, data breach) that compromises critical systems or data integrity, requiring full system recovery.
  • Natural Disasters: Events such as floods, earthquakes, or severe storms rendering infrastructure inoperable.

The Disaster Recovery Team Lead (or designated alternate) is responsible for assessing the situation against these criteria and formally declaring a disaster, initiating the DRP.

4. Roles and Responsibilities

Effective disaster recovery relies on clearly defined roles and responsibilities.

4.1 Disaster Recovery Team (DRT)

| Role | Primary Responsibility

gemini Output

This document outlines the comprehensive Disaster Recovery Plan (DRP) for [Your Organization Name]. Its purpose is to ensure the rapid and effective recovery of critical IT systems and data in the event of a disaster, minimizing downtime, data loss, and business disruption.


Disaster Recovery Plan: [Your Organization Name]

Document Version: 1.0

Date: October 26, 2023

Prepared By: [Your Name/Department]


1. Executive Summary

This Disaster Recovery Plan (DRP) details the strategies, procedures, and responsibilities for restoring [Your Organization Name]'s critical business operations and IT infrastructure following a disruptive event. It establishes clear Recovery Time Objectives (RTO) and Recovery Point Objectives (RPO) for key systems, outlines robust backup and recovery strategies, defines comprehensive failover and failback procedures, and includes a structured communication plan and regular testing schedule. The plan aims to ensure business continuity, protect critical data, and maintain stakeholder confidence in the face of unforeseen challenges.

2. Introduction

2.1. Purpose

The primary purpose of this Disaster Recovery Plan is to provide a structured, actionable framework for responding to and recovering from events that significantly disrupt normal business operations and IT services. This plan aims to:

  • Minimize the impact of disasters on business operations.
  • Ensure the timely recovery of critical IT systems and data.
  • Protect the organization's assets, reputation, and financial stability.
  • Comply with regulatory requirements and industry best practices.
  • Provide a clear set of procedures and responsibilities for disaster recovery personnel.

2.2. Scope

This DRP covers the recovery of critical IT infrastructure, applications, and data residing in [Primary Data Center Location] and supporting [Key Business Functions/Departments, e.g., Sales, Finance, Operations]. It addresses recovery from various disaster scenarios, including but not limited to:

  • Natural disasters (e.g., flood, earthquake, fire)
  • Major power outages
  • Cyberattacks (e.g., ransomware, data breaches)
  • Critical hardware failures
  • Software corruption

Out of Scope: This plan does not detail individual incident response procedures for minor outages or security incidents that do not qualify as a disaster. It assumes the availability of an up-to-date Business Continuity Plan (BCP) that addresses non-IT related business process recovery.

2.3. Key Definitions

  • Disaster: An event that causes significant disruption to business operations and requires activation of the DRP.
  • Incident: A non-disruptive event that can be resolved through standard operational procedures without activating the DRP.
  • Recovery Time Objective (RTO): The maximum acceptable duration of time that an application, system, or service can be down after a disaster before unacceptable consequences occur.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data loss measured in time. It defines the point in time to which systems and data must be recovered.
  • Failover: The process of switching to a redundant or standby system or data center in the event of a primary system failure.
  • Failback: The process of switching operations back to the primary system or data center once it has been restored and verified.
  • Critical Systems: Systems and applications deemed essential for the continued operation of core business functions, as identified by a Business Impact Analysis (BIA).

3. Disaster Recovery Team and Roles

Effective disaster recovery relies on a well-defined team structure with clear roles and responsibilities.

3.1. DR Team Structure

| Role | Primary Contact | Alternate Contact | Responsibilities |

|---|-----------------------------|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

disaster_recovery_plan.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547} "); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/**(.+?)**/g,"$1"); hc=hc.replace(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); }function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}