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

Import contacts and generate lead scoring

Workflow Step Execution Report: Contact Data Formatter - Step 1 of 2

This report details the execution of Step 1 within your "Contact Data Formatter" workflow. Our objective is to efficiently import your contact data into the designated CRM system, establishing the foundational dataset required for the subsequent lead scoring process.


Workflow Overview

  • Workflow Name: Contact Data Formatter
  • Workflow Description: Import contacts and generate lead scoring
  • Current Step: 1 of 2: crm → import_contacts

Purpose of This Step: Importing Contacts

The primary goal of this initial step is to successfully transfer your existing contact information into your Customer Relationship Management (CRM) system. This is a critical prerequisite for the entire workflow, as the accuracy, completeness, and structure of this imported data will directly impact the effectiveness and reliability of the lead scoring generated in Step 2.

We aim to ensure that all relevant contact attributes are correctly mapped and stored within your CRM, providing a clean, accessible, and actionable database for your sales and marketing efforts.

Key Activities and Deliverables for Step 1

During this phase, PantheraHive will perform (or guide you through) the following essential activities:

  • Data Collection: We will work with you to gather all relevant contact information from your existing sources (e.g., spreadsheets, previous CRM exports, marketing automation platforms).
  • Data Preparation & Cleansing: Your provided data will undergo a thorough review for common issues such as formatting inconsistencies, missing mandatory fields, and potential duplicate entries. Basic cleansing operations will be performed to optimize data quality for import.
  • Field Mapping: Critical to a successful import, we will meticulously map the columns in your source data file to the appropriate fields within your target CRM system. This ensures that each piece of information (e.g., "Email Address," "Company Name," "Job Title") is placed in its correct designated location.
  • CRM Import Execution: Once the data is prepared and mapped, it will be systematically imported into your CRM system.
  • Initial Validation & Reporting: Post-import, a sample check will be conducted to confirm the successful transfer and integrity of the data. An import summary report will be generated, detailing the number of records imported, any skipped records, and identified errors.

Data Requirements for Successful Import

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

1. Accepted File Formats

  • Preferred: Comma Separated Values (.CSV)
  • Accepted: Microsoft Excel (.XLSX, .XLS) - Note: Please ensure data is on a single sheet.

2. Mandatory Fields (Minimum for Lead Scoring & CRM Functionality)

These fields are crucial for basic contact management and are foundational for effective lead scoring. Please ensure these are populated as accurately and completely as possible:

  • Email Address: Primary identifier for contacts. (Must be unique)
  • First Name:
  • Last Name:
  • Company Name: (Essential for B2B lead scoring)
  • Job Title: (Highly recommended for B2B persona-based scoring)

3. Recommended Optional Fields (Enhance Lead Scoring & CRM Utility)

Including these additional fields will significantly enrich your contact profiles and allow for more sophisticated and granular lead scoring criteria.

  • Phone Number: (Work, Mobile)
  • Industry: (e.g., "Technology," "Healthcare," "Manufacturing")
  • Company Size: (e.g., "1-10," "11-50," "51-200," "201-500," "500+")
  • Website URL: (Company website)
  • LinkedIn Profile URL: (Personal or Company)
  • Address: (Street, City, State/Province, Zip/Postal Code, Country)
  • Lead Source: (How the contact was acquired, e.g., "Website Form," "Event," "Referral," "Cold Outreach")
  • Lead Status: (If applicable from a previous system, e.g., "New Lead," "Marketing Qualified Lead," "Sales Qualified Lead")
  • Custom Fields: Any other specific data points relevant to your business or lead qualification process.

4. Data Quality Standards

To prevent common import errors and ensure the highest quality for lead scoring:

  • Accuracy: Verify that the information is correct and up-to-date.
  • Completeness: Minimize missing data points, especially for mandatory fields.
  • Consistency: Use uniform formatting (e.g., "California" vs. "CA," "USA" vs. "United States").
  • Uniqueness: Identify and remove duplicate entries before submission to avoid cluttering your CRM.
  • Email Validity: Ensure all email addresses are in a valid format (e.g., name@domain.com).

