Social Media Campaign
Run ID: 69cbe1f961b1021a29a8d21a2026-03-31Marketing
PantheraHive BOS
BOS Dashboard

Plan and create content for a complete social media campaign

Social Media Content Calendar: PantheraAI Analytics Suite Launch Campaign

Workflow Step: socialmedia → generate_content_calendar

Description: Plan and create content for a complete social media campaign.

Output Type: Comprehensive, detailed, professional content calendar, ready for publishing.


Executive Summary

This document outlines a detailed two-week social media content calendar designed to support the launch and promotion of the PantheraAI Analytics Suite. The goal is to generate awareness, educate the target audience about its benefits, drive engagement, and ultimately convert interest into product trials and demos. This calendar provides specific content ideas, headlines, body text drafts, calls to action, visual suggestions, and relevant hashtags for key platforms including LinkedIn, X (Twitter), Instagram, and Facebook.

Campaign Overview (Assumptions)

To provide a concrete and actionable content calendar, we've made the following assumptions:

  • Product/Service: Launch of "PantheraAI Analytics Suite" – a new B2B SaaS solution for advanced data analytics and business intelligence.
  • Campaign Goal: Increase brand awareness, drive website traffic, generate leads, and encourage product trials/demos for the PantheraAI Analytics Suite.
  • Target Audience: Business owners, C-suite executives, marketing managers, data analysts, IT professionals in medium to large enterprises seeking data-driven insights.
  • Key Message: Empowering businesses with intelligent, actionable insights to drive growth and efficiency.
  • Campaign Duration: 2 Weeks (extendable).
  • Core Platforms: LinkedIn (primary B2B focus), X (for timely updates & engagement), Instagram (for visual storytelling & behind-the-scenes), Facebook (for broader reach & community).

Content Pillars & Themes

The content calendar will leverage a mix of content types across four main pillars:

  1. Educate & Inform: Explain the problem PantheraAI solves, its features, and how it benefits users.
  2. Engage & Interact: Foster conversations, gather feedback, and build community.
  3. Promote & Convert: Highlight product benefits, share success stories, and drive sign-ups/demos.
  4. Inspire & Thought Leadership: Share industry insights, company values, and user testimonials.

Social Media Content Calendar - Week 1

Theme for the Week: Introduction & Problem/Solution Focus

| Date | Platform | Content Type | Headline/Caption Idea | Body Text (Draft)

sharper4k Output

This document outlines detailed image concepts for your social media campaign, "Social Media Campaign," focusing on generating high-quality visual content that aligns with your brand's messaging and campaign objectives. These concepts are designed to serve as comprehensive prompts for AI image generation tools, ensuring consistency, impact, and relevance across various social media platforms.

Executive Summary

This deliverable provides a strategic set of image concepts tailored for the "Social Media Campaign" workflow. Each concept is meticulously detailed, offering specific visual cues, mood, and strategic intent. The goal is to produce compelling, on-brand imagery that resonates with the target audience, drives engagement, and supports the overall campaign objectives, from brand awareness to conversion. The proposed images aim for a modern, sophisticated aesthetic, emphasizing innovation, sustainability, and user benefit.

Campaign Visual Strategy Overview

Our visual strategy for this campaign centers on creating a cohesive and impactful visual narrative. We will focus on:

  1. Modern & Minimalist Aesthetics: Emphasizing clean lines, sophisticated color palettes, and uncluttered compositions to convey innovation and premium quality.
  2. Storytelling Through Imagery: Each image will tell a part of the brand story, showcasing not just the product/service, but its benefits, impact, and integration into the user's lifestyle.
  3. Emotional Connection: Utilizing lighting, composition, and subject matter to evoke feelings of comfort, efficiency, peace of mind, and empowerment.
  4. Brand Consistency: Ensuring all visuals adhere to a defined brand style guide (implied, as this is a generic response) to maintain a unified brand identity across all platforms.
  5. Platform Optimization: Developing concepts adaptable to various social media formats (feed posts, stories, carousels, ads) while maintaining visual integrity.

For the purpose of these examples, we will assume the campaign is for a hypothetical product: "EcoSense Hub" – an AI-powered smart home device that optimizes energy consumption, air quality, and lighting for a sustainable and comfortable living experience.


