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

This document outlines a comprehensive Disaster Recovery Plan (DRP) designed to minimize downtime, data loss, and operational disruption in the event of a major incident or disaster. It establishes clear objectives, procedures, and responsibilities to ensure business continuity and rapid restoration of critical services.


1. Executive Summary

This Disaster Recovery Plan (DRP) provides a structured approach to prepare for, respond to, and recover from disruptive events that could impact our IT systems and business operations. It defines critical recovery objectives (RTO and RPO), outlines robust backup and failover strategies, details communication protocols, and establishes a rigorous testing and maintenance schedule. The goal is to ensure the resilience of our core services and protect our data assets, thereby safeguarding customer trust and business continuity.


2. Scope and Objectives

2.1. Scope

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

  • Primary Data Center: All servers, storage, networking equipment, and associated environmental controls.
  • Cloud Services: Critical SaaS applications, IaaS resources, and PaaS databases.
  • Key Business Applications: ERP, CRM, Financial Systems, E-commerce Platforms, Communication Systems.
  • Critical Data: Customer data, financial records, intellectual property, operational databases.
  • Personnel: Designated disaster recovery team members and essential business unit leaders.

Exclusions: This plan does not cover individual workstation recovery unless explicitly linked to a critical business function not covered by server-side recovery. Physical office space recovery is addressed in the broader Business Continuity Plan (BCP), which this DRP supports.

2.2. Objectives

The primary objectives of this DRP are to:

  • Minimize Downtime: Restore critical business functions and IT systems within defined Recovery Time Objectives (RTOs).
  • Minimize Data Loss: Ensure data integrity and recover data up to defined Recovery Point Objectives (RPOs).
  • Ensure Data Integrity: Prevent corruption or loss of critical business data during and after a disaster.
  • Maintain Business Operations: Enable the continuation of essential business processes, even if in a degraded state.
  • Facilitate Rapid Recovery: Provide clear, actionable procedures for the DR team to follow.
  • Protect Assets: Safeguard IT infrastructure, data, and intellectual property.
  • Ensure Compliance: Meet regulatory and contractual obligations related to data protection and service availability.
  • Provide Communication: Establish clear communication channels for all stakeholders during a disaster.

3. Key Definitions & Terminology

  • Disaster Recovery Plan (DRP): A documented process or set of procedures to recover and protect a business IT infrastructure in the event of a disaster.
  • 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 before business operations are significantly impacted.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data that can be lost from an IT service due to a major incident. It represents the age of the files or data in backup storage required to resume normal operations.
  • DR Site (Disaster Recovery Site): A secondary location where business operations can continue after a disaster. Can be hot, warm, or cold.
  • Failover: The process of switching automatically or manually to a redundant or standby computer server, system, hardware component, or network upon the failure or abnormal termination of the previously active application, server, system, hardware component, or network.
  • Failback: The process of restoring systems and data to the primary operational site after a disaster has been mitigated and the primary site is fully restored.
  • Business Continuity Plan (BCP): A holistic plan that outlines how an organization will continue to operate during and after a disruptive event. The DRP is a component of the BCP.
  • Critical Systems: Systems, applications, and data identified as essential for the continued operation of core business functions.

4. Disaster Recovery Team & Roles

A dedicated Disaster Recovery Team is established with clear roles and responsibilities to ensure an organized and efficient response.

4.1. Team Structure

  • DR Coordinator (Incident Commander): Overall authority and decision-maker during a disaster. Manages communication with executive management.
  • IT Infrastructure Lead: Responsible for physical infrastructure, networking, and server recovery.
  • Application Lead: Responsible for application deployment, configuration, and data restoration.
  • Data Recovery Lead: Specializes in database recovery, backup restoration, and data integrity.
  • Network Lead: Manages network connectivity, DNS, VPNs, and firewall configurations.
  • Communications Lead: Manages internal and external communications as per the communication plan.
  • Business Unit Liaisons: Representatives from critical business units to validate recovered systems and processes.

4.2. Contact Information

(Refer to Appendix A for a detailed contact list with primary and secondary numbers, email, and emergency contact details for each team member.)


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

RTO and RPO targets are defined based on business impact analysis and criticality assessments.

| System/Application Group | Description | RTO Target | RPO Target | Backup Strategy | DR Site Type |

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

