Commission Pricing Calculator
Run ID: 69c955d4a17964d77e86e0ef2026-03-29Business
PantheraHive BOS
BOS Dashboard

Build a dynamic commission and pricing structure with tier breakdowns and revenue projections.

As part of the "Commission Pricing Calculator" workflow, this deliverable outlines the comprehensive design and functional specifications for a dynamic tool capable of modeling various commission structures, pricing strategies, tier breakdowns, and revenue projections. This document serves as the blueprint for developing a robust and flexible calculator tailored to your specific business needs.


Dynamic Commission & Pricing Calculator: Design & Specifications

1. Overview of the Calculator's Purpose and Functionality

The primary objective of this calculator is to provide a powerful, interactive tool for analyzing and optimizing your commission and pricing strategies. It will allow you to define various sales scenarios, instantly see the financial impact on commissions, revenue, and profitability, and make data-driven decisions.

Key Functionalities:

  • Flexible Input Parameters: Easily adjust product pricing, sales volumes, commission rates, and tier thresholds.
  • Multi-Tiered Commission Logic: Support for various commission models, including flat rates, progressive tiers, and accelerators.
  • Comprehensive Revenue Projections: Generate detailed revenue, cost, and profit projections based on defined scenarios.
  • What-If Scenario Analysis: Compare different pricing and commission structures to identify optimal models.
  • Clear Financial Outputs: Provide actionable insights into total commission payouts, net revenue, gross profit, and individual salesperson performance.
  • Dynamic Adjustments: All calculations will update in real-time as input parameters are changed.

2. Core Components and Input Parameters

The calculator will be built around a set of user-definable inputs, categorized for clarity and ease of use.

2.1. Product/Service Details

These inputs define the characteristics of the items being sold.

  • Product/Service Name: Text field for identification.
  • Base Selling Price (per unit): Numeric input (e.g., $100.00).
  • Cost of Goods Sold (COGS) / Variable Cost (per unit): Numeric input (e.g., $40.00). This is crucial for calculating gross profit.
  • Average Order Value (AOV): If applicable, for services or bundles, this can be an alternative to per-unit pricing.
  • Product Category/Type: (Optional) If different commission rules apply per category.

2.2. Sales & Performance Metrics

These inputs define the sales targets and actual performance scenarios.

  • Target Sales Volume (Units): Numeric input (e.g., 1,000 units).
  • Actual Sales Volume (Units): Numeric input for comparison or specific scenario analysis.
  • Number of Salespeople/Teams: Numeric input (e.g., 10).
  • Sales Period: Dropdown (e.g., Monthly, Quarterly, Annually) – influences projections.

2.3. Commission Structure Parameters

These are the most dynamic inputs, allowing for detailed commission model definition.

  • Commission Model Type: Dropdown selection (e.g., Flat Rate, Tiered by Volume, Tiered by Revenue, Tiered by Gross Profit).
  • Flat Rate Commission (% or $): If "Flat Rate" is selected, specify the percentage (e.g., 5%) or fixed amount (e.g., $5 per unit).
  • Tier Definitions (for Tiered Models):

* Tier Threshold Type: Dropdown (e.g., Units Sold, Total Revenue, Gross Profit).

* Tier 1:

* Threshold: Numeric (e.g., 0 units / $0 revenue).

* Commission Rate: Numeric percentage (e.g., 5%) or fixed amount per unit/sale.

* Tier 2:

* Threshold: Numeric (e.g., 100 units / $10,000 revenue).

* Commission Rate: Numeric percentage (e.g., 7%) or fixed amount.

* Tier 3 (and subsequent tiers):

* Threshold: Numeric (e.g., 250 units / $25,000 revenue).

* Commission Rate: Numeric percentage (e.g., 10%) or fixed amount.

* Tier Calculation Method: Dropdown (e.g., "Attainable" - entire sales at highest achieved tier rate; "Incremental" - each portion of sales paid at its respective tier rate).

  • Bonus/Accelerator Triggers (Optional):

* Trigger Threshold: Numeric (e.g., 150% of target, specific revenue milestone).

* Bonus Type: Dropdown (e.g., Flat Bonus $, % of sales, % increase on commission rate).

* Bonus Amount/Rate: Numeric.

  • Clawback Conditions (Optional): (e.g., returns, cancellations) – A simple input for a percentage reduction on commission for specific scenarios.

3. Commission Structure Logic & Tier Breakdowns

