Training Course Builder
Run ID: 69cbadfd61b1021a29a8b51e2026-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 for "Training Course Builder"

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" application. The goal is to create an intuitive, powerful, and flexible platform that allows users to efficiently design, build, and manage complete training courses across any subject, incorporating modules, lesson plans, quizzes, hands-on exercises, and certification criteria.


1. Detailed Design Specifications

This section covers the functional and non-functional requirements essential for the "Training Course Builder."

1.1. Functional Requirements

  • User Authentication & Authorization:

* Secure user registration and login (email/password, social logins).

* Role-based access control:

* Course Creator/Instructor: Full access to create, edit, publish, and manage their courses.

* Administrator: Manage users, system settings, oversee all courses.

(Future consideration: Collaborator role with specific permissions for course co-creation).*

  • Course Management:

* Create New Course: Define course title, description, target audience, learning objectives, estimated duration, category/tags.

* Edit/Update Course: Modify any course details, content, or settings.

* Duplicate Course: Clone an existing course as a template for new ones.

* Delete Course: With confirmation and archiving options.

* Publish/Unpublish Course: Control visibility and availability of the course.

* Course Status Tracking: Draft, Published, Archived.

* Course Versioning: Ability to save and revert to previous versions of a course (optional, advanced).

  • Module Management:

* Create/Edit/Delete Modules: Define module title, description, and learning objectives.

* Reorder Modules: Drag-and-drop functionality to change module sequence.

* Module Prerequisites: Set dependencies between modules (e.g., Module B requires completion of Module A).

  • Lesson Management:

* Create/Edit/Delete Lessons: Assign to specific modules, define lesson title, description, learning outcomes.

* Content Editor: Rich Text Editor (WYSIWYG) for text, headings, lists, tables.

* Media Integration:

* Upload and embed images (JPG, PNG, GIF).

* Upload and embed video (MP4, WEBM) or integrate from platforms like YouTube/Vimeo.

* Upload and embed audio (MP3, WAV).

* Upload and link downloadable files (PDF, DOCX, PPTX, ZIP).

* Embed external content via iframes (e.g., interactive simulations, external tools).

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

* Lesson Prerequisites: (Optional) Set dependencies between lessons within a module.

  • Quiz Management:

* Create/Edit/Delete Quizzes: Assign to modules/lessons.

* Question Types:

* Multiple Choice (single/multiple correct answers).

* True/False.

* Short Answer/Fill-in-the-blank.

* Matching.

* Ordering/Sequencing.

(Future consideration: Essay/Long Answer with manual grading).*

* Question Bank: Store and reuse questions across multiple quizzes.

* Quiz Settings:

* Passing score (percentage).

* Time limit (optional).

* Number of attempts allowed.

* Randomize question order.

* Show correct answers/feedback immediately or after completion.

* Question weighting/points.

  • Hands-on Exercise Management:

* Create/Edit/Delete Exercises: Assign to modules/lessons.

* Exercise Description: Detailed instructions, context, and expected outcomes.

* Resource Upload: Provide files, templates, or links necessary for the exercise.

* Submission Type: Text input, file upload (single/multiple), code submission (optional).

* Grading Criteria: Define rubric or checklist for evaluation.

* Peer Review Option: (Optional, advanced) Allow learners to review each other's submissions.

  • Certification Management:

* Define Certification Criteria:

* Completion of all modules/lessons.

* Minimum overall course score.

* Passing all quizzes with a minimum score.

* Successful completion/grading of all hands-on exercises.

* Certificate Design: Customizable templates for certificates (logo, course title, learner name, date, instructor signature).

* Automated Certificate Issuance: Upon meeting all criteria.

  • Preview Functionality:

* Live preview of individual lessons, quizzes, exercises.

* Full course preview to experience the learner's journey.

  • Templating System:

* Ability to save custom course structures, module layouts, or lesson types as templates.

* Pre-built templates for common course types (e.g., Compliance, Software Training, Onboarding).

  • Reporting & Analytics (Course Creator View):

