Training Course Builder
Run ID: 69cb052258b35c7ea758c1d22026-03-30Education
PantheraHive BOS
BOS Dashboard

Build a complete training course with modules, lesson plans, quizzes, hands-on exercises, and certification criteria for any subject.

Training Course Builder: Research & Design Requirements

This document outlines the detailed research, design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" platform. The goal is to create a robust, intuitive, and highly customizable platform capable of building comprehensive training courses across any subject matter.


1. Executive Summary

The Training Course Builder will be a powerful, user-friendly platform enabling instructors and content creators to design, develop, and deploy complete training courses. It will support a modular structure, integrate diverse content types, facilitate interactive learning through quizzes and hands-on exercises, and manage certification processes. Emphasizing intuitive design and robust functionality, the platform aims to streamline course creation while providing an engaging learning experience for end-users. This deliverable focuses on the foundational design and technical requirements to ensure a scalable and high-quality product.


2. Detailed Design Specifications

This section details the core functionalities and technical requirements for the Training Course Builder.

2.1. Core Functionality

  • Course Management:

* Course Creation Wizard: Step-by-step guided process for new course setup (Name, Description, Target Audience, Prerequisites, Learning Objectives, Duration).

* Course Dashboard: Overview of all created courses, status (Draft, Published, Archived), learner enrollment, and performance metrics.

* Course Categorization & Tagging: Ability to organize courses by subject, difficulty, and custom tags for easy discovery.

* Course Duplication & Templating: Create new courses from existing ones or predefined templates.

* Course Publishing Workflow: Draft, review, publish, unpublish, archive options.

  • Module & Lesson Management:

* Modular Structure: Courses composed of multiple modules, each containing multiple lessons.

* Drag-and-Drop Reordering: Intuitive interface for arranging modules and lessons.

* Lesson Content Editor (WYSIWYG): Rich text editor supporting various content types.

* Content Types Supported:

* Text (rich formatting, headings, lists)

* Images (upload, embed, resize)

* Videos (embed from YouTube, Vimeo, or upload to platform)

* Audio (upload or embed)

* Downloadable Files (PDFs, DOCs, PPTs, ZIPs)

* External Links (web pages, resources)

* Code Snippets (syntax highlighting)

  • Quiz Builder:

* Multiple Question Types: Multiple Choice (single/multiple select), True/False, Short Answer, Matching, Fill-in-the-Blanks.

* Question Bank: Centralized repository of questions for reuse across courses/quizzes.

* Randomized Questions: Option to pull a random subset of questions from a bank for each quiz attempt.

* Scoring & Feedback: Automated scoring, customizable feedback for correct/incorrect answers, ability to set passing scores.

* Attempt Limits & Time Limits: Configure restrictions on quiz attempts and duration.

  • Hands-on Exercises / Assignments:

* Exercise Description: Rich text editor for detailed instructions, rubrics, and examples.

* Submission Types: File upload (multiple formats), text input, external link submission.

* Grading Interface: Manual grading by instructor, feedback mechanism, score assignment.

* Peer Review (Optional): Ability for learners to review each other's submissions.

  • Certification Management:

* Certification Criteria: Define conditions for certification (e.g., complete all modules, pass all quizzes with >X%, complete all exercises).

* Customizable Certificate Templates: Branded templates with dynamic fields (Learner Name, Course Name, Completion Date, Instructor Signature).

* Automated Certificate Generation: On successful completion of criteria.

* Certificate Download & Verification: Learners can download certificates; a unique verification code/link for external validation.

  • Learner Progress Tracking:

* Individual Progress Dashboards: For instructors to monitor learner progress through courses, modules, lessons, quizzes, and exercises.

* Completion Status: Track lesson completion, quiz scores, exercise submission status.

* Detailed Analytics: Reports on course engagement, time spent, common quiz errors.

  • User & Role Management:

* User Roles: Admin (full control), Instructor (create/manage their courses), Learner (access enrolled courses).

* User Directory: Add, edit, deactivate users.

* Role-Based Access Control (RBAC): Granular permissions based on user roles.

