Investor Update Email
Run ID: 69cbe69a61b1021a29a8d5882026-03-31Business
PantheraHive BOS
BOS Dashboard

Craft polished monthly/quarterly investor update emails with KPI highlights, milestones, challenges, asks, and financial snapshot.

Step 1 of 3: Analyze Audience - Investor Update Email

Audience Analysis: The Investor Landscape

The primary audience for this communication is your investors. This group is highly diverse, ranging from angel investors and venture capitalists (VCs) to strategic corporate investors and limited partners (LPs). Understanding their specific motivations, expectations, and risk profiles is crucial for crafting an effective and impactful update.

1. Investor Archetypes & Motivations

a. Angel Investors:

  • Motivation: Often early believers, high-risk tolerance, looking for significant returns, may offer mentorship. Emotional connection to the founding story.
  • Focus: Progress against early milestones, potential for future funding rounds, personal impact stories.

b. Seed/Early-Stage VCs:

  • Motivation: Portfolio management, looking for validation of their investment thesis, clear path to Series A/B, data-driven growth.
  • Focus: Key Performance Indicators (KPIs) validating product-market fit, customer acquisition cost (CAC), lifetime value (LTV), team strength, competitive landscape.

c. Growth/Late-Stage VCs:

  • Motivation: Scalability, market dominance, clear path to exit (IPO, M&A), financial rigor, operational efficiency.
  • Focus: Revenue growth, profitability metrics, market share, operational efficiencies, M&A opportunities, exit strategy updates.

d. Strategic Corporate Investors:

  • Motivation: Synergistic opportunities, market intelligence, potential acquisition, technology integration.
  • Focus: Product development, market expansion into specific verticals, partnership opportunities, alignment with their corporate strategy.

e. Limited Partners (LPs) - Indirect Audience (via VC):

  • Motivation: Overall fund performance, diversification, responsible investment.
  • Focus (from VC perspective): Consistent positive updates, demonstrating portfolio company health, clear communication of challenges and mitigation.

2. Investor Expectations & Information Needs

Investors are primarily concerned with return on investment (ROI) and risk mitigation. They expect transparency, professionalism, and concise, data-driven updates.

  • Transparency: Honest reporting of both successes and challenges.
  • Accountability: Demonstrating progress against stated goals and previous forecasts.
  • Proactivity: Addressing potential issues before they escalate.
  • Conciseness: Busy individuals; respect their time with clear, digestible information.
  • Actionability: Clear asks or next steps where appropriate.

Key Information Categories:

  • Performance Metrics: Revenue, user growth, engagement, CAC/LTV, burn rate, runway.
  • Milestones Achieved: Product launches, key hires, partnership agreements, funding rounds.
  • Challenges & Solutions: Identification of roadblocks and proposed strategies to overcome them.
  • Future Outlook: Next 3-6 month goals, strategic priorities.
  • Asks: Specific ways investors can help (introductions, advice, follow-on investment).
  • Financial Snapshot: Cash position, burn, runway, recent funding activity.

3. Communication Preferences & Tone

  • Frequency: Typically monthly or quarterly, depending on the stage and investor preference. Quarterly is standard for more mature companies.
  • Format: Email is standard, often with an attached summary or link to a more detailed investor portal/deck.
  • Tone: Professional, confident, transparent, humble when discussing challenges, optimistic about the future, data-driven. Avoid overly promotional or informal language.
  • Language: Clear, direct, avoid jargon where possible, or explain it.
  • Personalization: While a template is used, minor personalization (e.g., referencing a previous conversation) can be highly effective.

4. Data Insights & Trends

  • Increased Scrutiny: In volatile economic climates, investors are more scrutinizing of burn rates, profitability, and clear paths to sustainability.
  • Focus on Efficiency: "Growth at all costs" is less favored; efficiency metrics (e.g., capital efficiency) are paramount.
  • ESG Considerations: Increasingly, investors (especially LPs) are looking for companies to report on Environmental, Social, and Governance (ESG) initiatives, even if briefly.
  • Data Visualization: Graphs and charts are highly effective for conveying KPI trends quickly.
  • "No Surprises" Rule: Investors dislike surprises, especially negative ones. Early communication of challenges is always preferred.

