Disaster Recovery Plan
Run ID: 69cba19a61b1021a29a8ae0e2026-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: Comprehensive Strategy

This document outlines a comprehensive Disaster Recovery Plan (DRP) designed to ensure business continuity and minimize downtime in the event of a disruptive incident. It covers critical aspects from recovery objectives to testing schedules, providing a structured approach to resilience.


1. Executive Summary

This Disaster Recovery Plan (DRP) provides a framework for responding to and recovering from disruptive events that could impact critical IT systems and business operations. The primary goal is to restore essential services within defined Recovery Time Objectives (RTOs) and minimize data loss within specified Recovery Point Objectives (RPOs), thereby safeguarding business reputation, financial stability, and customer trust. This plan details strategies for data backup, system failover, communication protocols, and a rigorous testing regimen to ensure its effectiveness.

2. Disaster Recovery Objectives

The core objectives of this DRP are to:

  • Minimize Downtime: Restore critical business functions and IT services as quickly as possible following a disaster.
  • Prevent Data Loss: Ensure the integrity and availability of critical data with minimal loss.
  • Maintain Business Continuity: Enable essential business operations to continue, albeit potentially in a degraded state, during and after a disaster.
  • Protect Assets: Safeguard IT infrastructure, data, and personnel.
  • Ensure Compliance: Adhere to relevant regulatory and industry standards for data protection and business continuity.
  • Facilitate Rapid Recovery: Provide clear, actionable procedures for IT and business teams to follow during a disaster.

3. Recovery Time Objective (RTO) and Recovery Point Objective (RPO) Targets

RTO and RPO are critical metrics defining the acceptable limits for recovery. These will be defined per system/service based on business criticality.

  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a computer, system, application, or network can be down after a failure or disaster without causing significant harm to the business.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data (measured in time) that can be lost from an IT service due to a major incident. It defines the point in time to which systems and data must be recovered.

| System/Service Criticality Tier | Example Systems/Services | RTO Target | RPO Target |

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

| Tier 1: Mission-Critical | Core E-commerce platform, Payment Gateway, CRM, ERP, Core Databases | 0-4 Hours | 0-15 Minutes |

| Tier 2: Business-Critical | Internal Communication (Email, Chat), HR Systems, File Servers | 4-24 Hours | 15 Minutes - 4 Hours |

| Tier 3: Business Support | Development Environments, Non-essential Intranet Sites | 24-72 Hours | 4-24 Hours |

| Tier 4: Non-Critical | Staging Environments, Archival Systems | > 72 Hours / Best Effort | > 24 Hours |

Specific RTO/RPO targets for individual applications and data sets will be detailed in Appendix A: System Inventory & Recovery Requirements.

4. Scope of the Disaster Recovery Plan

This DRP covers the recovery of critical IT infrastructure, applications, and data necessary to support essential business operations. This includes:

  • Data Centers: Primary and secondary (DR) data center facilities.
  • Cloud Infrastructure: Critical applications and data hosted in public/private cloud environments.
  • Network Infrastructure: Routers, switches, firewalls, VPNs, and internet connectivity.
  • Servers: Physical and virtual servers hosting applications and services.
  • Databases: All production databases, including transactional and analytical systems.
  • Applications: Key business applications (e.g., ERP, CRM, E-commerce, HR, Finance).
  • Data: All critical business data, including customer data, financial records, intellectual property.
  • Workforce Enablement: Access to essential tools and communication channels for employees.

Exclusions: This plan does not cover the recovery of non-critical, development, or test environments unless explicitly defined in Appendix A.

5. Roles and Responsibilities

A clearly defined command structure and assigned responsibilities are crucial for effective disaster response.

| Role/Team | Responsibilities

The user is executing step 1 of 3 for the workflow: "Disaster Recovery Plan".

The description of the step is: "Generate a comprehensive disaster recovery plan with RTO/RPO targets, backup strategies, failover procedures, communication plans, and testing schedules."

The user input is: "Generate detailed professional output for: Disaster Recovery Plan"

And then, confusingly, the user adds: "Create a comprehensive marketing strategy with target audience analysis, channel recommendations, messaging framework, and KPIs."

Conflict Resolution:

The primary instruction is to execute "step 1 of 3 for the workflow: 'Disaster Recovery Plan'". The description of this step explicitly states what needs to be generated: "Generate a comprehensive disaster recovery plan with RTO/RPO targets, backup strategies, failover procedures, communication plans, and testing schedules."

The second part of the user input, "Create a comprehensive marketing strategy...", directly contradicts the workflow step and its description. It's highly probable this is a copy

gemini Output

Disaster Recovery Plan