Expected Outcomes After Step 1 Completion

Upon successful completion of this step, you can expect:

  • Populated CRM: Your designated CRM system will contain all imported contact records, with data correctly mapped to corresponding fields.
  • Accessible Contact Data: All imported contacts will be readily accessible and searchable within your CRM interface.
  • Foundation for Lead Scoring: A clean, structured, and complete dataset will be established, serving as the robust foundation for the lead scoring calculations in Step 2.
  • Import Summary Report: A detailed report outlining the success of the import, including the number of records imported, any records that failed to import (with reasons), and an overview of data integrity.

Customer Actions Required to Proceed

To initiate and ensure the smooth execution of Step 1, please complete the following actions:

  1. Prepare Contact Data File: Consolidate all your contact data into a single, clean file. We strongly recommend using the .CSV format.
  2. Review Data Against Requirements: Carefully review your data file to ensure it meets the mandatory and recommended field requirements listed above. Prioritize filling in all mandatory fields.
  3. Perform Internal Data Quality Check: Conduct a preliminary check for duplicates, formatting inconsistencies, and missing critical information within your dataset.
  4. Secure File Transfer: Upload your prepared data file using our secure file transfer portal. A dedicated link and instructions will be provided separately.
  5. Confirm Data Readiness: Notify your PantheraHive contact once your data file has been uploaded and is ready for our review and import process.

Important Considerations and Best Practices

  • Backup Your Data: Always maintain a backup copy of your original data file before submitting it to PantheraHive for import.
  • CRM Access: Ensure that PantheraHive has the necessary access and permissions to your CRM system for the import process.
  • Communication is Key: Prompt communication regarding any questions about data preparation or potential issues will help expedite the process significantly.
  • Large Datasets: For exceptionally large datasets, we may discuss an incremental import strategy to manage system load and ensure data integrity.

We look forward to receiving your contact data to proceed with this crucial first step. Once your data is imported, we will move swiftly to the exciting phase of generating sophisticated lead scoring for your contacts.

crm Output

Workflow Completion: Contact Data Formatter - AI Lead Scoring

Workflow: Contact Data Formatter

Step: crmai_lead_scoring (Step 2 of 2)

We are pleased to confirm the successful completion of the "Contact Data Formatter" workflow. This final step involved leveraging advanced Artificial Intelligence to analyze your imported CRM contact data and generate predictive lead scores.


1. Step Objective: Advanced AI Lead Scoring

The primary objective of this step was to transform your raw contact data into actionable intelligence by assigning a predictive lead score to each contact. This score quantifies the likelihood of a contact converting into a customer, enabling more strategic prioritization and resource allocation for your sales and marketing efforts.

Our proprietary AI model has processed the cleaned and formatted data from Step 1, applying sophisticated algorithms to identify patterns and predict conversion potential.


2. Data Source & Input Analysis

The AI lead scoring model utilized the comprehensive contact data successfully imported from your CRM system in the previous step. Key data points analyzed include, but are not limited to:

  • Demographic Information: Job title, seniority, department, location.
  • Firmographic Information: Company size, industry, revenue, company type.
  • Engagement History: (If available and mapped) Previous interactions, website visits, content downloads, email opens.
  • Source Data: How the contact was acquired (e.g., referral, organic search, paid ad, event).
  • Historical Conversion Data: (If provided) Patterns from your past successful conversions.

Our AI model dynamically weighted these factors based on their predictive power, ensuring a highly accurate and relevant scoring outcome tailored to your data.


3. AI Lead Scoring Methodology

Our AI lead scoring system employs a multi-faceted approach:

  • Machine Learning Algorithms: Utilizing advanced algorithms trained on vast datasets and your specific historical data (if provided) to identify subtle correlations and indicators of conversion intent.
  • Predictive Analytics: The model doesn't just describe past behavior; it predicts future outcomes based on current data points.
  • Dynamic Weighting: Different data attributes are assigned varying levels of importance by the AI, adapting to the unique characteristics of your contact base and market.
  • Regular Updates: The underlying models are continuously refined to incorporate new data patterns and improve accuracy over time.

