Mobile App Wireframe Kit
Run ID: 69cc429b7ddd717b017498fe2026-03-31Design
PantheraHive BOS
BOS Dashboard

Generate a complete mobile app wireframe specification with screen flows, component library, interaction patterns, and developer handoff notes.

Mobile App Wireframe Kit: Detailed Study Plan

This document outlines a comprehensive, 4-week study plan designed to equip you with the skills and knowledge necessary to create professional-grade mobile app wireframes. This plan covers foundational concepts, practical application, and best practices for developer handoff.


Overall Goal

By the end of this 4-week study plan, you will be proficient in generating comprehensive mobile app wireframe specifications, including screen flows, component libraries, interaction patterns, and developer handoff notes, utilizing industry-standard tools and methodologies.


Week 1: Foundations of Wireframing & Mobile UX Principles

Learning Objectives:

  • Understand the purpose, benefits, and different fidelities of wireframes (low-fidelity vs. mid-fidelity).
  • Grasp core User Experience (UX) and User Interface (UI) principles applicable to mobile design.
  • Familiarize yourself with a chosen wireframing tool (recommended: Figma) and its basic functionalities.
  • Identify and understand common mobile design patterns and platform-specific guidelines (iOS, Android).

Weekly Schedule:

  • Day 1-2: Introduction to UX/UI & Wireframing Fundamentals

* What is UX/UI design? The role of wireframes in the design process.

* Low-fidelity vs. Mid-fidelity wireframes: when to use each.

* Key UX principles: Usability, Accessibility, User-Centered Design.

* Activity: Read articles on UX fundamentals and wireframing purpose.

  • Day 3-4: Mobile Design Guidelines & Best Practices

* Explore Apple's Human Interface Guidelines (HIG) and Google's Material Design.

* Understand common mobile UI patterns (navigation, buttons, input fields).

* Activity: Analyze 2-3 popular mobile apps, identifying their UI patterns and adherence to guidelines.

  • Day 5-6: Tool Mastery - Figma Basics

* Introduction to Figma: workspace, frames, shapes, text, basic drawing tools.

* Creating and organizing layers, using groups and components (basic level).

* Activity: Complete a "Figma 101" tutorial. Recreate a simple app screen (e.g., a login screen) in low-fidelity using basic shapes.

  • Day 7: Review & Practice

* Review concepts from the week.

* Activity: Create a low-fidelity wireframe for a simple 3-screen mobile app concept (e.g., a basic to-do list app: list view, add item, item detail).

Recommended Resources:

  • Articles: Nielsen Norman Group (NN/g) on wireframes, UX fundamentals.
  • Guidelines: Apple Human Interface Guidelines, Google Material Design.
  • Courses/Tutorials: Figma's official "Learn Design" resources, YouTube tutorials for "Figma for Beginners."
  • Books (Optional): "Don't Make Me Think, Revisited" by Steve Krug.

Milestone: Successful creation of a 3-screen low-fidelity wireframe set for a simple app concept, demonstrating basic tool proficiency.


Week 2: Building a Component Library & Layouts

Learning Objectives:

  • Understand the principles of atomic design and its application to component libraries.
  • Design and organize a reusable component library for common mobile UI elements.
  • Apply advanced layout techniques (e.g., Auto Layout in Figma) for efficient and scalable design.
  • Create mid-fidelity wireframes, incorporating defined components.

Weekly Schedule:

  • Day 1-2: Atomic Design & Component Thinking

* Introduction to Atomic Design (atoms, molecules, organisms, templates, pages).

* Why build a component library? Benefits for consistency and efficiency.

* Activity: Read Brad Frost's "Atomic Design" principles. Deconstruct a complex app screen into its fundamental components.

  • Day 3-4: Creating a Reusable Component Library

* Design and create core components: buttons (primary, secondary, disabled), input fields (text, password), checkboxes, radio buttons, toggles, icons.

* Understanding component states (hover, active, disabled, error).

