Professional Resume Builder
Run ID: 69c93b42fee1f7eb4a80f9592026-03-29Career
PantheraHive BOS
BOS Dashboard

Professional Cover Letter Generation

This deliverable provides a comprehensive, tailored cover letter template designed to complement your previously generated resume and specifically target your desired job. A well-crafted cover letter introduces you, highlights your most relevant qualifications, and expresses your enthusiasm for the specific role and company, making a strong first impression.


Understanding Your Tailored Cover Letter

A truly effective cover letter is never generic. It acts as a concise narrative that connects your unique skills and experiences (as detailed in your resume) directly to the requirements and values of the specific job and company you're applying to.

Key Principles for an Impactful Cover Letter:


Your Tailored Cover Letter Template

Below is a robust template with specific placeholders and guidance. Please replace all bracketed [ ] text with your personalized information.

text • 3,180 chars
[Your Name]
[Your Street Address]
[Your City, State, Zip Code]
[Your Phone Number]
[Your Email Address]
[Your LinkedIn Profile URL (Optional)]

[Date]

[Hiring Manager Name (if known), or "Hiring Team"]
[Hiring Manager Title (if known)]
[Company Name]
[Company Street Address]
[Company City, State, Zip Code]

Dear [Mr./Ms./Mx. Last Name of Hiring Manager, or "Hiring Team" / "Talent Acquisition Team"],

**Paragraph 1: Introduction & Hook**
I am writing to express my enthusiastic interest in the **[Specific Job Title]** position at **[Company Name]**, as advertised on **[Platform where you saw the job posting, e.g., LinkedIn, Company Website, Indeed]**. With my **[Number] years/months** of experience in **[Your Primary Industry/Field]** and a proven track record in **[1-2 key skills or areas directly relevant to the job]**, I am confident that my qualifications align perfectly with the requirements of this role and the innovative spirit of [Company Name]. My attached resume provides further detail on my professional background.

**Paragraph 2: Highlighting Key Skills & Achievements (Connect to Job Description)**
During my tenure at **[Previous Company Name]**, I was responsible for **[briefly describe a key responsibility relevant to the target job]**. One notable achievement involved **[Describe a specific achievement using action verbs and, if possible, quantifiable results]**, which resulted in **[positive outcome, e.g., "a 15% increase in efficiency," "successful launch of X project ahead of schedule," "saving $Y annually"]**. This experience directly demonstrates my proficiency in **[Specific Skill 1 from job description]** and **[Specific Skill 2 from job description]**. Furthermore, my expertise in **[Another relevant skill or technology]** and my ability to **[Another relevant soft skill, e.g., "collaborate effectively with cross-functional teams," "solve complex problems"]** would enable me to contribute significantly to your team's objectives in **[mention a specific area or project of the company if known]**.

**Paragraph 3: Demonstrating Company Fit & Enthusiasm**
I am particularly drawn to **[Company Name]**'s commitment to **[mention a specific company value, mission, project, or recent achievement that resonates with you, e.g., "sustainable innovation," "customer-centric approach," "their work on Project X"]**. My own professional philosophy aligns with **[Company Name]'s [specific value or mission]**, and I am eager to contribute my skills to an organization that values **[reiterate a company value]**. The opportunity to **[mention a specific aspect of the job that excites you, e.g., "lead new initiatives," "work with cutting-edge technology," "impact a specific customer segment"]** is especially appealing.

**Paragraph 4: Call to Action & Closing**
Thank you for your time and consideration. I am very enthusiastic about the possibility of joining **[Company Name]** and am confident that my background and passion make me an excellent candidate for this role. I have attached my resume for your review and welcome the opportunity to discuss my qualifications further in an interview.

Sincerely,

[Your Typed Name]
Sandboxed live preview

Step 1 of 2: Generate Tailored Resume - Information Gathering

Welcome to the first step of building your professional resume! Our goal in this phase is to collect all the necessary information to craft a compelling, tailored resume that highlights your strengths and aligns perfectly with your target job.

To ensure your resume stands out and passes Applicant Tracking Systems (ATS), we need comprehensive details about your professional background, skills, and career aspirations. Please provide the following information as accurately and thoroughly as possible.


1. Your Personal & Contact Information

This section ensures recruiters can easily reach you and connect with your professional online presence.

  • Full Name: (e.g., Jane Doe)
  • Phone Number: (e.g., +1 (555) 123-4567)
  • Email Address: (e.g., jane.doe@email.com)
  • LinkedIn Profile URL: (Highly recommended, e.g., www.linkedin.com/in/janedoe)
  • Portfolio/Personal Website URL: (If applicable, e.g., www.janedoedesigns.com)
  • City, State: (Optional, but can be beneficial for local job applications, e.g., San Francisco, CA)

