Social Media Campaign
Run ID: 69cd103f3e7fb09ff16a78fe2026-04-01Marketing
PantheraHive BOS
BOS Dashboard

Plan and create content for a complete social media campaign

Social Media Campaign: Content Calendar & Strategy

Executive Summary

This document outlines a comprehensive social media content calendar and strategy for your upcoming campaign. The goal is to generate detailed, professional content concepts that are ready for development and publishing, ensuring a cohesive and engaging presence across selected platforms. This calendar provides a structured approach to content creation, aligning with your brand's objectives and audience engagement goals.


1. Campaign Overview & Strategic Assumptions

To provide a concrete and actionable content calendar, we've made the following strategic assumptions. These can be adjusted based on your specific campaign brief.

  • Hypothetical Brand: EcoHome Innovations (a brand focused on sustainable living products).
  • Campaign Focus: Launch of a new line of sustainable kitchen essentials (e.g., reusable food wraps, bamboo utensil sets, compostable sponges).
  • Campaign Goal: Increase brand awareness, drive traffic to product pages, generate initial sales, and foster community engagement around sustainable living.
  • Target Audience: Environmentally conscious individuals, young professionals, families interested in sustainable living, ages 25-45, primarily in North America/Europe.
  • Key Platforms: Instagram (visual-first, stories, reels), Facebook (community, detailed posts, events), TikTok (short-form video, trends), LinkedIn (brand credibility, partnerships, thought leadership).
  • Campaign Duration: 4 Weeks (with potential for extension based on performance).
  • Brand Tone: Inspiring, educational, practical, positive, community-focused, authentic.

2. Core Content Pillars

Our content strategy is built upon four interconnected pillars designed to educate, engage, and convert your audience:

  1. Education & Awareness: Highlighting environmental issues and presenting sustainable solutions.
  2. Product Features & Benefits: Showcasing EcoHome Innovations' products with clear value propositions.
  3. Tips & Tricks for Sustainable Living: Providing actionable advice and value beyond just product promotion.
  4. Community & Lifestyle: Fostering engagement, sharing user stories, and reflecting brand values.

3. Detailed Content Calendar (4 Weeks)

This calendar provides specific content ideas for each week, including headlines, body text concepts, calls to action (CTAs), and visual recommendations.


Week 1: Launch & Awareness - "Embrace the Eco-Kitchen Revolution"

Theme: Introducing the new product line, highlighting the problem of single-use plastics in the kitchen, and presenting sustainable alternatives.

| Day | Platform | Content Type | Headline | Body/Description Concept

sharper4k Output

This document outlines the detailed specifications for image generation to support a comprehensive social media campaign. The goal is to create visually compelling and brand-aligned assets that resonate with the target audience across various platforms, driving engagement and achieving campaign objectives.


Social Media Campaign: Image Generation Brief

1. Campaign Overview

This image generation brief supports a social media campaign for the launch of "EcoFlow Smart Hub" – an innovative, eco-friendly smart home device designed to optimize energy consumption and enhance sustainable living. The campaign aims to introduce the product, highlight its key benefits, demonstrate its integration into daily life, and drive pre-orders/sales.

2. Objective of Image Generation

The primary objective is to produce a diverse set of high-quality, engaging, and professional images that:

  • Visually communicate the "EcoFlow Smart Hub" brand identity (modern, sustainable, intelligent).
  • Showcase the product's design, features, and benefits effectively.
  • Evoke feelings of comfort, efficiency, sustainability, and technological advancement.
  • Generate curiosity and drive user engagement across social media platforms.
  • Support various campaign stages: awareness, consideration, conversion.

3. Target Audience

  • Primary: Environmentally conscious homeowners (28-55 years old) interested in smart home technology, energy efficiency, and sustainable living.
  • Secondary: Tech enthusiasts, early adopters, and families looking to reduce their carbon footprint and utility bills.

4. Core Visual Themes & Messaging