* Basic course enrollment and completion rates.

* Quiz performance summaries.

(Note: Detailed learner analytics would typically reside in an integrated Learning Management System (LMS), but the builder should enable setting up the data points).*

  • Search & Filtering:

* Search courses, modules, lessons, questions by keywords.

* Filter by status, category, creation date.

1.2. Non-Functional Requirements

  • Performance:

* Fast loading times for all pages and content.

* Efficient media handling and streaming.

* Responsive UI for smooth interactions.

  • Security:

* Secure authentication and authorization mechanisms.

* Data encryption (at rest and in transit).

* Protection against common web vulnerabilities (XSS, CSRF, SQL Injection).

* Regular security audits.

  • Scalability:

* Architecture designed to support a growing number of courses, content, and users.

* Ability to integrate with cloud storage solutions for media assets.

  • Usability & User Experience (UX):

* Intuitive, clean, and consistent user interface.

* Minimal learning curve for new users.

* Clear feedback for user actions.

* Error handling with user-friendly messages.

  • Accessibility:

* Compliance with WCAG 2.1 AA standards.

* Keyboard navigation, screen reader compatibility, sufficient color contrast.

  • Compatibility:

* Cross-browser compatibility (Chrome, Firefox, Edge, Safari).

* Responsive design for various devices (desktop, tablet, mobile).

  • Maintainability:

* Well-documented code and clear architecture for future enhancements and bug fixes.

  • Reliability:

* High uptime and data integrity.

* Regular backups and disaster recovery plan.


2. Wireframe Descriptions

This section outlines key screens and their structural layout, focusing on content organization and user flow.

2.1. Dashboard / Course Overview

  • Layout:

* Header: Logo, User Profile (avatar, name, dropdown for settings/logout), "Help" button.

* Main Navigation (Left Sidebar): "Dashboard", "My Courses", "Templates", "Settings", "Support".

* Main Content Area:

* "My Courses" Section:

* Clear "Create New Course" button (prominently placed, e.g., top right).

* Search bar and filters (by status: Draft, Published, Archived; by category).

* Course List: Card or table view for each course, showing:

* Course Title

* Status (Draft, Published)

* Last Modified Date

* Actions (Edit, Preview, Publish/Unpublish, Duplicate, Delete, View Analytics - if available)

* Progress indicator (e.g., "7/10 Modules Completed" for a course in draft).

* Quick Stats/Insights (Optional): "Courses in Draft", "Published Courses", "Courses with Pending Tasks".

2.2. Course Editor - Main Layout

  • Layout: A multi-panel interface designed for efficient course construction.

* Top Bar:

* Course Title (editable).

* "Save" button (with autosave indicator).

* "Preview" button (opens in new tab/modal).

* "Publish/Unpublish" toggle/button.

* "Exit Editor" button.

* Left Sidebar (Course Structure Navigator):

* Course Settings: Link to overall course details (title, description, objectives, metadata).

* Module List:

* Each module is a collapsible/expandable item.

* Drag-and-drop handles for reordering modules.

* "Add Module" button.

* Within each module: List of lessons, quizzes, exercises.

* Drag-and-drop handles for reordering content within a module.

* "Add Lesson", "Add Quiz", "Add Exercise" buttons for the selected module.

* Context menu (three dots) for Module/Lesson/Quiz/Exercise: Edit, Duplicate, Delete.

* Main Content Area (Editor Panel):

* This area dynamically changes based on the item selected in the Left Sidebar (Course Settings, Module, Lesson, Quiz, Exercise).

* Provides the specific forms and tools for editing the selected item.

2.3. Lesson Editor (Main Content Area)

  • Layout:

* Lesson Header: Lesson Title (editable), breadcrumbs (Course > Module > Lesson).

* Content Type Selector: Buttons/dropdown to add different content blocks: "Text", "Image", "Video", "Audio", "File Upload", "Embed Code".

* Content Blocks: Stackable sections for various content types.

