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

Import contacts and generate lead scoring

Workflow Execution: Contact Data Formatter - Step 1 of 2

Workflow Description: This workflow, "Contact Data Formatter," is designed to streamline the process of importing your contact data and subsequently generating valuable lead scores to enhance your sales and marketing efforts.

Current Step: crm → import_contacts

This document details the execution of Step 1, focusing on the secure and efficient import of your contact data into the designated Customer Relationship Management (CRM) system. This foundational step ensures that your contact information is accurately captured, standardized, and prepared for advanced analysis, specifically lead scoring.


1. Purpose of this Step: crm → import_contacts

The primary objective of the import_contacts step is to establish a robust and clean foundation of your contact data within our system. This involves:

  • Centralizing Contact Information: Consolidating all relevant contact details into a unified database.
  • Ensuring Data Readiness: Preparing the dataset for subsequent analytical processes, most critically, lead scoring.
  • Establishing Data Quality: Implementing initial validation and cleansing to ensure accuracy and consistency.

This step is critical as the quality of the imported data directly impacts the accuracy and effectiveness of the lead scoring model generated in Step 2.

2. Key Activities and Processes

During this import_contacts phase, the following activities will be meticulously executed:

  • Data Ingestion: Securely receiving and processing your provided contact data file(s) from the agreed-upon source (e.g., CSV, Excel, direct CRM export).
  • Field Mapping: Collaboratively defining and mapping the fields from your source data to the corresponding fields within our CRM system. This ensures that information like "Email," "First Name," "Company," "Job Title," etc., are correctly categorized.
  • Initial Data Transformation: Applying basic standardization rules to ensure consistency. This may include:

* Standardizing case (e.g., "john doe" to "John Doe").

* Formatting phone numbers consistently.

* Normalizing country or state names.

  • Duplicate Detection and Management: Implementing algorithms to identify potential duplicate contact entries. We will define a strategy for handling duplicates (e.g., merging, flagging for review, or discarding based on predefined rules).
  • Data Validation: Performing initial checks to ensure data integrity, such as validating email formats, checking for missing mandatory fields, and verifying data types.
  • Error Logging and Reporting: Documenting any issues encountered during the import process, such as unmapped fields, data format errors, or failed imports, to provide transparency and facilitate resolution.

3. Data Requirements from Customer

To ensure a smooth and successful import, we require your contact data to meet the following specifications:

  • Preferred Format: CSV (Comma Separated Values) or Excel (.xlsx) file. Google Sheets link can also be accommodated.
  • Mandatory Fields:

* Email Address (Primary identifier)

* First Name

* Last Name

* Company Name

  • Highly Recommended Fields (for optimal lead scoring):

* Job Title

* Industry

* Phone Number

* Website

* Country/Region

* Source (e.g., "Website Form," "Trade Show," "Referral")

* Last Activity Date (if available from your existing CRM)

* Engagement Score (if available)

* Any other fields relevant to your ideal customer profile (e.g., Company Size, Revenue).

  • Data Privacy & Consent: Please ensure that all provided contact data has been collected and processed in compliance with relevant data protection regulations (e.g., GDPR, CCPA) and that you have the necessary consent for its use in this workflow.

4. Expected Outcomes and Deliverables for this Step

Upon completion of the import_contacts step, you will receive:

  • Clean, Standardized Contact Database: Your contact data will be successfully imported into the CRM system, with all records standardized and validated according to the agreed-upon rules.
  • Data Quality Report: A comprehensive report detailing:

* Number of records imported successfully.

* Number of duplicates identified and action taken.

* Any records with errors or missing mandatory fields, along with proposed resolutions.

* Summary of data cleansing and transformation applied.

  • Mapped Field Schema Documentation: A clear document outlining how your source data fields were mapped to the CRM fields, serving as a reference for future imports.
  • Readiness for Lead Scoring: Confirmation that the contact dataset is fully prepared and optimized for the generation of lead scores in the subsequent step.

5. Customer Action Required

To initiate and facilitate this step efficiently, we kindly request the following actions from your side:

  1. Provide Contact Data: Submit your contact data file(s) in the preferred format (CSV/Excel) via our secure data transfer portal or agreed-upon method by [Insert Date/Timeframe - e.g., EOD Friday, 2023-10-27].
  2. Review Field Mapping: Participate in a brief review session (virtual or via email) to confirm the proposed field mapping between your source data and the CRM fields.
  3. Address Data Quality Feedback: Respond promptly to any queries or requests for clarification regarding identified data quality issues (e.g., ambiguous data, unresolvable duplicates).

6. Next Steps