2.2. Technical Requirements

  • Architecture: Cloud-native, microservices-based architecture for scalability and maintainability.
  • Database: Relational database (e.g., PostgreSQL) for structured data; NoSQL (e.g., MongoDB) or object storage (e.g., S3) for content assets.
  • API: Robust RESTful API for all core functionalities, enabling future integrations.
  • Security:

* Authentication: OAuth2/OpenID Connect, 2-Factor Authentication (2FA) support.

* Authorization: Granular RBAC.

* Data Encryption: In-transit (TLS/SSL) and at-rest encryption.

* Regular Security Audits & Penetration Testing.

  • Scalability: Designed to handle a growing number of courses, learners, and concurrent users.
  • Performance: Optimized for fast loading times and responsive interactions, utilizing CDNs for media delivery.
  • Internationalization (i18n): Support for multiple languages in the UI and content.
  • Accessibility (WCAG 2.1 AA): Adherence to accessibility standards for inclusive design.
  • Integrations (Future Considerations):

* LMS Integration (e.g., Moodle, Canvas via LTI)

* Payment Gateways (e.g., Stripe, PayPal) for commercial courses

* SCORM/xAPI compatibility for interoperability

* Video Conferencing (e.g., Zoom, Google Meet) for live sessions


3. Wireframe Descriptions (High-Level)

The following describes key interfaces, focusing on functionality and layout, rather than specific visual elements.

3.1. Admin/Instructor Dashboard

  • Layout: Three-column layout.

* Left Sidebar: Primary navigation (Courses, Users, Analytics, Settings, Help).

* Main Content Area (Center): Customizable widgets displaying key metrics:

* "My Courses" (list with status, enrollments, quick edit/view)

* "Recent Activity" (new enrollments, completed courses, pending grades)

* "Learner Progress Snapshot" (overall completion rates, top/bottom learners)

* "Notifications" (system alerts, new messages)

* Right Sidebar (Optional/Collapsible): Quick links, upcoming tasks, or personalized tips.

  • Key Elements: Search bar, filter options, "Create New Course" button, profile dropdown.

3.2. Course Creation / Editing Interface

  • Layout: Multi-step wizard or tabbed interface (e.g., Course Details, Modules & Lessons, Quizzes, Exercises, Certification, Settings, Publish).
  • Course Details Tab:

* Form fields for Course Name, Description (rich text editor), Target Audience, Prerequisites, Learning Objectives (add/remove bullet points), Course Image/Video.

  • Modules & Lessons Tab:

* List of modules, each expandable to show lessons.

* "Add Module" button, "Add Lesson" button within modules.

* Drag-and-drop handles for reordering modules and lessons.

* Contextual menus (edit, delete, duplicate) for modules/lessons.

  • Lesson Editor:

* WYSIWYG editor for main content.

* Toolbar with options for text formatting, media embedding (image, video, audio), file uploads, code blocks.

* "Add Quiz," "Add Exercise," "Add Resource" buttons.

  • Quiz Builder:

* List of questions with question type indicator.

* "Add Question" button (with dropdown for question types).

* Question editor panel: Question text (rich text), answer options, correct answer selection, feedback fields, point value.

* Quiz settings: Time limit, attempt limit, passing score.

  • Exercise Builder:

* Form fields for Exercise Title, Instructions (rich text), Rubric (rich text), Expected Submission Type (file upload, text, link).

* Option to attach sample files or templates.

  • Certification Tab:

* Checkboxes/toggles for criteria (e.g., "All lessons complete," "All quizzes passed," "Overall score > X%").

* Dropdown for certificate template selection.

* Preview of certificate.

* Fields for instructor signature, logo upload.

3.3. Learner View (Course Player)

  • Layout: Two-column layout.

* Left Sidebar: Course navigation (Modules, Lessons, Quizzes, Exercises, Resources, Progress, Certificate). Clear indicators for completed/current/upcoming items.

* Main Content Area (Right): Displays current lesson content, quiz interface, exercise instructions/submission.

  • Key Elements:

* Progress bar (overall course and current module).

* "Previous Lesson," "Next Lesson" navigation buttons.