* Text Block: Rich Text Editor (WYSIWYG) with formatting options (bold, italics, lists, links, headings).

* Image Block: Upload button, image preview, alt text field, caption field.

* Video Block: Upload button or URL input for YouTube/Vimeo, video player preview.

* Audio Block: Upload button or URL input, audio player preview.

* File Upload Block: Upload button, file name display, description field.

* Embed Code Block: Text area for HTML/iframe code.

* Block Actions: Reorder (up/down arrows), Duplicate, Delete for each content block.

* Lesson Settings (Sidebar/Accordion): Optional fields like "Learning Outcomes for this Lesson," "Estimated Time."

2.4. Quiz Editor (Main Content Area)

  • Layout:

* Quiz Header: Quiz Title (editable), breadcrumbs.

* Quiz Settings Panel (Top/Sidebar):

* Description field.

* Passing Score (%) input.

* Time Limit (minutes) input (optional).

* Number of Attempts Allowed input.

* Toggle: "Randomize Question Order".

* Toggle: "Show Correct Answers/Feedback After Submission".

* Question List Area:

* "Add New Question" button (dropdown for question types: Multiple Choice, True/False, Short Answer, Matching).

* "Add from Question Bank" button.

* List of questions:

* Each question displayed as a collapsible card.

* Question type indicator.

* Question text preview.

* Points/Weighting for question.

* Drag-and-drop handles for reordering questions.

* Actions: Edit, Duplicate, Delete.

* Question Editor (Modal/Expanded Card):

* Question Text field (Rich Text Editor).

* Answer Options based on type (e.g., for MCQ: input fields for options, radio button/checkbox for correct answer, feedback field for each option).

* Correct Answer Explanation/Feedback field (general feedback).

* Points for question.

2.5. Hands-on Exercise Editor (Main Content Area)

  • Layout:

* Exercise Header: Exercise Title (editable), breadcrumbs.

* Description Field: Rich Text Editor for detailed instructions, context, and scenario.

* Requirements/Resources Section:

* Input fields for specific requirements (e.g., "Use X software," "Submit a 500-word report").

* "Add Resource File" button (upload templates, data files).

* "Add Resource Link" button.

* Submission Type Selector: Radio buttons/dropdown for: "Text Input", "File Upload (any type)", "Code Submission (specific languages - optional)".

*

gemini Output

Training Course Builder: Design Specifications

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, powerful, and professional tool that empowers users to build comprehensive and engaging training courses across any subject.


1. Detailed Design Specifications

The Training Course Builder will offer a robust set of features to facilitate the creation and management of high-quality educational content.

1.1 Core Functionality

  • Course Management:

* Create New Course: Define course title, description, target audience, estimated duration, category, and primary language.

* Edit Course Details: Modify all initial course parameters.

* Course Status: Draft, Published, Archived.

* Course Duplication: Create a copy of an existing course.

* Course Deletion: With confirmation and warning.

* Course Overview Dashboard: List all created courses with their status, progress, and quick actions.

  • Module & Lesson Management:

* Hierarchical Structure: Courses > Modules > Lessons.

* Add/Edit/Delete Modules: Define module title and optional description.

* Add/Edit/Delete Lessons: Define lesson title.

* Reordering: Drag-and-drop functionality for modules and lessons within a course.

  • Content Creation Tools (within Lessons):

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

* Media Embeds:

* Video: Upload or embed from YouTube/Vimeo (with options for transcript upload).

* Audio: Upload audio files.

* Images: Upload images with alt-text options.

* File Uploads: Allow learners to download supplementary materials (PDFs, documents, spreadsheets).

* External Links: Integrate relevant external resources.

* Code Snippets: Dedicated block for displaying code.

* Interactive Elements: Call-to-action buttons, info boxes.

  • Quiz Builder:

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

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

* Feedback: Provide immediate feedback for correct/incorrect answers, with optional explanations.

* Grading Options: Automatic grading for objective questions; manual grading for short answers.

* Pass/Fail Threshold: Set a minimum percentage to pass the quiz.

