Social Media Campaign
Run ID: 69caf2cbc8ebe3066ba6fc772026-03-30Marketing
PantheraHive BOS
BOS Dashboard

Plan and create content for a complete social media campaign

Social Media Campaign: Content Calendar & Strategy

This document outlines a comprehensive social media content calendar and strategy for the upcoming "Eco-Friendly Smart Home Device" campaign. This plan is designed to engage our target audience, build brand awareness, drive traffic, and ultimately convert interest into sales.


1. Executive Summary

This social media campaign focuses on launching the "Eco-Sense Hub", an innovative smart home device designed to optimize energy consumption and promote sustainable living. Over a four-week period, we will leverage key social media platforms (Instagram, Facebook, X (formerly Twitter), and LinkedIn) to educate, inspire, and engage our target audience: environmentally conscious, tech-savvy homeowners aged 25-55. Our content will highlight the Eco-Sense Hub's cutting-edge technology, significant environmental benefits, and seamless integration into a modern, convenient lifestyle.


2. Campaign Goals & Objectives

  • Goal: Successfully launch the Eco-Sense Hub and establish it as a leading solution for sustainable smart homes.
  • Objectives:

* Awareness: Reach over 1,000,000 unique users across all platforms within the campaign duration.

* Engagement: Achieve an average engagement rate of 3% on all posts.

* Traffic: Drive 50,000 unique visitors to the Eco-Sense Hub product page.

* Conversions: Generate 500 pre-orders/sales during the campaign period.

* Community Building: Grow social media follower count by 10% across key platforms.


3. Target Audience

  • Primary Audience: Environmentally conscious homeowners (25-55 years old) interested in technology, energy efficiency, and reducing their carbon footprint. They are likely early adopters of smart home technology and value convenience and sustainability.
  • Secondary Audience: Tech enthusiasts, sustainability advocates, design-conscious individuals, and families looking for long-term savings.

4. Key Messages

  1. Innovation & Intelligence: The Eco-Sense Hub is a revolutionary smart device that intelligently learns and adapts to your home's needs.
  2. Sustainability & Impact: Reduce your energy consumption, lower your carbon footprint, and contribute to a greener planet.
  3. Convenience & Comfort: Enjoy effortless control, optimized comfort, and peace of mind with smart automation.
  4. Savings & Value: Invest in a smarter home that saves you money on energy bills in the long run.

5. Platform Strategy

  • Instagram: Visual-first platform for aspirational content, lifestyle integration, short videos (Reels), Stories, and product showcases. Focus on aesthetics, user experience, and environmental impact.
  • Facebook: Community building, longer-form educational content, customer testimonials, Q&A sessions, and targeted ad campaigns. Good for reaching a broad demographic.
  • X (formerly Twitter): Real-time updates, quick tips, industry news, engagement with trending topics, and direct customer service. Focus on concise, impactful messaging.
  • LinkedIn: Professional networking, thought leadership, B2B potential (partnerships, installers), company news, and showcasing the technology behind the Eco-Sense Hub.

6. Content Pillars & Themes

  1. Innovation & Technology: Unpacking features, how-it-works, design, and intelligent capabilities.
  2. Sustainability & Environmental Impact: Highlighting energy savings, carbon footprint reduction, and eco-friendly aspects.
  3. Lifestyle & Convenience: Showcasing how the Eco-Sense Hub seamlessly integrates into daily life, offering comfort, control, and peace of mind.
  4. Community & Education: Engaging with users, answering questions, sharing tips, and spotlighting user success stories.

7. Social Media Content Calendar (4 Weeks)

Week 1: Introduction & Problem/Solution

Theme: Announcing the Eco-Sense Hub – what it is and how it solves common energy and sustainability challenges.

| Date | Platform | Content Type | Content Pillar | Headline/Hook | Body Text/Caption

sharper4k Output

Social Media Campaign: Image Generation Brief

This document provides a comprehensive brief for the visual content required for your social media campaign. The goal is to generate high-quality, engaging, and brand-consistent imagery that resonates with your target audience across various platforms.