* "Mark Complete" button (if not auto-completed).

* Discussion/comments section (optional).

* Quiz/Exercise submission interfaces.


4. Color Palettes

The color palette is designed to convey professionalism, clarity, and approachability, while ensuring high accessibility standards.

4.1. Primary Palette

  • Primary Blue: #007BFF (RGB: 0, 123, 255)

Usage:* Main brand color, active states, primary call-to-action buttons, prominent headings.

  • Dark Blue/Navy: #003366 (RGB: 0, 51, 102)

Usage:* Primary navigation backgrounds, strong text, footer.

  • Accent Green: #28A745 (RGB: 40, 167, 69)

Usage:* Success messages, positive indicators, secondary call-to-action buttons where emphasis is needed.

4.2. Secondary Palette

  • Light Blue: #E6F2FF (RGB: 230, 242, 255)

Usage:* Hover states, backgrounds for selected items, subtle highlights.

  • Warm Grey: #6C757D (RGB: 108, 117, 125)

Usage:* Secondary text, icons, disabled states.

  • Soft Teal: #20C997 (RGB: 32, 201, 151)

Usage:* Data visualization, progress indicators, complementary accents.

4.3. Neutral Palette

  • Background White: #FFFFFF (RGB: 255, 255, 255)

Usage:* Main content areas, cards, modal backgrounds.

  • Light Grey (Background/Borders): #F8F9FA (RGB: 248, 249, 250)

Usage:* Section separators, subtle background for dashboards/cards.

  • Medium Grey (Borders/Dividers): #DEE2E6 (RGB: 222, 226, 230)

Usage:* Input field borders, table borders, dividers.

  • Dark Text Grey: #343A40 (RGB: 52, 58, 64)

Usage:* Primary body text, headings for readability.

4.4. Semantic Colors

  • Success: #28A745 (Green - same as Accent Green)
  • Warning: #FFC107 (Yellow/Orange)
  • Danger/Error: #DC3545 (Red)
  • Info: #17A2B8 (Cyan)

4.5. Accessibility Considerations

  • All color combinations will be rigorously tested to ensure they meet WCAG 2.1 AA contrast ratio standards for text and interactive elements.
  • Focus indicators will be clearly visible and distinct from background colors.
  • Color will not be the sole means of conveying information (e.g., error messages will have text and an icon).

5. UX Recommendations

User experience is paramount for adoption and satisfaction. These recommendations focus on creating an intuitive, efficient, and engaging platform.

5.1. Intuitive Navigation & Information Architecture

  • Clear & Consistent Global Navigation: A persistent left sidebar or top navigation bar with clearly labeled categories (e.g., Courses, Users, Analytics, Settings).
  • Breadcrumbs: Provide clear path indication within deep navigation structures (e.g., Dashboard > My Courses > Course Name > Module 1 > Lesson 3).
  • Search & Filtering: Robust search functionality with filters (by course status, category, instructor, learner status) across all relevant lists (courses, users, questions).
  • Contextual Menus: Use "..." or right-click menus for common actions on list items (edit, delete, publish).

5.2. Streamlined Workflows & Efficiency

  • Wizard-Based Creation: Guide users through complex processes like course creation with clear, sequential steps and progress indicators.
  • Drag-and-Drop Functionality: Implement for reordering modules, lessons, quiz questions, and potentially content blocks within the lesson editor.
  • In-line Editing: Allow quick edits
gemini Output

This document outlines the detailed design specifications for the "Training Course Builder" platform. The goal is to create an intuitive, efficient, and visually appealing tool that empowers users to easily build comprehensive training courses.


1. Overall Design Goals

Our primary design goals for the Training Course Builder are:

  • Intuitive & Efficient: Minimize cognitive load and enable users to build courses quickly and effortlessly.
  • Modern & Professional: A clean, contemporary aesthetic that instills confidence and reflects the quality of the courses created.
  • Flexible & Scalable: Support a wide range of content types and course structures, from simple to highly complex.
  • Engaging User Experience: Provide visual feedback, clear navigation, and a pleasant environment for content creation.
  • Accessible: Ensure the platform is usable by individuals with diverse needs and abilities.

