Disaster Recovery Plan
Run ID: 69cb777061b1021a29a895052026-03-31Infrastructure
PantheraHive BOS
BOS Dashboard

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

Disaster Recovery Plan (DRP)

1. Executive Summary

This Disaster Recovery Plan (DRP) outlines the strategies, procedures, and responsibilities for restoring critical IT infrastructure, applications, and data following a disruptive event. The primary objective is to minimize downtime, data loss, and operational impact, ensuring business continuity and maintaining stakeholder confidence. This plan defines Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs) for critical systems, detailing backup strategies, failover procedures, communication protocols, and a comprehensive testing schedule to ensure readiness.

2. Objectives

The core objectives of this Disaster Recovery Plan are to:

  • Minimize Downtime: Achieve defined RTOs for critical systems and applications.
  • Minimize Data Loss: Achieve defined RPOs for critical data.
  • Ensure Business Continuity: Facilitate the rapid resumption of essential business operations.
  • Protect Assets: Safeguard critical IT infrastructure, data, and intellectual property.
  • Maintain Compliance: Adhere to relevant legal, regulatory, and industry standards.
  • Provide Clear Guidance: Establish clear roles, responsibilities, and procedures for disaster response and recovery.
  • Enable Effective Communication: Facilitate timely and accurate communication with internal and external stakeholders.

3. Scope

This DRP covers the recovery of critical IT systems, applications, and data essential for the operation of the organization. It encompasses:

  • Primary Data Center/On-Premise Infrastructure: Servers, storage, networking equipment, virtualization platforms.
  • Cloud Infrastructure: Critical applications and data hosted in public or private cloud environments.
  • Key Applications: ERP, CRM, Email (Exchange/M365), Database Systems (SQL, Oracle), Web Servers, File Servers, Collaboration Tools.
  • Critical Data: Customer data, financial records, operational data, intellectual property.
  • Network Connectivity: Internal and external network access, VPNs, Internet access.
  • Supporting Systems: DNS, Directory Services (Active Directory), Monitoring Systems.

This plan does not cover broader Business Continuity Planning (BCP) aspects such as human resource recovery (beyond IT personnel), physical facility restoration (beyond IT equipment), or supply chain disruptions, except where they directly impact IT recovery.

4. Key Personnel and Roles

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

  • DRP Coordinator (CIO/IT Director):

* Overall command and control during a disaster.

* Authorizes disaster declaration and recovery initiation.

* Liaison with executive management and external stakeholders.

* Oversees DRP testing and maintenance.

  • Technical Recovery Lead (IT Manager/Senior Architect):

* Manages technical recovery efforts.

* Coordinates technical teams.

* Ensures adherence to recovery procedures.

  • Network & Security Team Lead:

* Restoration of network infrastructure (LAN, WAN, VPN, DNS).

* Firewall and security appliance configuration.

* Security incident response during recovery.

  • Server & Virtualization Team Lead:

* Recovery of physical and virtual servers.

* Hypervisor and VM restoration.

* Operating system configuration.

  • Application & Database Team Lead:

* Restoration of critical applications and databases.

* Data integrity verification.

* Application configuration and testing.

  • Data Protection & Storage Team Lead:

* Management of backup and recovery operations.

* Storage array configuration and data restoration.

* Verification of data integrity and availability.

  • Communication Lead (Marketing/HR/Senior Admin):

* Manages internal and external communications.

* Drafts and disseminates status updates.

* Coordinates with media and public relations (if necessary).

Contact details for all key personnel are maintained in Appendix A: Contact List.

5. Business Impact Analysis (BIA) Summary & Recovery Objectives

A prior Business Impact Analysis (BIA) identified critical business functions, their dependencies on IT systems, and the acceptable downtime and data loss thresholds.

5.1 Critical Business Functions and Supporting Systems

| Business Function | Criticality | Supporting IT Systems |

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

| Order Processing | Critical | ERP System, Database Server, Web Server, Network |

| Customer Service | Critical | CRM System, Email Server, VoIP System, Network |

| Financial Reporting | High | ERP System, Financial Database, File Server |

| Employee Collaboration | Medium | Email Server, Collaboration Platform, File Server |

| Website/E-commerce | Critical | Web Servers, Database Server, Payment Gateway |

