Training Course Builder
Run ID: 69cc1e7104066a6c4a1698522026-03-31Education
PantheraHive BOS
BOS Dashboard

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

Step 1: Research & Design Requirements - 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, powerful, and scalable tool that enables users to effortlessly construct complete training courses, including modules, lesson plans, quizzes, hands-on exercises, and certification criteria, for any subject matter.


1. Detailed Design Specifications

1.1 Core Functional Requirements

The Training Course Builder will provide the following core functionalities:

  • Course Management:

* Create New Course: Define course title, description, target audience, overall learning objectives.

* Edit/Delete Course: Modify course details or remove a course.

* Course Status: Draft, Published, Archived.

* Course Overview: Dashboard displaying all created courses with their status and key metrics (e.g., number of modules, lessons).

  • Module Management:

* Add/Edit/Delete Modules: Organize courses into logical sections.

* Reorder Modules: Drag-and-drop functionality for intuitive sequencing.

* Module Description: Provide context for each module.

  • Lesson Management:

* Add/Edit/Delete Lessons: Create individual learning units within modules.

* Lesson Types: Support various content types (Text, Video Embed, Quiz, Hands-on Exercise, File Download).

* Reorder Lessons: Drag-and-drop functionality within modules.

* Lesson Content Editor:

* Rich Text Editor (WYSIWYG): For text-based lessons, supporting headings, paragraphs, lists, bold, italics, links, images, tables, code blocks.

* Video Embed: Support for popular platforms (YouTube, Vimeo, custom MP4).

* File Uploads: For supplementary resources (PDFs, documents, spreadsheets).

  • Quiz Builder:

* Question Types: Multiple Choice (single/multiple answer), True/False, Short Answer, Matching.

* Question Bank: Ability to create and reuse questions across quizzes.

* Quiz Settings: Set passing score, time limits, number of attempts, feedback options (immediate/after completion).

* Automated Grading: For objective questions.

* Answer Explanations: Provide feedback for correct/incorrect answers.

  • Hands-on Exercise Builder:

* Exercise Description: Clear instructions and context.

* Submission Methods: Text input, file upload, external link submission.

* Rubric/Evaluation Criteria: Define how exercises will be graded (for manual grading).

* Expected Outcomes: Clearly state what the learner should achieve.

  • Certification Criteria Definition:

* Flexible Criteria: Define conditions for course completion and certification (e.g., "Complete all modules," "Pass all quizzes with 80% or higher," "Submit all hands-on exercises," "Pass final project").

* Certificate Template Selection: Basic options for certificate design (future enhancement).

  • Preview Functionality:

* Student View: Toggle to preview the course content exactly as a student would see it.

* Responsive Preview: Check how the course renders on different devices (desktop, tablet, mobile).

  • Publishing & Export:

* Publish Course: Make the course available to learners.

* Export Options: Generate course content in formats like PDF, SCORM (Shareable Content Object Reference Model) package, or web-ready HTML.

  • User & Collaboration (Future Consideration): Role-based access (Admin, Instructor, Editor) for collaborative course creation.

1.2 Technical Considerations

  • Scalability: The architecture must support an increasing number of courses, modules, lessons, and users without performance degradation.
  • Security: Robust authentication, authorization, data encryption, and input validation to protect course content and user data.
  • Responsive Design: The interface must adapt seamlessly to various screen sizes (desktop, tablet, mobile) for both course creators and learners.
  • Backend:

* Database: Relational database (e.g., PostgreSQL, MySQL) for structured data (courses, modules, lessons, users) and potentially NoSQL (e.g., MongoDB) for rich content or activity logs.

* API: RESTful API for communication between frontend and backend.

* Cloud Hosting: Utilize scalable cloud services (AWS, Azure, GCP) for reliability and performance.

  • Frontend:

* Framework: Modern JavaScript framework (React, Vue, or Angular) for a dynamic and interactive user interface.

* State Management: Efficient handling of application state (e.g., Redux, Vuex, Context API).

  • Content Storage: Secure and scalable storage for uploaded files (images, videos, documents).
  • Version Control (Future): Ability to revert to previous versions of course content.

1.3 High-Level Data Model

  • Course Table:

* course_id (PK)

* title

* description

* target_audience

* learning_objectives (JSON array or text)

* status (Enum: 'draft', 'published', 'archived')

* created_at, updated_at

  • Module Table:

* module_id (PK)

* course_id (FK)

* title

* description

* order_index

  • Lesson Table:

* lesson_id (PK)

* module_id (FK)

* title

* lesson_type (Enum: 'text', 'video', 'quiz', 'exercise', 'file')

* content (JSON or long text, stores rich text, video URL, file_id, quiz_id, exercise_id)

* order_index

  • Quiz Table:

* quiz_id (PK)

* title

* description

* passing_score

* time_limit_minutes (Optional)

* num_attempts (Optional)

* feedback_type (Enum: 'immediate', 'after_completion')

  • Question Table:

* question_id (PK)

* quiz_id (FK)

* question_text

* question_type (Enum: 'mcq_single', 'mcq_multiple', 'true_false', 'short_answer', 'matching')

* options (JSON array for MCQ/Matching)

* correct_answer (JSON array or text)

* explanation

  • Exercise Table:

* exercise_id (PK)

* title

* description

* instructions

* expected_outcome

* submission_method (Enum: 'text', 'file_upload', 'external_link')

* evaluation_criteria (Text or JSON)

  • Certification Table:

* certification_id (PK)

* course_id (FK)

* criteria (JSON or text defining rules)

* template_id (FK to a certificate template)

  • File Table:

* file_id (PK)

* filename

* url (S3, Azure Blob, etc.)

* mime_type

* uploaded_by (FK to User)

* created_at


2. Wireframe Descriptions

The following describes key screens and their components.

2.1 Dashboard / Course List View

  • Layout: Header (Logo, User Profile, Help), Main Content Area.
  • Components:

* Header:

* PantheraHive Logo (top-left).

* User Avatar/Name (top-right, dropdown for settings, logout).

* "Help" button.

* Main Content:

* "My Courses" Title.

* "Create New Course" Button: Prominently displayed.

* Search Bar: Filter courses by title.

* Course Cards/List: Each card represents a course.

* Course Title.

* Short Description.

* Status (Draft/Published/Archived).

* Number of Modules/Lessons.

* "Edit Course" Button.

* "Preview" Button.

* "..." Menu for more options (Duplicate, Archive, Delete).

* Pagination/Scrolling: If many courses exist.

2.2 Course Editor - Main View

  • Layout: Header, Left Sidebar (Course Outline), Main Content Area (Editor Panel), Bottom Bar (Status/Actions).
  • Components:

* Header:

* Course Title (editable).

* "Save" Button (with autosave indicator).

* "Preview Course" Button.

* "Publish/Unpublish" Toggle/Button.

* "Settings" (Cog icon for course-level details, certification).

* "Exit Editor" Button.

* Left Sidebar (Course Outline):

* Course Details Section: Course Title, Description, Objectives.

* Module List:

* Each module is expandable/collapsible.

* "Add Module" Button.

* Module Item: Module Title.

* "..." Menu (Edit Module, Delete Module).

* Lesson List (nested under module):

* "Add Lesson" Button.

* Lesson Item: Lesson Title.

* Icon indicating lesson type (text, quiz, exercise).

* "..." Menu (Edit Lesson, Delete Lesson).

* Drag-and-Drop: Enabled for reordering modules and lessons.

* Main Content Area (Editor Panel):

* Contextual Editor: Content changes based on the selected item in the Left Sidebar (Course, Module, Lesson, Quiz, Exercise, Certification).

* Default: Displays Course Overview/Settings when no specific module/lesson is selected.

2.3 Lesson Content Editor (Example: Text Lesson)

  • Layout: Main Content Area of the Course Editor.
  • Components:

* Lesson Title Input Field.

* Lesson Type Selector: Dropdown/Tabs (Text, Video, Quiz, Exercise, File).

* Rich Text Editor (WYSIWYG):

* Toolbar with common formatting options (bold, italic, underline, lists, headings, links, images, video embed, tables, code block).

* Main content editing area.

* "Add Resources" Button: Opens a modal for uploading files or linking external resources.

* Save/Cancel Buttons (or rely on autosave).

2.4 Quiz Builder

  • Layout: Main Content Area of the Course Editor.
  • Components:

* Quiz Title Input.

* Quiz Description Textarea.

* Quiz Settings Section:

* Passing Score (percentage input).

* Time Limit (optional, minutes input).

* Number of Attempts (optional, numeric input).

