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

Plan and create content for a complete social media campaign

Social Media Campaign: Content Calendar - Phase 1: Launch & Awareness

Executive Summary

This document outlines a comprehensive content calendar for the initial two weeks of your social media campaign, focusing on the launch and early awareness phase of your new product line, "PureClean – The Future of Eco-Friendly Home Cleaning." The calendar provides detailed, platform-specific content ideas, including headlines, body text, calls to action, suggested hashtags, and visual concepts. The goal is to generate excitement, educate the audience about the benefits of PureClean, and drive initial engagement and sales.


Campaign Overview

  • Campaign Goal: To successfully launch the "PureClean" eco-friendly home cleaning product line, generate significant brand awareness, educate the target audience on product benefits, and drive initial traffic and sales to the product pages.
  • Target Audience: Environmentally conscious consumers, health-focused families, individuals seeking effective and safe cleaning solutions, and those interested in sustainable living.
  • Key Messages:

* Innovation & Sustainability: PureClean offers a revolutionary approach to home cleaning that is kind to the planet.

* Effectiveness: Powerful cleaning performance without harsh chemicals.

* Health & Safety: Safe for families, pets, and the environment.

* Simplicity & Lifestyle: Integrates seamlessly into a modern, conscious lifestyle.

  • Platforms: Instagram, Facebook, Twitter, TikTok, LinkedIn (for brand messaging).

Content Calendar Legend

  • Platform(s): Social media platform(s) where the content will be posted.
  • Content Type: The format of the content (e.g., Image, Video, Carousel, Story, Reel, Text).
  • Theme: The overarching message or focus of the post.
  • Headline/Hook: The attention-grabbing opening line or title.
  • Body Text: The main message, providing details and engaging the audience.
  • Call to Action (CTA): What you want the audience to do next.
  • Hashtags: Relevant hashtags for discoverability and engagement.
  • Visual/Creative Idea: Description of the accompanying image or video.

Content Pillars

To ensure consistent messaging and diverse content, we will focus on these core pillars:

  1. Innovation & Sustainability: Highlighting eco-friendly ingredients, biodegradable formulas, and sustainable packaging.
  2. Effectiveness & Performance: Showcasing the powerful cleaning capabilities of PureClean products.
  3. Health & Safety: Emphasizing non-toxic, pet-safe, and family-friendly aspects.
  4. Lifestyle & Community: Integrating PureClean into a modern, conscious lifestyle and fostering community engagement.
  5. Education & Transparency: Providing insights into ingredients, benefits, and responsible cleaning practices.

Weekly Content Calendar: Phase 1 - Launch & Awareness

Week 1: Teaser & Introduction

Objective: Build anticipation, officially launch the product line, and introduce the core benefits.

| Day & Date | Platform(s) | Content Type | Theme | Headline/Hook | Body Text

sharper4k Output

Social Media Campaign: Image Generation Specifications

This document outlines the detailed specifications for all visual content required for your upcoming social media campaign. The goal is to generate high-quality, engaging, and platform-optimized images that effectively communicate your brand message and drive campaign objectives.


1. Campaign Overview & Core Image Principles

The images generated for this campaign will be the visual cornerstone of your social media presence, designed to capture attention, convey key messages, and foster engagement across various platforms.

Core Principles for All Images:

  • Brand Consistency: All visuals will strictly adhere to your brand's style guide, including logo usage, color palette, typography (if text overlays are used), and overall aesthetic.
  • High Quality & Professionalism: Images will be sharp, well-composed, properly lit, and free of imperfections. They will reflect a premium and professional brand image.
  • Engagement-Focused: Each image will be designed to be visually compelling, tell a story, evoke emotion, or prompt interaction (e.g., questions, clicks, shares).
  • Platform-Optimized: Images will be tailored to the specific technical and aesthetic requirements of each social media platform to ensure optimal display and performance.
  • Clarity & Simplicity: Avoid visual clutter. Each image should have a clear focal point and convey its message efficiently.
  • Accessibility: Consider diverse audiences. Images will be suitable for accompanying alt-text descriptions to enhance accessibility.

2. Image Content & Thematic Concepts

To ensure a diverse and impactful campaign, images will be developed across several thematic concepts. Please review and confirm your preferred focus areas or suggest additional themes.

Proposed Thematic Concepts:

  1. Product/Service Showcase:

* Focus: High-resolution, professional photography or realistic renders of your product/service.

* Examples:

* Elegant studio shots highlighting design and features.

* "In-action" shots demonstrating practical use or benefits.

* Close-ups emphasizing unique details or craftsmanship.

* Before-and-after comparisons (if applicable).

* Graphical representations of service benefits or processes.

* Goal: To clearly present what you offer and its value.

  1. Lifestyle & Aspiration:

* Focus: Images depicting users experiencing the positive outcomes or lifestyle improvements enabled by your product/service.

* Examples:

* People enjoying a specific activity or environment, with your product subtly integrated.

* Scenes evoking emotions like joy, tranquility, productivity, or success.

* Aspirational scenarios that your target audience can relate to.

* Goal: To connect emotionally with the audience and demonstrate the aspirational benefits.

  1. Educational & Informative Graphics:

* Focus: Visually engaging graphics that convey useful information, tips, or data related to your industry or product.

* Examples:

* Infographics summarizing key data points or trends.

* "How-to" guides or step-by-step visuals.

* Factoids or quick tips presented with branded visuals.

* Diagrams explaining complex concepts simply.

* Goal: To establish authority, provide value, and educate your audience.

  1. Behind-the-Scenes & Authenticity:

* Focus: Images offering a glimpse into your company culture, team, or product development process.

* Examples:

* Team members collaborating or working on the product.

* Process shots showing craftsmanship or innovation.

* Candid moments showcasing company values.

* Goal: To build trust, humanize your brand, and foster a sense of community.

  1. Testimonials & Social Proof:

* Focus: Graphics featuring positive customer testimonials or endorsements, overlaid on appealing background imagery.

* Examples:

* Quote cards with a customer photo (if available and consented) or a relevant background.

* Screenshots of positive reviews (cleanly integrated).

* "As featured in..." graphics with partner logos.

* Goal: To leverage external validation and build credibility.


3. Platform-Specific Image Specifications

Each image will be generated with optimal dimensions and aspect ratios for the primary social media platforms.

3.1. Facebook

  • Feed Image (Single/Carousel):

* Recommended: 1200 x 630 pixels (Landscape, 1.91:1) or 1080 x 1080 pixels (Square, 1:1)

* Minimum: 600 x 315 pixels (Landscape) or 600 x 600 pixels (Square)

* Text Overlay: Keep text to a minimum (ideally <20% of image area for ads).

  • Stories:

* Recommended: 1080 x 1920 pixels (Portrait, 9:16)

* Safe Zone: Ensure critical elements are within 1080 x 1420 pixels (top 250px and bottom 250px may be obscured by UI).

  • Cover Photo (Page):

* Recommended: 820 x 312 pixels (Desktop) / 640 x 360 pixels (Mobile)

* Display: Displays as 820 x 312 on desktop and 640 x 360 on smartphones. Critical content should be centered to appear well on both.

  • Event Cover Photo:

* Recommended: 1920 x 1005 pixels (1.91:1)

3.2. Instagram

  • Feed Image (Single/Carousel):

Square: 1080 x 1080 pixels (1:1) - Most common and versatile.*

Portrait: 1080 x 1350 pixels (4:5) - Maximizes screen real estate.*

Landscape: 1080 x 566 pixels (1.91:1) - Use sparingly; takes less vertical space.*

  • Stories/Reels Cover:

* Recommended: 1080 x 1920 pixels (9:16)

* Safe Zone: Similar to Facebook Stories, keep critical elements within the center 1080 x 1420 pixels.

  • Profile Picture:

* Recommended: 320 x 320 pixels (1:1) - Displays as 110x110.

3.3. X (formerly Twitter)

  • In-Stream Photo:

* Recommended: 1600 x 900 pixels (16:9)

* Minimum: 600 x 335 pixels

  • Image Card (with URL):

* Recommended: 800 x 418 pixels (1.91:1)

  • Profile Photo:

* Recommended: 400 x 400 pixels (1:1)

  • Header Photo:

* Recommended: 1500 x 500 pixels (3:1)

3.4. LinkedIn

  • Company Page Image (Shared Post):

* Recommended: 1200 x 628 pixels (1.91:1)

  • Company Page Cover Photo:

* Recommended: 1128 x 191 pixels (Desktop)

* Display: Top portion of the image is often cropped on mobile. Keep essential branding elements centered.

  • Life Tab Hero Image:

* Recommended: 1128 x 376 pixels

  • Profile Photo:

* Recommended: 400 x 400 pixels (1:1)

3.5. Pinterest

  • Standard Pin:

Recommended: 1000 x 1500 pixels (2:3) - Vertical orientation is key for Pinterest.*

* Minimum: 600 x 900 pixels

  • Story Pin:

* Recommended: 1080 x 1920 pixels (9:16)


4. General Technical Specifications

  • File Format:

* JPEG (.jpg): Best for photographs and complex images with gradients, offering good compression.

* PNG (.png): Ideal for graphics, images with text, logos, or transparent backgrounds, preserving sharp edges.

  • Color Profile: sRGB (Standard Red Green Blue) - This is the standard color space for web and digital displays, ensuring consistent color representation across devices.
  • Resolution (Output): All generated images will be produced at a minimum of 300 DPI where applicable (e.g., for source files that might be repurposed for print or higher-res needs) and scaled down to 72 DPI for final web delivery, optimized for fast loading times. Pixel dimensions as specified above are paramount.
  • Naming Convention: A clear and consistent naming convention will be used for all generated image files to facilitate organization and retrieval.

* Format: [CampaignName]_[Platform]_[ImageConcept]_[VariantNumber]_[Dimensions]_[Date].jpg/png

* Example: SpringLaunch_Instagram_ProductShowcase_01_1080x1080_20231026.jpg


5. Image Generation Guidelines & Best Practices

  • Visual Hierarchy: Images will guide the viewer's eye to the most important elements (e.g., product, message, CTA).
  • Text Integration: If text overlays are required, they will be legible, concise, and strategically placed within "safe zones" to avoid being cut off by platform UI elements.
  • Brand Elements: Logos will be subtly integrated and consistently placed, ensuring visibility without overwhelming the primary image content.
  • Emotional Resonance: Images will aim to evoke positive emotions relevant to your brand and campaign goals.
  • Mobile-First Design: All visuals will be tested for optimal appearance and readability on mobile devices, where the majority of social media consumption occurs.
  • Variety: The campaign will feature a healthy mix of photographic, illustrative, and graphic design elements to keep the content fresh and engaging.

6. Next Steps & Action Items

To proceed with the image generation, please provide the following:

  1. Brand Style Guide: Your complete brand guidelines, including logo files (vector preferred), color codes (HEX/RGB), and preferred fonts.
  2. Product/Service Assets: High-resolution photos,
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);}});}