2. User Experience (UX) Recommendations

The user experience will prioritize clarity, control, and efficiency:

  • Drag-and-Drop Interface: Implement drag-and-drop functionality for reordering modules, lessons, and content elements within a lesson.
  • "What You See Is What You Get" (WYSIWYG) Editors: Provide rich text editors for lesson content, quiz questions, and exercise instructions, allowing users to see how their content will appear.
  • Contextual Panels & Modals: Use right-hand side panels for element-specific settings and modals for focused tasks (e.g., adding a new quiz question, configuring certification).
  • Progress Indicators & Auto-Save: Visually indicate save status and auto-save changes regularly to prevent data loss.
  • Clear Navigation & Breadcrumbs: Maintain consistent global navigation and provide breadcrumbs within course editing to help users understand their location within the course structure.
  • Inline Editing: Allow direct editing of titles and short descriptions where appropriate, reducing clicks.
  • Version History/Undo-Redo: Implement basic undo/redo functionality and potentially a version history for major course changes.
  • Help & Tooltips: Provide contextual tooltips for complex features and an easily accessible help section.
  • Preview Mode: A dedicated "Preview" button to instantly see how the course content will appear to learners.

3. Wireframe Descriptions (Key Screens)

3.1. Dashboard / My Courses

  • Header:

* Left: Company Logo (PantheraHive), "Training Course Builder" title.

* Center: Search bar for courses.

* Right: User Profile (avatar, dropdown for settings, logout), Notifications icon, "Create New Course" button (Primary CTA).

  • Sidebar Navigation:

* "Dashboard" (highlighted when on this page)

* "My Courses"

* "Templates"

* "Settings"

* "Help & Support"

  • Main Content Area:

* Filters/Sorting: Dropdowns for filtering by status (Draft, Published), category, and sorting options (Last Edited, Alphabetical).

* Course Cards (Grid View): Each card represents a course.

* Course Title

* Thumbnail/Cover Image (customizable)

* Status Tag (e.g., "Draft", "Published", "Archived")

* Progress Bar (e.g., "60% Complete")

* Last Edited Date

* Action Buttons: "Edit Course" (Primary), "Preview", "Publish/Unpublish", "Duplicate", "Delete" (with confirmation).

* Empty State: If no courses exist, display a friendly message with a prominent "Create Your First Course" CTA.

3.2. Course Editor (Structure View)

  • Header:

* Left: Breadcrumbs (e.g., Dashboard > My Courses > Course Title).

* Center: Course Title (editable inline), Save Status (e.g., "Saved", "Saving...", "Changes not saved").

* Right: "Preview Course" button, "Publish Course" button (Primary CTA).

  • Left Panel: Course Outline & Settings:

* Course Settings (Tabs):

* General: Title, Description, Category, Tags, Language, Target Audience.

* Branding: Course thumbnail, custom colors (if allowed), instructor profiles.

* Certification: Link to Certification Criteria Builder (see 3.6).

* Course Outline (Tree View):

* Hierarchical list of Modules and Lessons.

* Each item shows its title and an icon (Module icon, Lesson icon).

* Drag-and-drop reordering.

* Hover states: Display "Edit", "Duplicate", "Delete" icons.

* Add Module/Lesson Buttons: Prominently placed at the bottom of the panel, or contextually within the list.

  • Main Content Area: Course Structure Canvas:

* Visual representation of the course structure.

* Module Cards:

* Module Title (editable inline).

* Short Description.

* "Add Lesson" button within the module card.

* Progress indicator (e.g., "2/5 Lessons Complete").

* Settings/Delete icons on hover.

* Lesson Cards (nested within Module Cards):

* Lesson Title (editable inline).

* Lesson Type icon (e.g., text, video, quiz).

* Status (e.g., "Draft", "Complete").

* "Edit Lesson" button (Primary action).

* Settings/Delete icons on hover.

* Drag-and-drop visual feedback: Clear indication of where an item will be dropped.

3.3. Lesson Editor

  • Header:

* Left: Breadcrumbs (e.g., Course Title > Module Name > Lesson Title).

