Professional Resume Builder
Run ID: 69cc3d496beabe319cec8c342026-03-31Career
PantheraHive BOS
BOS Dashboard

As part of your "Professional Resume Builder" workflow, this step focuses on crafting a compelling cover letter that complements your resume and targets your desired role effectively. A well-written cover letter is your opportunity to introduce yourself, express genuine interest, and highlight how your specific skills and experiences align with the job requirements, making a strong first impression.


Step 2 of 2: Generate Tailored Cover Letter

Overview

This output provides you with a comprehensive framework and actionable guidance to create a professional, customized cover letter. It includes a structured template, detailed explanations for each section, and best practices to ensure your cover letter stands out.


Why a Cover Letter is Essential


Professional Cover Letter Template

Use the following template as a guide. Replace the bracketed [PLACEHOLDERS] with your specific information.

text • 3,318 chars
[Your Name]
[Your Address]
[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 Address]

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

**Paragraph 1: Introduction - State Your Purpose & Enthusiasm**
Clearly state the position you are applying for and where you saw the advertisement (e.g., LinkedIn, company website). Express your enthusiastic interest in the role and the company. Briefly mention your most relevant qualification or a key reason why you are an ideal candidate.

*Example:* "I am writing to express my enthusiastic interest in the [Job Title] position at [Company Name], as advertised on [Platform where you saw the job posting]. With my [Number] years of experience in [Your Industry/Relevant Field] and a proven track record in [Key Skill/Achievement], I am confident I possess the qualifications and passion to significantly contribute to your team's success."

**Paragraph 2: Body - Connect Your Skills & Experience to the Job Requirements**
This is your chance to elaborate on 2-3 key qualifications from your resume that directly align with the job description. Use specific examples and, wherever possible, quantify your achievements. Explain *how* your skills will benefit the company. Focus on what you can *do for them*.

*Example:* "Throughout my career at [Previous Company], I successfully [Action Verb] [Specific Project/Responsibility], resulting in a [Quantifiable Result, e.g., '15% increase in efficiency']. My expertise in [Specific Skill 1, e.g., 'project management software'] and [Specific Skill 2, e.g., 'cross-functional team leadership'] directly addresses the requirements outlined for the [Job Title] role, particularly in [Mention a specific requirement from the job description]."

**Paragraph 3: Body - Demonstrate Cultural Fit & Problem-Solving Ability (Optional but Recommended)**
Further expand on how your values, work style, or unique experiences align with the company's culture or mission. You can also highlight a specific achievement that demonstrates problem-solving, innovation, or leadership relevant to the role. Show you've researched the company.

*Example:* "I am particularly drawn to [Company Name]'s commitment to [Company Value or Mission, e.g., 'innovation in sustainable technology'] and its reputation for [Positive Company Attribute, e.g., 'fostering a collaborative work environment']. My own approach to [Relevant Task/Challenge] aligns perfectly with this ethos, as demonstrated by [Brief example of alignment or relevant achievement]."

**Paragraph 4: Conclusion - Reiterate Interest & Call to Action**
Reiterate your strong interest in the position and the company. Express your eagerness for an interview to discuss how your qualifications can benefit their team. Thank them for their time and consideration.

*Example:* "Thank you for considering my application. My resume, attached for your review, provides further details on my background and accomplishments. I am eager to discuss how my skills and experience can contribute to [Company Name]'s goals and would welcome the opportunity for an interview at your earliest convenience."

Sincerely,

[Your Typed Full Name]
Sandboxed live preview

This output details the comprehensive strategy and information required to generate a professional, tailored resume for your target job.


Step 1 of 2: Generate Tailored Professional Resume

Workflow Step: resume → generate_resume

Description: Create a tailored resume for your target job.

Welcome to the first step of your Professional Resume Builder workflow! Our goal in this phase is to construct a highly effective, customized resume that strategically highlights your qualifications and achievements, directly aligning them with the requirements of your target job. A tailored resume significantly increases your chances of passing Applicant Tracking Systems (ATS) and capturing the attention of hiring managers.


1. Core Principles for Resume Generation

Our approach to generating your resume is built upon the following critical principles:

  • Targeted Customization: Every element of your resume will be crafted to directly address the specific requirements and keywords found in your target job description. This is crucial for both ATS optimization and human review.
  • Achievement-Oriented Content: We will focus on quantifiable achievements and impact rather than just listing responsibilities. Numbers, percentages, and specific outcomes demonstrate your value.
  • ATS Optimization: The resume will be structured and formatted to be easily parsed by Applicant Tracking Systems, ensuring your application doesn't get overlooked due to formatting issues.
  • Clarity and Conciseness: Professional language, clear headings, and bullet points will ensure your resume is easy to read and understand, allowing recruiters to quickly grasp your qualifications.
  • Professional Aesthetics: A clean, modern, and professional design will be applied to enhance readability and make a strong first impression.

