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

Import contacts and generate lead scoring

Workflow: Contact Data Formatter - Step 1 of 2: CRM Contact Import

Workflow Description: The "Contact Data Formatter" workflow is designed to streamline your lead management process by importing contact data into your CRM system and subsequently generating insightful lead scores. This two-step process ensures your contact database is up-to-date, accurate, and optimized for sales and marketing efforts.

Step 1: CRM Contact Import (crm → import_contacts)

Objective: The primary goal of this initial step is to successfully import your provided contact data into your designated Customer Relationship Management (CRM) system. This involves validating the data, applying deduplication rules, and mapping your data fields to the appropriate CRM attributes, ensuring a clean and structured dataset for the subsequent lead scoring phase.

Required Data Specifications for Import

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

1. Accepted File Formats

We support the following file formats for contact data import:

  • CSV (Comma Separated Values): Preferred for its simplicity and wide compatibility.
  • XLSX (Microsoft Excel Workbook): Suitable for larger datasets and more complex structures.
  • Google Sheets: Direct integration or export to CSV/XLSX is supported.

2. Mandatory Fields

For successful CRM integration and effective lead scoring, the following fields are mandatory in your dataset:

  • Email Address: Essential for unique identification and communication.
  • First Name: Required for personalization.
  • Last Name: Required for personalization.

3. Recommended Fields for Enhanced Lead Scoring & CRM Utility

Including the following fields will significantly enhance the accuracy of lead scoring and provide richer data within your CRM:

  • Company Name: For B2B lead scoring and segmentation.
  • Job Title: Crucial for understanding a contact's role and influence.
  • Phone Number: For direct communication.
  • Industry: Helps in segmenting and scoring based on industry relevance.
  • Lead Source: (e.g., Website, Referral, Event, Paid Ad) Vital for attributing lead origin and ROI analysis.
  • Creation Date / Last Activity Date: Useful for tracking engagement and recency.
  • City, State, Country: For geographic segmentation and targeting.
  • Website URL: For company research and contextual data.
  • Any Custom Fields: If you have specific data points critical to your business (e.g., Product Interest, Budget Size), please include them.

4. Data Quality Guidelines

  • Consistency: Ensure consistent formatting for all data points (e.g., phone numbers, dates, state abbreviations).
  • Completeness: Fill in as many recommended fields as possible to maximize the value of your data.
  • Accuracy: Verify the correctness of email addresses and other critical information to minimize bounce rates and ensure deliverability.
  • Cleanliness: Remove any irrelevant characters, duplicate rows within your file, or placeholder text (e.g., "N/A", "Unknown").

5. Data Privacy & Compliance

Please ensure that all contact data provided has been collected in compliance with relevant data privacy regulations (e.g., GDPR, CCPA). By submitting the data, you confirm that you have the necessary rights and consents for its processing and storage within your CRM system.

Import Process Details

Once your data file is submitted, our system will execute the following steps:

  1. File Upload & Initial Scan: Your data file will be securely uploaded and undergo an initial scan to confirm its format and integrity.
  2. Data Validation: Each record will be validated against pre-defined rules to check for:

* Presence of mandatory fields.

* Correct data types (e.g., email format, numeric phone numbers).

* Basic consistency checks.

  1. Deduplication Strategy: Our system will employ a robust deduplication strategy to prevent duplicate entries in your CRM. The primary key for deduplication will be the Email Address.

* If an existing contact with the same email address is found, the system will offer options to:

* Update existing record: Overwrite specific fields with new data from the import.

* Skip new record: Retain the existing CRM record and ignore the imported duplicate.

* Flag for manual review: Mark potential duplicates for your team to decide.

Default behavior is to update existing records with newer, non-empty data from the import, ensuring the most complete profile.*

  1. Field Mapping: We will work with you to accurately map the columns in your provided file to the corresponding fields within your CRM system. This ensures that "Company Name" in your file goes to the "Company" field in your CRM, for example.
  2. Error Handling & Reporting: Any records that fail validation or encounter critical errors during the import process will be isolated. You will receive a detailed error report outlining the issues, allowing you to correct and re-import problematic records if necessary.
  3. Secure Import: The validated and mapped data will be securely imported into your CRM system.

Expected Outcome of Step 1

