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

Plan and create content for a complete social media campaign

Social Media Campaign: Content Calendar - Veridian Hub Launch

This document outlines a comprehensive, detailed, and actionable content calendar for the launch of the "Veridian Hub" – an innovative eco-friendly smart home device. This calendar spans a two-week period, designed to build anticipation, educate the audience, drive engagement, and encourage pre-orders or website visits.


Campaign Overview

Product: Veridian Hub – an advanced, eco-friendly smart home device designed to optimize energy consumption, enhance home comfort, and integrate seamlessly into sustainable lifestyles.

Campaign Goal: To successfully launch the Veridian Hub, generate significant brand awareness, educate the target audience about its unique benefits, drive traffic to the product landing page, and secure early pre-orders or sign-ups for updates.

Target Audience: Environmentally conscious homeowners, tech enthusiasts, early adopters, families seeking smart and sustainable living solutions, individuals interested in reducing their carbon footprint and energy bills.

Key Pillars/Themes:

  1. Sustainability & Eco-Friendliness: Highlighting the environmental benefits and energy savings.
  2. Smart Living & Convenience: Showcasing ease of use, automation, and lifestyle enhancement.
  3. Innovation & Technology: Emphasizing cutting-edge features and seamless integration.
  4. Community & Impact: Fostering a sense of belonging among users committed to a greener future.

Platform Strategy

  • Instagram: Visual storytelling (high-quality images, reels, carousels, stories) focusing on lifestyle integration, aesthetics, and quick feature highlights.
  • Facebook: Community engagement, longer-form educational content, link sharing, Q&A sessions, and event promotion (if applicable).
  • Twitter/X: Real-time updates, engaging questions, polls, quick tips, news snippets, and driving traffic to longer content.
  • LinkedIn: Professional insights, company vision, technology deep-dives, sustainability thought leadership, and networking.
  • TikTok: Short, engaging, trend-driven videos showcasing quick demos, "day in the life" scenarios, and fun facts about sustainability.

Content Calendar: Week 1 - Build Anticipation & Introduce Veridian Hub

Focus: Teaser, Problem/Solution, Core Benefits, Brand Introduction

| Date | Platform | Content Type | Headline/Caption Hook | Body Text Veridian Hub is a device that helps people manage their smart home devices in an eco-friendly way.

It optimizes energy consumption, enhances home comfort, and integrates into sustainable lifestyles.

My content calendar will need to reflect these values.

I need to make sure the content is engaging and professional.

I need to include headlines, body text, and calls to action.

The output should be directly deliverable to the customer.

Let's refine the content ideas for Week 1 and Week 2.

Week 1:

  • Day 1 (Mon): Teaser/Announcement: "Something Green is Coming..." - Mystery, intrigue.
  • Day 2 (Tue): Problem/Solution: "Tired of High Energy Bills?" - Introduce the problem, hint at Veridian's solution.
  • Day 3 (Wed): Core Benefit 1 (Eco): "Sustainable Living, Simplified." - Focus on environmental impact.
  • Day 4 (Thu): Core Benefit 2 (Smart): "Your Home, Smarter Than Ever." - Focus on convenience/tech.
  • Day 5 (Fri): Feature Spotlight (Integration): "Seamlessly Connect Your Home." - How it works with existing devices.
  • Day 6 (Sat): Weekend Engagement: "What's Your Eco-Goal This Weekend?" - Community interaction.
  • Day 7 (Sun): Recap/Look Ahead: "A Week of Green Hints..." - Summarize, tease next week's reveal.

Week 2:

  • Day 8 (Mon): Official Reveal/Deep Dive: "Introducing Veridian Hub: The Future of Eco-Smart Homes." - Full product reveal, key features.
  • Day 9 (Tue): How It Works (Video): "See Veridian Hub in Action." - Quick demo.
  • Day 10 (Wed): Testimonial/Use Case: "Real Stories, Real Savings." - Fictional user story/benefit.
  • Day 11 (Thu): Q&A/Myth Busting: "Your Questions, Answered." - Address common concerns.
  • Day 12 (Fri): Call to Action (Pre-order/Learn More): "Ready to Transform Your Home?" - Strong CTA.
  • Day 13 (Sat): Behind the Scenes/Team: "Meet the Innovators Behind Veridian Hub." - Human touch.
  • Day 14 (Sun): Final Push/Community: "Join the Green Revolution." - Reinforce community, final CTA.