| Tier 1: Mission-Critical | Core E-commerce, ERP (Finance, Inventory), CRM, Primary Databases | < 4 Hours | < 1 Hour | Real-time Replication + Incremental Backups | Hot Site (Active-Passive or Active-Active) |

| Tier 2: Business-Critical | Email/Communication, HR Systems, Development Environments, Reporting Tools | < 8 Hours | < 4 Hours | Daily Incremental + Weekly Full Backups | Warm Site |

| Tier 3: Supporting | Internal File Servers, Non-critical Intranet, Legacy Applications | < 24 Hours | < 24 Hours | Daily Full Backups | Cold Site / Cloud Object Storage |

Note: Specific RTO/RPO for individual applications within these tiers are detailed in Appendix B (System Criticality Matrix).


6. Backup and Data Recovery Strategies

A multi-layered backup strategy ensures data availability and recoverability across different disaster scenarios.

6.1. Backup Types and Frequency

  • Full Backups: Weekly for all systems, stored off-site.
  • Incremental Backups: Daily for all systems, capturing only changes since the last full or incremental backup.
  • Differential Backups: Not currently utilized, but may be considered for specific large datasets if incremental recovery time becomes an issue.
  • Database Transaction Logs: Continuously shipped/replicated for Tier 1 databases to achieve near-zero RPO.
  • Cloud Snapshots: Daily snapshots for critical cloud instances (VMs, databases).

6.2. Backup Retention Policies

  • Daily Incremental/Differential: 30 days
  • Weekly Full: 90 days
  • Monthly Full: 1 year
  • Yearly Full (Archival): 7 years (for regulatory compliance)

6.3. Backup Storage Locations

  • On-site (Primary): Short-term recovery, high-speed access.
  • Off-site (Secondary): Secure, geographically separate facility for disaster recovery. Data encrypted in transit and at rest.
  • Cloud Storage (Tertiary): Encrypted object storage (e.g., AWS S3, Azure Blob) in a separate region for long-term archival and geographic diversity.

6.4. Data Encryption

All backups, whether in transit or at rest, are encrypted using AES-256 encryption. Encryption keys are managed securely and stored separately from the backup data.

6.5. Data Recovery Procedures

  1. Identify Recovery Point: Determine the latest valid RPO based on the disaster's impact.
  2. Locate Backups: Retrieve necessary backups from primary, secondary, or cloud storage.
  3. Restore Order: Prioritize restoration of operating systems, then core applications, then data.
  4. Data Integrity Check: Perform checksums and application-level verification after restoration.
  5. Validation: Business unit liaisons validate data and application functionality.

7. Failover and System Recovery Procedures

These procedures detail the steps to activate the DR site and restore critical systems.

7.1. Disaster Declaration and Activation

  1. Detection: Monitoring systems, alerts, or manual reporting indicate a critical incident.
  2. Assessment: DR Coordinator, in consultation with IT Leads, assesses the scope and impact of the disaster.
  3. Declaration: DR Coordinator officially declares a disaster based on predefined criteria (e.g., primary data center unavailable for > 2 hours).
  4. Team Notification: DR Coordinator activates the DR team via emergency communication channels (SMS, dedicated calling tree).
  5. Go/No-Go Decision: Executive management approves the DRP activation.

7.2. Primary System Shutdown/Isolation

  • If feasible and safe, gracefully shut down affected primary systems to prevent further data corruption.
  • Isolate compromised systems from the network to prevent malware spread or further unauthorized access.

7.3. DR Site Activation (Cloud-based Hot/Warm Site)

  1. Infrastructure Provisioning:

* Activate pre-configured cloud DR environment (e.g., AWS CloudFormation, Azure Resource Manager templates).

* Verify network connectivity, VPNs, and security groups.

* Provision necessary compute instances, databases, and storage.

  1. Data Synchronization/Replication:

* Verify replication status for Tier 1 systems (e.g., database replication, block-level storage replication).

* Initiate data restoration from the latest backups for Tier 2 and 3 systems.

  1. Application Deployment/Configuration:

* Deploy application code from version control repositories to DR instances.

* Configure application settings, environment variables, and database connection strings.

* Update DNS records (e.g., A records, CNAMEs) to point to DR site IP addresses or load balancers. TTLs should be low for critical services.

* Configure load balancers and firewalls in the DR environment.

  1. System Verification:

* Perform smoke tests on all critical applications and services.

* Verify data consistency and integrity.

* Conduct user acceptance testing (UAT) with business unit liaisons.

7.4. Failback Procedures (Return to Primary Site)

Once the primary site is fully restored and deemed stable:

  1. Primary Site Restoration: Ensure all primary infrastructure, networking, and security components are fully operational.
  2. Data Synchronization: Replicate all data changes from the DR site back to the primary site. This often requires a "reverse replication" or a carefully planned data export/import.
  3. Testing Primary Site: Thoroughly test all systems and applications on the primary site using current data.
  4. Scheduled Cutover: Plan a scheduled maintenance window for the failback.
  5. DNS Reversion: Update DNS records to point back to the primary site.
  6. Deactivation of DR Site: Once the primary site is confirmed stable and operational, gracefully shut down DR resources to minimize costs.

8. Communication Plan

Effective communication is paramount during a disaster to manage expectations, coordinate efforts, and maintain confidence.

8.1. Internal Communication

  • DR Team:

* Initial Notification: Automated SMS/email alerts, dedicated conference bridge.

* Ongoing Updates: Regular conference calls (e.g., every 2 hours during active recovery), dedicated chat channel (e.g., Slack/Teams).

* DR Coordinator: Central point of contact for all team communications.

  • Employees:

* Initial Notification: Email (if available), dedicated emergency hotline, company intranet (if accessible), SMS.

* Status Updates: Regular updates on service availability, expected recovery times, and alternative work arrangements.

* Communication Lead: Responsible for drafting and distributing internal communications.

  • Executive Management:

* Initial Notification: DR Coordinator provides immediate briefing.

* Regular Briefings: Structured updates (e.g., hourly, then every 4 hours) on impact, recovery progress, and projected timelines.

8.2. External Communication

  • Customers:

* Initial Notification: Public status page, email (for critical services), social media (if appropriate).

* Status Updates: Regular updates via status page and email. Transparency regarding impact and recovery efforts.

* Pre-approved Templates: Utilize pre-approved communication templates for various scenarios.

  • Vendors/Partners:

* Notification: Direct email or phone calls to critical service providers (e.g., ISP, cloud provider, hardware support).

* Coordination: Work closely with vendors for support and service restoration.

  • Regulatory Bodies/Media:

* Notification: Only as required by law or company policy. All media inquiries must be directed to the designated Communications Lead or PR department.

* Legal/Compliance Review: All external communications related to legal or regulatory matters must be reviewed by legal counsel.

8.3. Communication Channels

  • Primary: Email (secondary domain if primary is down), dedicated emergency phone line, SMS/Text messaging.
  • Secondary: Public status page, company website (static disaster page), designated social media accounts.
  • Tools: PagerDuty, Everbridge, or similar incident management/mass notification systems.

9. Testing and Maintenance Schedule

Regular testing and maintenance are crucial to ensure the DRP remains effective and up-to-date.

9.1. Testing Types and Frequency

  • Tabletop Exercises (Annual): Review the plan verbally, walk through scenarios with the DR team, identify gaps in procedures or understanding.
  • Simulated Failover Tests (Bi-Annual): Simulate a disaster scenario by failing over non-production or isolated production systems to the DR site. Verify functionality without impacting live services.
  • Full-Scale DR Tests (Annual for Tier 1 systems, Bi-Annual for Tier 2): Perform a complete failover of production systems to the DR site. This may involve a planned outage. Validate R
gemini Output

Disaster Recovery Plan

Document Version: 1.0

Date: October 26, 2023

Author: PantheraHive AI

Approved By: [Approving Authority Name/Title]


1. Introduction

1.1 Purpose

This Disaster Recovery Plan (DRP) outlines the procedures and strategies for restoring critical IT infrastructure, applications, and data following a disruptive event. Its primary objective is to minimize downtime, data loss, and operational impact, ensuring business continuity and the timely recovery of essential services.

1.2 Scope

This DRP covers all critical IT systems, applications, data, and associated infrastructure necessary for the continued operation of [Your Organization Name]'s core business functions. This includes, but is not limited to, data centers, cloud environments, network infrastructure, servers, databases, and enterprise applications.