| Internal Communications | High | Email Server, VoIP System, Internal Chat |

5.2 Recovery Time Objective (RTO) Targets

The maximum acceptable duration for a business process to be unavailable after an incident.

| IT System/Application | RTO (Target) | Notes |

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

| ERP System | 4 hours | Core business operations, financial transactions. |

| CRM System | 4 hours | Customer support, sales operations. |

| Primary Database Servers | 2 hours | Data dependencies for multiple critical applications. |

| Email System (M365/On-prem)| 6 hours | Internal/external communication. |

| Web Servers (E-commerce) | 2 hours | Direct revenue generation. |

| File Servers | 8 hours | Document storage, collaboration. |

| Network Infrastructure | 2 hours | Foundational for all IT services. |

| Directory Services (AD) | 2 hours | User authentication, system access. |

5.3 Recovery Point Objective (RPO) Targets

The maximum acceptable amount of data loss measured in time.

| Data Type/Application | RPO (Target) | Notes |

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

| Transactional Databases | 15 minutes | ERP, CRM, E-commerce (real-time data). |

| Critical Application Data | 1 hour | Configuration files, application-specific data. |

| User Files/Shared Drives | 4 hours | General productivity data. |

| Email Data | 1 hour | Critical communications. |

6. Backup and Data Recovery Strategies

A multi-layered backup strategy ensures data availability and integrity.

6.1 Data Backup Types and Frequency

  • Full Backups: Weekly, performed over weekends.
  • Incremental Backups: Daily, capturing changes since the last full or incremental backup.
  • Differential Backups: Daily, capturing changes since the last full backup.
  • Database Transaction Logs: Continuously backed up (log shipping/replication) or every 15 minutes for critical databases.
  • Snapshotting: Hourly for critical VMs and storage volumes.

6.2 Backup Retention Policies

  • Daily Backups: Retained for 30 days.
  • Weekly Backups: Retained for 90 days.
  • Monthly Backups: Retained for 1 year.
  • Yearly Backups: Retained for 7 years (or as required by compliance).

6.3 Backup Storage Locations

  • On-site Storage: Short-term recovery, local disk arrays, NAS. (For rapid restore of recent data).
  • Off-site Storage: Encrypted cloud storage (e.g., AWS S3 Glacier, Azure Blob Storage) or secure third-party vaulting. (For disaster recovery scenarios where the primary site is lost).
  • Geographically Separated Data Centers: For active-passive or active-active replication of critical systems.

6.4 Data Encryption

  • All data at rest (on backup media, storage arrays) is encrypted using AES-256.
  • All data in transit (during backup, replication) is encrypted using TLS 1.2+.
  • Encryption keys are securely managed and stored separately from the backup data.

6.5 Backup Verification and Monitoring

  • Automated Verification: Daily checks for successful backup job completion and data integrity.
  • Regular Restore Tests: Quarterly, random selection of backups are restored to a test environment to verify recoverability and data integrity.
  • Monitoring: Backup system alerts are integrated with the central monitoring system, notifying the Data Protection Team of any failures or issues.

7. Disaster Detection and Declaration

7.1 Disaster Detection Criteria

A disaster is defined as an event that renders critical IT systems or the primary data center unavailable for an extended period, exceeding predefined RTOs, or causing significant data loss. Examples include:

  • Major power outage lasting > 4 hours.
  • Fire, flood, or natural disaster impacting data center.
  • Catastrophic hardware failure impacting multiple critical systems.
  • Major cyber-attack (e.g., ransomware, data breach) compromising critical infrastructure.
  • Network outage isolating the primary data center for > 2 hours.

7.2 Disaster Declaration Procedure

  1. Initial Assessment (IT Operations/Monitoring Team): Upon detection of a severe incident, the IT Operations team performs an immediate assessment to determine the scope and impact.
  2. Notification to DRP Coordinator: If the incident meets disaster criteria, the DRP Coordinator is immediately notified.
  3. DRP Coordinator Evaluation: The DRP Coordinator, in consultation with relevant technical leads, evaluates the incident against disaster declaration criteria.
  4. Disaster Declaration: If confirmed, the DRP Coordinator officially declares a disaster and initiates the DRP. This declaration triggers the activation of the DRT and the communication plan.
  5. Executive Notification: Executive management is immediately informed of the disaster declaration and the activation of the DRP.