Recommendations for Content & Tone

Based on this audience analysis, here are specific recommendations for crafting the investor update email:

  1. Structure for Scanability: Use clear headings, bullet points, and bold text. Most investors will scan the email first for key takeaways.
  2. Lead with the Executive Summary: Start with a brief, high-level overview of the most critical updates (good and bad) to immediately inform the reader.
  3. Prioritize Key Metrics: Dedicate a prominent section to the most important KPIs. Use visual aids (e.g., "up/down" arrows, simple charts) if possible within the email, or link to a dashboard.
  4. Balance Successes and Challenges: Present achievements confidently, but address challenges head-on with proposed solutions. This builds trust.
  5. Quantify Everything Possible: Use numbers, percentages, and specific data points rather than vague statements (e.g., "user growth was good" vs. "user growth increased by 15% MoM").
  6. Be Specific with "Asks": If you need help, make the ask clear, concise, and easy to act upon. Don't make them guess how they can assist.
  7. Maintain a Consistent Tone: Professional, confident, and transparent.
  8. Include a Forward-Looking Section: Outline the next set of goals and strategic priorities to demonstrate continued momentum and vision.
  9. Financial Snapshot: Always include a concise update on cash runway, burn rate, and any significant financial events.
  10. Proofread Meticulously: Errors undermine professionalism.

Next Steps

This audience analysis directly informs the subsequent steps of the "Investor Update Email" workflow:

  1. Content Generation (Step 2): The identified information needs (KPIs, milestones, challenges, asks, financials) will form the core content sections of the email. The recommended tone and structure will guide the writing.
  2. Review and Refine (Step 3): During the review phase, the email will be evaluated against investor expectations: Is it transparent? Is it concise? Does it provide the necessary data? Is the tone appropriate? Does it address potential investor concerns?

By meticulously understanding your investors, you can tailor your updates to maximize engagement, maintain trust, and foster continued support for your company's growth.

gemini Output

Here is the comprehensive, detailed, and professional output for your Investor Update Email. This content is designed to be engaging, informative, and ready for publishing, with clear placeholders for easy customization.


Investor Update Email Content

This section provides the complete content for your investor update email, structured for clarity and impact.

1. Email Subject Line Options

Choose one of these professional and informative subject lines:

  • Option 1 (General): [Company Name] - [Monthly/Quarterly] Investor Update: [Month/Quarter] [Year]
  • Option 2 (Highlighting Growth): [Company Name] Investor Update: Strong Growth & Key Milestones in [Month/Quarter] [Year]
  • Option 3 (Concise): [Company Name] - [Month/Quarter] [Year] Update
  • Option 4 (Outcome-focused): [Company Name] - [Month/Quarter] [Year] Investor Update: Achieving [Key Outcome, e.g., 20% User Growth]

2. Email Salutation

  • Option 1: Dear Investors,
  • Option 2: Dear Valued Investors,
  • Option 3: Dear [Investor Name/Firm Name] (if sending individually or to small groups),

3. Introduction

  • "We hope this email finds you well. As we close out [Month/Quarter] [Year], we are pleased to provide you with our latest update on [Company Name]'s progress, key achievements, and strategic focus."
  • "Thank you for your continued support and belief in [Company Name]. This [monthly/quarterly] update summarizes our performance, significant milestones, and forward-looking plans for [Reporting Period]."

4. Key Highlights & Milestones

This section showcases your company's achievements and positive developments.

KPI Highlights

  • Revenue Growth: Achieved [X]% month-over-month (MoM) / quarter-over-quarter (QoQ) revenue growth, reaching $[Amount] in [Month/Quarter].
  • User Growth: Grew our active user base by [X]% to [Number] total active users, driven by [mention key initiative, e.g., successful marketing campaign / product launch].
  • Customer Acquisition: Onboarded [Number] new enterprise clients / premium subscribers, expanding our market reach in [specific industry/segment].
  • Engagement Rate: Saw a [X]% increase in average user engagement time, now at [Number] minutes/actions per day/week, indicating stronger product stickiness.
  • Customer Retention: Maintained a robust [X]% customer retention rate / churn rate of [Y]%, demonstrating strong customer satisfaction and value.
  • Key Metric for Your Business: [e.g., Conversion Rate, Gross Merchandise Value (GMV), API Calls]: Achieved [Specific Metric] of [Value], surpassing our target by [X]%.