* Activity: Start building a mini-component library in Figma, focusing on 5-7 core UI elements with their different states.

  • Day 5-6: Advanced Layouts & Mid-Fidelity Wireframes

* Mastering Auto Layout in Figma for creating flexible and responsive layouts.

* Combining components to build more complex "molecules" and "organisms" (e.g., navigation bars, cards, list items).

* Activity: Redesign the 3-screen app concept from Week 1 using your newly created component library and Auto Layout, elevating them to mid-fidelity.

  • Day 7: Review & Refinement

* Review component library for consistency and completeness.

* Activity: Get feedback (if possible) on your mid-fidelity wireframes. Refine components and layouts based on feedback.

Recommended Resources:

  • Books/Articles: "Atomic Design" by Brad Frost.
  • Figma Resources: Figma Community files for UI kits and design systems, Figma's official documentation on Components and Auto Layout.
  • Videos: Advanced Figma tutorials on creating scalable components and design systems.

Milestone: Development of a functional, mid-fidelity component library with at least 10 reusable UI elements and their states, and application of these components in a 3-screen mid-fidelity wireframe set.


Week 3: User Flows & Interaction Patterns

Learning Objectives:

  • Understand the importance of mapping user journeys and screen flows.
  • Create clear and logical screen flows that illustrate user interaction paths.
  • Define basic interaction patterns within wireframes (e.g., taps, swipes, data entry).
  • Utilize basic prototyping features to simulate user interaction.

Weekly Schedule:

  • Day 1-2: Understanding User Flows & User Journeys

* Distinguishing between sitemaps, user flows, and user journeys.

* Why user flows are crucial for understanding app logic and identifying pain points.

* Common elements of a user flow diagram (start, process, decision, end).

* Activity: Map out a user journey for a specific task within a popular app (e.g., ordering food, booking a ride).

  • Day 3-4: Designing Screen Flows

* Translating user journeys into detailed screen flows using your wireframes.

* Techniques for linking screens and indicating conditional logic.

* Activity: Select a key task within your 3-screen app concept (e.g., adding a new item). Create a comprehensive screen flow for this task, adding any necessary screens.

  • Day 5-6: Specifying Interaction Patterns & Basic Prototyping

* Annotating wireframes to describe interactions (e.g., "On tap, navigate to...", "On input, show error message").

* Introduction to Figma's prototyping features: creating connections, smart animate, overlay.

* Activity: Use Figma's prototyping features to link your screen flows, creating an interactive wireframe prototype for your selected task.

  • Day 7: Review & Refinement

* Test your interactive prototype for usability and logical flow.

* Activity: Refine your screen flows and prototype based on testing results. Ensure all key interactions are clearly defined.

Recommended Resources:

  • Articles: "How to Create User Flows" articles from UX Collective, Nielsen Norman Group.
  • Figma Resources: Figma's official documentation and tutorials on prototyping.
  • Examples: Review examples of well-documented user flows and interactive prototypes.

Milestone: Creation of a detailed screen flow for a key task within your app concept, fully prototyped in Figma to simulate user interactions.


Week 4: Documentation, Handoff & Best Practices

Learning Objectives:

  • Learn to effectively annotate wireframes for clarity and developer understanding.
  • Understand the process and best practices for handing off wireframe specifications to developers.
  • Incorporate accessibility considerations into wireframe design and documentation.
  • Grasp version control and feedback integration strategies.

Weekly Schedule:

  • Day 1-2: Wireframe Annotations & Specifications

* Types of annotations: functional, content, behavioral, technical.

* Best practices for clear and concise annotation.

* Creating a "spec sheet" or documentation page within your Figma file.

* Activity: Go through your complete wireframe set and add detailed annotations for all key screens and interactions.

  • Day 3-4: Developer Handoff Considerations

* What developers need: screen states, interaction logic, error states, content guidelines, asset specifications.

* Using Figma's "Developer Mode" for inspecting designs and extracting CSS/code snippets.

* Activity: Prepare your Figma file for developer handoff. Organize screens, components, and annotations. Practice using Developer Mode.

  • Day 5-6: Accessibility & Final Review

