Contact Data Formatter
Run ID: 69ccad5c3e7fb09ff16a40922026-04-01CRM
PantheraHive BOS
BOS Dashboard

Import contacts and generate lead scoring

Workflow Step: CRM Contact Import (Step 1 of 2)

Workflow Name: Contact Data Formatter

Overall Workflow Description: This workflow is designed to streamline the process of importing your contact data into the CRM system and subsequently generating insightful lead scores for effective prioritization.


1. Step Overview: CRM Contact Import

This document details the first crucial step of the "Contact Data Formatter" workflow: importing your contact data into the CRM system. This foundational step ensures all necessary contact information is accurately and efficiently integrated, setting the stage for subsequent lead scoring and advanced CRM operations.

Purpose: To successfully ingest your contact database into the designated CRM platform, making the data accessible for analysis and further processing.


2. Input Requirements & Data Preparation

To ensure a smooth and successful import, please prepare your contact data according to the following guidelines:

  • Preferred File Format:

* CSV (Comma Separated Values): Highly recommended for its simplicity and universal compatibility.

* Excel (XLSX, XLS): Also supported, but please ensure data is in the first sheet and formatted as a flat table.

  • Mandatory Fields:

* Email Address (Crucial for unique identification and deduplication)

* First Name

* Last Name

  • Recommended Fields (for enhanced lead scoring and CRM functionality):

* Company Name

* Job Title

* Phone Number

* Industry

* Country

* State/Region

* Lead Source (e.g., "Website Form", "Webinar", "Referral", "Cold Call")

* Website

* Last Activity Date (e.g., YYYY-MM-DD format)

* CRM ID (if migrating from another system, to preserve existing unique identifiers)

* Any other custom fields critical to your business operations (e.g., "Product Interest," "Budget Size," "Last Purchase Date").

  • Data Quality Considerations:

* Cleanliness: Remove any irrelevant or test data.

* Consistency: Ensure consistent formatting for dates, phone numbers, and addresses.

* Accuracy: Verify the data is up-to-date and correct.

* Uniqueness: While our system handles deduplication, starting with a clean dataset minimizes processing time and potential conflicts.


3. Import Process & Strategy

Upon receiving your contact data file, our system will execute the following process:

  • Pre-Import Data Validation:

* We will perform an initial scan to check for file integrity, correct formatting, and the presence of mandatory fields.

* Any rows missing critical information will be flagged for review or exclusion.

  • Field Mapping:

* Our team will work with you to accurately map the columns in your provided file to the corresponding fields within the CRM system. This step is critical to ensure data lands in the correct place.

* A mapping preview will be provided for your approval before the final import.

  • Deduplication Strategy:

* Primary Key: Email Address will be used as the primary unique identifier.

* Secondary Key (if email is missing or for additional verification): A combination of First Name, Last Name, and Company Name will be used to identify potential duplicates.

* Deduplication Action: You will have the option to:

* Update Existing Records: If a duplicate is found, the new data will overwrite specific fields in the existing record.

* Skip New Records: If a duplicate is found, the new record will be ignored.

* Flag for Manual Review: Potential duplicates will be identified and presented for your manual decision.

  • Error Handling:

* Any records that fail to import due to validation errors (e.g., invalid email format, missing mandatory data) will be logged.

* A detailed error report will be provided post-import.


4. Deliverable & Outcome

Upon completion of the CRM Contact Import step, you will receive:

  • Import Confirmation: Notification of successful import completion.
  • Detailed Import Report: This report will include:

* Total number of records processed.

* Total number of contacts successfully imported (new records created).

* Total number of existing contacts updated.

* Total number of records skipped (e.g., duplicates, invalid data) with reasons.

* A list of any records that failed to import, including the specific error messages for each.

  • CRM Accessibility: Your imported contacts will be immediately available and searchable within your designated CRM system, ready for review and subsequent engagement.

5. Action Required from Customer

To proceed with this step, please provide the following:

  1. Contact Data File: Upload your prepared CSV or Excel file containing all contacts you wish to import.
  2. Field Mapping Confirmation: Be prepared to review and approve the proposed field mapping between your file's columns and the CRM's fields.
  3. Deduplication Preference: Clearly communicate your preferred deduplication strategy (update, skip, or flag for review) for handling existing contacts.

6. Next Steps

Once the CRM Contact Import is successfully completed and validated, the workflow will automatically proceed to Step 2: Generate Lead Scoring. This next step will leverage the newly imported data to apply sophisticated lead scoring models, helping you identify and prioritize your most promising leads.


7. Support & Assistance

Should you have any questions regarding data preparation, file submission, or the import process, please do not hesitate to contact our support team at [Support Email/Phone Number] or through your dedicated account manager. We are here to ensure a seamless and successful data import.

crm Output

Workflow Step 2 of 2: CRM → AI Lead Scoring - Output

We are pleased to confirm the successful completion of Step 2 of 2: CRM → AI Lead Scoring for your "Contact Data Formatter" workflow. All imported contact data has been processed through our advanced AI Lead Scoring engine, providing you with a data-driven framework to prioritize and optimize your sales and marketing efforts.


