Data Migration Planner
Run ID: 69cc42d97ddd717b0174992f2026-03-31Development
PantheraHive BOS
BOS Dashboard

Data Migration Planner: Code Generation Deliverables

This document outlines the detailed, professional code deliverables for your data migration project. It includes schema definitions, field mapping with transformation logic, comprehensive validation scripts, robust rollback procedures, and initial timeline estimates. All code is designed to be clean, well-commented, and production-ready, ensuring a smooth and reliable migration process.


1. Source and Target Schema Definitions (DDL)

This section provides the Data Definition Language (DDL) for both your source and target systems. We've used a simplified Customers table example to illustrate potential schema differences that necessitate transformation.

Assumptions:

1.1 Source System Schema Example (Customers Table)

text • 631 chars
---

### 2. Field Mapping and Transformation Logic (Python ETL Script Example)

This Python script demonstrates the core ETL (Extract, Transform, Load) process. It connects to the source database, extracts data, applies a set of predefined transformation rules based on the schema differences, and loads the transformed data into the target database.

**Key Features:**
*   Database connection using `psycopg2` (for PostgreSQL, easily adaptable to `pyodbc`, `mysql-connector-python`, etc.).
*   Batch processing for efficiency with large datasets.
*   Error handling and logging.
*   Clear comments for each transformation rule.

Sandboxed live preview

Study Plan: Mastering Data Migration Planning and Execution

This comprehensive study plan is designed to equip professionals with the knowledge, skills, and best practices required to successfully plan, execute, and manage complex data migration projects. From initial data assessment to post-migration validation and support, this plan covers all critical aspects of a robust data migration strategy.


1. Introduction and Overall Goal

Introduction: Data migration is a critical, often complex, process involving the transfer of data between storage types, formats, or computer systems. A well-planned migration minimizes risk, ensures data integrity, and supports business continuity. This study plan provides a structured approach to understanding and mastering the key components of data migration planning, including field mapping, transformation rules, validation, and rollback procedures.

Overall Goal: Upon completion of this study plan, the learner will be able to:

  • Understand the full lifecycle of a data migration project.
  • Conduct thorough source and target system analysis.
  • Develop detailed field mapping and data transformation rules.
  • Design and implement robust data validation and quality assurance strategies.
  • Formulate comprehensive migration cutover and rollback plans.
  • Estimate project timelines and manage risks effectively.
  • Lead or contribute significantly to data migration initiatives with confidence.

2. Target Audience

This study plan is ideal for:

  • Aspiring Data Migration Specialists or Architects.
  • Database Administrators (DBAs) looking to expand into migration roles.
  • ETL Developers seeking to deepen their understanding of migration strategies.
  • Project Managers overseeing data-intensive projects.
  • Business Analysts involved in system transitions.
  • Anyone interested in gaining a practical and theoretical understanding of data migration best practices.

3. Weekly Schedule

This 10-week schedule is designed for approximately 10-15 hours of study per week, balancing theoretical learning with practical exercises.

Week 1: Introduction to Data Migration & Project Scoping

  • Learning Objectives:

* Understand the definition, types, and common challenges of data migration.

* Familiarize with data migration lifecycle phases (assessment, design, execution, validation, cutover, post-migration).

* Learn project management fundamentals for data migration (stakeholder identification, risk assessment, communication planning).

* Identify key roles and responsibilities in a migration project.

  • Topics: Data migration overview, methodologies (big bang, phased, trickle), project charters, scope definition, stakeholder analysis, initial risk identification.
  • Recommended Resources:

* "The Data Migration Handbook" by John Morris (Chapters 1-3).

* Online articles on data migration strategies (e.g., from Gartner, Forrester).

* PMBOK Guide (relevant sections on project initiation and planning).

  • Assessment: Short quiz on migration concepts and project phases. Draft a basic project charter for a hypothetical migration.

Week 2: Source Data Analysis & Profiling

  • Learning Objectives:

* Master techniques for identifying all relevant source data systems and formats.

* Learn to use data profiling tools and methods to understand data characteristics, quality, and anomalies.

* Identify data quality issues (duplicates, inconsistencies, missing values).

* Understand the importance of metadata in source analysis.

  • Topics: Data discovery, source system documentation review, data profiling tools (e.g., SQL queries, Python libraries like Pandas Profiling, commercial tools like Informatica DQ, Talend DQ), data quality dimensions.
  • Recommended Resources:

* "Data Quality: The Field Guide" by Thomas C. Redman (Chapters on data profiling).

* Tutorials for a chosen data profiling tool (e.g., SQL Server Data Tools, Talend Open Studio for Data Quality).

* Online courses on SQL for data analysis.

  • Assessment: Perform data profiling on a provided sample dataset and generate a data quality report.

Week 3: Target System Analysis & Schema Design

  • Learning Objectives:

* Analyze the target system's architecture, data model, and business rules.

* Understand how to design or adapt target schemas to accommodate migrated data.

* Identify data type conversions and potential data loss implications.

* Collaborate with target system owners and business users to finalize requirements.

  • Topics: Target database schema review, data modeling principles (relational, dimensional, NoSQL), business requirement gathering, data governance considerations for the target state.
  • Recommended Resources:

* "Data Modeling Essentials" by Graeme Simsion and Graham Witt (Chapters on logical and physical design).

* Documentation for common database systems (e.g., PostgreSQL, SQL Server, MongoDB).

* Articles on data governance best practices.

  • Assessment: Propose modifications to a target schema based on source data analysis and business requirements.

Week 4: Field Mapping & Data Modeling

  • Learning Objectives:

* Develop comprehensive field-level mapping documents from source to target.

* Handle complex data relationships and hierarchies during mapping.

* Address master data management (MDM) considerations and reference data mapping.

* Document mapping decisions and exceptions clearly.

  • Topics: Field mapping templates, data element definitions, transformation rules (initial draft), handling primary/foreign keys, lookup tables, MDM integration points.
  • Recommended Resources:

* Templates for detailed field mapping documents (search online for "data migration mapping template").

* Case studies on MDM in data migration.

* Practical exercises on mapping complex datasets.

  • Assessment: Create a detailed field mapping document for a specific set of entities from a source to a target system.

Week 5: Data Transformation Rules & ETL/ELT Concepts

  • Learning Objectives:

* Define precise data transformation rules (e.g., aggregation, concatenation, splitting, conditional logic, data type conversion).

* Understand the differences and use cases for ETL (Extract, Transform, Load) and ELT (Extract, Load, Transform) approaches.

* Gain an introductory understanding of common ETL/ELT tools.

  • Topics: Transformation logic documentation, data cleansing rules, enrichment logic, introduction to popular ETL tools (e.g., SSIS, Talend, Informatica PowerCenter, Apache NiFi, AWS Glue, Azure Data Factory).
  • Recommended Resources:

* "Building a Data Warehouse with Examples in SQL Server" by Vincent Rainardi (Chapters on ETL design).

* Online tutorials for a chosen ETL/ELT tool (e.g., free versions of Talend Open Studio, SSIS basics).

* Articles comparing ETL vs. ELT.

  • Assessment: Design a set of transformation rules for a specific data flow, including pseudocode or flowcharts.

Week 6: Data Quality, Cleansing & Enrichment

  • Learning Objectives:

* Implement data cleansing techniques (deduplication, standardization, parsing, validation).

* Develop strategies for data enrichment (e.g., geocoding, third-party data integration).

* Establish data governance policies for migration.

* Handle missing or inconsistent data effectively.

  • Topics: Data quality frameworks, data standardization, fuzzy matching, data imputation techniques, data governance roles and responsibilities.
  • Recommended Resources:

* "Data Quality Management: A Practitioner's Guide" by David Loshin (Chapters on cleansing and enrichment).

* Practical exercises using Python libraries (e.g., fuzzywuzzy, pandas) for data cleansing.

  • Assessment: Apply data cleansing and enrichment rules to a dirty dataset, demonstrating improvement in data quality.

Week 7: Data Validation Strategies & Scripting

  • Learning Objectives:

* Design comprehensive pre-migration, in-migration, and post-migration validation strategies.

* Develop SQL queries or scripting (Python/PowerShell) for data validation.

* Create reconciliation reports to compare source and target data counts, sums, and specific values.

* Define error handling and logging mechanisms.

  • Topics: Record counts, checksums, random sample validation, referential integrity checks, business rule validation, scripting for validation, error reporting.
  • Recommended Resources:

* "SQL for Data Analysis" by Cathy O'Neil and Rachel Schutt (Chapters on advanced querying).

* Python scripting tutorials for data validation.

* Templates for data validation plans and reconciliation reports.

  • Assessment: Write a set of validation scripts (SQL or Python) for a given migration scenario, including scripts for reconciliation reports.

Week 8: Migration Strategy, Cutover Planning & Rollback Procedures

  • Learning Objectives:

* Select appropriate migration approaches (big bang, phased, parallel run, trickle migration) based on project constraints.

* Develop a detailed cutover plan, including downtime estimation, communication, and resource allocation.

* Design robust rollback procedures and backup strategies to mitigate risks.

* Understand the importance of communication during cutover.

  • Topics: Downtime analysis, cutover checklists, communication matrix, backup and restore strategies, data archiving, disaster recovery planning.
  • Recommended Resources:

* Case studies of successful and failed data migrations.

* Articles on business continuity and disaster recovery.

* Project management templates for cutover plans.

  • Assessment: Develop a detailed cutover plan and a comprehensive rollback strategy for a complex data migration scenario.

Week 9: Performance Optimization & Testing

  • Learning Objectives:

* Identify and address performance bottlenecks in ETL processes and migration scripts.

* Understand different types of migration testing (unit, integration, system, user acceptance testing).

* Create effective test plans and test cases.

* Learn about performance testing and load testing for migration.

  • Topics: Database indexing, query optimization, batch processing, parallel processing, test data generation, defect tracking, UAT sign-off.
  • Recommended Resources:

* "SQL Performance Explained" by Markus Winand.

* Software testing methodologies (e.g., ISTQB foundation).

* Articles on ETL performance tuning.

  • Assessment: Design a test plan for a data migration, including various test types, test cases, and expected outcomes.

Week 10: Post-Migration Support, Documentation & Capstone Project

  • Learning Objectives:

* Plan for post-migration monitoring, issue resolution, and ongoing data governance.

* Develop comprehensive handover documentation for support teams.

* Conduct

python

etl_customers_migration.py

import os

import logging

from datetime import datetime

import psycopg2 # Example for PostgreSQL. Replace with your target DB driver.

import pyodbc # Example for SQL Server

import mysql.connector # Example for MySQL

--- Configuration ---

Use environment variables for sensitive information like passwords

For demonstration, hardcoding is used, but NOT recommended for production.

SOURCE_DB_CONFIG = {

'host': os.getenv('SOURCE_DB_HOST', 'localhost'),

'database': os.getenv('SOURCE_DB_NAME', 'Legacy_CRM_DB'),

'user': os.getenv('SOURCE_DB_USER', 'legacy_user'),

'password': os.getenv('SOURCE_DB_PASSWORD', 'legacy_password'),

'port': os.getenv('SOURCE_DB_PORT', '5432')

}

TARGET_DB_CONFIG = {

'host': os.getenv('TARGET_DB_HOST', 'localhost'),

'database': os.getenv('TARGET_DB_NAME', 'New_CRM_DB'),

'user': os.getenv('TARGET_DB_USER', 'new_user'),

'password': os.getenv('TARGET_DB_PASSWORD', 'new_password'),

'port': os.getenv('TARGET_DB_PORT', '5432')

}

BATCH_SIZE = 1000 # Number of records to process in one transaction

--- Logging Setup ---

logging.basicConfig(level=logging.INFO,

format='%(asctime)s - %(levelname)s - %(message)s',

handlers=[

logging.FileHandler("migration_log.log"),

logging.StreamHandler()

])

--- Helper Functions ---

def connect_db(db_config, db_type='source'):

"""Establishes a database connection."""

try:

# Example for psycopg2 (PostgreSQL)

conn = psycopg2.connect(**db_config)

logging.info(f"Successfully connected to {db_type} database.")

return conn

except Exception as e:

logging.error(f"Error connecting to {db_type} database: {e}")

raise

def transform_customer_data(source_record: dict) -> dict:

"""

Applies transformation rules to a single customer record.

Args:

source_record (dict): A dictionary representing a row from the source database.

Returns:

dict: A dictionary representing the transformed row for the target database.

"""

transformed_record = {}

try:

# 1. Direct Mappings (no change needed)

transformed_record['CustomerID'] = source_record.get('CustomerID')

transformed_record['FirstName'] = source_record.get('FirstName')