The images must consistently convey the following themes and messages:

  • Sustainability: Green living, reduced carbon footprint, energy saving.
  • Intelligence & Simplicity: Seamless technology, intuitive control, smart automation.
  • Modern Aesthetics: Sleek design, minimalist appeal, integration into contemporary homes.
  • Comfort & Peace of Mind: A harmonious living environment, effortless control, worry-free operation.
  • Innovation: Cutting-edge technology for a better future.

5. Overall Visual Aesthetic & Brand Alignment

  • Style: Modern, clean, minimalist, sophisticated, aspirational.
  • Color Palette: Dominated by cool tones (blues, greens, grays) with warm accents (natural wood, soft lighting) to evoke a sense of calm, technology, and nature. Brand primary colors (e.g., deep teal, charcoal gray, muted silver) should be subtly incorporated.
  • Lighting: Bright, natural, and airy, emphasizing product design and creating a welcoming atmosphere.
  • Mood: Calm, intelligent, efficient, inspiring.
  • Brand Consistency: All images must align with the established "EcoFlow Smart Hub" brand guidelines, including logo placement (if applicable, subtle and non-intrusive), typography (for any text overlays), and overall tone.

6. Image Categories & Detailed Specifications

We require images across several categories to serve different campaign purposes and platforms.

6.1. Category 1: Announcement & Teaser Images

  • Purpose: To build anticipation and introduce the product subtly.
  • Style: Mysterious, intriguing, high-quality close-ups or partially obscured views.
  • Quantity: 3-4 unique images.

* Image 1.1: Sleek Silhouette

* Prompt: A minimalist, artistic shot of the EcoFlow Smart Hub's elegant silhouette, softly backlit against a blurred, modern home interior. Emphasize its sleek lines and premium finish without revealing full details. Focus on subtle glow or reflection.

* Aspect Ratio: 1:1 (Instagram), 4:5 (Instagram Portrait), 16:9 (Facebook/LinkedIn).

* Notes: Use a cool color palette. No text overlay.

* Image 1.2: Green Energy Ripple

* Prompt: A close-up of a sophisticated, abstract digital interface displaying a subtle energy wave or data flow, with a hint of the EcoFlow Smart Hub's edge in the foreground. Incorporate subtle green and blue hues.

* Aspect Ratio: 1:1, 9:16 (Instagram Story/Reel background).

* Notes: Suggests intelligence and energy management.

6.2. Category 2: Product Showcase & Benefit-Oriented Images

  • Purpose: To clearly display the product, its design, and highlight specific features/benefits.
  • Style: Clean, professional, well-lit studio shots and contextual shots.
  • Quantity: 5-7 unique images.

* Image 2.1: Hero Product Shot

* Prompt: The EcoFlow Smart Hub prominently displayed on a clean, minimalist surface (e.g., light wood, white marble) in a modern living space. Focus on its elegant design, compact size, and premium materials. Soft, even lighting.

* Aspect Ratio: 1:1, 4:5, 16:9.

* Notes: Include small, subtle text overlay "EcoFlow Smart Hub: Redefine Your Home."

* Image 2.2: Seamless Integration

* Prompt: The EcoFlow Smart Hub subtly integrated into a contemporary home environment, perhaps on a shelf next to a plant or on a desk with a laptop. Show it blending naturally, not dominating the space. Focus on harmony and aesthetic appeal.

* Aspect Ratio: 1:1, 4:5.

* Notes: Emphasize its unobtrusive design.

* Image 2.3: Energy Savings Visual

* Prompt: A dynamic, clean infographic-style image. On one side, a stylized graphic of a home with a "high energy consumption" meter (red). On the other, the same home with the EcoFlow Smart Hub, showing a "low energy consumption" meter (green). Use clear, modern icons.

* Aspect Ratio: 1:1, 16:9.

* Notes: Text overlay: "Save Energy, Save Money."