* Center: Lesson Title (editable inline), Save Status.

* Right: "Preview Lesson" button, "Back to Course Structure" button.

  • Left Panel: Content Elements Library:

* List of available content types, often represented by icons and labels.

* Categories: "Text & Media", "Interactive", "Assessment".

* Elements:

* Text Block (WYSIWYG)

* Image

* Video (Embed or Upload)

* Audio

* File Download

* Embed (iFrame, HTML)

* Quiz (Links to Quiz Builder)

* Hands-on Exercise (Links to Exercise Builder)

* Separator / Divider

* Drag-and-drop functionality: Users drag elements from this panel onto the main content canvas.

  • Main Content Area: Lesson Content Canvas:

* A responsive, canvas-like area where content elements are dropped and arranged.

* Each element appears as a block:

* Text Block: WYSIWYG editor directly within the block.

* Image Block: Placeholder, "Upload Image" button, image preview after upload.

* Video Block: Video player placeholder, "Embed URL" or "Upload Video" options.

* Quiz Block: Summary (e.g., "5 Questions, 10 Points"), "Edit Quiz" button.

* Exercise Block: Summary (e.g., "Submission Required"), "Edit Exercise" button.

* Hover states for blocks: Show "Move Up/Down", "Duplicate", "Delete" icons, and a "Settings" (gear) icon.

* Clicking on a block: Selects it and opens its specific settings in the Right Panel.

  • Right Panel: Element Settings (Contextual):

* Dynamically changes based on the selected content element.

* Text Block: Font styles, size, color, alignment, lists, links.

* Image Block: Upload, alt text, caption, alignment, size, link.

* Video Block: Embed URL, autoplay, loop, controls, poster image.

* Quiz/Exercise Block: Displays key settings (e.g., passing score for quiz) and offers a prominent "Open Full Editor" button (modal).

3.4. Quiz Builder (Modal or Dedicated Screen)

  • Header: "Build Quiz: [Lesson Title]"
  • Left Panel (Optional): Quiz Settings:

* Quiz Title, Description.

* Passing Score (%).

* Time Limit (optional).

* Shuffle Questions.

* Show Answers After Submission.

* Allow Multiple Attempts.

  • Main Content Area: Question List & Editor:

* "Add Question" Button: Dropdown for question types (Multiple Choice, True/False, Short Answer, Matching, Fill-in-the-Blanks).

* Question Cards:

* Question Number.

* Question Text (truncated preview).

* Question Type icon.

* Points assigned.

* Action Icons: "Edit", "Duplicate", "Delete", "Move Up/Down" (drag handle).

* Question Editor (Inline or Separate Panel):

* Question Text: WYSIWYG editor.

* Image/Video: Optional media for the question.

* Answer Options (based on type):

* Multiple Choice: List of radio buttons/checkboxes, "Add Option" button, "Mark Correct" toggle for each.

* True/False: Radio buttons for True/False, mark correct.

* Short Answer: Text input field for correct answer(s), case sensitivity option.

* Feedback: Optional feedback for correct/incorrect answers.

* Points: Numerical input.

* "Save Question" / "Cancel".

  • Footer: "Save Quiz", "Cancel".

3.5. Hands-on Exercise Builder (Modal or Dedicated Screen)

  • Header: "Build Exercise: [Lesson Title]"
  • Exercise Settings:

* Exercise Title, Description.

* Points assigned.

* Due Date (optional).

* Submission Type (Text Input, File Upload, or both).

* Max File Size (for uploads).

* Allowed File Types.

* Peer Review (toggle, if supported).

  • Main Content Area:

* Instructions Editor: Prominent WYSIWYG editor for detailed exercise instructions. Support for images, code blocks, links.

* Example Solution/Rubric (Optional):

* Upload example solution file.

* Rubric Builder: Define criteria, proficiency levels, and points for each criterion (e.g., "Clarity of Code", "Problem Solving Approach").

* Learner View Preview: A small section showing how the exercise will appear to the learner.

  • Footer: "Save Exercise", "Cancel".