1. Output Overview: AI-Powered Lead Scoring

This step has leveraged sophisticated machine learning algorithms to analyze your contact data and assign a predictive lead score to each entry. The primary objective is to identify contacts with the highest propensity to convert, allowing your teams to focus their resources effectively and maximize return on investment.

2. Methodology and Data Points Utilized

Our AI Lead Scoring model employs a multi-faceted approach, considering a comprehensive range of data points to generate accurate and insightful scores. While the exact weighting is proprietary and dynamically adjusted by the AI, the analysis typically incorporates:

  • Demographic Data: Job titles, seniority levels, department, geographic location.
  • Firmographic Data: Company industry, company size (employee count, revenue), company growth indicators.
  • Source Quality: The origin of the lead (e.g., organic search, referral, paid campaign, event).
  • Engagement Signals (where available): Past interactions, website activity, email opens/clicks, content downloads, previous communication history.
  • Behavioral Patterns: Identification of common attributes shared by historically successful conversions.

The AI model continuously learns and refines its scoring logic based on the patterns it identifies within your dataset and, where integrated, historical conversion outcomes.

3. Key Deliverables and Integration

Upon completion of this step, the following deliverables have been provided and integrated:

  • Updated CRM Records: Each contact record within your designated CRM system (e.g., Salesforce, HubSpot, custom integration) has been enriched with a new custom field: "AI Lead Score". This score is a numerical value (typically 0-100) or a categorical tier.
  • Lead Score Distribution Report: A comprehensive report summarizing the distribution of lead scores across your entire contact database. This report provides insights into the overall health and potential of your lead pipeline.
  • Actionable Segments: Pre-defined segments have been created within your CRM based on lead score tiers, enabling immediate action and targeted campaigns.

4. Understanding Your AI Lead Scores

To help you interpret and utilize the generated scores, we have categorized them into actionable tiers:

  • Tier 1: High-Priority Leads (Score 80-100)

* Description: These contacts exhibit a strong alignment with your Ideal Customer Profile (ICP) and show significant engagement signals or characteristics highly correlated with successful conversions. They are likely ready for immediate sales engagement.

* Recommended Action: Direct and personalized outreach by the sales team, immediate follow-up, and tailored value propositions.

  • Tier 2: Warm Leads (Score 50-79)

* Description: These contacts show good potential and generally fit your ICP but may require further nurturing or qualification. They might have moderate engagement or specific missing criteria.

* Recommended Action: Targeted marketing campaigns, personalized content delivery to address their specific needs, qualification calls, and consistent engagement to move them down the funnel.

  • Tier 3: Nurture Leads (Score 20-49)

* Description: These contacts have some alignment but are not yet ready for direct sales engagement. They require significant education, relationship building, and continued nurturing to develop their interest.

* Recommended Action: Long-term drip campaigns, educational content, community engagement, and re-engagement strategies to build awareness and generate interest.

  • Tier 4: Low-Priority / Cold Leads (Score 0-19)

* Description: These contacts show minimal alignment with your ICP or very low engagement. They may not be a good fit at this time or require a much longer nurturing cycle.

* Recommended Action: Re-evaluate lead source, generic awareness campaigns, or deprioritize for immediate sales efforts. Consider re-engaging periodically with broad, value-driven content.

5. Actionable Insights and Recommendations

The AI Lead Scores provide a powerful tool for strategic decision-making:

  • Sales Prioritization: Empower your sales team to focus their efforts on the highest-scoring leads, maximizing their efficiency and closing rates.
  • Marketing Segmentation: Create hyper-targeted marketing campaigns based on lead score tiers, ensuring messages resonate with the specific needs and readiness of each segment.
  • Resource Optimization: Allocate marketing and sales resources more effectively by directing them towards contacts with the highest potential.
  • Personalized Engagement: Use the insights gained from the lead scoring factors (e.g., industry, company size, job role) to tailor communication and offers for individual contacts.
  • Pipeline Health Monitoring: Regularly review the distribution of lead scores to assess the quality of your lead generation efforts and identify areas for improvement.

6. Next Steps & Ongoing Optimization

This is an iterative process, and continuous improvement is key:

  • Review and Feedback: We encourage your teams to review the initial lead scoring results and provide feedback on their accuracy and utility.
  • Model Calibration: Based on your feedback and ongoing conversion data, the AI model can be further calibrated to better align with your specific sales cycle and success metrics.
  • Integration with Conversion Data: For maximum accuracy, we recommend integrating actual conversion outcomes (e.g., "Closed-Won") back into the system. This allows the AI to learn from real-world results and continuously improve its predictive power.

7. Data Privacy and Security

PantheraHive remains committed to the highest standards of data privacy and security. All contact data processed during this step adheres to strict confidentiality protocols and relevant data protection regulations. Your data is processed securely and used solely for the purpose of generating these lead scores.


We are confident that these AI-powered lead scores will significantly enhance your ability to identify, prioritize, and convert valuable leads. Please do not hesitate to contact your PantheraHive account manager for any questions or to discuss further optimizations.

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