* Attempts: Define the number of allowed attempts.

* Randomization: Randomize question order and answer options.

  • Hands-on Exercise Builder:

* Description Field: Detailed instructions for the exercise.

* Submission Types: File upload, text input, URL submission.

* Rubric Integration: Create and attach grading rubrics for consistent evaluation.

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

* Instructor Feedback: Dedicated section for instructors to provide feedback and grade.

  • Certification Criteria:

* Completion Rules: Define what constitutes course completion (e.g., complete all lessons, pass all quizzes, submit all exercises).

* Certificate Design: Customizable certificate templates with placeholders for learner name, course title, completion date, and instructor signature/logo.

* Automated Generation: Generate and issue certificates upon successful course completion.

  • Course Settings:

* Visibility: Public, Private (invite-only), Password Protected.

* Prerequisites: Define other courses or modules that must be completed first.

* Drip Content: Release modules/lessons on a schedule or after a certain period from enrollment.

* Enrollment Limits: Set a maximum number of learners.

* Pricing/Access (Optional): Integration with payment gateways or subscription models if applicable for monetized courses.

  • Preview Functionality:

* View course content exactly as a learner would, for individual lessons, modules, or the entire course.

* Toggle between desktop, tablet, and mobile views.

  • Publish/Unpublish: Control the availability of the course to learners.
  • Collaboration (Future Consideration): Allow multiple instructors/content creators to work on a single course with role-based permissions.
  • Reporting & Analytics (Learner Side - Future Consideration): Track learner progress, quiz scores, exercise submissions, and course completion rates.

1.2 User Roles

  • Course Creator/Admin: Full access to all builder functionalities. Can create, edit, publish, and manage courses.
  • Learner: (Not directly part of the builder tool, but the output of the builder is consumed by them). Can view and interact with published courses.

1.3 High-Level Data Model

  • Course: id, title, description, category, status, creator_id, estimated_duration, language, settings (JSONB for visibility, prerequisites, drip, etc.), created_at, updated_at.
  • Module: id, course_id, title, description, order_index, created_at, updated_at.
  • Lesson: id, module_id, title, type (e.g., 'text', 'video', 'quiz', 'exercise'), content (JSONB for specific content structure), order_index, created_at, updated_at.
  • Quiz: id, lesson_id, title, passing_score, attempts_allowed, randomize_questions, created_at, updated_at.
  • Question: id, quiz_id, type, text, options (JSONB for MCQs), correct_answer, explanation, points, created_at, updated_at.
  • Exercise: id, lesson_id, title, description, submission_type, rubric (JSONB), created_at, updated_at.
  • FileAsset: id, lesson_id (or other parent), filename, url, type, alt_text, size, created_at.
  • CertificateTemplate: id, name, template_html, fields (JSONB for placeholders), created_at, updated_at.

2. Wireframe Descriptions

The following describes key screens and their components, focusing on a clean, multi-panel layout for efficient course creation.

2.1 Dashboard / Course List Screen

  • Header: Logo, User Profile/Settings, "Help" button.
  • Sidebar Navigation: "Dashboard," "My Courses," "Templates," "Analytics" (future).
  • Main Content Area:

* "My Courses" Heading: With a search bar and filter options (status, category).

* "Create New Course" Button: Prominently displayed.

* Course Cards/List: Each card/row displays:

* Course Title

* Brief Description

* Status (Draft, Published, Archived)

* Progress Indicator (e.g., "5/10 modules complete")

* Last Edited Date

* Action Buttons: "Edit," "Preview," "Duplicate," "Archive/Delete."

2.2 Course Editor - Overview Screen

  • Header: Course Title (editable), "Save Draft" / "Publish" buttons, "Preview Course" button, "Exit Editor" button.
  • Left Sidebar (Course Navigation):

* Course Details (link to edit metadata)

* Modules & Lessons (collapsible tree view)

* Quizzes

* Hands-on Exercises

* Certification

* Course Settings

  • Main Content Area (Overview Tab):

* Course Summary: Title, description, image thumbnail.