Image Content Concepts

Below are detailed concepts for images, each designed with specific campaign goals in mind.

1. Concept: The Future Home – Hero Product Shot

  • Strategic Objective: Brand Awareness, Product Introduction, Premium Positioning.
  • Platform Suitability: Instagram Feed, Facebook Cover/Ad, LinkedIn Post, Website Hero.
  • Detailed Image Prompt:

"A sophisticated, high-resolution studio shot of the 'EcoSense Hub' device. The device is sleek, minimalist, with a matte finish (e.g., charcoal grey or brushed aluminum) and a subtle, glowing LED indicator (e.g., soft blue or green). It is positioned on a polished concrete or light wooden surface, with a very shallow depth of field. The background is a soft, diffused glow (e.g., warm white or very light grey) creating a halo effect around the product. Lighting is clean, professional studio lighting, highlighting contours and material textures. A subtle, futuristic geometric pattern or light streaks are faintly visible in the far background, suggesting intelligence and connectivity. Aspect ratio: 1:1 (square) for feed, 16:9 for ads."

  • Key Visual Elements & Mood:

* Subject: EcoSense Hub device (sleek, modern design).

* Composition: Centered or rule-of-thirds, clean, uncluttered.

* Lighting: Bright, even, highlighting product details.

* Color Palette: Monochromatic with a subtle accent color from the LED.

* Mood: Innovative, premium, aspirational, cutting-edge.

  • Suggested Call to Action/Caption Theme: "Discover the future of sustainable living. #EcoSenseHub #SmartHome #Innovation"

2. Concept: Seamless Integration – Lifestyle & Comfort

  • Strategic Objective: Demonstrating Product Integration, User Benefit, Lifestyle Appeal.
  • Platform Suitability: Instagram Feed/Stories, Facebook Carousel, Pinterest Pin.
  • Detailed Image Prompt:

"A warm, inviting scene inside a modern, minimalist living room during golden hour. A young professional (25-35, diverse ethnicity, casually dressed) is comfortably reading on a stylish sofa, bathed in soft, natural light filtering through large windows. The 'EcoSense Hub' device is subtly integrated into the environment, perhaps resting on a minimalist side table or a built-in shelf, blending seamlessly with the decor. The focus is on the feeling of tranquility and optimized comfort (perfect lighting, ideal temperature). Lush green plants are visible, adding a touch of nature. The overall aesthetic is clean, comfortable, and sophisticated. Aspect ratio: 4:5 for Instagram, 9:16 for Stories."

  • Key Visual Elements & Mood:

* Subject: Person enjoying a comfortable home, EcoSense Hub subtly present.

* Composition: Natural, candid, showcasing an ideal living environment.

* Lighting: Soft, warm, natural light (golden hour).

* Color Palette: Earthy tones, neutrals, with pops of green from plants.

* Mood: Peaceful, comfortable, efficient, modern living, aspirational.

  • Suggested Call to Action/Caption Theme: "Experience effortless comfort and sustainability. How does EcoSense Hub enhance your daily life? #SustainableLiving #HomeComfort #SmartLiving"

3. Concept: The Breath of Fresh Air – Data Visualization

  • Strategic Objective: Highlighting Specific Benefits (e.g., air quality), Data-driven Value, Educational.
  • Platform Suitability: LinkedIn Post, Twitter Card, Blog Post Header, Infographic Element.
  • Detailed Image Prompt:

"An abstract, visually appealing representation of clean air or optimized energy flow. Imagine a stylized 'EcoSense Hub' device in the foreground, slightly blurred. In the background, there's a dynamic, ethereal visual of swirling, luminous particles (representing clean air) or interconnected, flowing energy lines (representing efficiency) in shades of vibrant blues, greens, and whites. The visual should feel dynamic and intelligent, perhaps with subtle hexagonal grid patterns or light trails. It should convey a sense of purification, optimization, and invisible forces at work. The environment is dark and dramatic, making the luminous elements stand out. Aspect ratio: 16:9 or 1:1."

  • Key Visual Elements & Mood:

* Subject: Abstract representation of air quality/energy efficiency, with device hint.