* Feedback Type (radio buttons: Immediate, After Completion).

* "Add Question" Button.

* Question List:

* Each question displayed as a card/block.

* Question Card:

* Question Type selector (Dropdown: MCQ Single, MCQ Multiple, True/False, Short Answer, Matching).

* Question Text Input.

* Specific Inputs based on Type:

* MCQ: "Add Option" button, input fields for options, radio/checkbox for correct answer.

*

gemini Output

Training Course Builder: Design Specifications & UX Deliverables

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" platform. This comprehensive guide will serve as the blueprint for development, ensuring a professional, intuitive, and highly functional tool for creating engaging educational content.


1. Detailed Design Specifications

The Training Course Builder is designed to empower educators, instructional designers, and content creators to build and manage comprehensive training courses from scratch.

1.1 Core Functional Requirements

  • Course Management:

* Create, edit, delete, duplicate, and archive courses.

* Set course title, description, category, target audience, and learning objectives.

* Define course status (Draft, Published, Archived).

* Assign course creators/contributors.

  • Module Management:

* Create, edit, delete, and reorder modules within a course.

* Set module title and description.

* Indicate module prerequisites (optional).

  • Lesson Management (Diverse Content Types):

* Create, edit, delete, and reorder lessons within modules.

* Support for multiple lesson content types:

* Text/HTML: Rich text editor with formatting options, image embeds, links.

* Video: Embed from platforms (YouTube, Vimeo) or direct upload (with transcoding).

* Audio: Embed or direct upload.

* PDF/Document: Upload and display.

* Interactive Content: SCORM/xAPI package upload, H5P integration (optional).

* Attach supplementary files (e.g., handouts, templates).

* Estimate lesson duration.

  • Quiz Builder:

* Create quizzes for lessons or modules.

* Support for various question types:

* Multiple Choice (single/multiple correct answers)

* True/False

* Short Answer/Text Input

* Matching

* Drag-and-Drop (e.g., ordering, categorization)

* Set correct answers, provide explanations/feedback.

* Define passing score, time limits, and number of attempts.

* Randomize question order.

  • Hands-on Exercise Builder:

* Define exercise instructions, objectives, and expected outcomes.

* Specify submission types (e.g., file upload, text input, URL link).

* Create rubrics or grading criteria for assessment.

* Provide example solutions or reference materials.

  • Certification Criteria Definition:

* Define requirements for course completion and certification (e.g., complete all modules, pass all quizzes with X%, submit all exercises).

* Design and upload custom certificate templates (with dynamic fields for learner name, course title, date).

  • Content Library/Asset Management:

* Upload, store, and manage media files (images, videos, audio, documents).

* Categorize and tag assets for easy search and reuse.

  • Preview Functionality:

* Preview individual lessons, quizzes, exercises, modules, or the entire course from a learner's perspective.

  • Publish/Unpublish Functionality:

* Control course visibility and availability to learners.

  • Version Control (Optional but Recommended):

* Track changes to course content, allowing rollback to previous versions.

1.2 User Roles (within the Builder Tool)

  • Course Administrator:

* Full access to all course builder features.

* Can create, edit, publish, archive any course.

* Manages users and their roles within the builder.

  • Course Creator:

* Can create, edit, and manage courses they are assigned to.

* Can publish courses they create/manage.

  • Content Contributor:

* Can create and edit lessons, quizzes, exercises within assigned modules/courses.

* Cannot publish courses or define certification criteria.

1.3 High-Level User Flows

  1. New Course Creation:

* Login to Builder Dashboard.

* Click "Create New Course."

* Enter Course Details (Title, Description, Category).

* Add Modules (Title, Description).

* Within each Module:

* Add Lessons (select content type, add content).

* Add Quizzes (define questions, answers, settings).

* Add Hands-on Exercises (define instructions, criteria).

* Define Certification Criteria.

* Preview Course.

* Publish Course.

  1. Editing Existing Course:

* Login to Builder Dashboard.

* Select "My Courses" or search for a course.

* Click "Edit Course."

* Navigate through the course structure (modules, lessons) using a sidebar.

* Select a specific element (lesson, quiz) to edit in the main content area.

* Save Changes (auto-save recommended).

* Republish (if already published) or Publish (if in Draft).

