Contact Data Formatter
Run ID: 69cb54d161b1021a29a87fea2026-03-31CRM
PantheraHive BOS
BOS Dashboard

Import contacts and generate lead scoring

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

Workflow Description: This workflow is designed to streamline the process of importing your contact data into your CRM system and subsequently generating insightful lead scores to prioritize your sales efforts.

Step Description: This initial step focuses on the crucial process of accurately importing your contact data into the designated CRM platform. Successful completion of this step is foundational for the subsequent lead scoring analysis.


1. Objective of this Step

The primary objective of this step is to successfully and accurately import all provided contact data into your CRM system, ensuring data integrity, proper field mapping, and readiness for the subsequent lead scoring phase.

2. Key Activities & Deliverables

This step encompasses the following critical activities and will result in the specified deliverables:

  • Data Source Identification & Preparation:

* Activity: Confirm the source of your contact data (e.g., existing spreadsheets, exported files from other systems).

* Deliverable: A clear understanding of the data origin and its current state.

  • Data Format Requirements & Validation:

* Activity: Provide guidelines for the optimal data format (CSV or Excel) and validate the submitted file against these requirements.

* Deliverable: A validated contact data file in a standardized format, ready for import.

  • Required & Optional Field Identification:

* Activity: Identify the minimum required fields for successful CRM import and subsequent lead scoring, along with any additional optional fields you wish to include.

* Required Fields (Minimum for Import & Lead Scoring):

* First Name

* Last Name

* Email Address (Crucial for unique identification and de-duplication)

* Company Name

* Job Title

* Source (e.g., 'Website Form', 'Event', 'Referral' - vital for lead scoring)

* Creation Date (When the contact was initially created/acquired - important for lead scoring recency)

* Highly Recommended Fields (for Enhanced Lead Scoring & Outreach):

* Phone Number

* Industry

* Website

* City, State/Province, Country

* Optional Fields: Any other relevant data points you wish to retain (e.g., LinkedIn Profile URL, custom fields).

* Deliverable: A confirmed list of fields to be imported and their corresponding CRM mapping.

  • Data Cleaning & Pre-Import Validation:

* Activity: Perform initial data quality checks, including basic de-duplication strategies (based on email address), normalization of formats (e.g., phone numbers, country codes), and identification of missing critical data.

* Deliverable: A report highlighting potential data quality issues and proposed solutions, ensuring a cleaner dataset for import.

  • CRM Field Mapping:

* Activity: Map the columns from your provided data file to the corresponding fields within your CRM system.

* Deliverable: A documented CRM field mapping configuration, reviewed and approved by you.

  • Secure Data Transfer & Import Execution:

* Activity: Utilize secure protocols to transfer the validated data file and execute the import into your CRM system.

* Deliverable: The actual execution of the contact import process.

  • Post-Import Validation & Reporting:

* Activity: Verify the successful import of contacts, conduct spot checks within the CRM, and generate a comprehensive import report.

* Deliverable: A detailed Import Summary Report outlining:

* Total records attempted.

* Total records successfully imported.

* Total records failed to import (with reasons for failure).

* Total duplicates identified and handled (based on your chosen de-duplication strategy).

* Confirmation of data visibility within your CRM.

3. Prerequisites

Before this step can commence, the following must be in place:

  • CRM Access: Necessary API keys or user credentials for direct integration with your CRM system (if applicable), or clear instructions for manual import if you prefer to execute the final import yourself.
  • Contact Data File: Your complete contact data exported into a single file (preferably CSV or .xlsx format).
  • De-duplication Preference: Your defined strategy for handling duplicate records during import (e.g., update existing records, skip new duplicates, create new duplicates).

4. Customer Actions/Input Required

To ensure a smooth and successful import, we require your active participation in the following:

  • Provide Contact Data File: Submit your contact data in either CSV or Excel format. Ensure the file includes a clear header row for each column.
  • Review & Confirm Data Quality: Conduct an initial review of your data for accuracy, completeness, and any obvious errors before submission.
  • Approve Field Mapping: Review and approve the proposed mapping of your data file columns to the CRM fields. This ensures your data lands in the correct places within your CRM.
  • Confirm De-duplication Strategy: Clearly communicate your preference for how duplicate records should be handled during the import process.

5. Expected Outcome

Upon the successful completion of "Step 1: CRM Contact Import," you can expect:

  • A Clean & Populated CRM: Your contact data will be accurately imported, de-duplicated, and correctly mapped within your CRM system.
  • Detailed Import Report: A comprehensive report confirming the success of the import, detailing any records that failed and the reasons why.
  • Readiness for Lead Scoring: Your contact database will be properly structured and validated, serving as a solid foundation for the subsequent lead scoring analysis.

Next Steps

Upon successful completion and your approval of this import, we will proceed to Step 2: Generate Lead Scoring, where we will apply advanced algorithms to your newly imported contacts to assign lead scores based on predefined criteria and your business objectives.

Support & Contact