Product/Service Milestones

  • Successful Launch: Successfully launched [Product Feature/Service Name] on [Date], which has already seen [X]% adoption and positive feedback from early users.
  • Beta Program Success: Completed our beta program for [New Product/Feature] with [Number] pilot customers, yielding critical insights and a [X]% satisfaction score.
  • Key Integrations: Established strategic integrations with [Partner Company Name(s)], broadening our ecosystem and enhancing user value.
  • Technology Advancement: Deployed significant backend infrastructure upgrades, improving system performance by [X]% and scalability for future growth.

Team & Operational Milestones

  • Strategic Hires: Welcomed [Number] key hires to our leadership team, including [Title, e.g., VP of Engineering], strengthening our capabilities in [specific area].
  • Market Expansion: Successfully entered the [Geographic Market/New Vertical] market, with initial traction exceeding expectations.
  • Partnership Development: Secured a strategic partnership with [Partner Company Name] to [describe benefit, e.g., co-develop new solutions / expand distribution channels].

5. Financial Snapshot ([Monthly/Quarterly])

A brief overview of your financial health. (For more detail, refer to the attached report.)

  • Revenue (MRR/ARR): Achieved $[Amount] MRR / $[Amount] ARR as of [Date].
  • Gross Margin: Maintained a healthy [X]% gross margin.
  • Operating Expenses: Operating expenses for the period totaled $[Amount].
  • Net Burn Rate: Our net burn for [Month/Quarter] was $[Amount].
  • Cash on Hand: We currently have $[Amount] cash on hand, providing us with [Number] months of runway.
  • Key Financial Metric (if applicable): [e.g., Customer Lifetime Value (CLTV), Customer Acquisition Cost (CAC)]: Our CLTV:CAC ratio stands at [X]:1.

6. Challenges & Learnings

Transparency about challenges demonstrates resilience and strategic thinking.

  • Challenge 1: "We encountered [specific challenge, e.g., unexpected delays in feature development / increased competition in a key market segment]. We have addressed this by [action taken, e.g., reallocating resources, adjusting our roadmap, implementing a new competitive strategy]."
  • Challenge 2: "Our initial customer acquisition cost for [specific segment] was higher than projected. We've since refined our marketing channels and messaging, and are now seeing a [X]% reduction in CAC for this segment."
  • Learning: "A key learning from [event/challenge] was the importance of [insight, e.g., diversifying our supply chain / iterating faster on user feedback]. This has led us to implement [new process/strategy]."

7. Asks & Support Needed

Clearly state how your investors can best support you.

  • Introductions: "We are currently looking to connect with potential clients in the [Specific Industry/Market] sector, particularly those focused on [specific problem solved by your product]. If you know relevant decision-makers, we would greatly appreciate an introduction."
  • Talent: "As we scale, we are actively seeking exceptional talent for key roles, especially in [Department, e.g., Senior Software Engineering, Head of Sales]. Please let us know if you have connections to strong candidates."
  • Strategic Advice: "We are exploring opportunities in [new market/product area] and would value any insights or connections you might have in this space."
  • Feedback: "We are always keen to hear your thoughts. If you have any feedback on our strategy or operations, please don't hesitate to share."

8. Looking Ahead

Briefly outline immediate future plans and strategic focus.

  • Next [Month/Quarter] Focus: "Our primary focus for the next [month/quarter] will be to [key objective, e.g., accelerate user growth through targeted campaigns, launch Product X, expand into Market Y]."
  • Strategic Priorities: "We will continue to prioritize [e.g., product innovation, operational efficiency, market penetration] to solidify our position as a leader in [your industry]."
  • Upcoming Milestones: "We are on track to achieve [upcoming milestone, e.g., secure our Series A funding, reach 1 million users, expand to 5 new cities] by [Date]."

9. Call to Action