* Progress Bar: Visual representation of course completeness (e.g., "70% complete").

* Quick Actions: "Add New Module," "Review Drafts," "Publish Course."

* Recent Activity/Tips: Contextual help or suggestions.

2.3 Module & Lesson Editor Screen

  • Header: Same as Course Editor.
  • Left Sidebar (Course Navigation): Active on "Modules & Lessons."
  • Main Content Area:

* Hierarchical Tree View:

* Course Title (root)

* Module 1: (Collapsible)

* Lesson 1.1

* Lesson 1.2 (with content type icon: text, video, quiz, etc.)

* + Add Lesson button

* Module 2:

* ...

* + Add Module button

* Drag-and-Drop Handles: For reordering modules and lessons.

* Contextual Menu (on hover/click for Module/Lesson): "Edit Title," "Add Lesson/Module Below," "Duplicate," "Delete."

* Right Panel (Lesson/Module Settings - on selection):

* Title input field

* Description input field

* Visibility toggles (e.g., "visible to learners," "draft mode")

* Drip settings (if applicable)

2.4 Lesson Content Editor Screen

  • Header: Same as Course Editor, with "Lesson Title" displayed.
  • Left Sidebar (Course Navigation): Active on the specific lesson.
  • Main Content Area (Two Panels):

* Left Panel (Content Editor):

* Content Type Selector: Buttons/tabs for "Text," "Video," "Audio," "Image," "File," "Quiz," "Exercise."

* WYSIWYG Editor: For text content.

* Media Upload/Embed Interface: For video, audio, images, files.

* Code Block Editor: For code snippets.

* Interactive Elements Toolbar: For adding buttons, info boxes.

* Right Panel (Lesson Settings/Preview Toggle):

* Lesson Title: Editable.

* Optional Description:

* SEO Settings: Meta title, description (optional).

* "Preview Lesson" Button: Opens a modal or switches the right panel to show a live preview.

2.5 Quiz Builder Screen

  • Header: Same as Course Editor, with "Quiz Title."
  • Left Sidebar (Course Navigation): Active on the specific quiz.
  • Main Content Area:

* Quiz Settings Panel:

* Quiz Title, Description

* Passing Score (percentage)

* Number of Attempts

* Time Limit (optional)

* Randomize Questions/Answers toggles

* Show Answers After Completion toggle

* Question List:

* Display individual questions with their type (MCQ, Short Answer, etc.).

* Drag-and-drop handles for reordering.

* "Add Question" button.

* Contextual Menu (on hover/click): "Edit," "Duplicate," "Delete."

* "Add/Edit Question" Modal/Side Panel:

* Question Type Selector.

* Question Text (WYSIWYG).

* Options Input (for MCQ), Correct Answer Selector.

* Points for Question.

* Optional Feedback/Explanation fields.

2.6 Hands-on Exercise Builder Screen

  • Header: Same as Course Editor, with "Exercise Title."
  • Left Sidebar (Course Navigation): Active on the specific exercise.
  • Main Content Area:

* Exercise Settings Panel:

* Exercise Title, Description (WYSIWYG editor for detailed instructions).

* Submission Type Selector: File Upload, Text Input, URL.

* Due Date (optional).

* Grading Method: Manual, Rubric-based.

* Rubric Editor (if selected):

* Table-like interface to define criteria, proficiency levels, and points.

* "Add Criterion," "Add Level" buttons.

* Preview of the rubric.

2.7 Certification Criteria Screen

  • Header: Same as Course Editor, with "Certification."
  • Left Sidebar (Course Navigation): Active on "Certification."
  • Main Content Area:

* Completion Rules Section:

* Checkboxes for "Complete all lessons," "Pass all quizzes," "Submit all exercises."

* Thresholds: e.g., "Require X% average quiz score."

* Certificate Template Selection:

* Thumbnail preview of available templates.

* "Design New Template" button.

* Template Customization (if designing new/editing):

* Drag-and-drop interface for elements (logo, text blocks, placeholders).