6.3. Category 3: Lifestyle & User Experience Images

  • Purpose: To show the product in use, illustrating its benefits and impact on daily life.
  • Style: Authentic, warm, inviting, depicting real-life scenarios.
  • Quantity: 4-6 unique images.

* Image 3.1: Family Comfort

* Prompt: A diverse family (e.g., parents and a child) relaxing comfortably in a smart home setting, subtly interacting with their environment (e.g., reading, playing a board game). The EcoFlow Smart Hub is visible but not the focal point, suggesting its seamless background operation.

* Aspect Ratio: 1:1, 4:5.

* Notes: Focus on warmth, peace, and connectivity.

* Image 3.2: Morning Routine Automation

* Prompt: A person (early 30s) enjoying a morning coffee in a bright kitchen, with smart lights gently on and a smart thermostat visible on the wall. The EcoFlow Smart Hub is on a nearby counter or shelf, representing the control center for this automated comfort.

* Aspect Ratio: 1:1, 4:5.

* Notes: Convey effortlessness and smart living.

* Image 3.3: Eco-Conscious Living

* Prompt: A person tending to indoor plants or a small herb garden in a well-lit area of a modern home, with the EcoFlow Smart Hub subtly visible nearby. Emphasize natural light, greenery, and a sense of calm.

* Aspect Ratio: 1:1, 4:5.

* Notes: Reinforce the sustainability aspect.

6.4. Category 4: Engagement & Educational Images

  • Purpose: To inform, educate, and prompt interaction.
  • Style: Clear, concise, visually appealing data representation or question-based visuals.
  • Quantity: 2-3 unique images.

* Image 4.1: Feature Highlight Carousel (Series)

* Prompt (for 3-4 images in a set): A series of clean, graphic images, each highlighting one key feature of the EcoFlow Smart Hub (e.g., "AI-Powered Optimization," "Real-Time Energy Monitoring," "Seamless Device Integration"). Use minimalist icons and bold, readable text for each feature.

* Aspect Ratio: 1:1 (ideal for Instagram carousel).

* Notes: Consistent design across the series.

* Image 4.2: Question Prompt

* Prompt: A visually appealing background (e.g., a blurred modern living room with a hint of green) with a bold, engaging question overlay: "How Smart is Your Home's Energy?"

* Aspect Ratio: 1:1, 9:16.

* Notes: Designed to spark conversation in comments.

6.5. Category 5: Call-to-Action (CTA) Images

  • Purpose: To drive specific actions (e.g., "Learn More," "Pre-Order Now").
  • Style: Direct, clear, with prominent CTA elements.
  • Quantity: 2-3 unique images.

* Image 5.1: Pre-Order Now

* Prompt: A striking image of the EcoFlow Smart Hub, perhaps with a subtle "halo" effect, against a clean, premium background. A prominent, well-designed button graphic overlay: "Pre-Order Now."

* Aspect Ratio: 1:1, 16:9.

* Notes: Use brand colors for the button. Clear, concise text.

* Image 5.2: Discover More

* Prompt: A captivating lifestyle shot (e.g., a person interacting with a smart device, looking relaxed) with a clean overlay directing users to "Learn More" or "Visit Our Website."

* Aspect Ratio: 1:1, 4:5.

* Notes: Maintain brand aesthetic while being action-oriented.

7. Technical Requirements

  • Resolution: Minimum 1920px on the shortest side for all images. Higher resolution (e.g., 4K) preferred for maximum flexibility and future use.
  • File Format: Primarily JPEG for social media feeds (optimized for web), PNG for images requiring transparency or crisp text overlays.
  • Color Profile: sRGB.
  • Safe Zones: Consider platform-specific safe zones for text and key elements, especially for Instagram Stories/Reels and Facebook cover photos.

8. Review & Iteration Process

Generated images will undergo a review process to ensure alignment with this brief and brand guidelines. Feedback will be provided promptly for any necessary revisions to achieve the desired output.

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