8. Incident Response Procedures

While the DRP focuses on recovery, initial incident response is crucial.

  1. Assess & Verify: Understand the nature, scope, and impact of the incident. Verify system outages and data loss.
  2. Containment: Take immediate steps to prevent further damage (e.g., isolate affected systems, shut down compromised services, block malicious traffic).
  3. Eradication: Remove the root cause of the incident (e.g., patch vulnerabilities, remove malware, repair faulty hardware).
  4. Recovery: Initiate DRP procedures to restore systems and data to a functional state.
  5. Post-Incident Analysis: Once recovered, conduct a thorough review to understand the cause, effectiveness of response, and identify improvements for future prevention and recovery.

9. Failover and Recovery Procedures

These procedures detail the steps to restore services in the recovery environment. Specific runbooks are maintained for each critical system in Appendix B: System Recovery Runbooks.

9.1 Network Recovery

  1. Establish Connectivity to Recovery Site:

* Activate redundant WAN links or VPN tunnels to the recovery data center/cloud region.

* Configure network devices (routers, firewalls) at the recovery site.

  1. DNS Updates:

* Update external DNS records (A, CNAME, MX) to point to the recovery site's IP addresses.

* Reduce DNS TTLs prior to planned failovers.

  1. Security Configuration:

* Apply appropriate firewall rules and security policies at the recovery site.

* Verify VPN access for remote users.

9.2 Server and Virtualization Recovery

  1. Provision Compute Resources:

* If using a hot/warm standby, verify existing VM/server instances.

* If cold standby or cloud-based, provision new virtual machines or physical servers at the recovery site.

  1. Restore Operating Systems:

* Deploy OS images or restore from backups for non-replicated servers.

  1. Configure Base Services:

* Join servers to the domain, configure basic network settings, install monitoring agents.

9.3 Storage and Data Recovery

  1. Activate Recovery Storage:

* Bring online storage arrays at the recovery site.

* Mount replicated volumes or provision new storage.

  1. Data Restoration:

* Prioritize data restoration based on RPO and application criticality.

* Restore databases from the latest available backup (including transaction logs).

* Restore application data and user files from backups.

* Perform data integrity checks after restoration.

9.4 Application Recovery

  1. Database Restoration and Recovery:

* Restore primary databases, apply transaction logs to achieve RPO.

* Verify database integrity and connectivity.

  1. Application Server Deployment/Configuration:

* Deploy application code and configurations to restored servers.

* Install necessary middleware and dependencies.

  1. Dependency Mapping:

* Ensure all interdependent applications and services are restored in the correct order.

  1. Application Testing:

* Perform unit tests, integration tests, and user acceptance testing (UAT) to confirm full application functionality.

9.5 Service Cutover

  1. Validation: Thoroughly validate all restored systems and applications in the recovery environment.
  2. Traffic Redirection: Once validation is complete, redirect user traffic to the recovery site (e.g., via DNS changes, load balancer configuration).
  3. Monitoring: Continuously monitor systems at the recovery site for performance and stability.

10. Communication Plan

Effective communication is paramount during

gemini Output

Disaster Recovery Plan

Document Version: 1.0

Date: October 26, 2023

Prepared For: [Customer Organization Name]

Prepared By: PantheraHive


1. Introduction

This Disaster Recovery Plan (DRP) outlines the procedures, responsibilities, and resources required to restore critical IT systems and business operations following a disruptive event or disaster. The primary objective is to minimize downtime, data loss, and financial impact, ensuring business continuity and the timely recovery of essential services.

1.1. Purpose

To provide a structured framework for responding to and recovering from various disaster scenarios, ensuring the continuous availability of critical business functions and data integrity.

1.2. Scope

This DRP covers the recovery of critical IT infrastructure, applications, and data essential for [Customer Organization Name]'s operations. It includes procedures for data backup, system failover, communication, and restoration of services. It specifically addresses:

  • Critical servers (physical and virtual)
  • Network infrastructure
  • Core business applications (e.g., ERP, CRM, financial systems)
  • Databases
  • User data and file shares
  • Connectivity and access to critical systems