Once Step 1 is successfully completed and the contact data is validated and imported, we will proceed immediately to:

  • Step 2 of 2: Generate Lead Scoring: This step will leverage the clean, imported data to develop and apply a sophisticated lead scoring model, providing actionable insights into your contact's propensity to convert.

We are committed to delivering a seamless and high-quality experience. Please do not hesitate to reach out to your dedicated project manager if you have any questions or require assistance.

crm Output

Workflow Execution Summary: Contact Data Formatter

This document details the successful execution of Step 2 of 2 for your "Contact Data Formatter" workflow. The primary objective of this step was to leverage artificial intelligence to generate comprehensive lead scores for your imported contacts, providing actionable insights for your sales and marketing teams.


Step 2: AI Lead Scoring Analysis (crm → ai_lead_scoring)

This step involved processing the contact data previously imported from your CRM system through our advanced AI-driven lead scoring engine. The goal is to provide a quantified assessment of each contact's likelihood to convert into a customer, enabling more strategic and efficient engagement.

Purpose of AI Lead Scoring

AI Lead Scoring is a sophisticated method designed to:

  • Prioritize Leads: Identify the most promising leads that deserve immediate attention from your sales team.
  • Optimize Resource Allocation: Ensure sales and marketing efforts are focused on contacts with the highest conversion potential.
  • Enhance Personalization: Provide insights that enable more tailored communication and offers.
  • Improve Conversion Rates: Ultimately drive higher revenue by streamlining the sales funnel.

Input Data Overview

The AI lead scoring model utilized the rich dataset extracted and formatted in Step 1. This includes, but is not limited to:

  • Demographic Information: Job title, seniority, location, industry, company size.
  • Firmographic Information: Company revenue, employee count, industry classification.
  • Engagement History: Website visits, email opens/clicks, content downloads, form submissions, past interactions (if available and integrated).
  • Behavioral Data: Product interest, specific pages visited, time spent on site (if tracked).
  • Source Data: How the lead was acquired (e.g., organic search, paid ad, referral, event).

AI Lead Scoring Methodology

Our AI lead scoring engine employs a sophisticated machine learning model that analyzes hundreds of data points for each contact. The methodology includes:

  1. Feature Engineering: Extracting relevant attributes from your contact data.
  2. Historical Data Analysis: Training the model on your historical customer data (if provided) to understand patterns of successful conversions. In the absence of specific historical conversion data, the model leverages industry benchmarks and best practices.
  3. Predictive Modeling: Applying advanced algorithms (e.g., Gradient Boosting, Random Forest) to predict the probability of conversion for each new contact.
  4. Dynamic Weighting: The model dynamically adjusts the importance (weight) of various factors based on their correlation with conversion success. For example, a specific job title or interaction might carry more weight for your business.
  5. Score Generation: Assigning a numerical score and a qualitative category to each contact.

Key Scoring Factors Considered

The AI model automatically identified and weighted the most influential factors for your lead scoring, which typically include:

  • Fit Factors: How well the lead's demographics and firmographics align with your ideal customer profile (ICP).
  • Interest Factors: The level and recency of engagement with your content, website, and communications.
  • Intent Factors: Specific actions that indicate a stronger buying intent (e.g., pricing page visits, demo requests, trial sign-ups).
  • Negative Indicators: Factors that might decrease a lead's score (e.g., high bounce rate, lack of engagement over time, irrelevant industry).

Lead Scoring Results & Deliverables

The output of this step is a comprehensive lead scoring report, providing a clear and actionable assessment for each contact.

Lead Score Categorization

Each contact has been assigned a numerical score and classified into one of four distinct tiers to facilitate immediate action:

  • Tier 1: Hot Leads (Score 80-100)

* Description: These contacts perfectly match your ICP and exhibit strong buying signals and high engagement. They are highly likely to convert.

* Action: Immediate outreach by top sales representatives. Prioritize personalized communication.

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

* Description: Good fit with your ICP, showing significant interest and engagement. They are strong candidates for conversion.

* Action: Prompt follow-up by sales. Nurture with targeted content and specific offers.

  • Tier 3: Nurture Leads (Score 40-59)

* Description: Moderate fit or lower engagement. They show potential but require further nurturing to become sales-ready.

* Action: Enroll in automated marketing nurture campaigns. Provide educational content to build interest.

  • Tier 4: Cold/Unqualified Leads (Score 0-39)

* Description: Low fit or minimal engagement. These contacts are unlikely to convert in the short term.

* Action: Monitor for future engagement. Re-evaluate periodically. May be excluded from immediate sales efforts to save resources.

Detailed Lead Scoring Output

The generated lead scoring data is provided in a structured format, ready for integration back into your CRM or for immediate use by your teams.