The calculator will implement robust logic to handle various commission models.

3.1. Commission Models Supported

  • Flat Rate Commission: A fixed percentage of sales or a fixed dollar amount per unit sold, regardless of volume.

Example:* 5% commission on all sales, or $10 per unit sold.

  • Progressive Tiered Commission (Incremental): Commission rates increase as sales hit higher thresholds. Each portion of sales is paid at the rate of the tier it falls into.

Example:*

* 0-100 units: 5% commission

* 101-200 units: 7% commission (only on units 101-200)

* 201+ units: 10% commission (only on units above 200)

  • Attainable Tiered Commission: Once a sales threshold is met, the entire sale (from unit 1) is compensated at the higher tier's rate.

Example:*

* Achieve 100 units: All units paid at 5%

* Achieve 200 units: All units paid at 7%

* Achieve 300 units: All units paid at 10%

  • Hybrid Models: Combinations of the above, potentially with fixed base salaries and commission components (though the focus here is purely commission).

3.2. Tier Breakdown Mechanisms

Tiers can be defined based on different performance metrics:

  • By Sales Volume (Units Sold): The most common method, where commission rates change based on the number of units sold.
  • By Total Revenue: Tiers are based on the total dollar amount of sales generated. This is useful for valuing higher-priced items equally.
  • By Gross Profit: Tiers are based on the actual profit generated after COGS, incentivizing sales of higher-margin products.
  • By Number of Deals/Customers: (Optional) For B2B sales where closing multiple deals is key.

3.3. Special Conditions

  • Accelerators: Higher commission rates applied after a certain target or threshold is met, often as a temporary boost.
  • Bonuses: One-time or periodic payments for achieving specific milestones (e.g., reaching 120% of target, selling a new product line).
  • Draws: (Optional, beyond core scope but can be considered for future enhancement) – Advanced feature for managing advances against future commissions.

4. Pricing Structure Integration

The calculator will seamlessly integrate product pricing with commission calculations to provide a holistic financial view.

  • Gross Revenue Calculation: Total units sold multiplied by the base selling price.
  • Net Revenue Calculation: Gross revenue less any applicable discounts (if input as a parameter, e.g., average discount rate).
  • Gross Profit Calculation: Net Revenue minus Total COGS (units sold * COGS per unit).
  • Commission Basis: Users can select whether commission is calculated on Gross Revenue, Net Revenue, or Gross Profit, allowing for different incentive alignments.

5. Revenue Projection & Scenario Analysis

A critical feature of the calculator will be its ability to generate projections and perform "what-if" analysis.

5.1. Projection Capabilities

Based on the input sales volume and pricing, the calculator will project:

  • Total Revenue: For the specified sales period.
  • Total COGS: For the specified sales period.
  • Total Gross Profit: For the specified sales period.
  • Total Commission Payout: Based on the chosen commission structure.
  • Net Profit (after commission): Gross Profit minus Total Commission Payout.
  • Average Commission per Unit/Sale: Total Commission / Total Units Sold.

5.2. "What-If" Scenario Analysis

The dynamic nature of the inputs will enable instant scenario comparisons:

  • Pricing Impact: How does a 5% price increase affect revenue, profit, and commission payouts?
  • Commission Rate Impact: What is the financial effect of increasing/decreasing commission rates by 1-2%?
  • Volume Impact: How do different sales volumes (e.g., pessimistic, realistic, optimistic) affect overall profitability?
  • Tier Threshold Adjustments: Optimize tier breakpoints to motivate sales teams effectively while managing costs.

6. Key Outputs and Reporting

The calculator will present its findings in a clear, summarized, and detailed manner.

6.1. Summary Dashboard Outputs

  • Total Projected Revenue:
  • Total Projected COGS:
  • Total Projected Gross Profit:
  • Total Projected Commission Payout:
  • Projected Net Profit (after Commission):
  • Effective Commission Rate (% of Revenue):
  • Gross Profit Margin (%):
  • Net Profit Margin (after Commission) (%):

6.2. Detailed Breakdown Outputs

  • Per Unit/Sale Breakdown:

* Selling Price

* COGS

* Gross Profit per Unit

* Commission per Unit

* Net Profit per Unit (after commission)

  • Tier-Specific Performance:

* Units/Revenue within each tier

* Commission earned within each tier

  • Salesperson/Team Aggregates (if multiple salespeople input):

* Average sales per person

* Average commission per person