1.3 Objectives

  • Rapid Recovery: Restore critical systems and data within defined Recovery Time Objectives (RTOs).
  • Data Integrity: Ensure minimal data loss, adhering to defined Recovery Point Objectives (RPOs).
  • Operational Continuity: Maintain essential business functions during and after a disaster.
  • Effective Communication: Establish clear communication channels for internal and external stakeholders.
  • Compliance: Meet regulatory and legal obligations during disaster recovery.
  • Safety: Prioritize the safety and well-being of personnel.

2. Key Definitions

  • Disaster: An event that causes significant disruption to business operations, rendering critical systems or facilities unavailable.
  • Disaster Recovery (DR): The process of restoring critical IT infrastructure and operations after a disaster.
  • Business Continuity Plan (BCP): A comprehensive plan to ensure the continuation of business functions during and after a disaster. DR is a subset of BCP.
  • 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 (measured in time) that can be lost from an IT service due to a major incident.
  • 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 a failover and once the primary system is fully recovered and stable.

3. Disaster Recovery Team

The DR Team is responsible for executing this plan. Roles and responsibilities are assigned as follows:

| Role | Primary Contact | Alternate Contact | Responsibilities

gemini Output

This document outlines the Disaster Recovery Plan (DRP) designed to ensure the swift and effective recovery of critical IT systems and data in the event of a disruptive incident. The plan focuses on minimizing downtime and data loss, maintaining business continuity, and providing clear procedures for all stakeholders involved in the recovery process.


1. Executive Summary

This Disaster Recovery Plan (DRP) provides a structured approach to respond to and recover from unforeseen events that could disrupt normal business operations. It defines the strategies, procedures, and responsibilities necessary to restore critical IT services, data, and infrastructure to an operational state within predefined recovery objectives. The goal is to safeguard business continuity, protect vital information assets, and minimize financial and reputational impact.

2. Disaster Recovery Plan Objectives and Scope

2.1. Objectives

The primary objectives of this Disaster Recovery Plan are to:

  • Minimize the impact of disruptive events on critical business functions and IT services.
  • Restore critical systems and applications within defined Recovery Time Objectives (RTOs).
  • Recover data loss within defined Recovery Point Objectives (RPOs).
  • Ensure the safety and well-being of personnel during and after a disaster.
  • Provide clear, actionable procedures for disaster declaration, response, recovery, and failback.
  • Maintain communication with internal and external stakeholders throughout a disaster event.
  • Comply with relevant regulatory requirements and industry best practices.

2.2. Scope

This DRP covers the recovery of critical IT infrastructure, applications, and data essential for the continuous operation of the organization.

  • In-Scope Systems:

* Core Business Application Servers (e.g., ERP, CRM)

* Database Servers (e.g., SQL, Oracle)

* Email and Communication Systems

* Network Infrastructure (routers, firewalls, switches)

* File Servers and Storage Systems

* Virtualization Platforms

* Web Servers and Public-facing Applications

  • Geographic Scope: Primary Data Center(s) and designated Disaster Recovery Site(s).
  • Out-of-Scope (for this document): Detailed Business Continuity Plans (BCPs) for specific departmental operations (though this DRP supports them).

3. Key Definitions and Acronyms

  • BCP: Business Continuity Plan – A comprehensive plan for continuing business operations during and after a disruption.
  • DR: Disaster Recovery – The process of restoring IT infrastructure and operations after a disruptive event.
  • DRP: Disaster Recovery Plan – The documented plan for disaster recovery.
  • RTO: Recovery Time Objective – The maximum tolerable duration of time that a computer, system, application, or network can be down after a disaster or disruption.
  • RPO: Recovery Point Objective – The maximum tolerable amount of data (measured in time) that can be lost from an IT service due to a major incident.
  • DR Site: Disaster Recovery Site – An alternate location where IT operations can resume following a disaster at the primary site.
  • Failover: The process of automatically or manually switching to a redundant or standby system or network upon the failure or abnormal termination of the previously active system.
  • Failback: The process of restoring operations to the original primary site after a recovery at the DR site.
  • MTD: Maximum Tolerable Downtime – The total amount of time a business process can be inoperative before the organization experiences unacceptable consequences.
  • SLA: Service Level Agreement – A contract between a service provider and a customer that specifies the level of service expected.

4. Disaster Recovery Team and Roles

A dedicated Disaster Recovery Team is essential for effective response and recovery. Each member has specific responsibilities during a disaster event.

| Role | Responsibility

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