2. Essential Information Required for Resume Generation

To generate a truly effective and tailored resume, we require specific, detailed information from you. The more comprehensive your input, the better we can customize your resume.

Please provide the following:

A. Target Job Description(s) (Crucial)

  • Full Job Description Text: Copy and paste the complete job description(s) for the specific role(s) you are targeting. This is the single most important piece of information as it guides all tailoring efforts.
  • Company Name(s) & Industry: Knowing the company and industry helps us align the tone and specific terminology.

B. Your Professional History

  • Work Experience Details: For each position held (starting with your most recent):

* Job Title:

* Company Name & Location:

* Employment Dates (Month/Year - Month/Year):

* Detailed Responsibilities: List your primary duties.

Key Achievements & Contributions: This is critical. Describe specific accomplishments using action verbs and, most importantly, quantify them whenever possible* (e.g., "Increased sales by 15%," "Managed a budget of $500K," "Reduced project completion time by 20%"). Think about problems you solved, initiatives you led, and positive outcomes you delivered.

  • Volunteer Experience / Internships: If relevant to your target job, provide similar details as above.

C. Your Educational Background

  • Degree(s) & Major(s):
  • Institution Name & Location:
  • Graduation Date (Month/Year) or Expected Graduation Date:
  • GPA (Optional): Include if 3.5 or higher, especially for recent graduates.
  • Relevant Coursework/Projects (Optional): If recent graduate or career changer, list specific courses or academic projects relevant to the target job.

D. Your Skills

  • Technical Skills: Software proficiency (e.g., Microsoft Office Suite, Adobe Creative Suite, Salesforce), programming languages (e.g., Python, Java), database management, specific tools, platforms, etc.
  • Soft Skills: Communication, leadership, problem-solving, teamwork, adaptability, critical thinking, project management, etc.
  • Languages: List any languages you speak and your proficiency level.