Deliverable Format: CSV / XLSX file, or direct API integration into your CRM (if configured).

Key Fields Included for Each Contact:

| Field Name | Description | Example Value |

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

| Contact_ID | Unique identifier for the contact | C-00123 |

| First_Name | Contact's first name | Jane |

| Last_Name | Contact's last name | Doe |

| Email | Contact's email address | jane.doe@example.com |

| Company | Contact's company name | Acme Corp |

| Job_Title | Contact's job title | VP of Marketing |

| Lead_Score | Numerical score (0-100) indicating conversion probability | 92 |

| Lead_Tier | Categorization based on the numerical score | Hot Lead |

| Score_Reason_1 | Primary factor contributing to the score | High ICP Match |

| Score_Reason_2 | Secondary factor contributing to the score | Recent Demo Request |

| Engagement_Score | Sub-score reflecting engagement level (e.g., website visits, email opens) | 85 |

| Fit_Score | Sub-score reflecting how well the contact fits your Ideal Customer Profile | 95` |

| Last_Activity_Date | Date of the most recent tracked activity | 2023-10-26 |

| Source | How the lead was acquired | Organic Search |

| Industry | Contact's industry | Software |


Actionable Insights & Recommendations

The lead scores are not just numbers; they are powerful tools designed to drive specific actions and improve your overall sales and marketing efficiency.

For Sales Teams

  • Prioritize Outreach: Focus immediate efforts on "Hot Leads" (Tier 1) and "Warm Leads" (Tier 2).
  • Personalize Pitches: Utilize the "Score Reasons" and underlying data (job title, company, industry) to tailor your initial outreach and conversations.
  • Efficient Follow-up: Implement a tiered follow-up strategy based on lead scores. Hot leads might receive multiple high-touch points, while warm leads get a slightly more spaced-out approach.
  • Resource Allocation: Allocate your most experienced sales reps to the highest-scoring leads.
  • Disqualification: For "Cold/Unqualified Leads" (Tier 4), consider if they are truly out of scope or require significant long-term nurturing before engaging sales.

For Marketing Teams

  • Targeted Nurturing: Design specific nurture campaigns for "Nurture Leads" (Tier 3) based on their identified gaps (e.g., if "Fit Score" is high but "Engagement Score" is low, focus on re-engagement content).
  • Content Strategy: Identify common "Score Reasons" for high-scoring leads to understand what content resonates most and create more of it.
  • Campaign Optimization: Analyze the source of high-scoring leads to optimize your marketing channels and budget allocation.
  • Re-engagement: Develop strategies to re-engage "Cold/Unqualified Leads" with different types of content or offers to potentially move them up the scoring tiers over time.

CRM Integration

We highly recommend integrating these lead scores directly into your CRM system. This will:

  • Automate Prioritization: Allow for automated lead assignment and task creation based on score.
  • Provide Context: Give sales reps immediate visibility into a lead's potential and key contributing factors.
  • Enable Reporting: Facilitate easier reporting and analysis of lead quality and sales cycle efficiency.

Continuous Optimization

Lead scoring is not a one-time process. To maintain its effectiveness:

  • Monitor Performance: Regularly review the conversion rates of different lead tiers.
  • Gather Feedback: Collect feedback from your sales team on the quality of leads they receive from each tier.
  • Retrain Model: As your business evolves, your ICP changes, or new data becomes available, the AI model can be periodically retrained to ensure its accuracy and relevance.

Benefits of AI Lead Scoring

By implementing this AI lead scoring, you gain significant advantages:

  • Increased Sales Efficiency: Sales teams spend less time on low-potential leads and more on high-value opportunities.
  • Improved Conversion Rates: Higher quality leads entering the sales funnel lead to more closed deals.
  • Enhanced Marketing ROI: Marketing efforts are better targeted, leading to more qualified leads and a better return on ad spend.
  • Data-Driven Decisions: Move beyond guesswork with objective, AI-driven insights into lead potential.
  • Scalability: Efficiently manage a growing volume of leads without increasing manual overhead.

Next Steps

  1. Review the Deliverable: Carefully examine the provided lead scoring report (CSV/XLSX file).
  2. CRM Integration: Discuss with your team how best to integrate these scores into your CRM for maximum operational efficiency. We can assist with API integration if required.
  3. Strategy Session: Schedule a follow-up meeting with our team to discuss the results, refine your lead management strategy, and explore potential next steps for continuous optimization.
  4. Action Implementation: Begin applying the recommended actions for your sales and marketing teams based on the lead tiers and insights.

We are confident that these AI-driven lead scores will significantly enhance your contact management and conversion strategies. Please do not hesitate to reach out with any questions or for further assistance.

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