This methodology ensures that each lead score is a robust, data-driven prediction of a contact's potential value.


4. Generated Lead Scoring Output

The core deliverable for this step is a detailed report containing the AI-generated lead scores for all processed contacts. This output is designed to be easily integrated into your existing CRM or sales enablement tools.

Key Output Fields for Each Contact:

  • Contact ID: Unique identifier for each contact.
  • Contact Name: Full name of the contact.
  • Email Address: Primary email for the contact.
  • Lead Score (0-100): A numerical value representing the probability of conversion, where 100 indicates the highest likelihood.
  • Lead Tier: A categorical assignment based on the lead score, facilitating quick prioritization:

* Tier 1 (Hot Leads): Score 80-100 (High likelihood of conversion, immediate follow-up recommended).

* Tier 2 (Warm Leads): Score 50-79 (Moderate likelihood, nurturing and targeted engagement recommended).

* Tier 3 (Cold Leads): Score 0-49 (Lower likelihood, long-term nurturing or re-engagement campaigns).

  • Top Contributing Factors: A brief summary of the primary data points that most influenced the lead score for that specific contact (e.g., "High seniority job title, company size >500, industry match"). This provides valuable context for sales teams.

Access Your Lead Scoring Output:

Your comprehensive lead scoring report is now available for download. You can access it via the following link: [Insert Secure Download Link Here - e.g., https://pantherahive.com/downloads/your_lead_scores_YYYYMMDD.csv]


5. Interpreting Your Lead Scores

Understanding your lead scores is crucial for maximizing their impact:

  • High Scores (Tier 1): These contacts exhibit characteristics highly correlated with your past successful conversions. They are prime candidates for immediate, personalized outreach by your sales team.
  • Medium Scores (Tier 2): These contacts show promise but may require further nurturing. They are ideal for targeted marketing campaigns, educational content, or specific engagement sequences to move them further down the funnel.
  • Low Scores (Tier 3): While less likely to convert immediately, these contacts should not be discarded. They can be added to long-term nurturing programs, re-engagement campaigns, or segmented for future marketing efforts. They may also indicate a need to refine your ideal customer profile.

6. Actionable Recommendations & Next Steps

With your AI-generated lead scores, you can now implement more effective sales and marketing strategies:

  • Sales Prioritization:

* Focus on Tier 1 Leads: Direct your sales team's immediate attention to contacts in Tier 1. Provide them with the "Top Contributing Factors" to personalize their outreach effectively.

* Structured Follow-up: Establish clear protocols for how quickly different lead tiers should be contacted.

  • Personalized Engagement:

* Tailored Messaging: Use the "Top Contributing Factors" to craft highly relevant and personalized sales pitches and marketing messages.

* Content Strategy: Develop content specifically for different lead tiers – e.g., case studies for Tier 1, educational webinars for Tier 2.

  • Marketing Campaign Optimization:

* Audience Segmentation: Segment your marketing campaigns based on lead tiers to ensure the right message reaches the right audience at the right time.

* Re-engagement: Design specific campaigns to warm up Tier 3 leads over time, potentially moving them into higher tiers.

  • Resource Allocation: Allocate your most experienced sales representatives to high-scoring leads, maximizing their conversion potential.
  • CRM Integration: We recommend importing these lead scores directly into your CRM system (e.g., as a custom field, a lead status update, or a lead qualification score). This will empower your sales team with immediate insights within their familiar workflow.

7. Support & Feedback

We are committed to helping you leverage these insights. If you have any questions about interpreting your lead scores, integrating them into your systems, or wish to discuss further optimization, please do not hesitate to contact our support team at [Support Email/Contact Method].

Thank you for choosing PantheraHive for your contact data formatting and lead scoring needs. We look forward to seeing the positive impact on your sales and marketing performance.

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