Encourage engagement and offer a deeper dive.

  • "We welcome the opportunity to discuss these updates in more detail. Please feel free to schedule a call with us at your convenience via [Link to Calendly/Scheduling Tool]."
  • "For a more comprehensive financial and operational report, please find the attached [Monthly/Quarterly] Investor Deck."
  • "As always, we are grateful for your partnership and look forward to continuing this exciting journey with you."

10. Closing

  • Sincerely,
  • Best regards,
  • Warmly,

11. Signature

[Your Name]

[Your Title]

[Company Name]

[Company Website]

[Link to Investor Portal (Optional)]


Important Considerations:

  • Attachments: Always remember to attach your detailed investor deck or financial report, as mentioned in the email body.
  • Personalization: Where possible, personalize the salutation and consider tailored "asks" for individual investors.
  • Data Accuracy: Double-check all numbers, dates, and names for accuracy before sending.
  • Tone: Maintain a professional, confident, yet transparent tone.
  • Frequency: Be consistent with your update frequency (monthly or quarterly).
gemini Output

Final Investor Update Email Template: [Company Name] - [Monthly/Quarterly] Update [Month/Quarter, Year]

This document provides the finalized, polished template for your investor update email. It is designed to be comprehensive, professional, and actionable, covering all key areas requested. Please replace bracketed placeholders [ ] with your specific company data before sending.


Subject: [Company Name] - [Monthly/Quarterly] Investor Update - [Month/Quarter, Year]

Dear Investors,

We hope this email finds you well.

We are pleased to share our latest update for [Month/Quarter, Year], highlighting our progress, key achievements, challenges, and a brief financial overview. We appreciate your continued support and trust in [Company Name]'s vision.


1. Executive Summary & Key Highlights

This section provides a quick overview of the most critical updates and achievements from the period.

  • [Highlight 1]: Achieved a [X]% increase in [Key Metric, e.g., Monthly Recurring Revenue (MRR)] to reach $[X]M, exceeding our target by [Y]%.
  • [Highlight 2]: Successfully launched [New Product/Feature/Market] ahead of schedule, with positive initial user feedback and adoption rates.
  • [Highlight 3]: Secured a strategic partnership with [Partner Company Name], projected to [impact, e.g., expand market reach by X%].
  • [Highlight 4 - optional]: Completed key hires, strengthening our [Department, e.g., engineering/sales] team with [number] new talents.

2. Operational Update & Milestones Achieved

A detailed look at progress across different facets of the business.

  • Product Development:

* [Feature/Product A]: Launched [brief description, e.g., "our new AI-powered analytics dashboard"] on [Date], resulting in a [X]% increase in user engagement.

* [Feature/Product B]: Completed [beta testing/development] for [brief description, e.g., "mobile app redesign"], slated for public release in [Next Month/Quarter].

* Roadmap Progress: [X]% of planned Q[X] roadmap items completed, with remaining items on track.

  • Customer Growth & Engagement:

* User Acquisition: Grew our active user base by [X]% to [Number] users/customers.

* Retention Rate: Maintained/improved our [monthly/quarterly] customer retention rate at [X]%.

* Customer Feedback: NPS score increased to [X], indicating improved customer satisfaction. Conducted [Number] user interviews, insights informing [next steps].

  • Sales & Marketing:

* Revenue Growth: Achieved [X]% sequential revenue growth, driven by [e.g., new customer acquisition / upsells].

* New Deals: Closed [Number] significant deals, including [mention 1-2 key new customers/partners if appropriate and non-confidential].

* Marketing Campaigns: Successful execution of [Campaign Name] campaign, generating [Number] qualified leads and [X]% conversion rate.

  • Team & Culture:

* Team Growth: Welcomed [Number] new team members in [roles], bringing our total headcount to [Number].

* Key Hires: [Name, Title] joined as [Role], bringing [X years] of experience from [Previous Company].

* Team Initiatives: Hosted [e.g., team-building event/professional development workshop] to foster collaboration and growth.


3. Key Performance Indicators (KPIs)

A concise summary of your most critical metrics. Present current vs. previous period, and vs. target.

| KPI | Current Period ([Month/Quarter, Year]) | Previous Period ([Month/Quarter, Year]) | Target ([Month/Quarter, Year]) | Variance to Target | Comments |

