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

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

As part of your workflow "Disaster Recovery Plan" (Step 1 of 3), here is a comprehensive Disaster Recovery Plan tailored to ensure business continuity and minimize downtime in the event of a disruptive incident.


Disaster Recovery Plan (DRP)

Document Version: 1.0

Date: October 26, 2023

Prepared For: [Customer Name/Organization Name]


1. Introduction & Purpose

The purpose of this Disaster Recovery Plan (DRP) is to provide a structured and actionable framework for restoring critical business operations and IT infrastructure following a disruptive event. This plan aims to minimize the impact of disasters by ensuring the swift and efficient recovery of systems, data, and services, thereby maintaining business continuity, protecting organizational assets, and preserving customer trust.

This DRP outlines predefined procedures, roles, responsibilities, and resources required to respond to various disaster scenarios, from minor system failures to catastrophic site outages.

2. Scope

This DRP covers the recovery of critical IT systems, data, and associated business processes essential for the continued operation of [Organization Name]. This includes:

  • Primary Data Center/On-premise Infrastructure: Servers, storage, networking equipment, virtualization platforms.
  • Cloud-based Services: SaaS applications, IaaS/PaaS components hosted in public/private clouds.
  • Critical Business Applications: [List 3-5 examples, e.g., ERP, CRM, Financial Systems, E-commerce Platform].
  • Core Network Services: DNS, DHCP, VPN, Internet connectivity.
  • Data Repositories: Databases, file shares, document management systems.
  • Key Personnel: Identification and communication protocols for critical recovery teams.

Exclusions: This plan does not cover the complete financial recovery or long-term strategic adjustments post-disaster beyond the initial operational restoration. It focuses on IT and operational recovery.

3. Key Roles & Responsibilities

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

  • DRP Coordinator (Overall Lead):

* Declares a disaster.

* Oversees all recovery efforts.

* Approves resource allocation.

* Liaises with executive management and external stakeholders.

Primary Contact:* [Name/Title, Phone, Email]

  • IT Infrastructure Lead:

* Manages server, storage, and network recovery.

* Coordinates with vendors for hardware replacement/support.

Primary Contact:* [Name/Title, Phone, Email]

  • Applications Lead:

* Oversees restoration and testing of critical business applications.

* Coordinates with application owners and development teams.

Primary Contact:* [Name/Title, Phone, Email]

  • Data & Database Lead:

* Manages database restoration and integrity checks.

* Oversees data recovery from backups.

Primary Contact:* [Name/Title, Phone, Email]

  • Network & Security Lead:

* Restores network connectivity and security configurations.

* Ensures secure access to recovered systems.

Primary Contact:* [Name/Title, Phone, Email]

  • Communications Lead:

* Manages all internal and external communications during and after a disaster.

* Prepares and disseminates status updates.

Primary Contact:* [Name/Title, Phone, Email]

  • Business Unit Representatives:

* Provide business context and prioritize application/data recovery needs.

* Test recovered applications and processes.

Primary Contact:* [Name/Title, Phone, Email]

Emergency Contact List: (Refer to Appendix A for full list)

  • Key DR Team members
  • Executive Management
  • Critical Vendors (ISP, hardware, software support)
  • Emergency Services (Police, Fire, Medical)
  • Insurance Provider

4. Risk Assessment Summary (Brief)

A comprehensive risk assessment (performed separately) identifies potential threats and vulnerabilities. Common disaster scenarios addressed by this plan include:

  • Natural Disasters: Fires, floods, earthquakes, severe weather.
  • Technical Failures: Hardware failure, software corruption, power outages, network outages.
  • Human Error: Accidental data deletion, misconfigurations.
  • Cyber Attacks: Ransomware, data breaches, denial-of-service (DoS) attacks.
  • Supply Chain Disruptions: Critical vendor failures impacting services.

5. Recovery Objectives (RTO/RPO)

Recovery Time Objective (RTO) and Recovery Point Objective (RPO) are defined for different criticality tiers of systems and data.

  • RTO (Recovery Time Objective): The maximum tolerable duration for restoring a business function after a disaster.
  • RPO (Recovery Point Objective): The maximum tolerable amount of data loss measured in time (e.g., 1 hour, 24 hours).

| System Criticality Tier | Example Systems | RTO (Target) | RPO (Target) | Justification |

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

| Tier 1: Critical | ERP, E-commerce, Financial Transaction Systems, Core Databases | 0-4 hours | 0-1 hour | Immediate impact on revenue, legal obligations, customer satisfaction. Business cannot operate without these. |