* Basic accessibility considerations in wireframing (e.g., clear labels, sufficient contrast, logical tab order).

* Reviewing your entire wireframe kit for consistency, completeness, and adherence to best practices.

* Activity: Conduct a final self-review of your wireframe kit against all learning objectives. Make any last refinements.

  • Day 7: Final Project Submission & Reflection

* Activity: Compile your complete mobile app wireframe kit (Figma file with screens, components, flows, annotations, and prototype) as your final deliverable. Reflect on your learning journey and areas for future growth.

Recommended Resources:

  • Articles: "UX Documentation Best Practices," "Developer Handoff Guide for Designers," "Accessibility in Design" from W3C WAI.
  • Figma Resources: Figma's documentation on Developer Mode, sharing, and version history.
  • Templates: Look for wireframe annotation templates or design system documentation examples.

Milestone: Completion of a comprehensive mid-fidelity mobile app wireframe kit, including a fully annotated screen set, detailed component library, interactive screen flows, and a prepared developer handoff package.


Assessment Strategies

Your progress and mastery throughout this study plan will be assessed through a combination of practical application and self-reflection:

  1. Weekly Practical Assignments: Each week culminates in a practical assignment (e.g., creating low-fidelity wireframes, building a component library, prototyping a flow). These assignments are direct demonstrations of acquired skills.
  2. Self-Assessment against Learning Objectives: Regularly review the "Learning Objectives" for each week. Can you confidently perform the tasks outlined? Identify areas where you need more practice.
  3. Peer Review (Optional but Recommended): If possible, share your work with a peer or mentor for constructive feedback. This simulates real-world design critiques and provides valuable external perspectives.
  4. Final Project Submission: The ultimate assessment is the completion of a comprehensive mobile app wireframe kit (as described in Week 4's milestone). This project will demonstrate your ability to integrate all learned skills into a professional deliverable.

* Evaluation Criteria for Final Project:

* Completeness: All required elements (screens, components, flows, annotations) are present.

* Fidelity: Wireframes are at an appropriate mid-fidelity level.

* Clarity & Consistency: Design elements, annotations, and flows are clear, logical, and consistent.

* Usability: The prototyped flow is intuitive and functional.

* Handoff Readiness: The file is well-organized and prepared for developer handoff.

This structured study plan will guide you effectively in mastering the creation of professional mobile app wireframes. Good luck!

gemini Output

As part of the "Mobile App Wireframe Kit" workflow, this deliverable provides a comprehensive mobile app wireframe specification, including detailed screen flows, a robust component library, common interaction patterns, and essential developer handoff notes. Furthermore, it includes production-ready code examples for key UI components and a structured wireframe definition, bridging the gap between design and development.


Mobile App Wireframe Specification: Taskify - Simple Task Management App

1. Introduction and Project Overview

This document outlines the wireframe specifications for Taskify, a simple and intuitive mobile application designed to help users manage their daily tasks efficiently. The primary goal of Taskify is to provide a clean, user-friendly interface for adding, viewing, editing, and completing tasks, enhancing productivity and organization.

This specification serves as a foundational blueprint for the app's structure, layout, and basic functionality, guiding subsequent UI/UX design, prototyping, and development phases.

2. Application Overview: Taskify - Simple Task Management

App Name: Taskify

Purpose: To provide users with a straightforward mobile solution for managing personal and professional tasks.

Core Features:

  • User authentication (Sign Up, Log In)
  • Create, view, edit, and delete tasks
  • Mark tasks as complete/incomplete
  • Categorize tasks (optional, for future expansion)
  • Basic user profile management

Target Audience: Individuals seeking a minimalist and efficient task management tool without overwhelming features.

3. Key User Flows

This section details the critical paths users will take within the Taskify application.

3.1. Onboarding & Authentication Flow

  1. Launch App: User opens Taskify.
  2. Welcome/Onboarding Screens (Optional): Initial introduction to the app's value proposition (skipped for wireframes to focus on core functionality, assumed for first-time users).
  3. Login/Sign Up Screen: User is presented with options to log in or create a new account.

* If New User:

1. Taps "Sign Up".

2. Enters Email, Password, Confirm Password.

3. Taps "Sign Up" button.

4. Account created, user navigated to Task List (Dashboard).

* If Existing User:

1. Taps "Log In".

2. Enters Email, Password.

3. Taps "Log In" button.

4. User authenticated, navigated to Task List (Dashboard).

  1. Forgot Password (Optional): User taps "Forgot Password", enters email, receives reset instructions.

3.2. Task Management Flow

3.2.1. View Tasks Flow

  1. Task List Screen: User lands on this screen after login. Displays a list of active tasks.
  2. Tap Task: User taps on a task item.
  3. Task Details Screen: Displays detailed information about the selected task.
  4. Navigate Back: User taps back button to return to Task List.

3.2.2. Add New Task Flow

  1. Task List Screen: User taps the "Add Task" (Floating Action Button - FAB).
  2. Add/Edit Task Screen: User is presented with a form to enter task details (Title, Description, Due Date).
  3. Save Task: User taps "Save" button.
  4. Task List Screen: New task is added to the list, user returns to Task List.

3.2.3. Edit Existing Task Flow

  1. Task Details Screen: User taps "Edit" icon/button.
  2. Add/Edit Task Screen: Task details pre-filled in the form.
  3. Modify Details: User updates relevant task information.
  4. Save Task: User taps "Save" button.
  5. Task Details Screen: Updated task details are displayed. User can navigate back to Task List.

3.2.4. Mark Task Complete/Incomplete Flow

  1. Task List Screen: User taps the checkbox/toggle next to a task item.
  2. Task Status Update: Task is visually marked as complete (e.g., strikethrough, moved to 'completed' section).
  3. Confirmation (Optional): A brief toast notification confirms task completion.
  4. Task Details Screen: User taps "Mark Complete" button.
  5. Task Status Update: Task is updated, visual indication changes, user remains on Task Details or navigates back.

4. Wireframe Screens (Examples)

Below are detailed specifications for key wireframe screens, outlining their purpose, primary elements, and user interactions.

4.1. Screen 1: Login / Sign Up

  • Purpose: Allow existing users to log in or new users to create an account.
  • Key Elements:

* App Logo/Name (Header)

* Email Input Field (Text)

* Password Input Field (Password)

* "Log In" Button (Primary)

* "Forgot Password?" Link (Secondary)

* Separator (e.g., "OR")

* "Sign Up" Button (Secondary)

* Social Login Buttons (Optional, e.g., Google, Apple)

  • User Actions:

* Enter credentials, tap "Log In".

* Tap "Forgot Password?".

* Tap "Sign Up" to navigate to the registration form (or open inline).

4.2. Screen 2: Task List (Dashboard)

  • Purpose: Display a list of active and completed tasks. Serve as the primary dashboard after login.
  • Key Elements:

* App Bar / Header: "Taskify" title, Profile/Settings Icon (Right)

* Task Filter/Sort Options (Optional, e.g., "All", "Today", "Completed")

* Task List (Scrollable):

* Each item: Checkbox (Left), Task Title, Due Date (Optional), Priority Indicator (Optional), Swipe actions (Right: Delete, Edit).

* Floating Action Button (FAB): "+" icon for adding new tasks (Bottom Right).

* Bottom Navigation Bar (Optional, for future expansion: Home, Search, Profile).

  • User Actions:

* Tap on a task item to view details.

* Tap checkbox to mark task complete/incomplete.

* Swipe left on a task to reveal "Delete" or "Edit" options.

* Tap FAB to add a new task.

* Tap Profile/Settings icon to navigate to Profile Screen.

4.3. Screen 3: Add / Edit Task

  • Purpose: Allow users to create a new task or modify an existing one.
  • Key Elements:

* App Bar / Header: "Add New Task" or "Edit Task" title, "Cancel" (Left), "Save" (Right).

* Task Title Input Field (Text, Required)

* Task Description Input Field (Multiline Text, Optional)

* Due Date Picker (Input field that triggers date picker)

* Priority Selector (Optional: Low, Medium, High - e.g., radio buttons or dropdown)

* "Delete Task" Button (Only visible for "Edit Task" mode, Secondary/Destructive)

  • User Actions:

* Enter/edit task details.

* Tap "Save" to commit changes.

* Tap "Cancel" to discard changes and navigate back.

* Tap "Delete Task" (in edit mode) to remove the task.

4.4. Screen 4: Task Details

  • Purpose: Display comprehensive information for a selected task.
  • Key Elements:

* App Bar / Header: Back Button (Left), "Task Details" title, "Edit" Icon (Right), "Delete" Icon (Right).

* Task Title (Large Text)

* Task Description (Body Text)

* Due Date (Label + Value)

* Status (e.g., "Completed" / "Active")

* "Mark as Complete" / "Mark as Incomplete" Button (Primary, toggles based on status).

  • User Actions:

* Tap Back Button to return to Task List.

* Tap "Edit" icon to navigate to Add/Edit Task Screen (pre-filled).

* Tap "Delete" icon to remove the task (with confirmation dialog).

* Tap "Mark as Complete/Incomplete" button to toggle task status.

5. Component Library

This section details reusable UI components used throughout the Taskify application, ensuring consistency and efficiency in design and development.

5.1. Buttons

  • Primary Button:

* Appearance: Solid background (e.g., blue), white text.

* Usage: Main call to action (e.g., "Log In", "Save Task").

* States: Default, Hover/Pressed, Disabled.

  • Secondary Button:

* Appearance: Transparent background, colored border, colored text.

* Usage: Less prominent actions (e.g., "Sign Up", "Cancel").

* States: Default, Hover/Pressed, Disabled.

  • Icon Button:

* Appearance: Icon only, often in app bars or lists (e.g., "Edit", "Delete", "Settings").

* Usage: Contextual actions.

* States: Default, Pressed.

  • Floating Action Button (FAB):

* Appearance: Circular, elevated, prominent background color, white icon (e.g., "+").

* Usage: Primary action on a screen (e.g., "Add New Task").

* States: Default, Pressed.

5.2. Input Fields

  • Text Input:

* Appearance: Underline or outlined border, placeholder text, clear button (optional).

* Usage: Single-line text entry (e.g., Email, Task Title).

* States: Default, Focused, Error, Disabled.

  • Password Input:

* Appearance: Same as Text Input, but masks input, includes toggle for visibility.

* Usage: Password entry.

* States: Default, Focused, Error, Disabled.

  • Multiline Text Area:

* Appearance: Outlined border, resizable (optional), placeholder text.

* Usage: Longer text entry (e.g., Task Description).

  • Date Picker Input:

* Appearance: Text input field that, when tapped, triggers a native date selection dialog.

* Usage: Selecting due dates.

5.3. Navigation

  • App Bar / Header:

* Appearance: Top strip, background color, title (centered or left-aligned), optional icons (left/right).

* Usage: Screen title, global actions (e.g., Back, Settings, Edit).

  • Bottom Navigation Bar (Optional - for future expansion):

* Appearance: Fixed at the bottom, 3-5 icons with optional labels.

* Usage: Primary navigation between main sections of the app.

5.4. Lists

  • Basic List Item:

* Appearance: Single line of text, optional accessory icon (e.g., chevron).

* Usage: Simple menu items (e.g., "About Us").

  • Task List Item:

* Appearance: Checkbox (Left), Task Title (Primary text), Due Date/Priority (Secondary text), Swipe actions (Right).

* Usage: Displaying tasks on the Task List screen.

5.5. Cards

  • Task Card (Optional, if not using list items directly):

* Appearance: Elevated rectangular container, title, description, due date, status indicator.

* Usage: Alternative display for tasks, especially if more information needs to be visible without tapping.

5.6. Modals / Dialogs

  • Confirmation Dialog:

* Appearance: Overlay, title, message, two action buttons (e.g., "Cancel", "Confirm Delete").

* Usage: Confirming destructive actions (e.g., deleting a task).

  • Loading Indicator:

* Appearance: Spinner or progress bar, often centered on screen or within a button.

* Usage: Indicate ongoing processes (e.g., saving data, fetching tasks).

5.7. Toasts / Snackbars

  • Appearance: Small, temporary message overlay at the bottom of the screen.
  • Usage: Provide brief feedback (e.g., "Task saved!", "Task deleted.").

5.8. Empty States

  • Appearance: Illustrative icon/image, clear message, primary call to action button.
  • Usage: When a list or section has no content (e.g., "No tasks yet! Tap '+' to add one.").

6. Interaction Patterns

This section describes how users will interact with the Taskify app, focusing on common gestures and feedback.

  • Tap / Click:

* Usage: Activating buttons, selecting list items, opening forms.

* Feedback: Visual change on press (e.g., color change, ripple effect).

  • **Swipe
gemini Output

This document provides a comprehensive Mobile App Wireframe Kit, detailing the structural and functional blueprint for a mobile application. It covers screen flows, a reusable component library, defined interaction patterns, and essential notes for developers, ensuring a clear understanding of the app's architecture and user experience.


Mobile App Wireframe Specification: PandaTask (Task Management App)

This specification outlines the core wireframes, user flows, and technical considerations for the PandaTask mobile application. PandaTask is designed to be an intuitive and efficient task management tool, helping users organize their daily activities, projects, and goals.


1. Introduction and Overview

This Mobile App Wireframe Kit serves as the foundational blueprint for the PandaTask mobile application. It focuses on the core functionality, information architecture, user flows, and interaction patterns, providing a detailed understanding of the app's structure before visual design (UI) elements are introduced.

Purpose of this Document:

  • To define the key screens and their interconnections.
  • To establish a reusable library of UI components.
  • To document standard interaction patterns for consistency.
  • To provide clear guidelines and notes for development teams.
  • To serve as a common reference point for all stakeholders.

Scope:

This kit covers the essential features required for a Minimum Viable Product (MVP) of the PandaTask app, including user authentication, task creation, viewing, editing, and basic settings.


2. Screen Flows

This section details the primary user journeys and navigation pathways within the PandaTask app. Each flow illustrates how users move between different screens to accomplish specific tasks.

2.1. Core User Flows Diagram (Conceptual)

(Imagine a flowchart here with arrows connecting the screens listed below)

Key Flows:

  1. Onboarding & Authentication:

* Splash Screen → Onboarding Tour (Optional, 3-5 screens) → Login/Signup Screen

* Login Screen → Dashboard

* Signup Screen → Dashboard

* Forgot Password Flow (Login Screen → Forgot Password Screen → Reset Password)

  1. Task Management (Main Flow):

* Dashboard → View All Tasks (via tab/button) → Task List Screen

* Task List Screen → View Task Detail (tap on task)

* Task List Screen → Add New Task (tap on "+" button) → Add Task Screen → Task List Screen

* Task Detail Screen → Edit Task (tap on "Edit" icon) → Edit Task Screen → Task Detail Screen

* Task Detail Screen → Mark Task Complete (tap checkbox/button) → Task List Screen (updated)

  1. Settings & Profile:

* Dashboard / Any Screen (via Profile Tab/Menu) → Profile & Settings Screen

* Profile & Settings Screen → Account Settings / Notifications / App Info / Logout

2.2. Detailed Screen-by-Screen Breakdown

2.2.1. Splash Screen

  • Purpose: Initial app launch, branding display.
  • Content: App Logo, App Name.
  • Interaction: Auto-advances to Onboarding/Login after 2-3 seconds.

2.2.2. Onboarding Screens (Optional - 3 Screens)

  • Purpose: Introduce app features and benefits to new users.
  • Content:

* Screen 1: Welcome message, key feature 1 graphic.

* Screen 2: Key feature 2 graphic, brief description.

* Screen 3: Key feature 3 graphic, call to action (CTA) to Login/Signup.

  • Interaction: Swipe horizontally to navigate, "Skip" button, "Next" button, "Get Started" button on final screen.

2.2.3. Login / Signup Screen

  • Purpose: Allow users to authenticate or create a new account.
  • Content:

* App Logo/Name

* Email Input Field

* Password Input Field

* "Login" Button (Primary)

* "Forgot Password?" Link

* "Don't have an account? Sign Up" Link

* (For Signup): "Confirm Password" Input Field, "Sign Up" Button

  • Interaction: Tap "Login"/"Sign Up" to submit form. Tap links to navigate.

2.2.4. Dashboard Screen

  • Purpose: Provide an overview of upcoming tasks and quick access to key features.
  • Content:

* Top App Bar: "Hello, [User Name]!", Profile Avatar/Icon (left), Search Icon (right).

* Summary Cards: e.g., "Tasks Due Today," "Overdue Tasks," "Upcoming 7 Days." (Each card shows count and tap to view list).

* Quick Add Button (Floating Action Button - FAB): "+" icon.

* Bottom Navigation Bar: Home, Tasks, Add (FAB), Projects, Profile.

  • Interaction: Tap cards to filter task lists. Tap FAB to add new task. Tap bottom nav icons to switch sections.

2.2.5. Task List Screen

  • Purpose: Display a comprehensive list of tasks, with filtering and sorting options.
  • Content:

* Top App Bar: "All Tasks" (Title), Filter Icon (right), Sort Icon (right).

* Task List: Scrollable list of Task Cards.

* Floating Action Button (FAB): "+" icon (for adding new task).

* Bottom Navigation Bar: Home, Tasks, Add (FAB), Projects, Profile.

  • Interaction: Tap Filter/Sort icons to open respective modals/sheets. Tap a Task Card to view Task Detail. Swipe left/right on a Task Card for quick actions (e.g., Delete, Mark Complete). Pull-to-refresh to update list.

2.2.6. Task Detail Screen

  • Purpose: View and edit details of a specific task.
  • Content:

* Top App Bar: Back Arrow (left), Task Title (center), Edit Icon (right), More Options (ellipsis) Icon (right).

* Task Status: Checkbox/Toggle.

* Task Title (Display Only).

* Description (Display Only, multi-line).

* Due Date (Display Only).

* Priority (High/Medium/Low - Display Only).

* Project/Tag (Display Only).

* Subtasks List (if applicable).

* Comments Section (if applicable).

  • Interaction: Tap Back Arrow to return to previous screen. Tap Edit Icon to go to Edit Task Screen. Tap More Options for actions like "Delete Task", "Share Task".

2.2.7. Add/Edit Task Screen

  • Purpose: Create a new task or modify an existing one.
  • Content:

* Top App Bar: "Add Task" / "Edit Task" (Title), "Cancel" (left), "Save" (right).

* Task Title Input Field (required).

* Description Input Field (optional, multi-line).

* Due Date Picker (Input field opens date picker modal).

* Priority Selector (Dropdown/Radio buttons: High, Medium, Low).

* Project/Tag Selector (Dropdown/Input with auto-complete).

* Reminder Toggle/Picker.

* (For Edit): "Delete Task" Button at the bottom.

  • Interaction: Fill in fields. Tap "Save" to submit and return to previous screen. Tap "Cancel" to discard changes.

2.2.8. Profile & Settings Screen

  • Purpose: Manage user profile and application settings.
  • Content:

* Top App Bar: "Settings" (Title), Back Arrow (left).

* Profile Section: Avatar, User Name, Email (non-editable).

* List of Settings Options:

* Account Settings (Change Password, Update Email)

* Notification Preferences

* Theme (Light/Dark Mode toggle)

* Help & Support

* About PandaTask (Version, Privacy Policy, Terms of Service)

* "Logout" Button (Primary/Prominent)

  • Interaction: Tap on list items to navigate to sub-setting screens. Tap "Logout" to sign out.

3. Component Library

This section defines the reusable UI components that form the building blocks of the PandaTask app. Each component includes its typical states and usage guidelines.

3.1. Buttons

  • Primary Button:

* Appearance: Solid background, prominent text.

* States: Default, Hover/Pressed, Disabled, Loading.

* Usage: Main call-to-action (e.g., "Login", "Save", "Add Task").

  • Secondary Button:

* Appearance: Outline border, transparent background, colored text.

* States: Default, Hover/Pressed, Disabled.

* Usage: Alternative actions, less emphasis (e.g., "Cancel", "Skip", "Learn More").

  • Tertiary Button (Text Button):

* Appearance: Text only, no background or border.

* States: Default, Hover/Pressed, Disabled.

* Usage: Low-emphasis actions, navigation links (e.g., "Forgot Password?", "Delete").

  • Icon Button:

* Appearance: Icon only, often circular or square, transparent background.

* States: Default, Pressed, Disabled.

* Usage: Actions in app bars, quick actions (e.g., Search, Filter, Edit, Delete).

  • Floating Action Button (FAB):

* Appearance: Circular, prominent, usually with an icon (e.g., "+").

* States: Default, Pressed.

* Usage: Primary action on a screen (e.g., "Add New Task").

3.2. Input Fields

  • Text Input Field:

* Appearance: Underline or outlined border, clear placeholder text.

* States: Default, Focused, Filled, Error (red border/text), Disabled.

* Usage: Single-line text entry (e.g., Task Title, Email).

  • Password Input Field:

* Appearance: Similar to Text Input, with obscured input (asterisks/dots).

* States: Default, Focused, Filled, Error, Disabled.

* Usage: Password entry. Includes a "show/hide password" toggle icon.

  • Multi-line Text Area:

* Appearance: Resizable (vertically) or fixed height box.

* States: Default, Focused, Filled, Error, Disabled.

* Usage: Long descriptions (e.g., Task Description, Notes).

  • Date Picker:

* Appearance: Input field that, when tapped, opens a calendar/date selection modal.

* States: Default, Selected.

* Usage: Selecting due dates.

  • Dropdown/Selector:

* Appearance: Input field with a down arrow icon, opens a list of options.

* States: Default, Open, Selected.

* Usage: Selecting priority, project, tags.

3.3. Navigation Components

  • Top App Bar (Header):

* Appearance: Fixed at the top, contains title, navigation icons (back, menu), and action icons (search, filter, edit).

* Usage: Screen title, global actions, contextual actions.

  • Bottom Navigation Bar:

* Appearance: Fixed at the bottom, contains 3-5 primary navigation icons/labels.

* States: Default, Active (highlighted icon/label).

* Usage: Main app navigation (e.g., Home, Tasks, Projects, Profile).

  • Tab Bar (within a screen):

* Appearance: Horizontal tabs for switching between different views within a single screen.

* States: Default, Active.

* Usage: Filtering task lists (e.g., "All," "Today," "Upcoming").

3.4. Data Display Components

  • Task Card:

* Appearance: Rectangular card, contains task title, due date, priority indicator, completion checkbox.

* States: Default, Completed (strike-through text, different background/icon), Overdue (red text/indicator).

* Usage: Displaying individual tasks in a list.

  • Summary Card:

* Appearance: Rectangular card, contains a title (e.g., "Tasks Due Today") and a count.

* Usage: Displaying aggregated information on the Dashboard.

  • Avatar/Profile Picture:

* Appearance: Circular image, often with initials as a fallback.

* Usage: User profile, comments, team members.

3.5. Feedback & Interaction Components

  • Checkbox:

* Appearance: Square box that can be checked/unchecked.

* States: Unchecked, Checked, Disabled.

* Usage: Marking tasks complete, selecting multiple items.

  • Toggle Switch:

* Appearance: Sliding switch (ON/OFF).

* States: Off, On, Disabled.

mobile_app_wireframe_kit.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);}});}