1.4 Conceptual Data Model (Simplified)

  • Course: id, title, description, category, status (draft, published, archived), creator_id, created_at, updated_at, learning_objectives, target_audience
  • Module: id, course_id, title, description, order, prerequisites (array of module IDs)
  • Lesson: id, module_id, title, content_type (text, video, audio, pdf, scorm), content_data (JSON or URL), order, estimated_duration, attachments (array of asset IDs)
  • Quiz: id, module_id (or lesson_id), title, description, pass_score, time_limit, max_attempts, randomize_questions
  • Question: id, quiz_id, question_text, question_type (mcq_single, mcq_multiple, true_false, short_answer, matching), options (JSON array), correct_answer (JSON or string), explanation
  • Exercise: id, module_id (or lesson_id), title, description, instructions, submission_type (text, file_upload, url), grading_criteria (JSON)
  • Certification: id, course_id, title, description, requirements (JSON), template_id
  • Asset: id, filename, url, type (image, video, audio, document), uploaded_by, uploaded_at
  • User: id, name, email, role (admin, creator, contributor)

1.5 Conceptual Technology Stack

  • Frontend: React.js / Vue.js / Angular (for a highly interactive and responsive Single Page Application)
  • Backend: Node.js (Express/NestJS) / Python (Django/Flask) / Ruby on Rails (for RESTful API development)
  • Database: PostgreSQL (for relational data like courses, modules, users) and potentially MongoDB (for flexible content storage if content structures vary greatly)
  • Cloud Infrastructure: AWS / Azure / Google Cloud Platform (for scalable hosting, S3/Blob storage for assets, CDN for content delivery, Lambda/Functions for serverless operations)
  • Content Editing: Rich Text Editor like TinyMCE or Quill.js.
  • Video Processing: FFmpeg (backend) for transcoding, or integration with services like Cloudinary/Vimeo API.

2. Wireframe Descriptions (Key Screens)

The following descriptions outline the layout and key components for essential screens within the Training Course Builder.

2.1 Dashboard

  • Layout: Two-column layout.

* Left Sidebar (Persistent):

* Navigation: "Dashboard", "My Courses", "Content Library", "Settings", "Help".

* User Profile/Avatar.

* Main Content Area:

* Header: "Welcome, [User Name]!"

* Quick Actions: Large, prominent buttons for "Create New Course", "Upload Content", "View Published Courses".

* Course Overview Cards: Grid or list view of recent courses (e.g., "In Progress," "Drafts," "Published"). Each card shows course title, status, last updated, and quick action buttons (Edit, Preview, Publish).

* Activity Feed (Optional): Recent edits by collaborators, course status changes.

2.2 Course Editor (Main View)

  • Layout: Three-column layout.

* Left Sidebar (Course Structure Navigator):

* Tree-like collapsible/expandable view of the course:

* Course Title (top level)

* Modules (nested under course)

* Lessons/Quizzes/Exercises (nested under modules)

* + button next to Course/Module for "Add Module" / "Add Lesson/Quiz/Exercise".

* Drag-and-drop functionality for reordering modules/lessons.

* Middle Column (Content Editing Area):

* Dynamic area that changes based on the selected item in the left sidebar.

* If Course Selected: Course details form (Title, Description, Objectives, Category, Certification Criteria).

* If Module Selected: Module title/description editor, module settings.

* If Lesson Selected: Rich Text Editor, media embed options, attachment uploader, lesson duration input.

* If Quiz Selected: Quiz settings (passing score, time limit), list of questions with "Add Question" button.

* If Exercise Selected: Instructions editor, submission type selector, rubric builder.

* Right Sidebar (Contextual Tools/Preview):

* For any selected item: "Save" button (or auto-save indicator), "Preview" button.

* For Course: "Publish/Unpublish" button, "Share" options.

* For Content: "Content Library" access, templating options.

2.3 Quiz Builder (within Course Editor)

  • Layout: Integrated within the Middle Column (Content Editing Area) when a Quiz is selected.
  • Components:

* Quiz Header: Quiz Title, Description, Settings (Pass Score, Time Limit, Attempts, Randomize Questions).

* Question List: Scrollable list of existing questions. Each item shows question type, partial text, and action buttons (Edit, Duplicate, Delete, Reorder handle).

* "Add New Question" Button: Prominently displayed, leading to a modal or inline form.

* Question Editor (Modal/Inline):

* Question Type Selector: Dropdown/radio buttons (MCQ, True/False, Short Answer, Matching).