3.6. Certification Criteria Builder

  • Header: "Certification Criteria: [Course Title]"
  • Main Content Area:

* Requirements Section:

* Checkboxes for common requirements:

* "Complete all lessons."

* "Achieve X% overall score on quizzes." (Input field for X).

* "Submit all required hands-on exercises."

* "Pass final assessment/exam." (Link to create/select final exam).

* Option to add custom requirements (free text).

* Certificate Design Section:

* Template Selector: Gallery of pre-designed certificate templates.

* Customization Options:

* Course Title, Learner Name (placeholders).

* Instructor Name(s), Signature upload.

* Date of Completion (placeholder).

* Custom text fields (e.g., "Awarded for excellence in...").

* Logo upload (for institution/company).

* Background color/image.

* Live Preview: A dynamic preview of the certificate as changes are made

gemini Output

Finalized Design Assets: Training Course Builder

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" platform. The goal is to create an intuitive, engaging, and professional learning environment that effectively delivers the generated course content.


1. Introduction

This deliverable provides the detailed design framework for presenting the training courses generated by the "Training Course Builder" workflow. It focuses on creating a user-friendly, visually appealing, and highly functional interface that enhances the learning experience. The specifications herein are designed to ensure consistency, accessibility, and a professional aesthetic across the entire platform.


2. Overall Design Philosophy & Goals

Our design philosophy centers on Clarity, Engagement, and Accessibility.

  • Clarity: Information should be easy to find, understand, and navigate. The interface should be uncluttered and guide the user through their learning journey effortlessly.
  • Engagement: Foster an interactive and motivating learning environment through thoughtful design, multimedia integration, and feedback mechanisms.
  • Accessibility: Ensure the platform is usable by all individuals, regardless of ability, adhering to WCAG standards.
  • Professionalism: Maintain a clean, modern, and credible aesthetic that instills confidence in the quality of the courses.
  • Responsiveness: The design must adapt seamlessly across various devices (desktop, tablet, mobile) to support flexible learning.

3. Detailed Design Specifications

3.1. Platform/Interface Layout

  • Responsive Design: The layout must be fully responsive, adapting gracefully to different screen sizes and orientations. Breakpoints for desktop, tablet (landscape/portrait), and mobile should be defined.
  • Global Header:

* Logo: Prominently displayed on the left, linking to the main dashboard.

* Primary Navigation: Links to Course Catalog, My Courses, Certifications, Help/Support.

* User Profile/Account: Avatar or icon on the right, dropdown menu for Profile, Settings, Logout.

* Search Bar: Universal search for courses, lessons, and resources.

  • Global Footer:

* Copyright Information: Company name, year.

* Legal Links: Privacy Policy, Terms of Service.

* Social Media Links (optional).

* Contact Information (optional).

  • Main Content Area: Dynamic area where course content, modules, quizzes, etc., are displayed. Optimized for readability and interaction.
  • Sidebar (Contextual):

* Course Navigation: On course/lesson pages, a collapsible sidebar listing modules and lessons with progress indicators.

* Announcements/Notifications: On the dashboard, a panel for important updates.

* Related Resources: On lesson pages, links to supplementary materials.

3.2. Typography

  • Headings (H1, H2, H3):

* Font Family: A sans-serif font like Open Sans, Lato, or Montserrat for modern appeal and readability. Use a slightly bolder weight.

* Sizes: H1 (40-48px), H2 (32-36px), H3 (24-28px).