| Tier 2: Important | CRM, Internal Communication, HR Systems, File Servers | 4-24 hours | 4-12 hours | Significant impact on productivity and operations; manual workarounds may be possible for a limited time. |

| Tier 3: Non-Critical| Development/Test Environments, Archival Systems | 24-72 hours | 24 hours | Minimal immediate impact on core business functions; can tolerate longer downtime. |

6. Backup & Data Recovery Strategy

A robust backup strategy is fundamental to data recovery.

6.1. Data Classification

All data is classified based on criticality, sensitivity, and regulatory requirements (e.g., PII, PCI, HIPAA, proprietary). This dictates backup frequency, retention, and encryption levels.

6.2. Backup Methodologies

  • Full Backups: Performed weekly for all critical systems.
  • Incremental Backups: Performed daily for critical and important systems, capturing only changes since the last backup.
  • Differential Backups: (Optional, for specific systems) Performed daily, capturing changes since the last full backup.
  • Database Snapshots/Logs: Real-time transaction logging and frequent snapshots for Tier 1 databases to meet near-zero RPO.

6.3. Backup Frequency & Retention

| System Criticality | Backup Frequency | On-site Retention | Off-site/Cloud Retention |

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

| Tier 1: Critical | Continuous (DB logs), Hourly (snapshots), Daily (incremental), Weekly (full) | 7 days (hourly), 4 weeks (daily/weekly) | 90 days (daily/weekly), 1 year (monthly) |

| Tier 2: Important| Daily (incremental), Weekly (full) | 7 days (daily), 4 weeks (weekly) | 60 days (daily/weekly), 6 months (monthly) |

| Tier 3: Non-Critical| Weekly (full) | 4 weeks (weekly) | 3 months (weekly) |

6.4. Backup Storage Locations

  • On-site: Local storage arrays, NAS devices for immediate recovery (short-term retention).
  • Off-site: Secure, geographically separate facility for physical media rotation (e.g., tapes, external drives).
  • Cloud Storage: Encrypted object storage (e.g., AWS S3, Azure Blob Storage, Google Cloud Storage) for long-term retention and disaster recovery. Data is replicated across multiple availability zones/regions.

6.5. Data Encryption & Integrity

  • All backups, both in transit and at rest, are encrypted using AES-256 or higher.
  • Regular integrity checks and test restores are performed on a quarterly basis to verify backup validity and recoverability.
  • Immutable backups are utilized where possible to protect against ransomware.

7. Failover & System Recovery Procedures

This section details the steps to activate and execute the recovery process.

7.1. Declaration of Disaster

  • Identification: An incident is identified by monitoring systems, user reports, or external alerts.
  • Assessment: The DRT Coordinator, in consultation with relevant leads, assesses the impact, scope, and potential duration of the outage.
  • Declaration: If the incident exceeds predefined thresholds (e.g., RTO/RPO targets for critical systems will be breached), the DRP Coordinator declares a disaster and activates the DRP.
  • Notification: The DRT and executive management are immediately notified.

7.2. Activation Procedures

  1. Assemble DRT: All members of the DRT convene at the designated command center (physical or virtual).
  2. Establish Communication: Primary and secondary communication channels are activated (e.g., dedicated conference bridge, emergency messaging system).
  3. Access DRP: Access to the DRP document (both digital and hard copy) is confirmed.
  4. Confirm Disaster Scope: Re-confirm affected systems, data, and services.
  5. Initiate Recovery Site: Activate the designated recovery site (e.g., warm standby cloud environment, secondary data center).

7.3. System-Specific Recovery Steps (Example)

A. Network Infrastructure Recovery:

  1. Verify external connectivity at the recovery site.
  2. Restore core network services (DNS, DHCP, VPN gateways).
  3. Configure firewall rules and security groups.
  4. Establish secure access for DRT members.

B. Virtualization Platform/Compute Recovery:

  1. Provision compute resources at the recovery site (VMs, containers).
  2. Restore base operating system images or templates.
  3. Configure network interfaces and storage connections for new instances.

C. Database Recovery (Tier 1 - e.g., SQL Server, Oracle, PostgreSQL):

  1. Provision database servers at the recovery site.
  2. Restore the latest full backup.
  3. Apply incremental backups/transaction logs to reach the target RPO.
  4. Perform integrity checks and validation queries.
  5. Update application connection strings to point to the recovered database.

D. Application Server Recovery (Tier 1 - e.g., ERP, Web Servers):

  1. Provision application servers.
  2. Restore application code, configurations, and binaries from backup or source control.
  3. Configure load balancers and application gateways.
  4. Connect applications to the recovered databases.
  5. Perform functional testing of critical application modules.