* Question Text Input: Rich text editor.

* Options Input (for MCQ/Matching): Dynamic input fields for options, radio buttons/checkboxes for correct answer selection.

* Correct Answer Input (for Short Answer): Text field.

* Explanation/Feedback Input: Rich text editor.

* "Save Question" / "Cancel" buttons.

2.4 Content Library

  • Layout: Main content area.
  • Components:

* Header: "Content Library".

* Search Bar & Filters: Filter by type (Image, Video, Document), tags, date uploaded.

* "Upload New Asset" Button: Opens a file upload modal.

* Asset Grid/List View: Displays thumbnails/icons of uploaded assets. Each item shows filename, type, upload date.

* Asset Details (Modal on click): Larger preview, metadata (tags, description), options to edit metadata, delete, or get shareable link.


3. Color Palettes

A professional, accessible, and clean color palette is essential for a productive user experience.

3.1 Primary Palette (Core Brand & Action Colors)

  • Primary Blue: #007bff (or a similar vibrant, trustworthy blue)

Usage:* Main call-to-action buttons, primary navigation highlights, active states, brand elements.

  • Dark Blue/Teal: #0056b3 (or a slightly darker shade of primary blue/teal)

Usage

gemini Output

Finalized Design Assets for the Training Course Platform

This document outlines the detailed 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 course content across various subjects.


1. Detailed Design Specifications

1.1 Overall Aesthetic & Brand Integration

  • Aesthetic: Clean, modern, professional, and inviting. Emphasize clarity, readability, and ease of navigation. The design should feel premium yet accessible.
  • Brand Integration: The platform will be designed to easily incorporate client-specific branding elements such as logos, primary brand colors, and custom typography where applicable. A dedicated "Branding Settings" interface will allow administrators to customize these elements.

1.2 Typography

  • Headings (H1, H2, H3):

* Font Family: Montserrat (modern, strong, legible) or Open Sans (clean, versatile).

* Weight: Semi-bold to bold for emphasis.

* Usage: Course titles, module titles, section headers.

  • Body Text:

* Font Family: Lato (highly readable, friendly) or Roboto (neutral, optimized for screens).

* Weight: Regular.

* Usage: Lesson content, descriptions, instructions, quiz questions.

  • UI Elements (Buttons, Navigation):

* Font Family: Inherit from Body Text or a slightly condensed version for efficiency.

* Weight: Medium to Semi-bold for clarity and clickability.

  • Font Sizes & Line Heights:

* H1: 32-48px (responsive)

* H2: 24-36px

* H3: 20-28px

* Body Text: 16-18px (optimized for readability)

* Line Height: 1.5-1.6 for body text to improve readability.

* Paragraph Spacing: Consistent spacing between paragraphs (e.g., 1em) for better content breaks.

1.3 Imagery & Icons

  • Imagery Style: High-quality, relevant, and professional. Images should support the content without distracting from it. Consider using a mix of stock photography, custom illustrations, and data visualizations.

* Course Thumbnails: Engaging, representative images or custom graphics.

* Lesson Media: Integrated videos, infographics, diagrams.

  • Iconography Style:

* Style: Consistent, modern, outlined or filled (flat design preferred).

* Set: Utilize a single, cohesive icon set (e.g., Font Awesome, Material Icons, or a custom set).

* Usage: Navigation, progress indicators, interactive elements (e.g., "next lesson," "play video," "download resource"), feedback (correct/incorrect).

1.4 Interactive Elements

  • Buttons:

* Primary Action: Solid fill with rounded corners, contrasting text color. Clear hover and active states (e.g., slight darkening/lightening of fill, subtle shadow).

* Secondary Action: Outlined buttons with transparent fill, primary brand color border and text.

* Tertiary/Text Links: Underlined on hover or distinct color.

  • Navigation:

* Global Navigation: Fixed header or sidebar (responsive), clear active states.

* Course Navigation: Hierarchical list (accordion or expandable tree) showing modules and lessons.

  • Progress Bars: Smooth, animated fill using an accent color, clearly indicating completion percentage.
  • Input Fields: Clean, minimal design with clear labels (top-aligned or floating). Distinct focus state (e.g., subtle border highlight).
  • Toggle Switches & Checkboxes: Modern, visually distinct interactive states.
  • Modals & Pop-ups: Clean, centered, semi-transparent overlay. Clear close button.