* Color: Dark charcoal (#333333) or a primary brand color.

  • Body Text (Paragraphs, Lists):

* Font Family: A highly readable sans-serif font like Roboto, Source Sans Pro, or Inter.

* Sizes: 16-18px for main content, 14px for supplementary text (captions, small print).

* Line Height: 1.5 - 1.6 times the font size for optimal readability.

* Color: Soft black (#4A4A4A) or dark gray (#666666).

  • Call-to-Action (CTA) Text:

* Font Family: Same as headings, slightly bolder.

* Size: 16-18px.

* Color: Contrasting, often white on a colored button.

3.3. Iconography

  • Style: Clean, modern, outline or filled icons. Maintain a consistent style throughout (e.g., Material Design icons, Font Awesome).
  • Usage:

* Navigation elements (home, search, profile).

* Course elements (module, lesson, quiz, video, document).

* Actions (play, pause, next, back, submit, download).

* Feedback (success, warning, error).

  • Color: Typically dark gray or a subtle accent color, adapting to context (e.g., white on dark backgrounds).

3.4. Imagery & Multimedia

  • Course Thumbnails: High-quality, representative images for each course. Aspect ratio: 16:9 or 4:3.
  • Instructor Photos: Professional headshots, circular or square with rounded corners.
  • Illustrations/Graphics: Use vector graphics where possible for scalability and crispness. Maintain a consistent art style.
  • Video Player: Embed standard video players (e.g., YouTube, Vimeo, custom HTML5 player) with consistent controls, captions/subtitles, and quality settings.
  • Interactive Elements: Ensure smooth animations and transitions for quizzes, drag-and-drop exercises, etc.

3.5. Interactivity & Feedback

  • Buttons:

* Primary CTA: Prominent background color, clear text, subtle hover/active states. Rounded corners (4-8px radius) for a softer look.

* Secondary Buttons: Outline style or lighter background.

* Ghost Buttons: Transparent background with colored border and text.

  • Forms:

* Input Fields: Clearly defined borders, subtle focus state (e.g., border color change). Placeholder text for guidance.

* Error Messages: Clearly visible, red text below the field.

* Success Messages: Green text or banner.

  • Progress Indicators:

* Linear Progress Bars: For overall course completion and individual lesson progress.

* Circular Progress Indicators: For loading states.

* Checkmarks/Icons: To denote completed modules/lessons.

  • Notifications: Non-intrusive banners or toast messages for alerts, confirmations, and important updates.

3.6. Accessibility Standards

  • WCAG 2.1 AA Compliance:

* Color Contrast: Ensure sufficient contrast ratios for text and interactive elements (minimum 4.5:1 for regular text, 3:1 for large text).

* Keyboard Navigation: All interactive elements must be navigable and operable via keyboard.

* Screen Reader Compatibility: Use semantic HTML, ARIA attributes, and proper alt text for images.

* Captions/Transcripts: Provide for all video and audio content.

* Focus Indicators: Clearly visible focus states for interactive elements.


4. Wireframe Descriptions (Key Screens)

4.1. Course Dashboard / Homepage

  • Header: Global header (Logo, Primary Nav, Search, User Profile).
  • Main Area:

* Welcome Message: Personalized greeting (e.g., "Welcome back, [User Name]!").

* "Continue Learning" Section: Prominently displays the most recently accessed course with a "Continue" button and progress bar.

* "My Courses" Section: Grid or list view of all enrolled courses. Each card includes: Course Title, Instructor, Progress Bar, Last Accessed Date, "Go to Course" button.

* "Recommended Courses" / "New Arrivals" (Optional): Curated suggestions based on user interests or popular courses.

* Notifications/Announcements Panel: A sidebar or discreet section displaying recent updates, deadlines, or new content.

  • Footer: Global footer.

4.2. Course Overview Page

  • Header: Global header.
  • Main Area:

* Course Banner/Hero Section: High-quality image or video, Course Title (H1), Instructor Name, Short Description/Tagline, Rating (if applicable), "Enroll Now" / "Start Course" button.

* Course Details Section:

* About This Course: Detailed description, learning objectives, target audience.

* What You'll Learn: Bulleted list of key takeaways.

* Course Structure: Number of modules, lessons, quizzes, estimated duration.

* Instructor Bio: Photo, name, brief bio, link to full profile.

* Requirements/Prerequisites.

* Modules & Lessons Outline:

* Collapsible list of modules. Each module shows its title, number of lessons, and a brief summary.

* Upon expanding a module, a list of lessons within it, potentially with icons for video, text, quiz, exercise.

* Reviews & Testimonials (Optional).

  • Footer: Global footer.

4.3. Module / Lesson Page

  • Header: Global header.
  • Left Sidebar (Course Navigation):

* Course Title (H2).

* Module List: Collapsible list of all modules.

* Lesson List (within current module): Indented list of lessons.

* Current lesson highlighted.

* Completed lessons marked with a checkmark.

* Icons indicating lesson type (video, text, quiz, exercise).

* Overall Course Progress Bar.

  • Main Content Area:

* Lesson Title (H1).

* Lesson Progress Bar: For the current lesson/module.

* Content Display:

* Video Player: For video lessons, prominent display.

* Text Editor: For text-based lessons, well-formatted text with headings, bullet points, code blocks, images.

* Interactive Elements: Embed interactive simulations, diagrams, or polls.

* Downloadable Resources: Links to PDFs, templates, code samples.

* Discussion Forum/Comments Section: Area for learners to ask questions and interact.

* Navigation Buttons: "Previous Lesson" and "Next Lesson" (or "Mark Complete").

  • Footer: Global footer.

4.4. Quiz / Assessment Page

  • Header: Global header.
  • Left Sidebar: Course Navigation (as per Lesson Page).
  • Main Content Area:

* Quiz Title (H1).

* Instructions: Clear guidelines, time limit (if any), number of questions.

* Question Counter: "Question X of Y".

* Timer (Optional): Prominently displayed.

* Question Area:

* Question text.

* Supporting media (image, video, code snippet).

* Answer options (radio buttons for single choice, checkboxes for multiple choice, text input for short answer/essay).

* Navigation Buttons: "Previous Question", "Next Question", "Review", "Submit Quiz".

* Quiz Results (after submission):

* Score, Pass/Fail status.

* Detailed feedback for each question (correct answer, explanation).

* Option to review answers or retake quiz (if allowed).

  • Footer: Global footer.

4.5. Hands-on Exercise Page

  • Header: Global header.
  • Left Sidebar: Course Navigation.
  • Main Content Area:

* Exercise Title (H1).

* Instructions: Clear, step-by-step guidance, required tools/software, expected outcome.

* Scenario/Problem Statement: Context for the exercise.

* Reference Materials: Links to relevant documentation or previous lessons.

* Submission Area:

* Text box for written responses/reflections.

* File upload component for code files, documents, screenshots.

* Link submission for external projects (e.g., GitHub repo, live demo).

* Rubric/Grading Criteria (Optional): Clearly define how the exercise will be evaluated.

* "Submit Exercise" Button.

* Feedback Section (after submission): Where instructors can provide comments, grades, and suggestions.

  • Footer: Global footer.

4.6. Certification Page

  • Header: Global header.
  • Main Content Area:

* "Congratulations!" Message (H1).

* Certificate Display:

* High-resolution image of the certificate, personalized with user's name, course title, completion date, and issuing authority.

* Unique Certificate ID/Verification Link.

* Download Options: PDF, JPEG.

* Sharing Options: Buttons for LinkedIn, Twitter, Facebook, Email.

* Next Steps/Recommendations: Suggest advanced courses or related learning paths.

  • Footer: Global footer.

5. Color Palettes

The chosen color palettes aim for professionalism, clarity, and visual appeal, while ensuring accessibility.

5.1. Primary Palette (Brand & Key Actions)

  • Primary Blue/Green (e.g., #007BFF or #28A745): Used for main CTAs, active states, key branding elements.

Hex: #007BFF (Vibrant Blue) - For a tech-education feel.*

OR Hex: #28A745 (Professional Green) - For growth/success feel.*

  • Accent Color (e.g., #FFC107 or #6C757D): Used for highlights, secondary CTAs, or less critical interactive elements.

Hex: #FFC107 (Subtle Gold/Amber) - Provides contrast and warmth.*

OR Hex: #6C757D (Muted Grey) - For a more minimalist approach.*

5.2. Secondary Palette (UI Elements & Backgrounds)

  • Dark Text Color: #333333 (Charcoal Gray) - For main headings and prominent text.
  • Body Text Color: #4A4A4A (Soft Black) - For paragraphs and general content.
  • Subtle Gray: #6C757D (Medium Gray) - For secondary text, icons, borders.
  • Light Gray (Background): #F8F9FA (Off-White) -
training_course_builder.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}