| :------------------- | :------------------------------------- | :-------------------------------------- | :----------------------------- | :----------------- | :---------------------------------------------------------------------------------------------------------- |

| Revenue | $[X,XXX,XXX] | $[X,XXX,XXX] | $[X,XXX,XXX]** | [X]% | Strong growth driven by [factor]. |

| MRR / ARR | $[X,XXX,XXX] / $[X,XXX,XXX] | $[X,XXX,XXX] / $[X,XXX,XXX] | $[X,XXX,XXX] / $[X,XXX,XXX]** | [X]% | Consistent month-over-month increase. |

| Customer Count | [X,XXX] | [X,XXX] | [X,XXX] | [X]% | Exceeded acquisition targets. |

| CAC (Customer Acquisition Cost) | $[X] | $[X] | $[X] | [X]% | Improved efficiency due to [factor]. |

| LTV (Customer Lifetime Value) | $[X,XXX] | $[X,XXX] | $[X,XXX] | [X]% | Healthy LTV:CAC ratio of [X:1]. |

| Gross Margin | [X]% | [X]% | [X]% | [X]% | Stable/Improving due to [factor]. |

| Burn Rate (Net) | $[X,XXX,XXX]/month | $[X,XXX,XXX]/month | $[X,XXX,XXX]/month** | [X]% | Managed effectively, slightly below plan. |

Note: Please ensure consistency in metrics (e.g., monthly vs. quarterly) and provide relevant context for significant changes.


4. Financial Snapshot

A high-level summary of your financial health.

  • Cash on Hand: $[X,XXX,XXX] (as of [Date])
  • Runway: [X] months (based on current burn rate)
  • Revenue (Gross): $[X,XXX,XXX] for the period
  • Operating Expenses: $[X,XXX,XXX] for the period
  • Net Burn/Profit: $[X,XXX,XXX] for the period

For a more detailed financial report, please refer to the attached financial statements.


5. Challenges & Learnings

Transparency about obstacles and how you're addressing them.

  • [Challenge 1]: Faced unexpected [e.g., supply chain disruption/competitive pressure/technical hurdle] which impacted [area of business].

* Action Taken: Implemented [specific strategy, e.g., "diversified supplier base/launched new competitive feature/re-architected system"] to mitigate.

* Learning: [Key insight gained].

  • [Challenge 2]: [Brief description of another challenge, e.g., "Slower than anticipated user adoption in new market"].

* Action Taken: Adjusting [e.g., marketing strategy/product messaging] and conducting further market research.

* Learning: [Key insight gained].


6. Asks / How You Can Help

Specific, actionable requests from your investors.

  • Introductions: We are actively looking to connect with [e.g., potential strategic partners in X industry/senior talent for Y role/introductions to specific customers]. If you have relevant contacts, please let us know.
  • Feedback: We are refining our [e.g., Q3 product roadmap/go-to-market strategy]. We would appreciate your insights on [specific area].
  • Advisory: We are seeking an advisor with deep expertise in [specific domain, e.g., "enterprise SaaS sales in Europe"]. Please let us know if you know someone who might be a good fit.
  • Networking: We will be attending [Conference Name] on [Date]. Please let us know if you will also be there, we'd love to connect.

7. Looking Ahead: Next [Month/Quarter] Focus

A brief outlook on upcoming priorities.

  • Product: Launch of [Upcoming Feature/Product] and initiation of [Next Major Project].
  • Growth: Targeting [X]% increase in [Key Metric] through [Strategy, e.g., "expansion into new geo/new marketing channels"].
  • Team: Focused on hiring [Number] key roles in [Department].
  • Funding (if applicable): Preparing for our [Seed/Series A] round, aiming to kick off in [Month].

8. Conclusion

Thank you again for your continued partnership and confidence in [Company Name]. We remain committed to executing our vision and delivering strong results.

Please feel free to reach out with any questions or if you'd like to schedule a deeper dive into any of these areas.

Sincerely,

[Your Name]

[Your Title]

[Company Name]

[Your Email Address]

[Your Phone Number (Optional)]

[Company Website]


Attachment:

  • [Link to or attached] Full Financial Report ([Month/Quarter, Year])
  • [Link to or attached] Investor Deck (Optional, if updated)
investor_update_email.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);}});}