1. Campaign Overview & Visual Strategy

Campaign Goal (Assumed): To launch and promote a new, innovative smart home device, "AuraHub," which simplifies home management and enhances well-being through intelligent automation.

Target Audience: Tech-savvy individuals, young professionals, and modern families (ages 25-45) who value convenience, smart living, design aesthetics, and personal well-being.

Core Visual Strategy:

  • Modern & Minimalist: Emphasize clean lines, uncluttered compositions, and sophisticated aesthetics.
  • Benefit-Oriented: Focus on showcasing the results and emotions associated with using AuraHub (e.g., peace of mind, ease, comfort, connection) rather than just technical specifications.
  • Integrated Lifestyle: Depict the product seamlessly integrated into realistic, aspirational home environments.
  • Consistent Branding: Utilize a defined color palette, typography (for text overlays), and overall tone to ensure brand recognition.
  • Emotional Connection: Evoke feelings of calm, efficiency, and joy through visual storytelling.

2. Brand Visual Guidelines (Assumed)

Primary Color Palette:

  • Primary: Deep Teal (#00796B)
  • Secondary: Clean White (#FFFFFF), Light Grey (#F5F5F5)
  • Accent: Soft Gold (#FFD700), Muted Coral (#FF6B6B - for warmth/human touch)

Typography (for overlays):

  • Headlines: Montserrat Bold (or similar clean sans-serif)
  • Body/CTA: Open Sans Regular (or similar legible sans-serif)

Image Tone: Bright, airy, sophisticated, inviting, authentic.


3. Image Categories & Detailed Concepts

Below are specific image concepts categorized by their purpose and potential platform suitability. Each concept includes a detailed description, suggested composition, color palette, and desired mood.


3.1. Hero Launch Image (Multi-Platform Adaptable)

  • Purpose: The primary visual for the campaign launch, designed to immediately grab attention and communicate the product's essence.
  • Description: A stunning, high-resolution shot of the AuraHub device elegantly placed in a modern, minimalist living space. The device should be the focal point, but the background should provide context of a smart, serene home.
  • Composition:

* Foreground: AuraHub device (sleek, minimalist design, perhaps glowing subtly with its indicator light).

* Mid-ground: A blurred but recognizable modern living room element (e.g., a Scandinavian-style wooden coffee table with a minimalist vase, a soft throw blanket on a sofa).

* Background: Soft natural light streaming in from a window, creating a gentle glow.

  • Color Palette: Dominated by whites, light greys, and natural wood tones, with the device's subtle teal/gold accents. A hint of muted coral in a decorative item (e.g., a small cushion) for warmth.
  • Mood: Sophisticated, serene, inviting, futuristic yet grounded.
  • Text Overlay (Optional/Subtle): "Introducing AuraHub: Your Home, Simplified." (Montserrat Bold, White/Teal)
  • Adaptations:

* Instagram/Facebook Feed: Square or 4:5 aspect ratio.

* Website Banner/Hero: Wide aspect ratio (16:9 or similar).

* LinkedIn: Professional, clean header.


3.2. Benefit-Focused Lifestyle Image: "Peace of Mind" (Instagram/Facebook)

  • Purpose: To visually represent a key benefit of AuraHub – tranquility and control.
  • Description: A candid, authentic shot of an individual (or a couple/family) enjoying a calm moment at home, with the AuraHub subtly present.
  • Composition:

* A person (e.g., a woman in her late 20s-30s) comfortably reading a book or enjoying a cup of tea on a sofa, looking relaxed and content.

* The AuraHub device is visible on a nearby shelf or side table, blending naturally into the background but identifiable.

* Soft focus on the background to highlight the person's relaxed state.

  • Color Palette: Warm, soft lighting. Light greys, soft greens from plants, natural wood, with the teal accent of the device.
  • Mood: Peaceful, serene, comfortable, secure.
  • Text Overlay: "Experience True Peace of Mind. #AuraHub" (Open Sans, Teal)

3.3. Feature Highlight Image: "Seamless Integration" (Instagram Carousel/Stories)

  • Purpose: To showcase how AuraHub seamlessly integrates into daily routines and other smart devices.
  • Description: A series of images (or a single composite image) demonstrating AuraHub's connectivity with other smart home elements.
  • Composition (Carousel Idea):

1. Image 1: AuraHub device on a kitchen counter, next to a smart speaker (e.g., Google Home/Alexa). Soft morning light.

2. Image 2: A hand (diverse representation) interacting with a tablet or phone screen, showing the AuraHub app interface (clean UI, intuitive design).

3. Image 3: A smart light fixture (e.g., Philips Hue) changing color or dimming, with a subtle glow, implying AuraHub control.

  • Color Palette: Bright and functional. Whites, light greys, with vibrant pops of color from device screens or smart lighting.
  • Mood: Efficient, modern, empowering, connected.
  • Text Overlay (for each slide/image):

* Slide 1: "Connect Your World."

* Slide 2: "Intuitive Control."

* Slide 3: "Effortless Automation."

  • Format: Ideal for Instagram Carousel or a series of Instagram Stories.

3.4. Educational/Infographic Style Image: "Problem/Solution" (Facebook/LinkedIn)

  • Purpose: To clearly articulate a common home management problem and how AuraHub provides the solution.
  • Description: A clean, visually engaging graphic combining minimalist iconography and concise text.
  • Composition:

* Left Side (Problem): A simple icon representing common home frustrations (e.g., tangled wires, a clock showing too many tasks, a stressed face). Text: "Tired of Juggling Home Tasks?"

* Center: A prominent arrow or dividing line.

* Right Side (Solution): A clean icon representing simplified living (e.g., a serene home, a lightbulb for 'smart', a checkmark). Text: "AuraHub: Smart Living, Simplified." Below, a small image of the AuraHub device.

  • Color Palette: Predominantly white and light grey background. Icons in Teal and Muted Coral to differentiate problem/solution.
  • Mood: Informative, empowering, clear, trustworthy.
  • Text Overlay: "Simplify Your Home. Simplify Your Life. Learn More about AuraHub." (Montserrat Bold for headline, Open Sans for body).

3.5. Call-to-Action Image: "Discover AuraHub" (All Platforms)

  • Purpose: To drive immediate action (e.g., website visit, pre-order).
  • Description: A compelling, action-oriented image that clearly directs the user to the next step.
  • Composition:

* A dynamic, slightly angled shot of the AuraHub device, perhaps with a subtle glow or lens flare to indicate innovation.

* A clean, prominent Call-to-Action button or text overlay.

* Minimalist background that doesn't distract.

  • Color Palette: Deep Teal and White for high contrast and brand recognition. Accent Gold for the CTA button or highlight.
  • Mood: Urgent, exciting, direct, professional.
  • Text Overlay:

* Large Headline: "Unlock Smart Living." (Montserrat Bold, White)

* Button/Text: "Shop Now" or "Learn More" (Open Sans, White text on Teal or Gold background).

* Subtle URL: "www.aurahub.com"

  • Adaptations:

* Instagram Story: Vertical format with swipe-up indicator.

* Facebook Ad: Clear CTA button integration.

* LinkedIn Post: Professional, direct call to action.


4. General Image Requirements

  • High Resolution: All images must be high-resolution, suitable for various digital platforms without pixelation.
  • Multiple Ratios: Provide images in common aspect ratios (1:1 for Instagram, 4:5 for vertical posts, 16:9 for stories/banners, 9:16 for vertical video/story backgrounds) where applicable.
  • Accessibility: Consider text contrast for overlays and avoid overly busy backgrounds if text is critical.
  • Authenticity: Aim for realistic settings and diverse representation in lifestyle shots.
  • Brand Consistency: Ensure all images align with the established brand visual guidelines (colors, tone, style).

This detailed brief provides the foundation for generating compelling visuals for your AuraHub social media campaign. Each image should be crafted to tell a part of the AuraHub story, engaging your audience and driving them towards discovery and conversion.

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