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

Plan and create content for a complete social media campaign

Social Media Campaign: Content Calendar - Spring into Serenity

This document outlines a comprehensive 4-week social media content calendar for your "Spring into Serenity" campaign. Designed to engage your audience, build brand awareness, and drive action, this calendar provides detailed content for key platforms, ensuring a cohesive and impactful presence.


Campaign Overview

  • Campaign Name: Spring into Serenity: Refresh Your Life with Harmony Hub
  • Campaign Goal: To inspire and empower our audience to embrace new beginnings, cultivate mindfulness, enhance productivity, and achieve a balanced lifestyle this spring. Goals include increasing brand awareness, driving engagement, and promoting relevant Harmony Hub offerings.
  • Target Audience: Individuals seeking personal growth, wellness, productivity hacks, and lifestyle improvements. This includes professionals, students, parents, and anyone looking to reduce stress and find more balance.
  • Key Platforms: Instagram, Facebook, LinkedIn, X (formerly Twitter)
  • Campaign Duration: 4 Weeks (starting from your chosen launch date)
  • Content Pillars:

1. Inspiration & Motivation: Uplifting quotes, success stories, mindset tips.

2. Education & Tips: How-to guides, quick tips for wellness/productivity, product benefits.

3. Engagement & Community: Q&A, polls, user-generated content prompts, behind-the-scenes.

4. Promotion & Offers: Product features, service benefits, special discounts, testimonials.


Week-by-Week Content Calendar

Week 1: Embrace New Beginnings

Weekly Theme: Kicking off the campaign by introducing the concept of a "spring refresh" for mind, body, and productivity. Focus on setting intentions and simple starting points.

| Date/Day | Platform | Content Pillar | Content Type | Headline | Body Text

sharper4k Output

This document outlines the detailed plan for image generation for your "Smart Living, Sustainable Future" social media campaign. This step focuses on defining the visual strategy, image types, and specific content concepts to ensure a cohesive and impactful visual presence across all platforms.


Social Media Campaign: Image Generation Plan

Campaign Name: Smart Living, Sustainable Future

Campaign Goal: Launch and drive awareness/sales for a new line of eco-friendly smart home devices.

Workflow Step: sharper4k → generate_image (Image Strategy & Concepts)


1. Overall Visual Strategy & Brand Guidelines

Our visual strategy centers on showcasing the seamless integration of technology with sustainable living. Images will evoke feelings of tranquility, efficiency, and environmental responsibility.

  • Brand Aesthetic: Modern, clean, minimalist, bright, inviting.
  • Color Palette: Predominantly greens, blues, whites, and natural wood tones, reflecting sustainability and modern design. Accent colors for calls to action.
  • Tone & Mood: Uplifting, aspirational, practical, trustworthy, eco-conscious.
  • Imagery Style: High-quality photography, realistic renders, and clean graphic design. Emphasis on natural light and authentic settings.

2. Campaign Image Objectives

The images generated for this campaign will serve multiple objectives:

  • Brand Awareness: Introduce the new "Smart Living, Sustainable Future" product line.
  • Engagement: Encourage likes, shares, comments, and discussions around eco-friendly tech.
  • Product Education: Visually explain features, benefits, and ease of use.
  • Lead Generation/Sales: Drive traffic to product pages and e-commerce.
  • Community Building: Showcase the lifestyle associated with sustainable smart homes.

3. Target Audience & Visual Preferences

Our primary audience includes environmentally conscious homeowners (25-55), tech enthusiasts, and young families. They appreciate:

  • Authenticity: Real-life scenarios, not overly staged.
  • Clarity: Clear display of products and their benefits.
  • Inspiration: Images that inspire a better, more sustainable lifestyle.
  • Modern Aesthetics: Clean lines, contemporary design, and visually pleasing compositions.
  • Relatability: Images that reflect their daily lives and aspirations.

4. Core Image Categories & Content Pillars

We will develop images across several key categories, aligning with the campaign's content pillars:

4.1. Product Showcase & Features

  • Pillar: Innovation Meets Sustainability
  • Objective: Highlight the design, functionality, and eco-benefits of individual devices.
  • Image Concepts:

* Hero Shots: High-resolution, crisp images of each product (e.g., smart thermostat, energy monitor, smart lighting) in a clean, minimalist setting.

* Detail Shots: Close-ups highlighting key features (e.g., sleek interface, recycled materials, charging ports).

* Before & After/Comparison (Graphic): Visuals demonstrating energy savings or reduced waste (e.g., a graphic showing a traditional vs. smart home energy bill).

* "Unboxing" Style: Images showing the product packaging (eco-friendly, minimalist) and initial setup.

4.2. Lifestyle Integration & Benefits

  • Pillar: Seamless Sustainable Living
  • Objective: Demonstrate how products integrate into daily life and improve comfort, convenience, and sustainability.
  • Image Concepts:

* Family/Individual Interaction: People (diverse demographics) naturally using the devices in their homes (e.g., adjusting a smart thermostat, checking energy usage on a tablet, lights dimming automatically).

* Home Environment Focus: Products subtly integrated into beautiful, modern, and naturally lit home settings (living room, kitchen, bedroom). Emphasize comfort and aesthetics.