Upon successful completion of this step, you can expect:

  • Populated CRM: Your designated CRM will be updated with all valid contact records from your provided dataset.
  • Clean & Structured Data: Contacts will be properly categorized, and data fields will be accurately mapped within your CRM.
  • Import Summary Report: A comprehensive report detailing the number of records imported, skipped, updated, and any errors encountered.
  • Readiness for Lead Scoring: The imported data will be in an optimal state for the next phase: "Generate Lead Scoring."

Customer Action Required (Next Steps)

To proceed with Step 1 of the "Contact Data Formatter" workflow, please complete the following:

  1. Prepare Your Contact Data File: Consolidate your contact data into one of the accepted file formats (CSV or XLSX), ensuring it adheres to the mandatory and recommended field specifications outlined above.
  2. Review Data Quality: Carefully review your data for accuracy, consistency, and completeness. The cleaner your data, the more effective the import and subsequent lead scoring will be.
  3. Secure File Transfer: Please upload your prepared data file to our secure file transfer portal [Link to Secure Portal - e.g., "PantheraHive Secure Upload Link"] or share it via your preferred secure method as previously agreed upon.
  4. Confirm Readiness: Once your file is prepared and ready for submission, please notify your PantheraHive representative to initiate the import process.

Support & Contact Information

Should you have any questions regarding the data specifications, the import process, or require assistance in preparing your data, please do not hesitate to contact your dedicated PantheraHive support team at [Support Email Address] or [Support Phone Number]. We are here to ensure a seamless and successful data import.

crm Output

Workflow: Contact Data Formatter - Step 2/2: AI Lead Scoring

This document outlines the detailed output and deliverables for the "AI Lead Scoring" step, which is the final stage of your "Contact Data Formatter" workflow. This step leverages advanced Artificial Intelligence to transform your imported contact data into actionable insights for sales and marketing prioritization.


1. Workflow Overview

The "Contact Data Formatter" workflow is designed to streamline your contact management process. It begins by ensuring your contact data is accurately imported and structured within your CRM (Step 1), and then proceeds to apply sophisticated AI models to assign predictive lead scores, empowering your teams with data-driven prioritization.

2. Step Description: AI Lead Scoring

This critical second step of the workflow utilizes our proprietary AI models to analyze the comprehensive contact data that was successfully imported and formatted into your CRM. The primary objective is to assign a predictive lead score to each contact, indicating their likelihood of becoming a valuable customer. This scoring mechanism is designed to:

  • Prioritize Outreach: Direct your sales team's efforts towards the most promising leads.
  • Personalize Communications: Enable more targeted and effective marketing campaigns.
  • Optimize Resource Allocation: Ensure efficient use of sales and marketing resources.

3. Input Data for AI Lead Scoring

The AI lead scoring model processes the rich, structured contact data that was imported and organized in your CRM during the preceding step. Key data points typically analyzed include:

  • Demographic Information: Job title, seniority level, department, geographic location.
  • Firmographic Information: Company size (employees, revenue), industry, technology stack, company type.
  • Behavioral Data (if available and integrated): Website visits, content downloads (e.g., whitepapers, case studies), email opens and clicks, engagement with previous marketing campaigns.
  • Source Information: How the lead was acquired (e.g., organic search, paid ads, referral, event, direct).
  • Engagement History: Record of past interactions, responsiveness to previous outreach.
  • CRM Custom Fields: Any relevant custom fields identified during the data formatting step that contribute to lead qualification.

4. AI Lead Scoring Methodology

Our AI lead scoring employs a sophisticated machine learning algorithm trained on a vast dataset of historical conversion patterns, industry benchmarks, and your specific customer profiles.

  • Dynamic Evaluation: The model dynamically evaluates hundreds of data points for each contact, identifying subtle patterns and correlations that are indicative of a higher propensity to convert.
  • Key Factors Considered:

* Fit: How well the contact and their organization align with your Ideal Customer Profile (ICP) based on firmographic and demographic data.

* Interest: Behavioral signals indicating active engagement and intent (e.g., high-value content downloads, repeat website visits).

* Recency & Frequency: How recently and frequently the contact has interacted with your brand or sales team.