This looks like a solid plan. I will now fill in the details for each entry, ensuring professional, engaging, and actionable content. I'll make sure the CTAs are clear and varied.

Hashtags will be relevant and a mix of broad and specific.

Visual ideas will be descriptive.

I will also include a brief section

sharper4k Output

This document outlines the detailed image generation plan for the "LumiFlow Smart Water Monitor" social media campaign. Each description is crafted to guide an AI image generator or a professional designer in creating compelling, on-brand visuals that resonate with the target audience and support the campaign objectives.


Social Media Campaign: LumiFlow Smart Water Monitor - Image Generation Plan

Campaign Goal: To launch the "LumiFlow Smart Water Monitor," raise brand awareness, and drive pre-orders/early access sign-ups.

Core Message: "Flow Smarter. Live Greener. Save More."

Product: LumiFlow is an AI-powered device that attaches to a home's main water line, providing real-time water usage data, leak detection, and personalized tips for water conservation.


1. Visual Style Guide & Aesthetic Principles

To ensure consistency and reinforce the brand identity across all campaign visuals, adhere to the following guidelines:

  • Aesthetics: Modern, clean, minimalist, sophisticated, and inviting. Emphasize sustainability and technological elegance.
  • Color Palette: Predominantly soft blues (representing water), muted greens (representing nature/sustainability), crisp whites, and light greys. Accents of warm wood tones or natural light can be used to add warmth.
  • Mood & Tone: Optimistic, calm, empowering, smart, and efficient. Convey a sense of peace of mind and responsible living.
  • Lighting: Natural, soft, bright, and well-lit. Avoid harsh shadows. Focus on creating an airy and open feel.
  • Composition: Clean lines, balanced layouts, often utilizing negative space to highlight the product or human interaction. Focus on clarity and simplicity.
  • Photography Style: High-key, professional product photography blended with authentic, aspirational lifestyle imagery. Where applicable, use 3D renders for product shots to showcase intricate details.

2. Key Image Concepts & Detailed Descriptions

Below are the specific image concepts for the LumiFlow campaign, each with a detailed prompt suitable for AI image generation or human design.


2.1. Hero Image: Introducing LumiFlow (Campaign Launch)

Purpose: To serve as the primary visual for the campaign launch, immediately conveying the product's essence and core benefit.

Description:

A sleek, minimalist shot featuring the LumiFlow device prominently displayed on a clean, light-colored surface (e.g., white countertop or light wood). In the background, subtly blurred, is a modern bathroom or kitchen setting with a gentle stream of water flowing from a faucet, symbolizing water usage. A single, healthy green leaf (like a monstera or fern) is artfully placed nearby, hinting at environmental consciousness. The device itself should be rendered with a subtle glow or reflection to emphasize its smart technology. The overall lighting is soft, natural, and bright. The color palette is dominated by whites, light greys, and soft blues/greens.

Style: High-resolution product photography with a touch of lifestyle integration.

Keywords: LumiFlow device, smart water monitor, clean design, water stream, green leaf, modern home, minimalist, soft light, high-key, product launch, eco-friendly tech


2.2. Product Showcase: Sleek Design & Integration

Purpose: To highlight the sophisticated design of the LumiFlow device and its seamless integration into a home's infrastructure.

Description:

A close-up, high-angle shot of the LumiFlow device securely mounted on a pipe (simulated, clean, and modern plumbing setup in a utility room or basement, not dirty or old pipes). The device should look futuristic yet robust, with subtle LED indicators (off or showing a soft, unobtrusive status light). The background should be clean, possibly a light grey wall or a blurred, well-organized utility space. Focus on the device's elegant curves and the quality of its materials (e.g., brushed metal, durable plastic). The image should convey precision engineering and ease of installation.

Style: Professional 3D product render or studio photography.

Keywords: LumiFlow device, smart home integration, water pipe, utility room, clean lines, sleek design, modern technology, precise engineering, installation, durable materials


2.3. Benefit Focus: Water Conservation & Savings

Purpose: To visually represent the impact of LumiFlow on water conservation and potential savings.

Description:

A split image or a clever composition showing two contrasting scenes. On one side, a hand turning off a dripping faucet, with a faint, digital "saving" icon or graph overlaid. On the other side, a vibrant, healthy potted plant (e.g., succulent or small herb garden) thriving in a sunlit window, representing growth and sustainability. Alternatively, a single image of a homeowner (diverse, adult, 30s-40s) looking thoughtfully at their smartphone screen displaying a simplified, engaging LumiFlow app interface with a clear "Water Saved This Month" metric, perhaps with a subtle background of a well-maintained, green garden or a serene lake. The mood is one of accomplishment and environmental responsibility.

Style: Aspirational lifestyle photography with digital overlay.

Keywords: water conservation, saving water, LumiFlow app, smartphone, healthy plant, sustainable living, environmental impact, cost savings, responsible homeowner, digital interface


2.4. Lifestyle Integration: Smart Home Ecosystem

Purpose: To demonstrate how LumiFlow fits seamlessly into a modern, smart home ecosystem, enhancing daily life.

Description:

A wide-angle shot of a bright, contemporary open-plan living space (kitchen/living room). A diverse family (e.g., parents and a child) is casually interacting – perhaps preparing a meal, reading, or playing a board game. In the foreground or mid-ground, a tablet or smart display shows the LumiFlow app interface with real-time water usage data, subtly integrated into the scene (e.g., on a kitchen island, coffee table). The focus is on the comfort, efficiency, and interconnectedness of a smart home, with LumiFlow as an integral, unobtrusive part. Natural light floods the room.

Style: High-quality lifestyle photography, warm and inviting.

Keywords: smart home, connected living, LumiFlow app, family life, modern interior, open-plan, kitchen, living room, tablet display, seamless integration, comfort, efficiency


2.5. Problem/Solution: Leak Detection & Peace of Mind

Purpose: To highlight LumiFlow's crucial leak detection feature and the peace of mind it offers.

Description:

A two-part image or a composition that tells a story. On one side (or subtly in the background), a small, contained puddle of water on a floor, perhaps near a baseboard or under a sink, illuminated by a beam of light – representing a potential leak. On the other side (or prominently in the foreground), a close-up of a hand holding a smartphone, displaying a clear "Leak Detected!" alert from the LumiFlow app, with a calm, reassuring icon (e.g., a green checkmark or a repair wrench). The overall tone should be one of swift resolution and relief, not panic.

Style: Cinematic photography with a focus on narrative and problem-solving.

Keywords: leak detection, water leak, smart alert, LumiFlow app, peace of mind, home safety, preventative maintenance, smartphone notification, problem solved, relief


2.6. Call to Action: Discover More / Pre-Order Now

Purpose: To drive user engagement and prompt a specific action (e.g., visit website, pre-order).

Description:

A dynamic, eye-catching image featuring the LumiFlow device at an appealing angle, with a sense of forward momentum or innovation. Surrounding the device, or integrated into the background, are abstract, flowing lines or gentle ripples of water in vibrant blues and greens, creating a sense of movement and energy. A prominent, clean space within the image should be reserved for overlaying text (e.g., "Discover LumiFlow," "Pre-Order Now," "Flow Smarter"). The image should feel energetic and inspiring, encouraging immediate action.

Style: Modern conceptual product render with abstract elements.

Keywords: LumiFlow device, call to action, discover more, pre-order, innovation, dynamic, flowing water, abstract design, energetic, inspiring, future tech


3. Technical Specifications & Best Practices for Generation

When generating these images, consider the following technical aspects and best practices:

  • Resolution: Aim for high-resolution outputs (e.g., 2000px on the shortest side or higher) to ensure quality across various platforms and potential print uses.
  • Aspect Ratios: Generate images in common social media aspect ratios (e.g., 1:1 for Instagram, 4:5 for vertical Instagram, 16:9 for landscape banners, 9:16 for stories/reels) or ensure the core subject is centered and can be cropped effectively.
  • File Format: PNG for maximum quality and transparency where needed; JPEG for general web use with optimized compression.
  • Brand Consistency: Continuously refer to the Visual Style Guide for color, mood, and aesthetic consistency.
  • Iteration & Refinement: AI generation often requires multiple attempts and prompt adjustments. Be prepared to iterate to achieve the desired result.
  • Human Touch: Review all AI-generated images for any artifacts, inconsistencies, or uncanny elements that might detract from professionalism, and perform minor touch-ups if necessary.
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);}});}