Training Course Builder
Run ID: 69cc6bb43e7fb09ff16a1bc02026-04-01Education
PantheraHive BOS
BOS Dashboard

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

This document outlines the detailed research, design specifications, and user experience (UX) recommendations for the "Training Course Builder" platform. This output serves as the foundational blueprint for the subsequent development phases, ensuring a robust, intuitive, and highly functional tool for building comprehensive training courses.


1. Introduction: Training Course Builder - Design & Requirements

The "Training Course Builder" is envisioned as a comprehensive, user-friendly platform empowering subject matter experts, educators, and trainers to effortlessly create, manage, and publish engaging training courses. This step focuses on defining the core functionalities, user interface (UI) elements, and overall user experience (UX) to ensure the platform meets the highest standards of usability and efficiency.

2. Design Specifications

2.1. Functional Requirements

The platform will support the following key functionalities:

  • Course Management:

* Create New Course: Initiate a new course project with essential details (title, description, target audience, learning objectives, course image/thumbnail).

* Edit/Update Course Details: Modify course metadata at any time.

* Course Status: Draft, Published, Archived, Unpublished.

* Course Duplication: Ability to clone an existing course for rapid iteration or template creation.

* Course Deletion: Secure deletion with confirmation.

* Course Preview: Real-time preview of the course from a learner's perspective.

  • Module & Lesson Management:

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

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

* Reorder Modules & Lessons: Drag-and-drop functionality for easy content reorganization.

* Lesson Types: Support for various content types within lessons.

  • Content Editor:

* Rich Text Editor (WYSIWYG): For text-based content, supporting formatting (bold, italics, lists, headings), hyperlinks, and tables.

* Media Integration:

* Image Upload & Management: Support for common image formats (JPG, PNG, GIF), basic editing (crop, resize), and alt-text input.

* Video Embedding: Seamless integration with platforms like YouTube, Vimeo, or direct video file uploads (with robust transcoding/streaming capabilities).

* Audio Embedding: Support for audio files.

* File Attachments: Allow instructors to upload supplementary documents (PDFs, PPTs, DOCs).

* External Content Embedding: Embed iframes for external tools or interactive content.

  • Quiz Builder:

* Multiple Question Types:

* Multiple Choice (single/multiple correct answers)

* True/False

* Short Answer/Text Input

* Matching

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

* Question Bank: Ability to save and reuse questions across quizzes/courses.

* Scoring & Feedback: Define points per question, provide immediate or delayed feedback, and explanation for correct/incorrect answers.

* Quiz Settings: Time limits, number of attempts, question randomization, pass/fail threshold.

  • Hands-on Exercise/Assignment Builder:

* Detailed Instructions: Rich text editor for exercise descriptions, objectives, and submission guidelines.

* Submission Types:

* File Upload (documents, code, media)

* Text Input (essay, code snippet)

* External Link (e.g., link to a live project)

* Grading Criteria: Define rubrics or specific points for evaluation.

* Due Dates & Availability: Set parameters for when exercises are accessible and when they are due.

  • Certification Criteria Definition:

* Completion Requirements: Define conditions for course completion (e.g., complete all lessons, achieve a minimum score on quizzes, submit all assignments).

* Certificate Generation: Template-based certificate generation upon successful completion, including course title, learner name, date, and instructor/institution signature.

  • User & Role Management (Admin/Instructor focus for builder):

* Instructor Profiles: Manage instructor information and associated courses.

* Permissions: Define granular permissions for course creation, editing, publishing.

  • Analytics & Reporting (High-Level):