* Text editor for static content.

* Preview of the certificate.

2.8 Course Settings Screen

  • Header: Same as Course Editor, with "Course Settings."
  • Left Sidebar (Course Navigation): Active on "Course Settings."
  • Main Content Area (Tabbed or Accordion Layout):

* General: Course title, description, category, language, thumbnail image upload.

* Access & Visibility: Public/Private/Password Protected toggles, enrollment key.

* Prerequisites: Dropdown/selector to choose prerequisite courses/modules

gemini Output

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Training Course Builder" output. The aim is to create a professional, engaging, and highly effective learning environment that facilitates knowledge acquisition and skill development.


Training Course Design Assets Finalization

This deliverable provides comprehensive design guidelines to transform the structured course content into a visually appealing, intuitive, and highly functional online learning experience.

1. Detailed Design Specifications

1.1. Overall Aesthetic & Brand Identity

  • Theme: Modern, Clean, Professional, Engaging, and User-Centric.
  • Goal: To inspire confidence, foster focus, and simplify complex information through clear visual hierarchy and thoughtful design.
  • Tone: Encouraging, supportive, and authoritative.
  • Visual Elements: Emphasis on white space, subtle gradients, soft shadows for depth, and crisp lines.

1.2. Typography System

A well-defined typography system ensures readability, hierarchy, and brand consistency.

  • Primary Font (Headings & Titles): Montserrat (or similar sans-serif such as Lato, Open Sans)

* Usage: Used for main titles (Course Title, Module Titles), section headings, and prominent calls-to-action.

* Weights: Bold (700), Semi-Bold (600)

* Sizes: H1 (36-48px), H2 (28-32px), H3 (22-24px), H4 (18-20px)

  • Secondary Font (Body Text & UI Elements): Roboto (or similar sans-serif such as Noto Sans, Source Sans Pro)

* Usage: Body paragraphs, lesson content, quiz questions, button labels, navigation items, descriptive text.

* Weights: Regular (400), Medium (500), Light (300)

* Sizes: Body (16-18px), Small Text (12-14px)

  • Monospace Font (Code Snippets & Technical Examples): Fira Code (or similar such as JetBrains Mono, Inconsolata)

* Usage: For displaying code blocks, command-line examples, or any technical text requiring fixed-width characters.

* Weights: Regular (400)

* Sizes: 14-16px

1.3. Iconography

  • Style: Flat or outlined vector icons with a consistent stroke weight and corner radius.
  • Purpose: To enhance navigation, highlight key actions, and visually represent concepts (e.g., "quiz," "video," "download," "complete").
  • Library: Utilize a reputable icon library (e.g., Font Awesome, Material Icons, Feather Icons) for consistency and scalability.
  • Color: Primarily neutral (dark grey) with occasional use of primary or accent colors for interactive states or important notifications.

1.4. Imagery & Illustrations

  • Style: High-quality, relevant photography or modern, clean vector illustrations. Avoid overly cartoonish or stock-photo clichés.
  • Purpose:

* Course Banners: Visually represent the course subject.

* Module Thumbnails: Provide visual cues for module content.

* Conceptual Graphics: Explain complex ideas, processes, or systems.

* Engagement: Break up text-heavy sections and add visual appeal.

  • Consistency: Maintain a consistent style throughout all imagery and illustrations.

1.5. Layout Principles & Grid System

  • Responsive Design: The layout must adapt seamlessly to various screen sizes (desktop, tablet, mobile) using a flexible grid system (e.g., 12-column grid).
  • White Space: Generous use of white space to reduce cognitive load, improve readability, and create a sense of calm and clarity.
  • Content Hierarchy: Clear visual hierarchy established through font sizes, weights, color contrast, and spacing to guide the user's eye to the most important information.
  • Component-Based: Design system built on reusable UI components for consistency and efficient development.

1.6. Interactive Elements

  • Buttons:

* Primary: Solid background with white text, subtle hover/active states (e.g., slight darken, scale up).