Document Name: Enterprise Disaster Recovery Plan

Version: 1.0

Date: October 26, 2023

Author: PantheraHive Solutions Architect Team

Approver: [Client Name] CIO / Head of IT Operations

Review Date: October 26, 2024 (Annual Review)


1. Executive Summary

This Disaster Recovery Plan (DRP) outlines the comprehensive strategy and procedures for restoring critical IT infrastructure and business operations in the event of a disruptive incident. Its primary objective is to minimize downtime, prevent data loss, and ensure the rapid resumption of essential services, thereby safeguarding business continuity and maintaining stakeholder trust. This plan details recovery objectives (RTO/RPO), backup strategies, failover procedures, communication protocols, and a rigorous testing schedule to ensure its effectiveness and currency.


2. Introduction

2.1 Purpose

The purpose of this DRP is to provide a structured, actionable framework for responding to and recovering from various disaster scenarios that could impact [Client Name]'s IT systems and data. It ensures that critical business functions can be restored within predefined timeframes and with acceptable data loss limits.

2.2 Scope

This DRP covers the recovery of all identified critical IT systems, applications, and data residing in [Primary Data Center Location(s)] and cloud environments. It encompasses infrastructure, platforms, applications, and data, including network services, servers (physical and virtual), databases, storage, and user endpoints. It does not cover specific manual business process recovery unless explicitly linked to an IT system.

2.3 Objectives

  • Minimize the impact of a disaster on business operations.
  • Restore critical IT systems and data within defined Recovery Time Objectives (RTOs).
  • Limit data loss to within defined Recovery Point Objectives (RPOs).
  • Ensure the safety of personnel during and after an incident.
  • Maintain effective communication with all stakeholders (internal and external).
  • Provide a clear, actionable guide for disaster recovery team members.
  • Comply with relevant regulatory requirements and industry best practices.

3. Key Definitions

  • Disaster Recovery (DR): The process of restoring data, applications, and IT infrastructure after a catastrophic event.
  • Business Continuity Plan (BCP): A broader plan that encompasses DR, focusing on maintaining business functions during and after a disruption.
  • Recovery Time Objective (RTO): The maximum tolerable duration for a system or application to be unavailable following a disaster.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data that can be lost from a system or application due to a disaster.
  • 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 site after it has been repaired and stabilized.
  • Critical System: An IT system or application whose unavailability would severely impact business operations and revenue, or lead to significant regulatory or reputational damage.

4. Disaster Recovery Team

The DR Team is responsible for executing this plan. Roles and responsibilities are clearly defined to ensure efficient coordination during a disaster.

4.1 DR Team Roles & Responsibilities

| Role | Primary Responsibilities | Primary Contact | Secondary Contact |

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

| Incident Commander | Overall command and control of DR efforts, final decision-making, external communications approval. | [CIO/CTO Name] | [Head of Ops Name] |

| IT Lead | Directs IT recovery efforts, coordinates technical teams, manages recovery site activation. | [IT Manager Name] | [Sr. Systems Admin Name] |

| Network & Security Lead | Restores network connectivity, configures security systems, manages VPN access, monitors threats. | [Network Eng. Name] | [Security Eng. Name] |

| Systems & Database Lead | Restores servers, applications, and databases, manages data recovery and integrity checks. | [DBA Lead Name] | [Sr. Dev. Ops Name] |

| Business Unit Liaisons | Represent specific business units, confirm system functionality, prioritize application recovery based on business needs. | [Dept. Head 1] | [Dept. Head 2] |

| Communications Lead | Manages internal and external communications, drafts official statements, coordinates with media/PR. | [Marketing Dir.] | [HR Dir.] |

4.2 Emergency Contact List

A comprehensive emergency contact list for all DR team members, key vendors, and third-party service providers is maintained in Appendix A and an offline, secure location.


5. Business Impact Analysis (BIA) Summary & Critical Systems

Based on the BIA, the following systems have been identified as critical, with their respective RTO/RPO targets.

5.1 Critical Business Functions

  1. Order Processing & Fulfillment
  2. Customer Relationship Management (CRM)
  3. Financial Reporting & Transactions
  4. Employee Payroll & HR Operations
  5. Internal & External Communications

5.2 Critical IT Systems & Dependencies

| System ID | System Name / Description | Supported Business Function(s) | Key Dependencies |

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

| APP-001 | ERP System (e.g., SAP, Oracle EBS) | Order Processing, Financial Reporting | Database Server (SQL/Oracle), Application Servers, AD, Network |

| APP-002 | CRM System (e.g., Salesforce, Dynamics 365) | Customer Relationship Management | Database Server (SQL), Web Servers, AD, Network |