E. Your Contact Information

  • Full Name:
  • Professional Phone Number:
  • Professional Email Address:
  • LinkedIn Profile URL: (Ensure it's up-to-date and professional)
  • Portfolio/Personal Website URL (Optional): If applicable to your field (e.g., design, writing, development).

F. Optional Sections / Additional Information

  • Certifications & Licenses: (e.g., PMP, CPA, AWS Certified)
  • Awards & Honors:
  • Publications / Presentations:
  • Professional Affiliations:
  • Projects: Personal or professional projects not tied to a specific job, especially if they showcase relevant skills.

3. Resume Section Strategy and Content Focus

Once we receive your information, we will strategically populate and optimize the following standard resume sections:

A. Contact Information

  • Focus: Clear, concise, and professional presentation of your essential contact details.

B. Professional Summary / Objective (Tailored to Job)

  • Focus: A powerful 3-4 sentence paragraph (for experienced professionals) or a brief objective (for entry-level/career changers) that immediately highlights your most relevant qualifications, skills, and career aspirations as they align with the target job. This section will be heavily keyword-optimized.

C. Work Experience

  • Focus: Reverse chronological order. Each entry will feature compelling bullet points (3-5 per role) that combine responsibilities with quantified achievements. Action verbs will be used to start each bullet point, and content will be prioritized based on relevance to the target job description.

D. Education

  • Focus: Clear presentation of your academic credentials. Relevant coursework, honors, or projects will be included if they strengthen your candidacy for the target role.

E. Skills

  • Focus: Categorized lists (e.g., Technical Skills, Soft Skills, Languages) to ensure readability and ATS compatibility. This section will incorporate keywords from the job description to maximize matching.

F. Optional Sections (As Applicable)

  • Focus: We will strategically include sections like "Certifications," "Projects," "Awards," or "Volunteer Experience" if they add significant value and directly support your candidacy for the target role.

4. Next Steps & Deliverable

To proceed with generating your tailored professional resume, please provide all the requested information, particularly the target job description(s) and your detailed achievements for each past role.

Once we receive your input, we will:

  1. Analyze the Target Job Description(s): Identify key responsibilities, required skills, and keywords.
  2. Extract and Prioritize Your Information: Select and rephrase your experiences and skills to best match the job requirements.
  3. Draft Your Tailored Resume: Create the initial version of your resume, optimized for ATS and human readability.

Your initial tailored resume draft will be delivered as the output for this step. We will then move to Step 2: Resume Review & Refinement, where you'll have the opportunity to provide feedback and request revisions.

Please submit the requested details to initiate the resume generation process.


Detailed Section-by-Section Guidance

1. Your Contact Information

  • Placement: Top left or center.
  • Content: Full name, address, phone number, professional email, and optionally, a link to your LinkedIn profile. Ensure consistency with your resume.

2. Date

  • Placement: Below your contact info.
  • Content: The date you are sending the letter.

3. Recipient's Contact Information

  • Placement: Below the date.
  • Content:

Hiring Manager Name & Title: Always try to find the hiring manager's name.* Use LinkedIn, the company website, or make a polite call to the company. Addressing a specific person shows initiative.

* Company Name & Address: Full name and physical address of the company.

  • If Name is Unknown: Use "Hiring Team," "Hiring Manager," or "Recruiting Department." Avoid "To Whom It May Concern."

4. Salutation

  • Content: "Dear Mr./Ms./Mx. [Last Name]" is standard. If you can't find a name, "Dear Hiring Team," or "Dear [Company Name] Recruiting Team," are good alternatives.

5. Paragraph 1: Introduction

  • Purpose: Hook the reader immediately.
  • Key Elements:

* Position Applied For: Be specific.

* Source: Where you found the job (e.g., company website, LinkedIn, referral).

* Enthusiasm: Convey genuine interest.

* Brief Value Proposition: A concise statement about your top relevant qualification.

6. Paragraph 2 & 3: Body Paragraphs

  • Purpose: Demonstrate your fit by connecting your skills and experiences directly to the job description.
  • Key Elements:

* Tailor, Tailor, Tailor: This is critical. Read the job description carefully and identify 3-5 key skills or requirements. Choose 2-3 to highlight in your letter.

* Quantify Achievements: Use numbers, percentages, and metrics to show the impact of your work (e.g., "managed a budget of $X," "increased sales by Y%," "reduced errors by Z").

* Action Verbs: Start sentences with strong action verbs (e.g., developed, implemented, managed, led, analyzed, optimized).

* Show, Don't Tell: Instead of saying "I am a good leader," describe a situation where you demonstrated leadership.

* Company Research: Weave in details about the company's mission, values, recent projects, or culture to show you've done your homework and are a cultural fit.

7. Paragraph 4: Conclusion

  • Purpose: Summarize your interest and prompt the next step.
  • Key Elements:

* Reiterate Interest: Briefly restate your enthusiasm for the role and the company.

* Call to Action: Express your desire for an interview and mention your attached resume.

* Gratitude: Thank the reader for their time and consideration.

8. Closing

  • Content: "Sincerely," "Regards," or "Best regards," are professional options.

9. Signature

  • Content: Your typed full name. If sending a physical letter, leave space for a handwritten signature above your typed name.

Best Practices & Tips for Success

  • Customize Every Letter: Never send a generic cover letter. Each letter must be tailored to the specific job and company.
  • Keywords: Incorporate keywords from the job description naturally into your letter. This helps with Applicant Tracking Systems (ATS) and shows alignment.
  • Conciseness: Aim for one page, three to four paragraphs. Hiring managers are busy; get straight to the point.
  • Professional Tone: Maintain a respectful, confident, and enthusiastic tone throughout.
  • Proofread Meticulously: Typos and grammatical errors can be deal-breakers. Use spell-checkers, grammar tools, and ask someone else to review it.
  • Formatting: Use a clean, professional font (e.g., Arial, Calibri, Times New Roman) between 10-12 points. Ensure consistent margins and spacing.
  • PDF Format: Always send your cover letter as a PDF unless otherwise specified, to preserve formatting.
  • Match Resume Header: Consider using the same header design for your cover letter as your resume for a polished, consistent look.

Next Steps

  1. Review the Job Description: Carefully analyze the job posting for key requirements, skills, and company values.
  2. Gather Your Information: Collect specific examples, achievements, and quantifiable results from your career that align with the job.
  3. Draft Your Cover Letter: Fill in the template above, making sure to customize each section.
  4. Proofread & Refine: Edit for clarity, conciseness, grammar, and spelling.
  5. Save as PDF: Convert your final cover letter to a PDF document with a professional filename (e.g., "YourName_CoverLetter_CompanyName_JobTitle.pdf").

By following this detailed guidance, you will be well-equipped to create a compelling cover letter that significantly enhances your job 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);}});}