1.5 Responsiveness

  • Mobile-First Approach: Design will prioritize optimal viewing and interaction on mobile devices, then scale up for tablet and desktop.
  • Layout Adaptability: Grids will fluidly adjust content blocks, navigation will collapse into a hamburger menu on smaller screens, and text sizes will scale appropriately.
  • Touch Targets: Ensure all interactive elements have sufficiently large touch targets for mobile users (min. 44x44px).

1.6 Accessibility

  • Color Contrast: Adherence to WCAG 2.1 AA standards for text and interactive elements.
  • Keyboard Navigation: All interactive elements (buttons, links, form fields) will be fully navigable via keyboard, with clear focus indicators.
  • Alt Text: All meaningful images will have descriptive alt text.
  • Semantic HTML: Proper use of HTML5 elements (e.g., <nav>, <main>, <article>, <aside>) for screen reader compatibility.
  • ARIA Attributes: Use ARIA labels and roles where necessary to enhance accessibility for complex widgets.

2. Wireframe Descriptions

The following describes key screens and their layout, focusing on functionality and information hierarchy.

2.1 Course Dashboard / User Homepage

  • Layout: Grid-based or list-based display of enrolled courses.
  • Header:

* Logo (left), Search bar (center/right), User profile/avatar (far right with dropdown for settings, logout).

* Global navigation (e.g., "Dashboard", "Browse Courses", "My Certificates").

  • Main Content Area:

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

* "My Courses" Section:

* Each course represented by a card: Course thumbnail, title, instructor, current progress bar, "Resume" or "Start Course" button.

* Filtering/sorting options (e.g., "In Progress", "Completed", "Newest").

* "Announcements/Updates" (Optional): Small section for platform-wide or course-specific notifications.

  • Footer: Copyright, privacy policy, terms of service links.

2.2 Course Overview Page

  • Layout: Two-column layout with a prominent header banner.
  • Header Banner:

* Large course title, instructor name, short description.

* "Enroll/Start Course" button, "Add to Wishlist" (if applicable).

* Course statistics (e.g., "X students enrolled", "Y hours of content").

  • Left Column (Main Content):

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

* "Course Modules": Expandable list of modules. Each module shows its title, number of lessons, and estimated time. Clicking expands to show lesson titles.

* "Instructor Bio": Photo, name, brief bio, social links.

* "Reviews" (Optional): User ratings and testimonials.

  • Right Column (Sidebar - Sticky on scroll):

* Course image/video preview.

* Price/Enrollment options.

* Key features/benefits (e.g., "Downloadable Resources", "Certificate of Completion").

2.3 Module & Lesson Navigation Page

  • Layout: Two-column layout with the main content on the right and a persistent course navigation sidebar on the left.
  • Header: Course title, current module/lesson title.
  • Left Sidebar (Persistent Course Navigation):

* Course Title: At the top.

* Module List: Expandable list.

* Each module: Title, progress indicator.

* Each lesson: Title, icon indicating lesson type (video, text, quiz, exercise), completion status (checkmark/empty circle).

* Current lesson highlighted.

  • Right Main Content Area:

* Lesson Title: Prominent.

* Content Display:

* Video Lessons: Large embedded video player, controls.

* Text Lessons: Rich text editor content, images, code blocks.

* Interactive Elements: Embedded simulations, interactive diagrams.

* Resources Section: Downloadable files, external links.

* Discussion/Comments (Optional): Area below content.

* Navigation Buttons: "Previous Lesson", "Next Lesson", "Mark as Complete" (if not automatic).

2.4 Quiz Page

  • Layout: Main content area for questions, with clear navigation.
  • Header: Quiz title, current question number out of total, timer (if applicable).
  • Question Area:

* Question text (clear and concise).

* Associated media (image, video) if relevant.

* Answer options: Radio buttons (single choice), checkboxes (multiple choice), text input (short answer), dropdowns.

* Feedback (after submission/per question): Green for correct, red for incorrect, explanation.

  • Navigation: "Previous Question", "Next Question", "Submit Quiz".
  • Progress Indicator: Small dots or a mini progress bar showing completed questions.

2.5 Hands-on Exercise Page

  • Layout: Clear instructions, dedicated workspace/submission area.
  • Header: Exercise title.
  • Instructions Area:

* Detailed step-by-step instructions.

* Required tools/software.

