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

Step 2 of 2: Generate Professional Cover Letter

This step focuses on creating a compelling and tailored cover letter to accompany your professional resume. A well-crafted cover letter is crucial for introducing yourself, highlighting your most relevant qualifications, and demonstrating your genuine interest in the specific role and company.


Understanding the Purpose of a Cover Letter

A cover letter serves as your personal introduction to a hiring manager. It allows you to:


Essential Components of a Professional Cover Letter

A standard professional cover letter typically includes the following sections:

  1. Your Contact Information: Your name, phone number, email, and LinkedIn profile.
  2. Date: The date you are submitting the application.
  3. Hiring Manager/Company Contact Information: The name and title of the hiring manager (if known), company name, and address.
  4. Salutation: A formal greeting addressed to the specific hiring manager or hiring team.
  5. Introduction (Paragraph 1): State the position you're applying for, where you saw the advertisement, and a brief, compelling reason why you are interested and qualified.
  6. Body Paragraphs (Paragraphs 2-3):

* Paragraph 2 (Why You?): Highlight 2-3 key skills, experiences, or achievements from your resume that directly align with the job description. Provide brief examples or quantifiable results.

Paragraph 3 (Why Them?): Demonstrate your research into the company. Explain why you are specifically interested in this* company and how your values/goals align with theirs. Mention specific projects, achievements, or aspects of their culture that appeal to you.

  1. Conclusion (Paragraph 4): Reiterate your enthusiasm for the role, express confidence in your ability to contribute, and include a call to action (e.g., requesting an interview). Thank them for their time and consideration.
  2. Professional Closing: A formal closing remark.
  3. Signature: Your typed name.

Customizable Cover Letter Template

Below is a comprehensive template designed for you to personalize. Please fill in the bracketed [PLACEHOLDER] sections with your specific information for the target job.

text • 2,761 chars
[Your Full Name]
[Your Address] | [Your Phone Number] | [Your Email Address] | [Your LinkedIn Profile URL (Optional)]

[Date]

[Hiring Manager Name (if known, otherwise use title)]
[Hiring Manager Title]
[Company Name]
[Company Address]

Dear [Mr./Ms./Mx. Last Name of Hiring Manager, or "Hiring Team" / "Recruiting Team" if name is unknown],

I am writing to express my enthusiastic interest in the **[Target Job Title]** position at **[Company Name]**, as advertised on **[Platform where you saw the advertisement, e.g., LinkedIn, Company Website, Indeed]**. With my **[Number] years of experience in/strong background in]** and a proven track record of **[mention 1-2 key achievements or relevant skills]**, I am confident that my skills and passion align perfectly with the requirements of this role and your company's mission.

During my tenure at **[Previous Company Name]**, I was responsible for **[briefly mention a key responsibility]**, where I successfully **[describe a specific achievement relevant to the target job, quantifying if possible, e.g., "streamlined processes, leading to a 15% increase in efficiency"]**. My expertise in **[specific skill 1, e.g., "project management" or "data analysis"]** and **[specific skill 2, e.g., "cross-functional team leadership" or "customer relationship management"]** has equipped me with the ability to **[connect these skills to a benefit for the target company, e.g., "drive successful outcomes and foster collaborative environments"]. I am particularly adept at [mention another relevant skill or quality, e.g., problem-solving, innovation, client engagement] and am eager to apply these capabilities to contribute to [Company Name]'s continued success.

I am particularly drawn to [Company Name]'s commitment to **[mention a specific company value, project, or achievement, e.g., "innovation in sustainable technology" or "its community outreach initiatives"]**. Your recent work on **[mention a specific company project or product, if applicable]** truly resonates with my professional goals and my belief in **[relate back to your values or goals]**. I am impressed by **[Company Name]'s reputation for/approach to] [mention another specific positive aspect, e.g., "fostering a dynamic work culture" or "its market leadership in X sector"]**, and I am excited by the prospect of contributing my skills to such a forward-thinking and impactful organization.

Thank you for considering my application. My attached resume provides further detail on my qualifications and accomplishments. I am eager to learn more about this opportunity and discuss how my background and enthusiasm can benefit [Company Name]. I am available for an interview at your earliest convenience.

Sincerely,
[Your Full Name]
Sandboxed live preview

As part of your "Professional Resume Builder" workflow, we are now executing Step 1 of 2: resume → generate_resume.

Step 1 of 2: Tailored Professional Resume Draft Generation

This step focuses on generating a comprehensive, professionally formatted, and highly tailored initial draft of your resume. Our intelligent system will process your provided information and the target job description to create a resume designed to stand out to both Applicant Tracking Systems (ATS) and hiring managers.

1. Objective of This Step

The primary objective of generate_resume is to produce a robust, ATS-friendly, and strategically tailored resume draft that serves as a strong foundation for your job application. This draft will highlight your most relevant skills, experiences, and achievements in alignment with your target role.

2. Core Components of Your Generated Resume Draft

The generated resume draft will include the following standard professional sections, intelligently populated and optimized:

  • Contact Information:

* Your full name, professional phone number, email address, and LinkedIn profile URL (if provided).

* Ensures easy access for recruiters.

  • Professional Summary / Objective:

* A concise, impactful 3-5 sentence paragraph strategically tailored to the target job.

* Highlights your most relevant skills, experience, and career goals, directly addressing the requirements of the role.

* Optimized with key industry and role-specific keywords.

  • Work Experience:

* Detailed entries for each relevant position, including company name, location, job title, and dates of employment.

Each role will feature 3-5 achievement-oriented bullet points, rephrased and prioritized based on the target job description*.

* Emphasis on quantifiable results, impact, and strong action verbs (e.g., "Led," "Developed," "Optimized," "Increased").

* Incorporation of relevant keywords from the target job description.

  • Education:

* Your academic qualifications, including degrees, majors, institutions, and graduation dates.

* Relevant academic achievements or honors will be included.

  • Skills:

* A dedicated section categorized for clarity (e.g., Technical Skills, Soft Skills, Languages).

* Populated extensively with skills explicitly mentioned in the target job description and those derived from your professional background.

* Optimized for ATS scanning.

  • Optional Sections (as applicable and relevant):

* Projects: Key personal or professional projects showcasing relevant skills.

* Certifications: Industry-specific certifications and licenses.

* Awards & Recognition: Notable professional achievements.

* Volunteer Experience: Demonstrating leadership, teamwork, or specific skills.

3. Intelligent Tailoring and Optimization Mechanisms

Our builder employs advanced strategies to ensure your resume is highly effective:

  • Keyword Integration: We meticulously analyze the target job description to identify critical keywords and strategically weave them throughout your professional summary, work experience, and skills sections. This maximizes your resume's visibility to Applicant Tracking Systems (ATS).
  • Achievement-Oriented Language: We transform duties into achievements by focusing on what you accomplished and the impact you made, rather than just listing responsibilities. Strong action verbs are used consistently.
  • Quantifiable Results: Where possible, we emphasize the inclusion of numbers, percentages, and data points to provide concrete evidence of your contributions and success (e.g., "Increased sales by 15%," "Managed a budget of $500K," "Reduced processing time by 20%").
  • Concise & Clear Formatting: The resume will adhere to modern, professional formatting standards, ensuring readability for both human recruiters and ATS. This includes appropriate font choices, spacing, and section headings.
  • Industry-Specific Terminology: Language and phrasing will be adjusted to align with the conventions and expectations of your target industry.

4. What to Expect from This Draft

This output is a detailed, professional initial draft designed to be highly competitive for your target role. It will serve as a robust starting point, capturing the essence of your professional profile in an optimized format. While comprehensive, it is intended for your review and further refinement in the next step.

5. Input Requirements for Optimal Generation

To produce the most accurate and highly tailored resume, the system requires the following information:

  • Your Detailed Professional Background:

* Your current resume or a comprehensive list of your work history (job titles, companies, dates, responsibilities, and key achievements).

* Your educational background, certifications, and relevant skills.

  • The Specific Target Job Description:

* The complete job posting or a detailed description of the role you are applying for. This is crucial for keyword optimization and tailoring.

6. Next Steps: Review and Refinement (Step 2 of 2)

Once this initial draft is generated, you will proceed to Step 2 of 2: resume → refine_resume. In this subsequent step, you will have the opportunity to:

  • Review the generated draft in detail.
  • Provide feedback, request specific changes, or add further details.
  • Collaborate with the system to fine-tune the content, phrasing, and formatting until you are fully satisfied with the final resume.

To proceed with the actual generation of your tailored resume draft, please provide:

  1. Your current resume or detailed professional background.
  2. The specific job description for the role you are targeting.

Once this information is provided, we will generate your comprehensive resume draft and present it for your review in Step 2.


Best Practices for Your Cover Letter

  • Tailor Every Letter: Never send a generic cover letter. Each letter must be customized for the specific job and company.
  • Research the Company: Understand their mission, values, recent news, and culture. Use this information to explain why you want to work there.
  • Address it to a Person: Whenever possible, find out the name of the hiring manager. This shows initiative and personalizes your application.
  • Highlight Relevant Keywords: Incorporate keywords from the job description into your letter to demonstrate alignment and help pass Applicant Tracking Systems (ATS).
  • Show, Don't Just Tell: Instead of saying "I am a hard worker," provide an example of a time you demonstrated hard work and achieved results.
  • Keep it Concise: Aim for one page, typically 3-4 paragraphs. Hiring managers are busy.
  • Maintain Professional Tone: Be confident, professional, and enthusiastic.
  • Proofread Meticulously: Errors in grammar or spelling can immediately disqualify an application. Read it aloud, use grammar checkers, and ask someone else to review it.
  • Match Formatting: Ensure your cover letter's font and header style match your resume for a cohesive professional package.

Next Steps

To generate a specific, highly personalized cover letter, please provide the following details:

  1. Target Job Title:
  2. Company Name:
  3. Hiring Manager Name (if known):
  4. Where you saw the job advertisement:
  5. Key skills/experiences from your resume you want to emphasize (2-3):
  6. Specific reasons you are interested in this company (e.g., their mission, values, products, recent achievements):
  7. Any specific achievements or quantifiable results you want to highlight:

Once you provide this information, I will generate a detailed and professional cover letter for you.

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);}});}