* Composition: Dynamic, modern, abstract.

* Lighting: Dark background, luminous elements.

* Color Palette: Cool blues, greens, white, against a dark backdrop.

* Mood: Scientific, innovative, clean, fresh, impactful.

  • Suggested Call to Action/Caption Theme: "Breathe easier. Live smarter. See the invisible impact of EcoSense Hub. Learn more about our air quality features. #CleanAir #EnergyEfficiency #DataDriven"

4. Concept: Nature Meets Technology – Sustainability Focus

  • Strategic Objective: Reinforcing Brand Values (Sustainability), Emotional Connection, Differentiation.
  • Platform Suitability: Instagram Feed, Pinterest Pin, Environmental Campaign Ads.
  • Detailed Image Prompt:

"A striking juxtaposition: the sleek 'EcoSense Hub' device placed gently on a bed of vibrant green moss or smooth river stones, surrounded by soft, diffused natural light filtering through leaves. A single drop of water might be visible on the device's surface or a nearby leaf. The background is slightly blurred forest foliage or a tranquil garden scene. This image should evoke harmony between advanced technology and the natural world, emphasizing the product's eco-friendly mission. The textures of the natural elements should be rich and detailed, contrasting with the smooth finish of the device. Aspect ratio: 1:1 or 4:5."

  • Key Visual Elements & Mood:

* Subject: EcoSense Hub seamlessly integrated with natural elements.

* Composition: Balanced, thoughtful, highlighting contrast and harmony.

* Lighting: Soft, natural, dappled light.

* Color Palette: Rich greens, earthy browns, subtle device colors.

* Mood: Sustainable, natural, responsible, harmonious, serene.

  • Suggested Call to Action/Caption Theme: "Innovating for a greener tomorrow. EcoSense Hub: Smart technology, naturally responsible. #GoGreen #SustainableTech #EcoFriendly"

5. Concept: Limited Time Offer – Dynamic Call to Action

  • Strategic Objective: Driving Conversions, Announcing Promotions, Urgency.
  • Platform Suitability: Facebook/Instagram Ads, Story Ads, E-commerce Banners.
  • Detailed Image Prompt:

"A dynamic, eye-catching image featuring the 'EcoSense Hub' device prominently displayed. The background is a vibrant, gradient splash of brand-aligned colors (e.g., a transition from deep teal to bright lime green) with subtle, energetic light streaks or geometric shapes. Overlayed elements include a bold, clean graphic indicating a 'Limited Time Offer' or a percentage discount (e.g., '20% OFF'). The device itself should appear slightly elevated or angled to convey dynamism. The overall impression should be exciting, urgent, and visually appealing, immediately grabbing attention. The text overlay should be clear and concise, using a modern, legible sans-serif font. Aspect ratio: 1.91:1 (landscape ad), 1:1 (square ad)."

  • Key Visual Elements & Mood:

* Subject: EcoSense Hub with clear promotional graphics.

* Composition: Dynamic, action-oriented, clear focal point.

* Lighting: Bright, energetic, attention-grabbing.

* Color Palette: Vibrant brand colors, high contrast for text.

* Mood: Exciting, urgent, promotional, value-driven.

  • Suggested Call to Action/Caption Theme: "Don't miss out! Upgrade to smarter living with 20% off your EcoSense Hub. Shop now – link in bio! #Sale #SmartHomeDeals #LimitedTimeOffer"

Implementation Notes

  • Iterative Generation: It is recommended to generate multiple variations for each concept to refine the output and select the most impactful visuals.
  • Aspect Ratios: Pay close attention to the specified aspect ratios for different platforms to ensure optimal display and engagement.
  • Text Overlays: While some concepts suggest text, it's often best to generate images without embedded text and add it during the design phase for greater flexibility and control over branding and localization.
  • Brand Guidelines: Ensure the generated images adhere to any existing brand color palettes, typography, and overall visual identity.
  • Diversity: If people are included in images, ensure representation aligns with your target audience and promotes inclusivity.
  • Testing: A/B test different image concepts and variations to determine which performs best with your audience in terms of engagement and conversion.

This comprehensive set of image concepts provides a robust foundation for creating visually stunning and strategically effective content for your "Social Media Campaign."

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