7. Dynamic & User-Friendly Design Principles

The calculator will be designed with usability and flexibility at its core.

  • Intuitive Interface: Clear labeling, logical flow, and easy-to-understand input fields.
  • Real-time Updates: All calculations and outputs will update instantly as input values are changed.
  • Customizable Parameters: The ability to save and load different pricing/commission models for quick comparisons.
  • Error Handling: Basic validation for input fields (e.g., ensuring percentages are within reasonable ranges).

8. Next Steps (Step 2 of 2)

With this detailed design and specification document, the next phase will involve the actual development and implementation of the "Commission Pricing Calculator."

  • Phase 2: Development & Implementation

* Platform Selection: Determine the best tool for implementation (e.g., advanced Excel/Google Sheets, custom web application, specialized sales compensation software).

* Build & Testing: Construct the calculator based on these specifications, including all formulas, logic, and user interface elements. Rigorous testing will be conducted to ensure accuracy and functionality.

* User Training & Documentation: Provide guidelines on how to use the calculator effectively and interpret its outputs.

* Refinement & Iteration: Gather feedback and make adjustments to optimize the calculator for your specific operational needs.

This comprehensive approach ensures that the resulting calculator will be a powerful and indispensable tool for managing your commission and pricing strategies effectively.

gemini Output

Dynamic Commission and Pricing Structure: Tier Breakdowns & Revenue Projections

This document outlines a proposed dynamic commission and pricing structure designed to incentivize sales performance, ensure competitive compensation, and provide clear revenue projections. This model is scalable and adaptable, allowing for adjustments based on market conditions, product evolution, and strategic goals.


1. Executive Summary

The objective of this structure is to create a transparent, performance-driven system that rewards sales professionals for achieving and exceeding targets, while simultaneously providing the organization with predictable cost of sales and robust revenue forecasting. By implementing tiered commission rates linked to sales volume and value, we aim to motivate high performance and align sales efforts directly with company profitability goals.


2. Core Principles of the Dynamic Commission Structure

Our proposed commission structure is built upon the following foundational principles:

  • Performance-Based Incentives: Directly links compensation to achieved sales results.
  • Tiered Progression: Higher sales volumes or values unlock progressively higher commission rates, encouraging over-performance.
  • Transparency & Clarity: Sales personnel will have a clear understanding of how their commission is calculated and what is required to reach higher tiers.
  • Scalability: The structure is designed to accommodate growth and can be adapted for new products, services, or market segments.
  • Alignment with Business Goals: Incentivizes profitable sales and supports overall revenue growth objectives.

3. Proposed Pricing Structure (Illustrative Example)

To demonstrate the commission structure, we will use a hypothetical "PantheraPro Enterprise Solution" which offers various service tiers or software licenses. The pricing model assumes a recurring revenue model (e.g., monthly or annual subscriptions) or project-based fees, with potential for volume discounts.

Product/Service Example: PantheraPro Enterprise Solution

| Pricing Tier | Description | Base Price (Monthly/Unit) | Annual Contract Discount | Notes |

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

| Basic License | Core features for small teams | \$500 | 10% | Entry-level, high volume potential |

| Standard Suite | Enhanced features, integrations for growing businesses | \$1,500 | 15% | Most popular, balance of features and cost |

| Premium Platform | Advanced analytics, dedicated support, custom integrations | \$3,000 | 20% | High-value, strategic accounts |

| Enterprise Custom | Tailored solutions, bespoke development | Negotiated (Avg. \$7,500+) | 25%+ | Requires custom quote, significant revenue |

Pricing Considerations:

  • Contract Length: Longer contracts (e.g., annual vs. monthly) may offer a higher base commission rate or a one-time bonus due to increased customer lifetime value.
  • Add-ons/Upgrades: Sales of additional modules or services will contribute to the total gross revenue and thus to commission calculation.
  • Discounts: Any approved discounts applied to the base price will reduce the gross revenue on which commission is calculated. Commission is typically based on net revenue after discounts.

4. Dynamic Commission Tier Breakdowns

The commission structure is based on the Gross Revenue Generated by an individual salesperson within a defined period (e.g., monthly or quarterly). Reaching higher revenue thresholds unlocks a higher commission rate for all sales within that tier. This is a progressive "accelerator" model.

Commission Tiers (Per Salesperson, Monthly)

| Sales Tier (Gross Revenue Generated) | Commission Rate (of Gross Revenue) | Notes

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