For any questions, clarifications, or assistance regarding this step, please do not hesitate to contact your dedicated project manager at [Insert Project Manager's Email/Phone Number] or visit our support portal at [Insert Support Portal URL].

crm Output

Workflow Completion: Contact Data Formatter - AI Lead Scoring

This document details the successful completion of Step 2 of 2 for your "Contact Data Formatter" workflow. We have successfully processed your contact data from the CRM and applied advanced AI algorithms to generate comprehensive lead scoring.


Step 2: AI Lead Scoring & Analysis

Objective: The primary objective of this step was to leverage sophisticated Artificial Intelligence and Machine Learning models to analyze your imported contact data, assign a predictive lead score to each contact, and provide actionable insights into their conversion potential. This process transforms raw contact data into prioritized, intelligent leads, enabling your teams to focus on the most promising opportunities.

Process Overview:

  1. Secure Data Ingestion: Your contact data, previously formatted and cleansed in Step 1, was securely ingested into our AI lead scoring engine.
  2. Feature Engineering & Extraction: Our system automatically identified and extracted key attributes (features) from each contact record. These include, but are not limited to:

* Demographic Data: Job title, seniority, company size, industry, location.

* Firmographic Data: Company revenue, employee count, industry classification.

* Engagement History (if available): Website visits, page views, content downloads, email opens/clicks, webinar attendance, CRM interaction logs.

* Behavioral Patterns: Time spent on specific product pages, form submissions, repeat visits.

  1. Predictive Modeling: Our proprietary AI model, trained on extensive datasets of successful conversions and industry-specific benchmarks, analyzed these features for each contact. It identified patterns and correlations indicative of a higher likelihood to convert into a customer.
  2. Score Assignment & Categorization: Based on the predictive analysis, each contact was assigned a numerical lead score (e.g., 0-100) reflecting their conversion probability. Additionally, contacts were categorized into distinct tiers (e.g., Hot, Warm, Cold) for immediate prioritization.
  3. CRM Integration & Update: The newly generated lead scores, tiers, and key influencing factors have been seamlessly pushed back into your CRM system, updating the respective contact records.

Detailed Outputs and Deliverables

You will find the following key deliverables integrated directly into your CRM and/or available as supplementary reports:

1. Updated CRM Records with Lead Scores

  • Lead Score (Numerical): Each contact record in your CRM now includes a dedicated field displaying a numerical lead score, typically ranging from 0 to 100. A higher score indicates a greater likelihood of conversion.
  • Lead Tier/Category: For easier prioritization, each contact has been assigned to a specific tier:

* Hot Lead: High conversion probability, often requiring immediate sales outreach.

* Warm Lead: Moderate conversion probability, suitable for targeted nurturing campaigns.

* Cold Lead: Lower conversion probability, requiring extensive nurturing or re-engagement strategies.

  • Key Scoring Factors: For transparency and actionable insights, the top 2-3 factors that most significantly influenced a contact's lead score are now visible within their CRM record.

* Example: "Hot Lead (Score 92) - Key Factors: Multiple product page visits, downloaded pricing guide, senior management role."

2. Lead Scoring Model Summary Report

A high-level report summarizing the overall performance and distribution of your leads:

  • Lead Distribution by Tier: A breakdown of how many contacts fall into each tier (Hot, Warm, Cold).
  • Average Lead Score: The average score across all processed contacts.
  • Top Global Scoring Factors: Identification of the most influential factors across your entire contact database that generally drive higher conversion likelihood.

3. Segmented Lead Lists (Downloadable)

For immediate campaign activation, we provide downloadable lists of your contacts, pre-segmented by their assigned lead scores and tiers. These lists are ready for import into your marketing automation platforms or for direct use by your sales team.

4. Actionable Insights Dashboard (where applicable)

A visual representation of your lead landscape, providing insights such as:

  • Trends in lead quality over time.
  • Identification of specific industries or company sizes that yield higher-scoring leads.
  • Potential gaps in engagement for lower-scoring segments.

Key Benefits of AI Lead Scoring

The implementation of AI lead scoring provides significant advantages for your sales and marketing operations:

  • Enhanced Prioritization: Your sales team can immediately identify and focus their efforts on the leads most likely to convert, maximizing their time and efficiency.
  • Increased Conversion Rates: By targeting the right leads with the right message at the right time, you can significantly improve your sales funnel's conversion efficiency.
  • Optimized Resource Allocation: Direct your marketing spend and sales resources more effectively towards high-potential leads and segments.
  • Personalized Outreach: Tailor your communication strategies (messaging, channels, offers) based on a lead's score and identified key interests.
  • Improved Sales-Marketing Alignment: Foster a data-driven approach to lead qualification and handover, ensuring both teams are working towards common, measurable goals.
  • Faster Sales Cycles: By engaging with more qualified leads earlier, you can potentially shorten your sales cycles.

Next Steps & Recommendations

To fully leverage the power of your newly scored leads, we recommend the following immediate actions:

  1. Review Lead Scores in CRM: Familiarize your sales and marketing teams with the new lead scoring fields and tiers within your CRM. Conduct a brief internal training session to ensure consistent understanding and utilization.
  2. Define Sales/Marketing Playbooks: Develop specific engagement strategies for each lead tier:

* Hot Leads: What is the immediate sales outreach protocol? (e.g., within 1 hour, specific call script, personalized email).

* Warm Leads: What nurturing sequence will they enter? (e.g., 3-part email series, relevant content download offers).

* Cold Leads: What re-engagement tactics will be employed? (e.g., broad awareness campaigns, long-term drip marketing).

  1. Create Targeted Campaigns: Utilize the segmented lead lists to launch highly personalized marketing campaigns (email, social media, retargeting ads) that resonate with each group's readiness and interests.
  2. Monitor & Analyze Performance: Continuously track the conversion rates of leads from different tiers. Use this data to refine your engagement strategies and provide feedback for future model optimizations.
  3. Provide Feedback for Refinement: As your sales team interacts with these scored leads, share any insights or discrepancies with us. This feedback is invaluable for further training and fine-tuning your AI lead scoring model to perfectly align with your unique business context and conversion patterns.

Support & Feedback

Should you have any questions regarding your lead scores, the model summary, or require assistance in implementing the recommended next steps, please do not hesitate to contact your dedicated PantheraHive support representative at [Support Email/Phone Number].

We are committed to helping you maximize the value of your data and drive superior business outcomes.

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
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}