transformed_record['LastName'] = source_record.get('LastName')

transformed_record['DateOfBirth'] = source_record.get('DateOfBirth') # Date types usually map directly

# 2. Renamed Fields

transformed_record['Email'] = source_record.get('EmailAddress')

transformed_record['Phone'] = source_record.get('PhoneNumber')

transformed_record['AddressLine1'] = source_record.get('StreetAddress')

transformed_record['PostalCode'] = source_record.get('ZipCode')

transformed_record['CustomerCategory'] = source_record.get('CustomerType')

transformed_record['RegisteredAt'] = source_record.get('RegistrationDate') # DATETIME to TIMESTAMP WITH TIME ZONE often implicit

# 3. Data Type/Format Conversions & Default Values

# StateCode (CHAR(2)) to StateProvince (VARCHAR(50)) - could be a lookup for full name

# For simplicity, we'll map directly, but a lookup could be implemented here.

transformed_record['StateProvince'] = source_record.get('StateCode')

# Country (VARCHAR(50)) to CountryCode (CHAR(3))

# Assuming 'USA' maps to 'USA', others might need a lookup table.

country = source_record.get('Country', 'USA').upper()

if country == 'USA' or country == 'UNITED STATES':

transformed_record['CountryCode'] = 'USA'

elif country == 'CANADA':

transformed_record['CountryCode'] = 'CAN'

else:

transformed_record['CountryCode'] = 'UNK' # Unknown or default

# LegacyStatusFlag (CHAR(1)) to IsActive (BOOLEAN)

legacy_status = source_record.get('LegacyStatusFlag', 'A')

transformed_record['IsActive'] = (legacy_status == 'A')

# 4. New Fields / Derived Fields (Target Only)

# FullName is a GENERATED ALWAYS field in the target, so we don't insert it.

# CreatedAt and UpdatedAt are handled by default values in the target schema.

# We can explicitly set them if needed, but for this example, rely on DB defaults.

# transformed_record['CreatedAt'] = datetime.now()

# transformed_record['UpdatedAt'] = datetime.now()

# 5. Handling NULLs and Defaults (if not handled by DB schema)

# Ensure Email is not NULL as per target schema

if not transformed_record.get('Email'):

# This is a critical transformation. If an email is missing,

# we might flag the record, skip it, or assign a placeholder.

# For this example, we'll use a placeholder if allowed, otherwise log and skip.

logging.warning(f"Customer ID {transformed_record['CustomerID']} has no Email. Assigning placeholder.")

transformed_record['Email'] = f"no_email_{transformed_record['CustomerID']}@example.com"

# Alternatively, raise an error or skip the record:

# raise ValueError(f"Missing Email for CustomerID {transformed_record['CustomerID']}")

# Ensure CustomerID is not NULL (primary key)

if transformed_record['CustomerID'] is None:

logging.error(f"Record with missing CustomerID found: {source_record}. Skipping.")

return None # Indicate this record should be skipped

except Exception as e:

logging.error(f"Error transforming record {source_record.get('CustomerID')}: {e}")

return None # Indicate transformation failed for this record

return transformed_record

def migrate_customers():

"""Main function to orchestrate the customer data migration."""

source_conn = None

target_conn = None

try:

source_conn = connect_db(SOURCE_DB_CONFIG, 'source')

target_conn = connect_db(TARGET_DB_CONFIG, 'target')

source_cursor = source_conn.cursor()

target_cursor = target_conn.cursor()

# SQL to select data from the source table

# Select specific columns to control the data extracted

source_select_sql = """

SELECT

CustomerID, FirstName, LastName, EmailAddress, PhoneNumber,

StreetAddress, City, StateCode, ZipCode, Country,

DateOfBirth, RegistrationDate, CustomerType, Notes, LegacyStatusFlag

FROM Legacy_CRM_DB.Customers

ORDER BY CustomerID;

"""

source_cursor.execute(source_select_sql)

logging.info("Starting data extraction and transformation...")

# Get column names from source cursor description

source_columns = [desc[0] for desc in source_cursor.description]

# SQL to insert data into the target table

# Ensure column order matches the transformed_record keys