* "Morning Routine" / "Evening Unwind": Visual narratives showing how smart devices enhance daily routines (e.g., smart blinds opening with sunrise, smart lighting creating a cozy evening ambiance).

* Outdoor/Nature Connection: Images subtly linking the smart home to the natural environment it helps protect (e.g., a window view of lush greenery from a smart home interior).

4.3. Educational & Informative Graphics

  • Pillar: Knowledge for a Greener Tomorrow
  • Objective: Explain complex benefits or data in an easily digestible visual format.
  • Image Concepts:

* Infographics: Simple, branded infographics explaining energy savings, carbon footprint reduction, or product benefits (e.g., "Save X% on Energy Bills," "Reduce Your Carbon Footprint by Y").

* Benefit Icons: A series of branded icons representing key benefits (e.g., "Energy Efficient," "Voice Control," "Recycled Materials").

* "How It Works" Diagrams: Simple flowcharts or diagrams illustrating the interconnectedness of devices or a specific feature.

4.4. Behind-the-Scenes & Brand Values (Optional, for deeper engagement)

  • Pillar: Our Commitment to Sustainability
  • Objective: Build trust and showcase the brand's dedication to eco-friendly practices.
  • Image Concepts:

* Manufacturing Process (Ethical/Sustainable): If applicable, images showing sustainable materials or ethical production.

* Team/Company Culture: Diverse team members working in an eco-friendly office environment (if aligned with brand image).

* Partnerships: Images showcasing partnerships with environmental organizations.

5. Platform-Specific Optimizations

Images will be tailored for optimal performance on each platform:

  • Instagram: High-resolution, visually stunning, aspirational. Focus on lifestyle, product aesthetics, and short, engaging videos/carousels. (Square 1:1, Portrait 4:5)
  • Facebook: Mix of lifestyle, product features, and informative graphics. Suitable for longer captions and link clicks. (Square 1:1, Landscape 1.91:1)
  • Twitter: Concise, impactful images with text overlays for quick consumption. Infographics and direct calls to action. (Landscape 16:9, Square 1:1)
  • LinkedIn: Professional, informative, and value-driven. Focus on innovation, sustainability impact, and product benefits for a professional audience. (Landscape 1.91:1, Square 1:1)
  • TikTok/Reels: Short, dynamic video clips for product demonstrations, "day in the life," or quick tips. (Vertical 9:16) - Note: While this step is generate_image, video concepts are included for a holistic campaign view.

6. Technical Specifications & Requirements

  • File Format: Primarily JPEG for photos, PNG for graphics with transparency.
  • Resolution: Minimum 1080px on the shortest side for all platforms. Higher resolution (e.g., 2000px on shortest side) preferred for future-proofing and quality.
  • Aspect Ratios:

* Square: 1:1 (1080x1080px) - Universal

* Landscape: 1.91:1 (1200x628px or 1080x566px) - Facebook, Twitter, LinkedIn

* Portrait: 4:5 (1080x1350px) - Instagram

* Vertical (Stories/Reels): 9:16 (1080x1920px) - Instagram, TikTok (for video thumbnails/still frames)

  • Text Overlays: Minimal, legible, and branded fonts. Ensure contrast for readability.
  • Branding: Subtle logo placement (top/bottom corners) where appropriate, or integrated into the graphic design.

7. Call to Action (CTA) Integration

Images will be designed to support clear CTAs:

  • Product Images: "Shop Now," "Learn More," "Pre-Order."
  • Lifestyle Images: "Discover Sustainable Living," "Upgrade Your Home."
  • Informative Graphics: "Download Our Guide," "Calculate Your Savings."
  • Branding: Consistent use of brand colors for CTA buttons or elements within the image.

8. Example Image Prompts/Descriptions for Generation

To illustrate the level of detail required for successful image generation, here are a few examples:

  1. Prompt: "A modern, minimalist living room bathed in soft natural light. In the foreground, a sleek, white smart thermostat with a subtle green glow on its display. A diverse young couple is comfortably seated on a sofa in the background, subtly interacting with a tablet, a sense of calm and efficiency. The room features natural wood elements and a potted plant. Aspect Ratio: 4:5 (Instagram Portrait)."
  2. Prompt: "A close-up detail shot of the new 'Eco-Light' smart bulb, emphasizing its frosted glass and subtle branding. The background is a soft, out-of-focus bokeh of warm, inviting home lighting. Highlight the recycled material texture if visible. Aspect Ratio: 1:1 (Square)."
  3. Prompt: "A clean, branded infographic on a white background. Title: 'Reduce Your Carbon Footprint by 20%'. Below, three distinct icons (e.g., a leaf, a lightbulb, a water droplet) with short, actionable text points explaining how smart home devices contribute to sustainability. Use brand's green and blue palette. Aspect Ratio: 1.91:1 (Facebook Landscape)."
  4. Prompt: "A high-angle shot of a kitchen counter with a 'Smart Energy Monitor' device prominently displayed next to a reusable coffee cup and a bowl of fresh fruit. The background shows a modern kitchen with energy-efficient appliances and abundant natural light. Emphasize clean lines and a sense of fresh, healthy living. Aspect Ratio: 1:1 (Square)."

Next Steps

Upon approval of this Image Generation Plan, we will proceed with the creation of the specified images using the defined visual strategy and concepts. We will then present the generated image assets for your review and feedback.

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