Basic course performance metrics (e.g., number of enrollments, completion rates - primarily for the published course, but accessible via the builder's dashboard*).

  • Version Control & Auto-Save:

* Automatic saving of course progress to prevent data loss.

* Basic version history for major course revisions.

2.2. Technical Considerations (High-Level)

  • Scalability: Designed to handle a growing number of courses, content assets, and concurrent users.
  • Security: Robust authentication (OAuth 2.0, JWT) and authorization, data encryption (at rest and in transit), and regular security audits.
  • Cloud-Native Architecture: Leverage cloud services (AWS, Azure, GCP) for flexibility, reliability, and cost-effectiveness.
  • API-First Approach: Develop a well-documented API to facilitate future integrations with Learning Management Systems (LMS), eCommerce platforms, or other educational tools.
  • Responsive Design: Ensure the builder interface is fully functional and visually appealing across various devices (desktop, tablet, mobile).
  • Performance: Optimize loading times and responsiveness for a smooth user experience, especially within the content editor.

2.3. Data Model (High-Level Entities)

  • User: UserID, Name, Email, Role (Instructor, Admin, Learner)
  • Course: CourseID, Title, Description, LearningObjectives, TargetAudience, ThumbnailURL, Status, InstructorID, CreatedDate, LastModifiedDate
  • Module: ModuleID, CourseID, Title, Description, OrderIndex
  • Lesson: LessonID, ModuleID, Title, Description, LessonType (Content, Quiz, Exercise), OrderIndex
  • ContentBlock: ContentBlockID, LessonID, ContentType (Text, Image, Video, File, Embed), Content (JSON/HTML for text, URL for media), OrderIndex
  • Quiz: QuizID, LessonID, Title, Description, PassingScore, TimeLimit, MaxAttempts
  • Question: QuestionID, QuizID, QuestionText, QuestionType, Points
  • Option: OptionID, QuestionID, OptionText, IsCorrect
  • Exercise: ExerciseID, LessonID, Title, Description, SubmissionType, DueDate, MaxPoints
  • CertificateTemplate: TemplateID, CourseID, TemplateDetails (configurable fields)

3. Wireframe Descriptions (Key Screens)

3.1. Dashboard / Course List

  • Layout: Left-hand navigation, main content area for course cards/list.
  • Elements:

* Header: Logo, User Profile/Settings, "Create New Course" button.

* Sidebar Navigation: Links to Dashboard, My Courses, Templates, Analytics (if enabled).

* Course Cards/List: Each card displays Course Title, Thumbnail, Status (Draft, Published), Progress (e.g., "5/10 lessons complete"), Last Modified Date, and Action buttons (Edit, Preview, Publish/Unpublish, Delete).

* Search & Filter: Input field for course title, filters for status, category.

3.2. New Course Setup Wizard

  • Layout: Step-by-step wizard, modal or full-page.
  • Elements:

* Progress Indicator: "Step 1 of 3: Course Details", "Step 2 of 3: Modules & Lessons", etc.

* Input Fields: Course Title, Short Description, Long Description (rich text), Target Audience, Learning Objectives (add multiple), Course Category, Course Thumbnail Upload.

* Action Buttons: "Next", "Back", "Save Draft", "Cancel".

3.3. Course Editor (Main View - "Curriculum Builder")

  • Layout: Two-column layout. Left: Course Structure Tree. Right: Content Editing Area.
  • Elements:

* Header: Course Title, Status, "Preview Course", "Publish Course", "Save" (auto-save indicator).

* Left Column (Course Structure):

* Collapsible tree view: Course Title (root) > Modules > Lessons.

* "Add Module" button at the course level.

* "Add Lesson" button within each module.

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

* Context menu (three dots) for each module/lesson: Edit Title, Duplicate, Delete.

* Right Column (Content Editing Area):

* Dynamically loads content editor based on selected item in the left column.

* If a module is selected: Module Title, Description editor.

* If a lesson is selected: Lesson Title, Lesson Type selector (Content, Quiz, Exercise), and the corresponding editor.

3.4. Lesson Content Editor

  • Layout: Single-column content block editor.
  • Elements:

* Lesson Title: Editable.

* "Add Content Block" Button: Allows adding Text, Image, Video, File, Quiz, Exercise.

* Content Blocks: Each block is a distinct editable unit.

* Text Block: WYSIWYG editor.

* Image Block: Image preview, upload button, alt-text input, caption.

* Video Block: Embed URL input, upload option, preview.

* File Block: File upload, display file name, download link.

* Embed Block: iFrame URL input.

* Block Controls: Drag-and-drop handle for reordering, Edit, Duplicate, Delete buttons for each block.

3.5. Quiz Builder Interface

  • Layout: Question list on left, question editor on right.
  • Elements:

* Quiz Settings: Title, Description, Passing Score, Time Limit, Max Attempts.

* Question List: "Add Question" button, list of questions (e.g., "1. What is X? (MCQ)").

* Question Editor:

* Question Type Selector (Dropdown: Multiple Choice, True/False, Short Answer, etc.).

* Question Text (WYSIWYG).

* Points for question.

* Options Section (for MCQ/T/F): Add Option button, text input for each option, radio/checkbox to mark as correct, delete option.

* Feedback Section: Correct Answer Feedback, Incorrect Answer Feedback (rich text).

3.6. Exercise Builder Interface

  • Layout: Form-based input.
  • Elements:

* Exercise Title: Editable.

* Instructions: Rich text editor for detailed instructions.

* Submission Type Selector: Dropdown (File Upload, Text Input, External Link).

* File Upload Settings (if selected): Allowed file types, max file size.

* Due Date Picker: Calendar input.

* Max Points/Grading Criteria: Input for points, rich text editor for rubric.

3.7. Certification Criteria Editor

  • Layout: Checklist and settings form.
  • Elements:

* "Require all lessons to be completed." (Checkbox)

* "Require all quizzes to be passed." (Checkbox)

* "Require a minimum overall course score of __%." (Input field)

* "Require all assignments to be submitted/graded." (Checkbox)

* Certificate Template Customization:

* Preview of default certificate.

* Input fields for institution name, instructor signature text.

* Option to upload institution logo.

4. Color Palette

The chosen color palette aims for professionalism, clarity, and an engaging user experience, reflecting trustworthiness and ease of use.

  • Primary Brand Color: #0056B3 (A professional, trustworthy blue)

* Usage: Main navigation accents, primary call-to-action buttons (e.g., "Publish Course", "Create New Course"), active states, major headings.

  • Secondary Accent Color: #28A745 (A vibrant green)

* Usage: Success messages, positive feedback, completion indicators, "Add" buttons, "Save" buttons.

  • Tertiary Accent Color: #FFC107 (A warm yellow/gold)

* Usage: Warnings, pending actions, highlights for important but non-critical information.

  • Warning/Error Color: #DC3545 (A distinct red)

* Usage: Error messages, destructive actions (e.g., "Delete" buttons), invalid input indicators.

  • Neutral Palette:

* Dark Gray (Text): #343A40 (For primary body text, ensures readability).

* Medium Gray (Secondary Text/Icons): #6C757D (For secondary information, labels, disabled states).

* Light Gray (Borders/Dividers): #DEE2E6 (Subtle separation, input field borders).

*Lighter

gemini Output

Training Course Builder: Detailed Design Specifications & UX/UI Recommendations

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" tool. The aim is to create an intuitive, powerful, and aesthetically pleasing platform that empowers users to build engaging and effective training courses for any subject.


1. Detailed Design Specifications

The Training Course Builder will offer a robust set of features to facilitate the creation, organization, and management of course content, assessments, and certifications.

1.1 Core Functionality

  • Course Creation & Management:

* New Course Setup: Define Course Title, Description, Target Audience, Learning Objectives, Course Thumbnail/Banner, and Category.

* Course Settings: Edit general course information, set course status (Draft, Published, Archived), and manage access permissions.

* Course Dashboard: An overview of all created courses with quick access to edit, publish, preview, or delete.

  • Module Management:

* Add/Edit Modules: Create new modules within a course, define Module Title and Module Objectives.

* Reorder Modules: Intuitive drag-and-drop functionality to easily rearrange the sequence of modules.

* Module Status: Option to publish/unpublish individual modules.

  • Lesson Management:

* Add/Edit Lessons: Create various lesson types within each module.

* Lesson Types:

* Text/HTML Lesson: Rich text editor (WYSIWYG) with support for headings, lists, images, tables, and embedded media (videos, audio).

* Video Lesson: Upload video files or embed from platforms like YouTube/Vimeo.

* Quiz Lesson: Interactive quizzes to test comprehension.

* Hands-on Exercise Lesson: Practical assignments requiring learner submission.

* File Download Lesson: Attach downloadable resources (PDFs, documents, spreadsheets).

* Reorder Lessons: Drag-and-drop functionality to arrange lessons within a module.

* Lesson Settings: Define estimated completion time, required completion, and visibility.

  • Content Editor (Rich Text & Media):

* WYSIWYG Editor: Standard rich text editing capabilities (bold, italic, underline, lists, links, text alignment).

* Media Embedding: Seamless integration for embedding videos, images, and other multimedia directly into lessons.

* Code Block Support: For technical courses, allow syntax-highlighted code blocks.

  • Quiz Builder:

* Question Types:

* Multiple Choice (Single Correct Answer)

* Multiple Select (Multiple Correct Answers)

* True/False

* Short Answer (Free text input with optional keywords for auto-grading)

* Matching (Drag-and-drop items to match pairs)

* Question Settings: Add hints, provide immediate feedback (correct/incorrect explanation), assign points, and randomize answer order.

* Quiz Settings: Set passing score, time limits, number of attempts, and display quiz results immediately or upon course completion.

  • Hands-on Exercise Builder:

* Instructions Editor: Provide detailed instructions, context, and resources for the exercise.

* Submission Types:

* File Upload (e.g., code files, documents, designs)

* Text Input (e.g., essay, code snippet)

* URL Submission (e.g., link to a live demo, GitHub repo)

* Rubric Integration: Define clear grading criteria with points for different aspects of the exercise.

* Sample Solutions/Walkthroughs: Option to provide post-submission solutions for learners.

  • Certification Criteria Builder:

* Completion Requirements:

* All modules completed.

* Minimum overall quiz score (e.g., 70%).

* All hands-on exercises submitted and passed.

* Specific lessons marked as complete.

* Certificate Design: Basic customization for certificate template (logo, name placeholders).

  • Preview Functionality:

* Learner View: Preview the entire course or individual lessons/quizzes/exercises exactly as a learner would experience it.

* Responsive Preview: Toggle between desktop, tablet, and mobile views.

  • Publishing & Versioning:

* Draft/Publish Toggle: Easily switch a course between draft and published states.

* Save & Autosave: Ensure no loss of work during creation.

* Versioning/Revision History: Track changes and revert to previous versions (optional, advanced feature).

1.2 User Interface Elements

  • Dashboard: Central hub displaying all courses, creation options, and analytics.
  • Course Editor: Multi-panel interface for managing course details, modules, lessons, and settings.
  • Content Creation Panels: Dedicated interfaces for the rich text editor, quiz builder, and exercise builder.
  • Navigation: Clear sidebar navigation for major sections, and breadcrumbs for hierarchical context within a course.
  • Modals & Dialogs: For actions like adding new elements, confirming deletions, or specific settings.

2. Wireframe Descriptions

Below are descriptions for key wireframes, outlining the layout and primary interactive elements for a desktop view.

2.1 Wireframe 1: Course Dashboard

  • Layout:

* Left Sidebar (Persistent): Brand Logo, Main Navigation (Dashboard, Course Library, Settings, Help).

* Header Bar: "Course Dashboard" title, Search Bar for courses, User Profile/Account menu, "Create New Course" button (prominent).

* Main Content Area:

* Course Cards/List: Displays created courses. Each card includes: Course Title, Thumbnail/Banner, Status (Draft/Published), Last Edited Date, Progress Bar (if applicable), and Action Buttons (Edit, Preview, Publish/Unpublish, More Options).

* Filtering/Sorting Options: Above the course list, allow filtering by status, category, and sorting by date/title.

  • Key Interactions: Clicking "Create New Course," clicking on a course card to edit, using search/filter.

2.2 Wireframe 2: Course Editor - Overview & Structure

  • Layout:

* Left Sidebar (Course-Specific): Course Title, Navigation for Course Sections (Overview, Modules, Certification, Settings, Preview).

* Header Bar: Course Title, "Save Draft" button, "Publish Course" button, "Preview" button, "Exit Editor" button.

* Main Content Area (Overview Tab):

* Course Details Panel: Editable fields for Course Title, Description, Target Audience, Learning Objectives. Upload field for Course Thumbnail/Banner.

* Course Status: Toggle for Draft/Published.

* Analytics Summary (Optional): Placeholder for future learner engagement data.

* Main Content Area (Modules Tab - Default View):

* Module List (Tree View): A hierarchical list displaying Modules and their nested Lessons.

* Module Card: Module Title, "Add Lesson" button, "Edit Module" icon, "Delete Module" icon. Drag handle for reordering.

* Lesson Item: Lesson Title (with icon indicating lesson type), "Edit Lesson" icon, "Delete Lesson" icon. Drag handle for reordering.

* "Add Module" Button: Prominently placed at the top or bottom of the module list.

  • Key Interactions: Navigating between course sections, editing course details, adding/reordering modules and lessons.

2.3 Wireframe 3: Lesson Editor (Text/HTML Type)

  • Layout:

* Left Sidebar (Course-Specific): Same as Wireframe 2, with the current lesson highlighted.

* Header Bar: Lesson Title, "Save Draft" button, "Preview Lesson" button, "Back to Modules" button.

* Main Content Area:

* Lesson Title Field: Editable text input for the lesson title.

* Lesson Type Selector: Dropdown or tabs to change lesson type (Text, Video, Quiz, Exercise, File Download).

* Rich Text Editor: Large content area with a toolbar for formatting (bold, italic, lists, links, images, video embeds, code blocks).

* Lesson Settings Panel (Right Sidebar or Collapsible): Estimated completion time, required for completion checkbox, visibility toggle.

  • Key Interactions: Typing and formatting content, embedding media, changing lesson type, saving changes.

2.4 Wireframe 4: Quiz Editor

  • Layout:

* Left Sidebar (Course-Specific): Same as Wireframe 2, with the current quiz lesson highlighted.

* Header Bar: Quiz Title, "Save Draft" button, "Preview Quiz" button, "Back to Modules" button.

* Main Content Area:

* Quiz Title Field: Editable text input.

* Quiz Settings Panel (Top/Right): Passing Score, Time Limit, Number of Attempts, Show Answers.

* Question List: A scrollable list of questions. Each item includes: Question Number, Question Type, a snippet of the question text, and Action Icons (Edit, Duplicate, Delete).

* "Add New Question" Button: Prominently placed below the question list.

* Question Editor (Modal or Inline Expansion): When "Add New Question" or "Edit" is clicked:

* Question Type Selector (MCQ, True/False, etc.).

* Question Text Area.

* Answer Options (dynamic based on question type, with correct answer selection).

* Feedback fields (Correct/Incorrect explanation).

* Points field.

* "Save Question" / "Cancel" buttons.

  • Key Interactions: Adding new questions, editing existing questions, configuring quiz settings.

3. Color Palettes

We propose two primary color palettes, both designed for professionalism, readability, and a modern aesthetic.

3.1 Palette 1: "Professional & Modern Blue"

This palette uses a calming blue as its primary accent, complemented by a neutral gray scale for readability and a subtle green for positive actions.

  • Primary Accent: #007bff (Vibrant Blue) - For primary buttons, active states, key highlights.
  • Secondary Accent: #28a745 (Success Green) - For "Save," "Publish," positive feedback.
  • Neutral Dark: #343a40 (Dark Gray) - For main headings, primary text.
  • Neutral Medium: #6c757d (Medium Gray) - For secondary text, borders, inactive elements.
  • Neutral Light: #f8f9fa (Light Gray/Off-white) - For backgrounds, panel separators.
  • Background: #ffffff (Pure White) - For content areas.
  • Warning/Error: #dc3545 (Red) - For error messages, delete actions.

3.2 Palette 2: "Warm & Engaging Earth"

This palette offers a softer, more approachable feel using earthy tones and a warm accent, suitable for a more educational or creative context.

  • Primary Accent: #F1920D (Warm Orange) - For primary buttons, active states, key highlights.
  • Secondary Accent: #2E8B57 (Sea Green) - For "Save," "Publish," positive feedback.
  • Neutral Dark: #3D3D3D (Charcoal Gray) - For main headings, primary text.
  • Neutral Medium: #708090 (Slate Gray) - For secondary text, borders, inactive elements.
  • Neutral Light: #F5F5DC (Beige/Cream) - For backgrounds, panel separators.
  • Background: #FFFFFF (Pure White) - For content areas.
  • Warning/Error: #B22222 (Firebrick Red) - For error messages, delete actions.

Font Recommendation: A clean, sans-serif font like Roboto, Open Sans, or Inter for excellent readability across all screen sizes.


4. UX Recommendations

These recommendations focus on creating a user-friendly, efficient, and enjoyable experience for course creators.

  • Intuitive Navigation & Information Architecture:

* Clear Hierarchy: Use breadcrumbs and a consistent sidebar navigation to help users understand their location within the course builder.

* Logical Grouping: Group related settings and functionalities together to reduce cognitive load.

* Consistent Terminology: Use clear and consistent labels for all features and actions.

  • Drag-and-Drop Functionality:

* Implement drag-and-drop for reordering modules, lessons, and quiz questions to provide a highly intuitive and direct manipulation experience.

  • Live Preview & Instant Feedback:

* "What You See Is What You Get" (WYSIWYG): Ensure the content editor accurately reflects how the content will appear to learners.

* Real-time Previews: Allow users to preview individual lessons, quizzes, or the entire course at any stage of creation without needing to publish.

  • Contextual Help & Guidance:

* Tooltips: Provide short, helpful explanations for complex fields or icons on hover.

* Inline Hints: Offer brief guidance directly within input fields or next to options.

* Onboarding Tour: A brief, optional tour for first-time users to highlight key features.

  • Progress Indicators & Feedback:

* Loading States: Use spinners or progress bars for actions that take time (e.g., uploading files, saving large courses).

* Success/Error Messages: Provide clear, concise feedback after user actions (e.g., "Course saved successfully," "Error: Please fill all required fields").

  • **Autosave & Version
gemini Output

Final Design Assets for the Training Course Builder

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" platform. The aim is to create an intuitive, engaging, and professional learning environment that effectively delivers course content and enhances the learner's journey from enrollment to certification.


1. Overall Design Philosophy

The design for the Training Course Builder platform prioritizes clarity, engagement, and accessibility. It focuses on a clean, modern aesthetic that minimizes distractions and facilitates focused learning. Key principles include:

  • User-Centric: Intuitive navigation and clear information hierarchy.
  • Responsive: Seamless experience across all devices (desktop, tablet, mobile).
  • Engaging: Visually appealing with interactive elements to maintain learner interest.
  • Accessible: Designed to meet WCAG 2.1 AA standards for inclusivity.
  • Consistent: Uniform design language across all screens and components.

2. Detailed Design Specifications

2.1. Layout and Grid System

  • Responsive Grid: Utilizes a flexible 12-column grid system (e.g., Bootstrap, Material Design) with adaptable gutters and margins to ensure optimal content display on various screen sizes.
  • Max Width: Content areas will have a maximum width (e.g., 1200px) on large screens to prevent content from stretching too wide and becoming difficult to read.
  • Spacing: Consistent use of a base unit (e.g., 8px) for padding, margins, and component spacing to maintain visual harmony.
  • Header & Footer: Persistent header for navigation, branding, and user profile. Footer for legal information, contact, and sitemap.
  • Sidebar Navigation (Optional): For complex courses with many modules/lessons, a collapsible sidebar can provide quick access to course structure.

2.2. Typography

  • Primary Font (Headings): A clean, modern sans-serif font (e.g., Montserrat, Lato, Open Sans) for titles and headings to ensure readability and a professional look.

* H1: 36px - 48px, Bold, for main page titles.

* H2: 28px - 36px, Semi-Bold, for section titles.

* H3: 22px - 28px, Medium, for sub-section titles.

* H4: 18px - 22px, Medium, for card titles, specific content headers.

  • Secondary Font (Body Text): A highly readable sans-serif font (e.g., Roboto, Noto Sans, Inter) for all body copy, ensuring comfortable reading over extended periods.

* Body Large: 18px - 20px, Regular, for introductory paragraphs, key takeaways.

* Body Medium: 16px - 18px, Regular, for standard paragraph text.

* Body Small: 14px - 16px, Regular, for captions, footnotes, helper text.

  • Line Height: 1.5 - 1.6 for body text to improve readability.
  • Text Colors: High contrast for readability (e.g., #333333 for primary text on light backgrounds).

2.3. Iconography

  • Style: Flat or outlined icons with a consistent stroke weight and corner radius. Avoid overly complex or skeuomorphic icons.
  • Purpose: Used to enhance navigation, indicate functionality (e.g., play, pause, download, quiz), and visually represent concepts (e.g., module, lesson, exercise, certificate).
  • Libraries: Utilize a well-established icon library (e.g., Font Awesome, Material Icons, Feather Icons) for consistency and ease of implementation.

2.4. Imagery and Media

  • High Quality: All images, videos, and graphics must be high-resolution and professionally produced.
  • Contextual: Media should directly support and enhance the learning content, not merely decorate.
  • Branding: Incorporate branding elements subtly within custom graphics.
  • Accessibility: All images must have descriptive alt text. Videos should include captions and transcripts.
  • Performance: Optimize image and video file sizes for fast loading times without sacrificing quality.

2.5. Interactive Elements (Buttons, Forms, Navigation)

  • Buttons:

* Primary Action: Prominent, solid background color (e.g., brand primary color), white text. Clear call to action (e.g., "Start Course", "Submit Answer").

* Secondary Action: Outline style or lighter background, brand primary text.

* Tertiary/Ghost: Text-only buttons for less critical actions.

* States: Clearly defined hover, active, and disabled states.

  • Forms:

* Input Fields: Clean, well-defined borders. Clear labels above or to the left of the input field.

* Validation: Real-time feedback for input validation (e.g., green checkmark for valid, red border for error).

* Placeholders: Use sparingly and ensure they don't replace labels.

  • Navigation:

* Global Navigation: Clear, concise links in the header (e.g., "Courses", "Dashboard", "Profile").

* Course Navigation: A dedicated menu (sidebar or top bar) showing modules and lessons, with clear indication of current location and completion status.

* Breadcrumbs: For complex navigation paths, breadcrumbs help users understand their location within the course structure.

2.6. Accessibility Considerations (WCAG 2.1 AA)

  • Color Contrast: Ensure sufficient contrast ratios for text and interactive elements against their backgrounds.
  • Keyboard Navigation: All interactive elements must be fully navigable and operable using only a keyboard.
  • Screen Reader Support: Semantic HTML, ARIA attributes where necessary, and clear focus indicators.
  • Resizable Text: Allow users to adjust text size without loss of content or functionality.
  • Captions & Transcripts: For all video and audio content.
  • Focus Indicators: Prominent visual indicators for keyboard focus.

3. Wireframe Descriptions (Key Screens)

3.1. Dashboard / Learner Home Page

  • Purpose: Central hub for learners to view their enrolled courses, progress, and upcoming activities.
  • Layout:

* Header: Global navigation (Courses, Dashboard, Profile), Search bar, Notifications, User avatar/dropdown.

* Main Content Area:

* "Continue Learning" Section: Prominently displays courses the learner is currently engaged with, showing progress bar, last accessed lesson, and a "Continue" button.

* "My Courses" Section: Grid or list view of all enrolled courses with course title, thumbnail, instructor, and overall progress.

* "Upcoming Activities/Deadlines" (Optional): Calendar or list of due dates for quizzes, exercises, etc.

* "Recommendations" (Optional): Suggests new courses based on interests or completed courses.

* Footer: Standard legal and contact information.

  • Key Elements: Course cards, progress bars, call-to-action buttons.

3.2. Course Overview Page

  • Purpose: Provides a comprehensive introduction to a specific course before starting.
  • Layout:

* Header: Global navigation, Course title (H1).

* Hero Section: Large course image/video, Course title, Instructor name, Course description (short summary), "Enroll/Start Course" button, "Add to Wishlist" (if applicable).

* Main Content Area:

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

* "Course Modules" Section: List of all modules with their titles and a brief overview. Each module can be expanded to show its lessons.

* "What You'll Learn" Section: Bullet points of key takeaways.

* "Requirements" Section: Prerequisites, necessary software/tools.

* "Instructor Profile" Section: Instructor's photo, bio, and credentials.

* "Reviews & Ratings" (Optional): Learner testimonials.

* Sidebar (Optional): Course details summary (duration, effort, certification), pricing, related courses.

  • Key Elements: Large imagery, clear headings, expandable/collapsible lists, prominent call-to-action.

3.3. Lesson Content Page

  • Purpose: Displays the actual learning material for a specific lesson.
  • Layout:

* Header: Global navigation, Course title, Lesson title (H2).

* Left Sidebar (Persistent or Collapsible): Course navigation tree (Modules > Lessons), highlighting the current lesson, with progress indicators for completed lessons.

* Main Content Area:

* Lesson Title (H1/H2): At the top of the content area.

* Content Display: Dynamic area for text, images, videos, embedded interactives (e.g., H5P, simulations).

* "Key Takeaways" / "Summary" Section: At the end of the lesson.

* "Resources" Section: Downloadable files, external links.

* "Discussion/Comments" Section (Optional): For learner interaction.

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

* Footer: Standard.

  • Key Elements: Media players, rich text editor styling, clear navigation, progress indicators.

3.4. Quiz / Assessment Page

  • Purpose: Administers quizzes or assessments to test learner comprehension.
  • Layout:

* Header: Global navigation, Course title, Quiz title (H2).

* Left Sidebar (Optional): Quiz timer, list of questions (with status: answered/unanswered).

* Main Content Area:

* Quiz Instructions: Clear guidelines (time limit, number of questions, passing score).

* Question Display: One question per screen or multiple questions per screen (depending on complexity).

* Question Type: Radio buttons (single choice), checkboxes (multiple choice), text input (short answer), drag-and-drop.

* Submit Button: Prominent, clearly labeled (e.g., "Submit Answer," "Next Question," "Finish Quiz").

* Progress Indicator: "Question X of Y."

* Feedback (Post-Submission): Immediate feedback for correct/incorrect answers, explanations, score, and review options.

* Footer: Standard.

  • Key Elements: Interactive form elements, timers, progress indicators, clear feedback mechanisms.

3.5. Hands-on Exercise Page

  • Purpose: Guides learners through practical application of concepts.
  • Layout:

* Header: Global navigation, Course title, Exercise title (H2).

* Left Sidebar (Persistent or Collapsible): Course navigation, similar to Lesson Content Page.

* Main Content Area:

* Exercise Title (H1/H2): At the top.

* Introduction/Context: Explains the purpose of the exercise.

* Step-by-Step Instructions: Clear, numbered or bulleted instructions, potentially with screenshots or video demonstrations.

* Tools/Resources: Links to necessary software, datasets, code snippets.

* Submission Area (Optional): Text editor, file upload, or code editor for learners to submit their work.

* Example Solution (Optional): Revealed after submission or completion.

* "Mark Complete" / "Submit Exercise" Button.

* Footer: Standard.

  • Key Elements: Rich text formatting, code blocks, file uploaders, clear instructions.

3.6. Certification Page

  • Purpose: Presents the learner's achievement upon successful course completion.
  • Layout:

* Header: Global navigation.

* Main Content Area (Centrally aligned):

* "Congratulations!" Message (H1).

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

* Course Title

* Learner's Name

* Date of Completion

* Issuing Organization/Instructor

* Unique Certificate ID/QR code for verification.

* Action Buttons: "Download Certificate (PDF)," "Share on LinkedIn," "Print Certificate."

* Further Recommendations: Suggests next steps or related courses.

* Footer: Standard.

  • Key Elements: Visually appealing certificate design, prominent call-to-action for download/sharing.

4. Color Palettes

The color palette is designed to be professional, inviting, and accessible, ensuring high contrast and clear visual hierarchy.

4.1. Primary Palette (Brand Colors)

  • Primary Blue/Green: #007BFF (Azure Blue) or #28A745 (Emerald Green) - Choose one as the dominant brand accent.

* Usage: Buttons, active navigation states, progress bars, key highlights, primary branding elements.

  • Secondary Accent (Complementary): #FFC107 (Amber Gold) or #6C757D (Slate Gray)

* Usage: Secondary buttons, subtle accents, icons, progress bar backgrounds (for contrast).

4.2. Neutral Palette (Backgrounds & Text)

  • Backgrounds:

* Light Background: #FFFFFF (Pure White) - Main content areas, cards.

* Off-White/Light Gray: #F8F9FA (Soft Gray) - Page backgrounds, subtle section dividers.

* Light Gray Border: #DEE2E6 (Light Steel) - Input fields, card borders, separators.

  • Text Colors:

* Primary Text: #343A40 (Dark Charcoal) - Headings, main body text.

* Secondary Text: #6C757D (Slate Gray) - Subheadings, helper text, less critical information.

* Disabled Text/Placeholder: #ADB5BD (Light Slate) - For disabled states or placeholder text.

4.3. System Colors (Feedback & Alerts)

  • Success: #28A745 (Green) - For successful actions, completion, positive feedback.
  • Warning: #FFC107 (Yellow/Amber) - For warnings, attention required.
  • Error: #DC3545 (Red) - For errors, invalid input, critical alerts.
  • Info: #17A2B8 (Cyan) - For informational messages.

Color Contrast Ratio Check:

  • `#3
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
"); 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' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); 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' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- 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",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); 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' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); 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} "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- 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",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "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"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); 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'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); 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} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/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(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/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)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- 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:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== 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(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } 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);}});}