2. Target Job & Industry Details (Crucial for Tailoring)

This is the most critical section for tailoring your resume. Understanding your target allows us to optimize keywords, emphasize relevant experience, and structure the content effectively for both human recruiters and ATS.

  • Specific Job Title(s) you are applying for: (e.g., "Senior Product Manager", "Marketing Coordinator - Digital Strategy", "Full-Stack Software Engineer")

Why this is important:* This helps us identify industry-specific keywords and common responsibilities for the role.

  • Target Industry: (e.g., Technology, Healthcare, Finance, Education, Non-profit, Retail)

Why this is important:* Different industries have different expectations for resume formatting and content emphasis.

  • Key Skills/Keywords from Desired Job Descriptions: (If you have specific job postings in mind, list any recurring skills, tools, or qualifications mentioned. Provide 5-10 keywords if possible.)

Why this is important:* This directly informs ATS optimization, ensuring your resume ranks higher in initial screenings.


3. Professional Summary or Objective

A concise, impactful opening statement is vital. Choose one based on your career stage:

  • Professional Summary (for experienced professionals): A 2-4 sentence overview of your career, key achievements, and what you bring to a role.
  • Career Objective (for entry-level or career changers): A 1-2 sentence statement outlining your career goals and what you aim to achieve in your next role, emphasizing transferable skills.
  • Please provide: A draft of your preferred summary or objective, or key bullet points you'd like us to synthesize.

4. Work Experience

For each relevant position (starting with your most recent), please provide the following. Focus on quantifiable achievements where possible.

  • Job Title: (e.g., Marketing Manager)
  • Company Name: (e.g., Innovate Solutions Inc.)
  • City, State: (e.g., New York, NY)
  • Start Date - End Date: (Month/Year - Month/Year, e.g., Aug 2018 - Present)
  • 3-5 Action-Oriented Bullet Points: Describe your responsibilities and, most importantly, your achievements. Use strong action verbs and quantify results whenever possible.

Example 1 (Responsibility-focused):* "Managed social media accounts."

Example 2 (Achievement-focused & Quantified):* "Grew social media engagement by 40% over 6 months, leading to a 15% increase in website traffic."

Example 3:* "Led a team of 5 junior analysts, improving project completion efficiency by 20% through new agile methodologies."

Example 4:* "Developed and implemented a new client onboarding process, reducing setup time by 30% and improving client satisfaction scores."


5. Education