E. File Server/Storage Recovery:

  1. Provision storage volumes.
  2. Restore critical file shares from backup.
  3. Configure permissions and access controls.

7.4. Manual Workarounds

For specific systems or business processes, documented manual workarounds will be utilized to maintain minimal operations during recovery (e.g., manual order processing, paper records).

7.5. Data Restoration Procedures

  • Prioritize data restoration based on RPO and business criticality.
  • Utilize backup software/cloud native tools for data recovery.
  • Verify data integrity post-restoration using checksums or application-level checks.

7.6. Verification & Validation

  • System Testing: Individual components are tested (e.g., ping, service checks, login).
  • Application Testing: Key business processes are tested end-to-end by business unit representatives.
  • User Acceptance Testing (UAT): A subset of end-users validates functionality and data integrity.
  • Performance Testing: Basic performance checks to ensure the recovered environment can handle expected load.

7.7. Failback Procedures (Return to Normal Operations)

Once the primary site is restored and deemed stable:

  1. Synchronization: Replicate data changes from the recovery site back to the primary site.
  2. Planned Cutover: Schedule a planned maintenance window to switch traffic back to the primary site.
  3. Verification: Confirm all systems and services are operational at the primary site.
  4. Deactivation: Deactivate and decommission the recovery site resources.
  5. Post-Mortem: Conduct a review of the entire incident and recovery process.

8. Communication Plan

Effective communication is critical during a disaster.

8.1. Internal Communication

  • DR Team: Dedicated secure chat channel (e.g., Slack, Teams), emergency conference bridge. Regular status updates (every 1-2 hours initially).
  • Employees: Email, internal portal, mass notification system. Provide clear instructions on operational status, expected recovery times, and alternative work arrangements.
  • Executive Management: Direct reports from DRP Coordinator, daily briefings.

8.2. External Communication

  • Customers: Website banners, email announcements, social media updates. Focus on transparency, expected service restoration, and available support channels.
  • Vendors/Partners: Direct contact by relevant leads. Inform critical vendors about the incident and coordinate support.
  • Regulators/Legal: Consult legal counsel immediately for notification requirements based on data breach or service disruption impact.
  • Media: All media inquiries are directed to the Communications Lead. Pre-approved statements will be used.

8.3. Communication Channels

  • Primary: Dedicated conference bridge, emergency email distribution lists, mass notification system (SMS, voice).
  • Secondary: Personal mobile phones, public Wi-Fi access (if primary network affected).

8.4. Pre-defined Messages

Templates for various stages of a disaster (e.g., Incident Declared, Services Impacted, Services Restored, Post-Incident Review) will be prepared and approved in advance.

9. Testing & Maintenance Schedule

Regular testing and maintenance ensure the DRP remains current and effective.

9.1. Types of Tests

  • Tabletop Exercises (Annually): A facilitated discussion of a simulated disaster scenario by the DRT to review roles, procedures, and communication.
  • Simulated Recovery Tests (Bi-Annually): Partial or full recovery of critical systems in an isolated environment without impacting production. Focus on data restoration and application functionality.
  • Full Interruption Tests (Annually/Bi-Annually): A planned, controlled failover to the recovery site, potentially impacting production for a brief period, to validate end-to-end recovery and failback.

9.2. Testing Frequency

  • Tabletop Exercises: Annually (Q1)
  • Simulated Recovery Tests: Bi-Annually (Q2, Q4)
  • Full Interruption Tests: Annually (Q3) - Requires significant planning and executive approval.

9.3. Documentation & Review of Test Results

  • Each test will have a defined scope, objectives, and success criteria.
  • Test results, observations, challenges, and lessons learned will be documented.
  • A post-test review meeting will be held to discuss findings and identify areas for improvement.

9.4. Plan Update & Review Schedule

gemini Output

Disaster Recovery Plan

Document Version: 1.0

Date: October 26, 2023

Prepared For: [Customer Name/Organization Name]

Prepared By: PantheraHive


1. Executive Summary

This Disaster Recovery Plan (DRP) outlines the strategies, procedures, and resources necessary to recover critical IT systems and data following a disruptive event, minimize downtime, and ensure business continuity for [Organization Name]. The plan establishes clear Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs) for key services, details backup and failover mechanisms, defines communication protocols, and mandates a regular testing and maintenance schedule to ensure its effectiveness. The primary goal is to restore normal business operations as quickly and efficiently as possible, protecting organizational assets and reputation.

2. Introduction

2.1. Purpose