target_insert_sql = """

INSERT INTO New_CRM_DB.Customers (

CustomerID, FirstName, LastName, Email, Phone,

AddressLine1, City, StateProvince, PostalCode, CountryCode,

DateOfBirth, RegisteredAt, CustomerCategory, IsActive

-- FullName, CreatedAt, UpdatedAt are handled by DB defaults/generated

) VALUES (

%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,

gemini Output

This document outlines the comprehensive plan for the upcoming data migration, detailing critical aspects from field mapping and transformation rules to validation, rollback procedures, and timeline estimates. The objective is to ensure a smooth, secure, and accurate transfer of data from the designated source system to the target system, minimizing disruption and maintaining data integrity.


Data Migration Planner: Comprehensive Strategy Document

Document Version: 1.0

Date: October 26, 2023

Prepared For: [Customer Name/Organization]

Prepared By: PantheraHive Solutions Team


1. Executive Summary

This Data Migration Plan details the strategy, procedures, and timelines required for successfully migrating data from [Source System Name] to [Target System Name]. The plan encompasses all critical phases, including pre-migration analysis, data extraction, transformation, loading (ETL), validation, and post-migration activities. Key components such as detailed field mappings, transformation rules, robust validation scripts, and comprehensive rollback procedures are defined to ensure data accuracy, integrity, and business continuity throughout the migration process. This document serves as a foundational guide for all stakeholders involved, aiming for a seamless transition and successful project completion.


2. Introduction & Scope

2.1. Project Overview

The primary goal of this project is to migrate essential business data from the legacy [Source System Name] to the new, enhanced [Target System Name]. This migration is critical for [briefly state business reason, e.g., improving operational efficiency, consolidating systems, enabling new functionalities].

2.2. Migration Objectives

  • Accuracy: Ensure 100% data fidelity post-migration, with no data loss or corruption.
  • Integrity: Maintain referential integrity and business rule compliance in the target system.
  • Timeliness: Complete the migration within the agreed-upon timeline and minimize business downtime.
  • Quality: Improve overall data quality through defined cleansing and transformation processes.
  • Auditability: Provide clear audit trails for all migration activities.

2.3. Scope of Data Migration

The migration will cover the following key data domains and associated tables/objects:

  • Source System: [e.g., Old CRM, Legacy ERP Database, Flat Files]
  • Target System: [e.g., New Cloud CRM, Modern ERP Suite, Data Warehouse]

In-Scope Data Domains (Examples - To be specified with client):

  • Customer Master Data (Accounts, Contacts)
  • Product Information (SKUs, Descriptions, Pricing)
  • Sales Orders/Invoices
  • Historical Transactional Data (up to [Date])
  • User Profiles and Permissions (if applicable)

Out-of-Scope Data Domains (Examples - To be specified with client):

  • Archived data older than [Date]
  • Non-essential historical logs
  • Specific custom objects not required in the target system

3. Source & Target Systems Overview

3.1. Source System Details

  • System Name: [e.g., SAP ECC 6.0, Salesforce Classic, Custom SQL Database]
  • Version: [Specify version]
  • Database Type: [e.g., Oracle 12c, SQL Server 2016, MySQL 8.0]
  • Key Data Structures: [e.g., Tables: KNA1 (Customers), MARA (Materials), VBAK (Sales Orders)]
  • Access Methods: [e.g., ODBC, JDBC, API, Direct Database Access, File Exports]
  • Current Data Volume (Estimated): [e.g., 500 GB, 10 million records]

3.2. Target System Details

  • System Name: [e.g., SAP S/4HANA, Salesforce Lightning, Dynamics 365, Snowflake Data Warehouse]
  • Version: [Specify version]
  • Database Type: [e.g., HANA DB, PostgreSQL, Azure SQL Database]
  • Key Data Structures: [e.g., Tables: Business Partner, Product Master, Sales Document]
  • Loading Methods: [e.g., API (REST/SOAP), CSV/XML Imports, Database Inserts, ETL Tool Connectors]
  • Expected Data Volume (Post-Migration): [e.g., 600 GB, 12 million records (due to new fields/structure)]

4. Data Inventory & Volume Estimates

A detailed inventory of data objects to be migrated, along with estimated record counts and storage sizes, is crucial for planning.

| Data Object / Table Name (Source) | Description | Estimated Record Count (Source) | Estimated Size (Source) | Dependencies | Notes |

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

data_migration_planner.txt
Download source file
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);}});}