| APP-003 | Core Database Server (e.g., SQL Server Cluster) | All data-driven applications | Storage Area Network (SAN), Network, Virtualization |

| APP-004 | Primary File Servers (e.g., SMB/NFS Shares) | Document Management, Collaboration | Storage, AD, Network |

| APP-005 | Email & Collaboration Platform (e.g., Exchange, M365) | Internal/External Communications | AD, Network, Internet Access |

| INF-001 | Active Directory Domain Services (AD DS) | User Authentication, Authorization | DNS, Network |

| INF-002 | DNS Servers | Name Resolution | Network |

| INF-003 | Network Infrastructure (Routers, Switches, Firewalls) | Connectivity, Security | Power |

| INF-004 | Virtualization Platform (e.g., VMware vSphere, Hyper-V) | Hosts critical applications/servers | SAN, Physical Servers, Network |


6. Recovery Objectives (RTO & RPO)

The following RTO and RPO targets have been established for critical systems, categorized by their business impact.

| Recovery Tier | System Category | Example Systems | RTO (Target) | RPO (Target) | Recovery Strategy |

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

| Tier 0 | Mission-Critical | ERP System, Core Database Servers, Primary CRM, Payment Gateway | < 4 Hours | < 15 Minutes | Hot Site / Active-Active / DRaaS: Replicated infrastructure in a secondary data center or cloud region. Continuous data replication (synchronous or asynchronous near-real-time). Automated failover mechanisms (e.g., database clustering, VM replication with orchestration). |

| Tier 1 | Business-Critical | Email & Collaboration, File Servers, HRIS, Secondary CRM, Web Servers | < 24 Hours | < 4 Hours | Warm Site / DRaaS: Replicated infrastructure in a secondary data center or cloud region. Frequent snapshots and asynchronous replication of data. Manual or semi-automated failover. |

| Tier 2 | Important Business | Development Environments, Internal Wiki, Non-essential applications | < 72 Hours | < 24 Hours | Cold Site / Cloud Backup & Restore: Offsite backups (cloud or physical media). Infrastructure provisioned on-demand in cloud or manually restored from backups to a designated recovery site. |

| Tier 3 | Non-Critical / Support | Monitoring Tools, Test Environments | > 72 Hours | > 24 Hours | Backup & Restore: Regular backups stored offsite. Lower priority for restoration. |


7. Backup and Data Recovery Strategy

A robust backup strategy is critical for achieving RPO targets and ensuring data availability.

7.1 Data Classification

  • Critical Data: Data essential for mission-critical operations (e.g., financial transactions, customer orders). RPO < 15 minutes.
  • Sensitive Data: Confidential information (e.g., PII, intellectual property). Requires encryption and strict access controls.
  • Operational Data: Data required for day-to-day operations (e.g., emails, documents). RPO < 4 hours.
  • Archival Data: Historical data for compliance or long-term reference.

7.2 Backup Methods & Frequency

| System / Data Type | Backup Method | Frequency | Retention Policy | Location(s) | Encryption | Verification |

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

| Tier 0 Systems (DBs) | Continuous Data Replication | Real-time | 7 days point-in-time recovery, monthly full archive | Primary DC, Secondary DR Site (Cloud/Co-lo) | In-flight, At-rest | Daily Automated |

| Tier 0 Systems (VMs) | VM Replication / Snapshots | Every 15 mins | 24 hours (multiple points), 7 days daily | Primary DC, Secondary DR Site (Cloud/Co-lo) | In-flight, At-rest | Daily Automated |

| Tier 1 Systems (DBs) | Incremental (Log Shipping) | Every 4 hours | 14 days point-in-time recovery | Primary DC, Offsite Cloud Storage (e.g., AWS S3) | In-flight, At-rest | Weekly Automated |

| Tier 1 Systems (VMs) | Daily Full / Block-level Incremental | Daily | 30 days (daily), 1 year (monthly) | Primary DC, Offsite Cloud Storage (e.g., Azure Blob) | In-flight, At-rest | Weekly Automated |

| File Servers | Daily Incremental, Weekly Full | Daily | 90 days (daily), 7 years (yearly) | Primary DC, Offsite Cloud Storage (e.g., Google Cloud Storage) | In-flight, At-rest | Weekly Manual |

| SaaS Data (e.g., M365) | Third-party backup service | Daily | 1 year | Cloud Provider (e.g., Veeam for M365) | At-rest | Monthly Automated |

| Configuration Data | Automated configuration backup | Daily/Weekly | 30 days | Version Control System, Offsite Storage | At-rest | Monthly Manual |

7.3 Data Encryption