The primary purpose of this DRP is to provide a structured and actionable framework for responding to, recovering from, and resuming operations after a disaster or major disruption that impacts the organization's IT infrastructure and critical business functions. This plan aims to:

  • Minimize the impact of disruptions on business operations.
  • Ensure the availability and integrity of critical data and systems.
  • Restore business functionality within defined RTOs and RPOs.
  • Provide clear roles, responsibilities, and procedures for all involved personnel.
  • Protect the organization's reputation and financial stability.

2.2. Scope

This DRP covers the recovery of critical IT infrastructure, applications, and data essential for the operation of [Organization Name]'s core business functions. This includes, but is not limited to:

  • Core Business Applications: [List 3-5 critical applications, e.g., ERP System, CRM Platform, Financial Accounting Software, Customer-Facing Web Portal, Email Services].
  • Critical Data Repositories: [List 2-3 key data types, e.g., Customer Database, Financial Records, Intellectual Property, Operational Data].
  • Network Infrastructure: Connectivity to primary and recovery sites.
  • Server Infrastructure: Physical and virtual servers hosting critical applications.
  • Storage Systems: Primary and backup data storage.
  • End-User Computing: Access to essential tools for critical personnel.

This plan does not cover general emergency response procedures (e.g., medical emergencies, fire suppression) unless directly related to IT infrastructure impact. It is assumed that physical safety protocols are managed by separate, dedicated plans.

2.3. Objectives

Upon activation, the objectives of this DRP are to:

  • Initiate recovery within [Specify time, e.g., 30 minutes] of disaster declaration.
  • Restore critical business functions and their supporting IT systems within their defined RTOs.
  • Recover data to the latest possible consistent state, adhering to defined RPOs.
  • Maintain effective communication with all stakeholders throughout the recovery process.
  • Ensure the security and integrity of data during and after recovery.
  • Facilitate a smooth and validated failback to primary operations once the original site is restored.

3. Key Personnel and Roles

The Disaster Recovery Team (DRT) is responsible for executing this plan. Specific roles and responsibilities are outlined below. All DRT members must have up-to-date contact information readily available, including primary and alternate methods.

| Role | Primary Individual | Alternate Individual | Contact (Primary/Alt) | Responsibilities

gemini Output

This document outlines the Disaster Recovery Plan (DRP) for [Your Organization Name], designed to ensure the rapid recovery of critical IT systems and business operations in the event of a disruptive incident. This plan provides a structured approach to minimize downtime, data loss, and operational impact, thereby safeguarding the organization's continuity and reputation.


1. Introduction

1.1 Purpose

The primary purpose of this Disaster Recovery Plan (DRP) is to provide a structured, actionable framework for restoring critical business functions and IT infrastructure following a disaster. It aims to minimize service disruption, data loss, and financial impact, ensuring the timely resumption of operations.

1.2 Scope

This DRP covers all critical IT systems, applications, data, and associated infrastructure deemed essential for the continued operation of [Your Organization Name]. It encompasses procedures for disaster declaration, team activation, recovery of systems, data restoration, communication, and post-recovery activities.

1.3 Objectives

  • Minimize the duration of service disruption to critical business functions.
  • Restore critical IT systems and data within defined RTO and RPO targets.
  • Ensure the safety and well-being of employees during a disaster.
  • Maintain effective communication with stakeholders (employees, customers, vendors, regulators).
  • Protect the organization's assets, reputation, and customer trust.
  • Provide a framework for regular testing, review, and maintenance of the DRP.

2. Key Definitions

  • Disaster Recovery (DR): The process of restoring critical IT infrastructure and operations after a disruptive event.
  • Business Continuity (BC): The ability of an organization to continue to operate essential functions during and after a disaster.
  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a business process or system can be down after a disaster or disruption before significant damage or loss occurs.
  • 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 data must be recovered.
  • Critical System: An IT system or application whose unavailability would cause unacceptable impact on 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 primary infrastructure after a disaster has been resolved and the primary site is operational again.

3. Disaster Recovery Team and Roles

Effective disaster recovery relies on a well-structured and trained team.

3.1 DR Team Structure

| Role | Primary Owner | Backup Owner | Responsibilities | Disaster Recovery Coordinator | Manages the overall DR effort, from activation to restoration. Responsible for making critical decisions and coordinating all teams.

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

"+slugTitle(pn)+"

Built with PantheraHive BOS

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

"+slugTitle(pn)+"

Built with PantheraHive BOS

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

"+title+"

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

$1

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

$1

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

$1

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

"); h+="

"+hc+"

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