* Completeness: The availability and quality of data for each contact.

  • Probabilistic Score: The output is a probabilistic score, typically normalized to a scale (e.g., 0-100), representing the estimated likelihood of a contact converting into a qualified opportunity or customer.

5. Output of AI Lead Scoring

For each processed contact, the following will be generated and, where feasible and integrated, updated directly within your CRM system:

  • Lead Score (Numerical): A precise numerical score (e.g., 1-100) indicating the conversion likelihood. Higher scores denote higher potential.
  • Lead Tier / Grade (Categorical): Categorization into predefined tiers for quick prioritization (e.g., "A - Hot Lead," "B - Warm Lead," "C - Nurture Lead," "D - Cold Lead"). These tiers are customizable based on your business rules.
  • Top Scoring Factors (Detailed Insight): A brief explanation of the primary reasons contributing to a contact's score (e.g., "High score due to strong ICP fit and recent activity on pricing page," or "Lower score due to missing demographic data and no recent engagement").
  • Recommended Next Action (Actionable Guidance): Suggestions for the most appropriate next step based on the lead score (e.g., "Assign to Senior Sales Rep for immediate follow-up," "Enroll in Product Demo Nurture Sequence," "Review for potential re-engagement in 30 days").

6. Key Deliverables & Actionable Insights

The AI Lead Scoring step delivers tangible benefits that directly impact your sales and marketing effectiveness:

  • Prioritized Lead List: Your sales team will receive a clear, data-driven prioritized list of leads, enabling them to focus their valuable time and effort on contacts most likely to convert, thereby maximizing efficiency and ROI.
  • Enhanced Sales Efficiency: By reducing the time spent on unqualified leads, sales representatives can achieve their targets more consistently and improve overall productivity.
  • Personalized Marketing Campaigns: Segment leads based on their scores to deliver highly targeted and relevant marketing communications, improving engagement rates, click-through rates, and ultimately, conversion rates.
  • Optimized Resource Allocation: Strategically allocate sales and marketing resources where they will have the greatest impact, ensuring no high-potential lead is missed and no effort is wasted on low-potential leads.
  • Data-Driven Decision Making: Gain deeper, empirical insights into what characteristics and behaviors define a valuable lead for your business, allowing you to refine your Ideal Customer Profile (ICP) and optimize your overall go-to-market strategies.

7. Next Steps & Recommendations

To maximize the value of your AI lead scoring output, we recommend the following actions:

  1. Review & Validate: Have your sales and marketing leadership teams review the initial lead scores and tiers. Provide feedback to us on alignment with your internal understanding of lead quality for potential model refinement.
  2. Integrate into Workflows: Configure your CRM to automatically route high-scoring leads to specific sales teams or representatives, trigger predefined email sequences for different lead tiers, or set up alerts for critical changes in a lead's score.
  3. A/B Test Strategies: Experiment with different outreach strategies, messaging, and content for various lead tiers to continuously optimize your approach and discover what resonates best with each segment.
  4. Monitor Performance: Regularly track key performance indicators (KPIs) such as conversion rates, sales cycle length, and average deal size by lead score or tier to measure the impact of this new system and identify areas for continuous improvement.
  5. Establish a Continuous Feedback Loop: Share conversion outcomes (e.g., "Lead X converted successfully," "Lead Y was disqualified due to budget") with us. This feedback is invaluable for further training and improving the AI model's accuracy and predictive power over time.

8. Important Considerations

  • Data Quality is Paramount: The accuracy and effectiveness of the AI lead scoring are directly dependent on the quality, completeness, and consistency of the input data from your CRM. Incomplete or inaccurate data may affect scoring precision.
  • Dynamic & Adaptive Model: Our AI model is designed to learn and adapt. Ongoing feedback and the influx of new data will continuously enhance its predictive capabilities.
  • Guidance, Not Guarantee: Lead scores provide a strong indication of potential, but they are probabilistic and not a definitive guarantee of conversion. Human judgment, expertise, and relationship-building remain crucial components of the sales process.

Support & Questions

Should you have any questions regarding your AI lead scoring results, require assistance in integrating these insights into your existing workflows, or wish to discuss further optimization, please do not hesitate to contact your dedicated PantheraHive support team at [Support Email Address] or [Support Phone Number]. We are here to ensure your continued success.

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