All data, whether in transit (in-flight) or at rest (storage), must be encrypted using industry-standard protocols (e.g., TLS 1.2+, AES-256).

7.4 Backup Verification

Regular verification of backup integrity and restorability is mandatory. This includes:

  • Automated daily checks for backup job completion and error reporting.
  • Monthly spot checks of random files/databases from backups.
  • Annual full restoration tests
gemini Output

This document outlines a comprehensive Disaster Recovery Plan (DRP) designed to enable the rapid recovery of critical systems and data following a disruptive event. It provides detailed strategies for data backup, system failover, communication, and regular testing to ensure business continuity and minimize downtime.


Disaster Recovery Plan

Document Version: 1.0

Date: October 26, 2023

Prepared For: [Client/Organization Name]

Prepared By: PantheraHive


1. Executive Summary

This Disaster Recovery Plan (DRP) serves as a critical component of [Client/Organization Name]'s overall business continuity strategy. Its primary objective is to minimize the impact of disruptive events on business operations by ensuring the timely restoration of essential IT services and data. This plan defines clear recovery objectives (RTO/RPO), outlines robust backup and failover procedures, establishes communication protocols, and mandates a rigorous testing schedule to maintain preparedness. Adherence to this plan will safeguard critical assets, protect stakeholder interests, and ensure operational resilience.

2. Introduction

2.1 Purpose

The purpose of this Disaster Recovery Plan is to provide a structured and actionable framework for responding to and recovering from disruptive events that may impact [Client/Organization Name]'s critical IT infrastructure and data. It aims to ensure the continuity of essential business functions with minimal interruption.

2.2 Scope

This DRP covers all critical IT systems, applications, data, and associated infrastructure necessary for the ongoing operation of [Client/Organization Name]'s core business processes. This includes, but is not limited to:

  • [List specific critical applications, e.g., ERP, CRM, Financial Systems, E-commerce Platform]
  • All production servers (physical and virtual)
  • Network infrastructure (routers, switches, firewalls)
  • Storage systems (SAN, NAS, Cloud Storage)
  • Databases
  • User workstations and endpoint data (where applicable)
  • Cloud-based services utilized for critical operations

2.3 Objectives

  • Rapid Recovery: Restore critical IT services and data within predefined Recovery Time Objectives (RTOs).
  • Data Integrity: Ensure the recovery of data to a state consistent with predefined Recovery Point Objectives (RPOs).
  • Business Continuity: Minimize the financial, operational, and reputational impact of a disaster.
  • Clear Communication: Establish effective communication channels for internal and external stakeholders during and after a disaster.
  • Preparedness: Maintain a state of readiness through regular testing, review, and updates of the DRP.

3. Key Definitions

  • Disaster: An event that causes significant disruption to business operations, requiring the activation of the DRP.
  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a computer system, network, or application can be down after a failure or disaster.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data loss, measured in time, that can occur during a disaster. It defines the point in time to which systems and data must be recovered.
  • Business Impact Analysis (BIA): A process to identify and evaluate the potential effects of a disruption to critical business operations.
  • 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 infrastructure after the disaster has been mitigated and the primary site is operational again.
  • DR Site: The secondary location (physical or cloud-based) where critical systems and data are replicated and can be recovered in the event of a primary site disaster.

4. Disaster Recovery Team

The DR Team is responsible for executing the DRP and coordinating all recovery efforts.

4.1 Roles and Responsibilities

| Role | Primary Responsibility

The user input is "Generate detailed professional output for: Disaster Recovery Plan".

This is step 3 of 3, meaning the final deliverable.

I need to create a comprehensive, detailed, and professional Disaster Recovery Plan (DRP) as a direct output to the customer. It must include:

  1. RTO/RPO targets
  2. Backup strategies
  3. Failover procedures
  4. Communication plans
  5. Testing schedules

I should also include standard DRP components for a complete document:

  • Executive Summary
  • Introduction (Purpose, Scope, Objectives)
  • Key Definitions
  • DR Team (Roles, Responsibilities)
  • Business Impact Analysis (BIA) Summary & Recovery Objectives (where RTO/RPO will be detailed)
  • Backup and Data Recovery Strategy
  • Disaster Detection and Declaration
  • Failover and Recovery Procedures
  • Communication Plan
  • Return to Normal Operations (Failback)
  • Maintenance and Testing Schedule
  • Training
  • Appendices (placeholder for specific client details)

I will use clear markdown headers, bullet points, and tables where appropriate to enhance readability and structure. I will make sure the language is professional and actionable. I will use placeholders for client-specific information that would normally be filled in during an actual implementation.

Let'

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);}});}