Hiring Pipeline Builder
Run ID: 69caf72526e01bf7c6786da62026-03-30HR
PantheraHive BOS
BOS Dashboard

Finalized Design Assets for Hiring Pipeline Builder

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for each core asset within your Hiring Pipeline Builder. The aim is to create a cohesive, professional, and highly actionable set of tools that elevate your recruitment process.


1. Overall Brand & Design Principles

Before diving into specific assets, a consistent visual language will be applied across all deliverables to ensure professionalism and brand cohesion.

1.1 Recommended Color Palette

This palette is chosen for its professional appeal, readability, and ability to create visual hierarchy.

1.2 Recommended Typography

Using a maximum of two font families ensures consistency and readability.

1.3 Iconography & Visual Elements


2. Job Description Template

2.1 Detailed Design Specifications

* Company Logo: Top-left or centered, prominently displayed.

* Job Title: Large, bold, Montserrat font. Centered or left-aligned.

* Role Snapshot: Below job title, smaller text for Department | Location | Employment Type (Full-time/Part-time) | Reporting To: [Manager Title].

* "About [Company Name]": A concise, engaging paragraph introducing the company culture and mission.

* "The Opportunity" / "About the Role": A compelling summary of the role's purpose and impact.

* "What You'll Do" / "Responsibilities": Bulleted list using Open Sans, clearly outlining primary duties. Use action verbs.

* "What You'll Bring" / "Required Qualifications": Bulleted list of essential skills, experience, and educational background. Clear, specific criteria.

* "Bonus Points" / "Preferred Qualifications": Optional section for desirable but not mandatory skills.

* "Why Join Us" / "Our Benefits & Perks": Bulleted list or short paragraphs highlighting company culture, benefits (health, PTO, retirement), career growth opportunities, and unique perks.

* Call to Action: Prominent button or link: "Apply Now" with clear instructions.

* Equal Opportunity Statement: Standard EOE/Diversity statement.

* Company Website/Social Media Links: Small icons or text links.

2.2 Wireframe Description