1.3. Objectives

  • Minimize the impact of a disaster on business operations.
  • Achieve defined Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs) for critical systems.
  • Ensure the timely and orderly recovery of critical IT infrastructure and data.
  • Establish clear roles, responsibilities, and communication channels during a disaster.
  • Regularly test and update the DRP to ensure its effectiveness.

2. Disaster Recovery Team

The Disaster Recovery Team (DRT) is responsible for implementing and managing the DRP.

2.1. Roles and Responsibilities

| Role | Primary Contact | Alternate Contact | Responsibilities

gemini Output

This document outlines the Disaster Recovery Plan (DRP) for PantheraHive, designed to ensure the continuity of critical business operations and minimize the impact of unforeseen catastrophic events. This plan provides a structured approach to recover essential IT infrastructure, applications, and data within defined Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs).


Disaster Recovery Plan (DRP)

1. Executive Summary

This Disaster Recovery Plan (DRP) details the strategies, procedures, and responsibilities required to restore critical business functions and IT services in the event of a disaster. The primary objective is to minimize downtime, data loss, and financial impact, ensuring business continuity and maintaining stakeholder trust. The plan addresses RTO/RPO targets, backup strategies, failover procedures, communication protocols, and a robust testing schedule to ensure readiness.

2. Introduction

2.1. Purpose

The purpose of this DRP is to provide a comprehensive framework for responding to and recovering from disruptive events that could impact PantheraHive's critical IT infrastructure and operations. It aims to restore essential services efficiently and effectively, minimizing business interruption.

2.2. Scope

This DRP covers all critical IT systems, applications, data, and associated infrastructure supporting PantheraHive's core business functions. It includes procedures for data backup, system recovery, communication, and personnel responsibilities across primary and secondary data center locations, as well as cloud-based services.

2.3. Objectives

  • Minimize Downtime: Restore critical systems and applications within predefined RTOs.
  • Minimize Data Loss: Recover data with minimal loss, adhering to established RPOs.
  • Ensure Business Continuity: Enable the resumption of critical business processes.
  • Protect Assets: Safeguard IT infrastructure, data, and intellectual property.
  • Facilitate Communication: Establish clear communication channels for internal and external stakeholders during a disaster.
  • Maintain Compliance: Ensure recovery efforts comply with relevant regulatory and contractual obligations.

2.4. Key Definitions

  • Disaster: An event that causes a significant disruption to normal business operations, rendering primary IT infrastructure or facilities unusable.
  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a computer, system, network, or application can be down after a disaster or disruption.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data (measured in time) that can be lost after a disaster.
  • Business Continuity Plan (BCP): A broader plan encompassing all aspects of business operations, of which DRP is a critical component.
  • Failover: The process of switching to a redundant or standby system upon the failure or abnormal termination of the previously active system.
  • Failback: The process of restoring operations to the original primary system after the disaster has been resolved and the primary system is fully operational.

3. Disaster Recovery Team

The Disaster Recovery Team is responsible for executing the DRP. Roles and responsibilities are assigned as follows:

| Role | Primary Contact | Alternate Contact | Responsibilities

This plan is a living document and will be reviewed and updated annually or following significant changes to the IT environment or business objectives.


4. Critical Systems and Applications Identification

The following systems are classified as critical based on their impact on business operations. Their RTOs and RPOs are defined accordingly.

| System ID | System Name | Description | Tier |

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

| CIS-001 | E-commerce Platform | Customer-facing online store, order processing. | 1 |

| CIS-002 | Inventory Management | Real-time inventory tracking and order fulfillment. | 1 |

| CIS-003 | CRM System | Customer relationship management, sales, and support. | 2 |

| CIS-004 | Financial Accounting | General ledger, accounts payable/receivable. | 2 |

| CIS-005 | ERP System (Core Modules) | Enterprise Resource Planning (Production, HR, Supply Chain). | 1 |

| CIS-006 | Database Servers (Prod) | Primary databases for E-commerce, Inventory, ERP. | 1 |

| CIS-007 | Email & Collaboration | Internal and external communication (Exchange Online / G Suite).

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
\n\n\n"); 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'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); 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'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); 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)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- 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",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); 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'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); 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}\n"); 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)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- 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",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "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"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); 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';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); 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}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); 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)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/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("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/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)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- 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:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== 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(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } 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);}});}