* Secondary/Outline: Transparent background, colored border and text, solid fill on hover.

* Tertiary/Text: Text-only, used for less prominent actions.

  • Links: Underlined on hover or distinct color.
  • Forms: Clean input fields with clear labels, focus states, and validation feedback (e.g., green for success, red for error).
  • Progress Bars: Smooth animations, clear segmentation for modules/lessons.
  • Hover States: Provide clear visual feedback for all interactive elements to indicate clickability.

1.7. Accessibility Considerations

  • Color Contrast: Ensure sufficient contrast between text and background colors (WCAG 2.1 AA standards).
  • Font Sizing: Allow for browser text resizing. Use relative units (em, rem) where appropriate.
  • Keyboard Navigation: All interactive elements must be reachable and operable via keyboard. Clear focus indicators are essential.
  • ARIA Attributes: Implement ARIA roles and attributes for screen reader compatibility.
  • Descriptive Alt Text: Provide meaningful alt text for all images.

2. Wireframe Descriptions

Below are descriptions for key screens, outlining their structure and primary components. These are conceptual layouts guiding the user flow and information architecture.

2.1. Course Dashboard / Homepage

  • Header:

* Global Navigation (Logo, Course Title, User Profile, Notifications).

* Search Bar (optional).

  • Main Content Area (Left):

* Course Overview Card: Course title, short description, overall progress bar (e.g., X% complete), "Continue Course" button.

* Module List: Scrollable list of all modules. Each module card includes:

* Module number and title.

* Short description.

* Module-specific progress bar.

* Number of lessons/quizzes.

* Status (Locked, Unlocked, Completed).

* "Start Module" or "Resume Module" button.

  • Sidebar (Right - optional or integrated below on mobile):

* Quick Links: "My Certificates," "Support," "Settings."

* Announcements/Updates: Recent course news.

* Upcoming Deadlines/Tasks: For courses with deadlines.

2.2. Module Overview Page

  • Header:

* Global Navigation.

* Breadcrumbs: Home > Course Title > Module Title.

  • Main Content Area:

* Module Title & Description: Prominently displayed.

Module Progress Bar: Visual representation of progress within this* module.

* Lesson List: Ordered list of all lessons, quizzes, and exercises within the module. Each item includes:

* Lesson number and title.

* Icon indicating content type (video, text, quiz, exercise).

* Completion status (checkmark, progress indicator).

* "Start" / "Resume" / "Review" button.

* "Next Module" / "Previous Module" Navigation: Buttons at the bottom for sequential navigation.

2.3. Lesson Page

  • Top Bar:

* Breadcrumbs: Home > Course Title > Module Title > Lesson Title.

* "Previous Lesson" / "Next Lesson" buttons.

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

  • Left Sidebar (Collapsible):

* Module Table of Contents: List of all lessons/quizzes in the current module, with the current lesson highlighted.

* Progress indicator for the module.

  • Main Content Area:

* Lesson Title: H1.

* Lesson Content: Rich text editor content, embedded videos, images, code blocks, interactive diagrams.

* Key Takeaways / Summary: Optional section at the end.

* Discussion Section / Comments: (Optional) Area for learner interaction.

  • Bottom Navigation:

* "Previous Lesson" / "Next Lesson" buttons.

* "Mark as Complete" button.

2.4. Quiz Page

  • Header:

* Breadcrumbs.

* Quiz Title.

* Timer (if applicable).

  • Main Content Area:

* Question Number & Progress: "Question 1 of 10."

* Question Text: Clearly presented.

* Answer Options: Radio buttons for single choice, checkboxes for multiple choice, text input for short answer.

* "Submit Answer" / "Next Question" Button.

* "Skip Question" / "Review Later" (optional).

  • Feedback (after submission):

* Correct/Incorrect indication.

* Explanation for the correct answer.

* Score display (if applicable).

2.5. Hands-on Exercise Page

  • Header:

* Breadcrumbs.

* Exercise Title.

  • Left Panel (Instructions):

* Exercise Description: Goals, context, prerequisites.