For each degree, certification, or significant training program, please provide:

  • Degree/Certification Name: (e.g., Master of Business Administration, B.S. Computer Science)
  • Major/Field of Study: (e.g., Marketing, Data Science)
  • University/Institution Name: (e.g., State University of New York)
  • City, State: (e.g., Albany, NY)
  • Graduation Date: (Month/Year, or "Expected Month/Year")
  • GPA: (Optional, if 3.5 or higher)
  • Relevant Coursework, Honors, Awards: (Optional, e.g., Dean's List, Cum Laude, Thesis Title)

6. Skills

Categorize your skills for clarity. This helps demonstrate your capabilities at a glance.

  • Technical Skills: (e.g., Programming Languages: Python, Java, C++; Software: Adobe Creative Suite, Salesforce, SAP; Tools: Jira, Trello; Cloud Platforms: AWS, Azure; Data Analysis: SQL, Tableau)
  • Soft Skills: (e.g., Leadership, Communication, Problem-Solving, Teamwork, Project Management, Adaptability, Critical Thinking)
  • Languages: (e.g., English (Native), Spanish (Fluent), French (Intermediate))

7. Projects, Publications, or Portfolios (Optional but Recommended)

If you have significant projects, research, publications, or an online portfolio that showcases your work, please provide details. This is especially valuable for creative, technical, or research-heavy roles.

  • Project Name/Title: (e.g., "E-commerce Recommendation System")
  • Brief Description: (1-2 sentences outlining your role and the project's impact)
  • Link: (If applicable, e.g., GitHub repo, portfolio link)

8. Certifications & Licenses (Optional)

List any professional certifications or licenses that are relevant to your target roles.

  • Name of Certification/License: (e.g., PMP, AWS Certified Solutions Architect, CPA)
  • Issuing Body: (e.g., Project Management Institute, Amazon Web Services)
  • Date Obtained: (Month/Year)

9. Resume Preferences (Optional)

Do you have any specific preferences for the resume's style or emphasis?

  • Resume Style Preference: (e.g., Modern, Traditional, Minimalist, Creative)
  • Sections to Emphasize: (e.g., "I want my skills to be very prominent," or "Focus heavily on my project work.")
  • Any additional notes or specific requests:

What Happens Next?

Once you provide all the above information, our system will process it to:

  1. Select an optimal template: Based on your target industry and experience level.
  2. Tailor content for ATS: Integrate keywords and phrases relevant to your target job.
  3. Craft compelling bullet points: Enhance your experience section with strong action verbs and quantifiable achievements.
  4. Format for readability: Ensure a clean, professional layout that is easy for recruiters to scan.

In Step 2, you will receive your professionally generated, tailored resume in a standard format (e.g., PDF) ready for review and application!

Please submit the requested information to proceed to the next step.


Step-by-Step Customization Guide

Follow these instructions to personalize your cover letter effectively:

  1. Gather Information:

* Your Resume: Have your generated resume handy to pull out specific achievements, dates, and company names.

* Target Job Description: This is your most critical resource. Read it carefully, highlighting keywords, required skills, responsibilities, and desired qualifications.

* Company Research: Visit the company's website (About Us, Mission, Values, News sections), LinkedIn page, and recent press releases. Identify what makes them unique and what they value.

  1. Fill in Contact Information:

* Replace all bracketed [Your Name], [Your Address], [Your Phone Number], [Your Email Address], [Your LinkedIn Profile URL] with your personal details.

* Update [Date] to the current date.

* Recipient Information: Try to find the hiring manager's name through LinkedIn, the company website, or by calling the company's main line. If unavailable, use "Hiring Team" or "Talent Acquisition Team" for professionalism. Fill in [Hiring Manager Name], [Hiring Manager Title], [Company Name], and their address.

  1. Paragraph 1: Introduction & Hook

[Specific Job Title]: Use the exact* job title from the posting.

* [Company Name]: Ensure correct spelling.

* [Platform where you saw the job posting]: Be specific (e.g., "LinkedIn," "the company's career page," "Indeed.com").

* [Number] years/months: State your relevant experience length.

* [Your Primary Industry/Field]: E.g., "software development," "digital marketing," "financial analysis."

* [1-2 key skills or areas directly relevant to the job]: Pick the most prominent requirements from the job description.

  1. Paragraph 2: Highlighting Key Skills & Achievements

* This is where you connect your resume to the job description.

* [Previous Company Name]: Mention a relevant past employer.

* [briefly describe a key responsibility relevant to the target job]: Choose a responsibility that matches one listed in the job description.

[Describe a specific achievement using action verbs and, if possible, quantifiable results]: This is crucial. Use the STAR method (Situation, Task, Action, Result) mentally to structure your achievement. Example: "Spearheaded the redesign of the customer onboarding process, reducing churn by 10% and improving customer satisfaction scores by 18% within six months."*

* [Specific Skill 1 from job description] and [Specific Skill 2 from job description]: Directly reference skills mentioned in the job posting that your achievement demonstrates.

* [Another relevant skill or technology] and [Another relevant soft skill]: Add more keywords from the job description.

* [mention a specific area or project of the company if known]: If you know about a specific project or department you'd contribute to, mention it.

  1. Paragraph 3: Demonstrating Company Fit & Enthusiasm

* [Company Name]: Reiterate the company name.

[mention a specific company value, mission, project, or recent achievement that resonates with you]: This requires research. Show you've done your homework and genuinely connect with their work. Examples: "their innovative approach to AI-driven solutions," "their commitment to community engagement," "their recent expansion into new markets."*

* [specific value or mission]: Reinforce your alignment.

* [reiterate a company value]: E.g., "collaboration," "impact," "excellence."

* [mention a specific aspect of the job that excites you]: E.g., "leading a new product line," "developing scalable cloud infrastructure," "designing user-centric interfaces."

  1. Paragraph 4: Call to Action & Closing

* This paragraph is largely standard, but ensure [Company Name] is correct.

* [Your Typed Name]: Your full name.

  1. Review and Refine:

* Read Aloud: This helps catch awkward phrasing and grammatical errors.

* Check for Keywords: Ensure you've incorporated relevant keywords from the job description naturally.

* Conciseness: Is it one page? Can any sentences be shortened or made more impactful?

* Proofread: Check for typos, spelling mistakes, and grammatical errors multiple times. Consider using a tool like Grammarly.

* Ask for Feedback: Have a trusted friend or mentor review it.


Next Steps

  1. Customize Your Letter: Use the guide above to populate the template with your specific information for the target job.
  2. Save as PDF: Always save your cover letter as a PDF file to preserve formatting. Name it professionally (e.g., "YourName_CoverLetter_JobTitle_CompanyName.pdf").
  3. Submit with Resume: Attach your customized cover letter along with your tailored resume when applying for the position.

By following these detailed instructions, you will present a professional, compelling, and highly targeted cover letter that significantly enhances your application.

professional_resume_builder.txt
Download source file
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);}});}