* Expected outcome/deliverables.

* Reference materials (links, code snippets).

  • Workspace/Submission Area:

* Code Editor (for programming exercises): Syntax highlighting, line numbers.

* File Upload: Drag-and-drop or browse functionality.

* Text Input: For written responses or reports.

* Preview Area (if applicable): For design or web development tasks.

  • Guidance/Hints (Optional): Collapsible sections for hints.
  • "Submit Exercise" Button: Prominent.
  • "Save Draft" (Optional): For longer exercises.

2.6 Certification Page

  • Layout: Focus on the certificate display and verification.
  • Header: "Certificate of Completion".
  • Certificate Display:

* High-resolution image of the certificate, clearly showing:

* Course Title

* Learner's Name

* Date of Completion

* Instructor/Institution Signature/Logo

* Unique Certificate ID (for verification)

* Options to "Download PDF", "Share to LinkedIn", "Print".

  • Certification Criteria Met: List of requirements fulfilled (e.g., "All modules completed", "Passed all quizzes with X%", "Submitted all exercises").
  • Verification Link: A public link to verify the certificate's authenticity.

3. Color Palettes

The chosen palettes aim for professionalism, readability, and a modern feel, with flexibility for client branding.

3.1 Primary Brand Palette (Client Customizable)

  • Primary Color: #0056B3 (A professional, deep blue - often associated with trust and knowledge)

* Usage: Main CTA buttons, active navigation states, primary headers, brand accents.

  • Secondary Color: #007BFF (A slightly brighter, more vibrant blue)

* Usage: Hover states for primary buttons, progress bar fill, key highlights.

  • Accent Color: #28A745 (A confident, engaging green)

* Usage: Success messages, completion indicators, positive feedback.

3.2 Neutral Palette

  • Background (Light): #F8F9FA (Very light grey - clean, minimal background for main content areas)
  • Background (Dark/Card): #FFFFFF (Pure white - for content cards, modals, lesson backgrounds)
  • Text (Primary): #212529 (Dark charcoal grey - highly readable for main body text)
  • Text (Secondary): #6C757D (Medium grey - for less critical information, descriptions, footnotes)
  • Borders/Dividers: #DEE2E6 (Light grey - for subtle separation of elements)

3.3 Semantic Colors

  • Success: #28A745 (Green - for correct answers, successful actions)
  • Warning: #FFC107 (Amber - for important notices, pending actions)
  • Error: #DC3545 (Red - for incorrect answers, error messages, failed actions)
  • Information: #17A2B8 (Cyan - for informational messages)

Example Palette Usage:

  • Header Background: #FFFFFF
  • Body Background: #F8F9FA
  • Primary Button: Background #0056B3, Text #FFFFFF
  • Progress Bar: Background #DEE2E6, Fill #007BFF
  • Quiz Correct Answer: Text #28A745
  • Quiz Incorrect Answer: Text #DC3545

4. UX Recommendations

4.1 Clear & Consistent Navigation

  • Global Navigation: Always present (fixed header or sidebar) for easy access to dashboard, course library, and user profile.
  • Course-Specific Navigation: A persistent sidebar within a course showing modules and lessons, clearly indicating the user's current position and completion status.
  • Breadcrumbs: Implement breadcrumbs (e.g., Dashboard > Course Title > Module Title > Lesson Title) to help users understand their location within the course hierarchy.

4.2 Intuitive Feedback Mechanisms

  • Quizzes: Immediate feedback on answers (correct/incorrect) with clear explanations. Summary of results upon quiz completion.
  • Exercises: Clear submission confirmation. For graded exercises, a dedicated section to view instructor feedback.
  • Progress Indicators: Visually prominent progress bars and completion checkmarks at course, module, and lesson levels to motivate learners.

4.3 Content Chunking & Visual Hierarchy

  • Break Down Content: Divide long lessons into smaller, digestible sections with clear headings and subheadings.
  • Visual Hierarchy: Use varying font sizes, weights, and colors to guide the user's eye and emphasize important information.
  • Whitespace: Utilize ample whitespace to reduce cognitive load and make content more scannable.

4.4 Engaging Interactive Elements

  • Hover States: Provide visual feedback for all interactive elements (buttons, links, cards) on hover.
  • Micro-interactions: Subtle animations for loading states, button clicks, or progress updates to enhance engagement
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);}});}