* Step-by-step Instructions: Clear, concise steps, potentially with screenshots or code snippets.

* Success Criteria: What defines a successful completion.

  • Right Panel (Interactive Environment / Submission):

* Embedded IDE/Sandbox (if applicable): For coding or command-line exercises.

* Upload Area: For file submissions (e.g., project files, documents).

* Text Editor: For free-form answer submissions.

* "Submit Exercise" Button.

  • Feedback (after submission):

* Automated grading results (if supported).

* Instructor feedback area.

2.6. Certification Page

  • Header:

* Global Navigation.

* Breadcrumbs: Home > Course Title > Certification.

  • Main Content Area:

* Certification Status: "Eligible," "Not Yet Eligible," "Certified."

* Eligibility Criteria: List of requirements (e.g., "Complete all modules," "Pass final exam with 80%," "Submit all exercises").

* "View Certificate" / "Download Certificate" Button (if eligible).

* Certificate Display: High-resolution image of the personalized certificate, ready for download or sharing.

* Share Options: Social media sharing buttons (LinkedIn, etc.).

3. Color Palettes

A harmonious color palette is crucial for brand recognition, visual appeal, and user comfort.

3.1. Primary Palette

These are the core colors representing the brand and primary interactive elements.

  • Primary Accent Color (e.g., "Learning Blue"): #007BFF (RGB: 0, 123, 255)

* Usage: Main call-to-action buttons, active navigation states, progress bars, important icons, brand highlights.

  • Secondary Accent Color (e.g., "Engagement Green"): #28A745 (RGB: 40, 167, 69)

* Usage: Success messages, "Complete" status, positive feedback, secondary buttons.

3.2. Neutral Palette

These colors form the foundation for backgrounds, text, and borders, ensuring readability and visual balance.

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

* Usage: Main body text, headings, strong contrast elements.

  • Medium Grey / Secondary Text: #6C757D (RGB: 108, 117, 125)

* Usage: Subheadings, descriptive text, disabled states, borders.

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

* Usage: Main page backgrounds, card backgrounds, subtle separators.

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

* Usage: Content areas, cards, modal backgrounds.

3.3. Semantic Palette

Colors used to convey specific meanings and feedback to the user.

  • Success: #28A745 (Engagement Green - consistent with Secondary Accent)

* Usage: Confirmation messages, correct answers, successful actions.

  • Information: #17A2B8 (RGB: 23, 162, 184)

* Usage: Info alerts, tips, helpful hints.

  • Warning: #FFC107 (RGB: 255, 193, 7)

* Usage: Caution messages, incomplete tasks, pending actions.

  • Danger / Error: #DC3545 (RGB: 220, 53, 69)

* Usage: Error messages, incorrect answers, critical alerts.

3.4. Usage Guidelines

  • Balance: Use primary and accent colors sparingly to draw attention, while relying on the neutral palette for the majority of the interface.
  • Consistency: Apply colors consistently across all UI elements to reinforce meaning and improve learnability.
  • Accessibility: Always check color contrast ratios to ensure readability for all users, especially for text and interactive elements.

4. UX Recommendations

These recommendations focus on optimizing the user experience to make the training course intuitive, engaging, and effective.

4.1. Navigation & Information Architecture (IA)

  • Clear Hierarchy: Organize content logically with clear module-lesson-subtopic structure. Use breadcrumbs to show the user's current location.
  • Consistent Global Navigation: A persistent header or sidebar for essential links (Dashboard, My Courses, Profile, Help).
  • Contextual Navigation: "Next/Previous Lesson/Module" buttons within content pages for seamless progression.
  • Search Functionality: Implement a robust search bar for quickly finding specific topics, lessons, or keywords within the course.
  • Table of Contents (Collapsible): Provide an always-available (or easily accessible) table of contents for the current module/course to allow quick jumps.

4.2. Feedback & Guidance

  • Real-time Progress: Visually show progress with clear, segmented progress bars (course-level, module-level, lesson-level).
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);}});}