text • 927 chars
    [COMPANY LOGO]

    [JOB TITLE]
    [Department] | [Location] | [Employment Type] | Reporting To: [Manager Title]
    ---------------------------------------------------------------------

    ## About [Company Name]
    [Engaging paragraph about the company...]

    ## The Opportunity
    [Summary of the role's purpose and impact...]

    ## What You'll Do
    • [Responsibility 1]
    • [Responsibility 2]
    • [Responsibility 3]

    ## What You'll Bring
    • [Required Skill 1]
    • [Required Experience 2]
    • [Required Qualification 3]

    ## Bonus Points (Optional)
    • [Preferred Skill 1]
    • [Preferred Experience 2]

    ## Why Join Us
    • [Benefit 1]
    • [Culture point 2]
    • [Growth opportunity 3]

    ---------------------------------------------------------------------
    [APPLY NOW BUTTON/LINK]

    [Equal Opportunity Employer Statement]
    [Company Website | Social Media Links]
    
Sandboxed live preview

Hiring Pipeline Builder: Research & Design Requirements

This document outlines the comprehensive research and design specifications for the "Hiring Pipeline Builder" – a robust platform designed to streamline and enhance the entire recruitment process. This deliverable focuses on defining the functional and non-functional requirements, user experience (UX) recommendations, and detailed design specifications including wireframe descriptions, color palettes, and typography.


1. Project Overview

The goal of the Hiring Pipeline Builder is to provide a complete, integrated solution for managing the recruitment lifecycle. This includes tools for creating detailed job descriptions, building interview question banks, generating structured scoring rubrics, automating offer letter creation, and managing onboarding checklists. The system aims to improve efficiency, consistency, and fairness in hiring, ultimately leading to better talent acquisition outcomes.


2. Functional Requirements

The system will comprise several interconnected modules, each with specific functionalities:

2.1. Job Description Builder

  • Template Management: Ability to select from pre-defined templates or create new ones from scratch.
  • Rich Text Editor: WYSIWYG editor for crafting detailed job descriptions, including formatting, bullet points, and links.
  • Custom Fields: Support for defining and populating fields like Job Title, Department, Location, Responsibilities, Qualifications, Benefits, etc.
  • Versioning & Drafts: Save multiple versions of a job description and manage drafts before publishing.
  • Preview Functionality: Real-time preview of how the job description will appear to applicants.
  • Publishing & Sharing: Options to publish to internal career pages, export as PDF, or integrate with job boards (future consideration).
  • AI-Assisted Content Generation: (Future Enhancement) Suggestions for job titles, responsibilities, and qualifications based on role type.

2.2. Interview Question Bank Manager

  • Categorization: Organize questions by type (e.g., Behavioral, Technical, Situational, Role-Specific, Cultural Fit).
  • Difficulty Levels: Assign difficulty ratings (e.g., Entry, Mid, Senior) to questions.
  • CRUD Operations: Create, Read, Update, Delete questions.
  • Search & Filter: Efficiently search and filter questions by keywords, category, or difficulty.
  • Question Sets: Ability to group questions into reusable sets for specific roles or interview stages.
  • Association: Link questions or question sets directly to job roles and specific interview stages.

2.3. Scoring Rubric Creator

  • Criteria Definition: Define key evaluation criteria (e.g., Communication Skills, Problem-Solving, Technical Proficiency, Leadership Potential).
  • Rating Scales: Customize numerical or descriptive rating scales (e.g., 1-5, Poor-Excellent, Does Not Meet-Exceeds Expectations).
  • Weighting: Assign relative weights to different criteria to emphasize importance.
  • Rubric Templates: Create and save reusable rubric templates for different job families or interview types.
  • Association: Attach specific rubrics to interview stages or individual interviewers for a job.
  • Automated Scoring: Calculate total scores based on criteria ratings and weights.

2.4. Offer Letter Template Editor

  • Rich Text Editor: WYSIWYG editor for creating professional offer letter content.
  • Placeholder Variables: Support for dynamic variables (e.g., {{candidate_name}}, {{salary}}, {{start_date}}, {{job_title}}, {{benefits_summary}}).
  • Template Management: Create, edit, duplicate, delete, and preview offer letter templates.
  • Version Control: Track changes to templates.
  • Digital Signature Integration: (Future Enhancement) Integrate with e-signature platforms for streamlined offer acceptance.

2.5. Onboarding Checklist Generator

  • Pre-defined Categories: Utilize standard categories (e.g., IT Setup, HR Paperwork, Team Introductions, Training & Development).
  • Task Management: Create, assign, track, and complete individual onboarding tasks.
  • Task Assignment: Assign tasks to specific owners (e.g., IT, HR, Hiring Manager, Mentor) with due dates.
  • Progress Tracking: Visual indicators for task and overall checklist completion status.
  • Customization: Add, edit, or remove tasks and categories for specific roles or new hires.
  • Automated Notifications: Send reminders for upcoming or overdue tasks.

2.6. Overall Pipeline Management

  • Visual Pipeline: A configurable Kanban-style board representing recruitment stages (e.g., Application, Screening, Interview, Offer, Hired).
  • Candidate Management: Drag-and-drop functionality for moving candidates between stages.
  • Candidate Profiles: Comprehensive profiles including contact information, resume, cover letter, application history, interview notes, scores, and status history.
  • Reporting & Analytics: Dashboards for key metrics like time-to-hire, source effectiveness, candidate conversion rates, and diversity metrics.
  • User Roles & Permissions: Define access levels for different user types (e.g., Recruiter, Hiring Manager, Administrator).

3. Non-Functional Requirements

  • Performance: Fast loading times (under 2 seconds for critical actions), responsive interactions.
  • Security: Robust data encryption (at rest and in transit), role-based access control, regular security audits, compliance with data privacy regulations (e.g., GDPR, CCPA).
  • Usability: Intuitive interface, minimal learning curve, clear navigation, consistent design language.
  • Scalability: Ability to support a growing number of jobs, candidates, users, and data volume without degradation in performance.
  • Maintainability: Modular architecture, well-documented codebase, ease of updates and bug fixes.
  • Accessibility: Adherence to WCAG 2.1 AA guidelines for inclusive design.
  • Reliability: High uptime, robust error handling, data backup and recovery mechanisms.

4. User Experience (UX) Recommendations

4.1. General UX Principles

  • Consistency: Maintain a consistent visual language, interaction patterns, and terminology across the entire application.
  • Clarity: Use clear, concise language and visual cues. Avoid jargon.
  • Efficiency: Minimize steps required to complete common tasks. Provide shortcuts and intelligent defaults.
  • Feedback: Provide immediate and clear feedback for all user actions (e.g., success messages, error states, loading indicators).
  • Control: Give users control over their data and processes, with clear undo/redo options where applicable.
  • Error Prevention & Recovery: Design to prevent errors where possible, and provide helpful guidance for recovery when errors occur.
  • Progressive Disclosure: Present only necessary information at each stage, revealing more detail as needed.

4.2. Specific UX Considerations

  • Dashboard: Personalized widgets, quick access to urgent tasks or new applications.
  • Multi-step Forms: Use clear progress indicators for job creation, template setup, and other multi-step processes.
  • Drag-and-Drop: Implement intuitive drag-and-drop functionality for moving candidates in the pipeline.
  • Inline Editing: Allow for quick edits of candidate details or task descriptions directly within lists or cards.
  • Search & Filter: Prominent and powerful search and filtering options across all lists (jobs, candidates, templates, questions).
  • Notifications: Customizable in-app and email notifications for critical events (e.g., new applications, overdue tasks, interview reminders).
  • Mobile Responsiveness: Ensure full functionality and optimal viewing experience on various devices.

5. Design Specifications

5.1. Wireframe Descriptions (Key Screens)

  • 5.1.1. Dashboard / Pipeline Overview

* Layout: Single-column main content area with a left-hand navigation bar.

* Top Bar: Application Logo, User Profile (avatar, name, role), Quick Search, Notifications.

* Left Navigation: Links to Dashboard, Jobs, Candidates, Templates (Job Desc, Interview Qs, Rubrics, Offers, Onboarding), Reports, Settings.

* Main Content:

* "My Active Jobs" Section: Card or table view of active job openings, showing Job Title, Department, # Active Candidates, New Applicants, Stage Breakdown (mini bar chart). Quick action to "View Pipeline" or "Create New Job".

* "Candidate Pipeline Overview" (Optional): A high-level Kanban board showing all candidates across all jobs, or a quick filter to select a specific job.

* "Upcoming Interviews": List of scheduled interviews with candidate name, job title, date, and interviewer.

* "Tasks & Notifications": A feed of important alerts or tasks (e

gemini Output

Design Specifications: Hiring Pipeline Builder

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Hiring Pipeline Builder" application. The goal is to create an intuitive, powerful, and professional tool that streamlines the entire hiring process from job creation to candidate onboarding.


1. Overall Design Specifications

1.1. Core Architecture

The Hiring Pipeline Builder will be a modern, web-based application, designed with a modular architecture for scalability and maintainability. It will be cloud-hosted, ensuring high availability, security, and performance.

1.2. Key Modules

  • Dashboard & Analytics: Centralized overview of all hiring activities, key metrics, and actionable insights.
  • Job Management: Tools for creating, publishing, and managing job requisitions, including detailed job descriptions and associated hiring teams.
  • Pipeline Configuration: Customizable hiring stages specific to each job, with drag-and-drop functionality for easy setup.
  • Candidate Management: Comprehensive candidate profiles, application tracking, communication logs, and progress through the pipeline.
  • Interview Management: Scheduling, integrated question banks, customizable scoring rubrics, and feedback collection.
  • Offer Management: Generation of offer letters from templates, tracking of offer status, and electronic signing capabilities.
  • Onboarding Management: Configurable onboarding checklists, task assignment, and document management for new hires.
  • Templates & Content Library: Central repository for job description templates, interview question banks, scoring rubrics, offer letter templates, and onboarding checklists.
  • User & Permissions Management: Role-based access control to ensure appropriate data visibility and functionality for different team members (e.g., Recruiter, Hiring Manager, Admin).
  • Reporting: Detailed reports on time-to-hire, source effectiveness, pipeline conversion rates, and other critical recruitment KPIs.

1.3. High-Level Data Models

  • Job: JobID, Title, Description, Department, Location, Status (Open/Closed/Draft), HiringTeam (list of UserIDs), PipelineStages (ordered list of StageIDs).
  • Stage: StageID, Name, Description, Type (e.g., Application, Interview, Offer, Hired).
  • Candidate: CandidateID, Name, Email, Phone, ResumeURL, CurrentStageID, ApplicationDate, Source, Notes, Status (Active/Rejected/Hired).
  • Application: ApplicationID, JobID, CandidateID, CurrentStageID, DateApplied, LastStageChangeDate.
  • Interview: InterviewID, ApplicationID, InterviewerUserID, DateTime, Type (e.g., Phone Screen, Technical, Panel), QuestionBankID, ScoringRubricID, Feedback, Score.
  • QuestionBank: QuestionBankID, Name, Questions (list of Question objects: Text, Type), AssociatedSkills.
  • ScoringRubric: RubricID, Name, Criteria (list of Criterion objects: Name, Description, ScoreRange), Instructions.
  • OfferLetterTemplate: TemplateID, Name, Content (rich text with placeholders), Variables (list of placeholder names).
  • Offer: OfferID, ApplicationID, TemplateID, Salary, Benefits, StartDate, Status (Draft/Sent/Accepted/Rejected), SentDate, AcceptedDate.
  • OnboardingChecklistTemplate: TemplateID, Name, Tasks (list of Task objects: Description, AssigneeRole, DueDateOffset).
  • OnboardingChecklistInstance: InstanceID, OfferID, Tasks (list of TaskInstance objects: Description, AssigneeUserID, DueDate, Status).
  • User: UserID, Name, Email, Role, Permissions.

1.4. Integration Points

  • Email & Calendar Services: For sending interview invites, offer letters, notifications, and syncing interview schedules (e.g., Google Calendar, Outlook Calendar).
  • Video Conferencing Tools: Direct links or embedded functionality for virtual interviews (e.g., Zoom, Google Meet, Microsoft Teams).
  • HRIS/Payroll Systems: Optional integration for seamless transfer of new hire data post-onboarding.
  • Document Management: Secure storage for resumes, offer letters, and onboarding documents.

2. Wireframe Descriptions

The following describes key screens and their interactive elements.

2.1. Global Navigation & Dashboard

  • Global Navigation (Left Sidebar/Top Bar):

* Logo/Brand: Top-left corner.

* Main Menu Items: Dashboard, Jobs, Candidates, Interviews, Offers, Onboarding, Reports, Settings. Icons with text labels.

* User Profile: Avatar/Name, Logout, Help.

  • Dashboard Layout:

* Header: Welcome message, quick search bar.

* Key Metrics Widgets:

* "Open Jobs": Count, link to Jobs list.

* "Active Candidates": Count, link to Candidates list.

* "Interviews This Week": Count, link to Interview schedule.

* "Offers Pending": Count, link to Offers list.

* "Time-to-Hire (Avg.)": Numeric value with trend indicator.

* "My Pending Actions" Card: List of tasks (e.g., "Review Candidate X for Job Y," "Schedule Interview for Z").

* "Job Pipeline Overview" Chart: Visual representation (e.g., Kanban-style board or bar chart) showing candidates in each stage across all active jobs. Clickable segments to drill down.

* "Recent Activity Feed": Chronological list of system events (e.g., new candidate applied, stage change, interview scheduled).

2.2. Job Management - Job Details Page

  • Header: Job Title, Status (Open/Closed/Draft), "Edit Job" button, "Close Job" button.
  • Left Pane - Job Information:

* Job Title, Department, Location, Type (Full-time/Part-time), Salary Range.

* Detailed Job Description (rich text editor).

* Hiring Team members (avatars/names, ability to add/remove).

  • Right Pane - Pipeline Configuration:

* Visual Pipeline Stages: Drag-and-drop interface to define and reorder stages (e.g., "Application Review," "Phone Screen," "Technical Interview," "On-site Interview," "Offer," "Hired," "Rejected").

* Stage Settings: Click on a stage to configure:

* Associated Question Bank (dropdown).

* Associated Scoring Rubric (dropdown).

* Automated actions (e.g., send rejection email after X days in this stage).

* "Add New Stage" Button: To add custom stages.

  • Bottom Section - Candidates for this Job: List of candidates currently in the pipeline for this specific job, with their current stage, name, and quick actions.

2.3. Candidate Management - Candidate Profile Page

  • Header: Candidate Name, Current Stage, "Move Stage" button (dropdown with next available stages), "Reject Candidate" button.
  • Left Pane - Candidate Details:

* Photo (optional), Name, Contact Information (Email, Phone, LinkedIn).

* Application Date, Source.

* Resume Viewer/Download link.

* Custom fields (e.g., preferred start date, salary expectations).

  • Main Section - Activity Feed & History (Tabbed Interface):

* "Activity Log" Tab: Chronological list of all interactions: emails sent/received, notes, stage changes, interview schedules.

* "Interviews" Tab: List of past and scheduled interviews, including interviewer, date, type, link to feedback/score.

* "Feedback" Tab: Consolidated view of all interview feedback and scores for this candidate.

* "Offers" Tab: Details of any offers extended, status, and associated documents.

* "Notes" Tab: Text area for internal notes, ability to @mention team members.

  • Right Pane - Quick Actions:

* "Schedule Interview" button.

* "Send Email" button.

* "Make Offer" button.

* "Add Note" button.

2.4. Interview Management - Schedule Interview Page

  • Step-by-step or Form-based Layout:

* Candidate Selection: Pre-filled if coming from Candidate Profile, otherwise search/select.

* Job Selection: Pre-filled if coming from Job Details, otherwise search/select.

* Interviewers: Multi-select dropdown for internal users. Display their calendar availability.

* Date & Time: Calendar picker with available slots based on interviewer availability. Timezone support.

* Interview Type: Dropdown (e.g., Phone Screen, Technical, Behavioral).

* Question Bank: Dropdown to select a pre-defined question bank.

* Scoring Rubric: Dropdown to select a pre-defined scoring rubric.

* Location/Meeting Link: Text field or integration with video conferencing tools.

* Notes for Interviewers: Text area.

* "Send Interview Invites" Button.

2.5. Offer Management - Create/View Offer Page

  • Header: Candidate Name, Job Title, Offer Status (Draft/Sent/Accepted/Rejected).
  • Left Pane - Offer Details:

* Offer Template Selection: Dropdown to choose from pre-defined offer letter templates.

* Placeholder Population: Form fields dynamically generated based on the selected template's placeholders (e.g., Salary, Start Date, Benefits, Contingencies).

* Custom Adjustments: Ability to add specific clauses or notes.

* Approvals Workflow: Optional section for internal offer approval routing.

  • Right Pane - Offer Letter Preview:

* Live preview of the offer letter content as fields are populated.

* "Download PDF" button.

* "Send Offer" button (triggers email with offer letter and e-signature link).

  • Bottom Section - Offer Activity:

* Timestamped log of offer actions (created, sent, viewed, signed, accepted/rejected).

* E-signature status and details.

2.6. Onboarding Management - Onboarding Checklist Page

  • Header: New Hire Name, Job Title, Onboarding Status (In Progress/Completed).
  • Main Section - Checklist Items:

* List of onboarding tasks, grouped by category (e.g., Pre-Day 1, Day 1, Week 1).

* Each task item:

* Description.

* Assigned To (User/Role).

* Due Date.

* Status (Not Started, In Progress, Completed).

* Checkbox to mark as complete.

* Optional: Link to relevant document or form.

* Progress Bar: Visual indicator of overall checklist completion.

  • **Right Pane -

3.3 UX Recommendations

  • Ease of Use: Questions should be clearly formatted and easy to read during an interview.
  • Consistency: Provide clear "Key Points to Listen For" to guide interviewers and standardize evaluation.
  • Flexibility: Allow for easy addition or removal of questions. If digital, enable filtering by category or stage.
  • Note-Taking: Ensure sufficient space for detailed notes, crucial for objective feedback.

4. Scoring Rubric Template

4.1 Detailed Design Specifications

  • Header:

* Company Logo: Top-left.

* Document Title: "Candidate Interview Scoring Rubric: [Job Title]"

* Candidate Information: Candidate Name: [Text Field] | Interview Date: [Date Field] | Interviewer: [Text Field]

  • Core Rubric (Table Format):

* Column 1: Competency/Criteria: List key skills or attributes (e.g., Technical Proficiency, Problem Solving, Communication, Teamwork, Cultural Fit, Leadership Potential).

Columns 2-5 (or more): Rating Scale: Clearly defined levels (e.g., 1 - Needs Development, 2 - Developing, 3 - Meets Expectations, 4 - Exceeds Expectations, 5 - Exceptional). Each rating level will have a concise descriptor explaining what it means for that specific competency*.

* Last Column: Notes/Examples: Ample space for the interviewer to provide specific examples supporting their score for each competency. This is critical for objectivity.

  • Overall Assessment:

* Overall Recommendation: Radio buttons or dropdown: Strong Hire | Hire | Consider | No Hire.

* Summary Comments: A large text area for general feedback, strengths, weaknesses, and rationale for the overall recommendation.

* Interviewer Signature/Date: For formal documentation.

4.2 Wireframe Description

  • Layout: Primary
hiring_pipeline_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);}});}