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

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

Study Plan: Mastering Mobile App Wireframe Kit Creation

This comprehensive study plan is designed to guide you through the process of creating professional and effective Mobile App Wireframe Kits. Over the next 6 weeks, you will acquire the theoretical knowledge and practical skills necessary to design clear screen flows, build robust component libraries, define interaction patterns, and prepare detailed developer handoff notes.

This plan emphasizes hands-on learning, utilizing industry-standard tools and best practices to ensure you can confidently contribute to mobile app development projects.


Program Overview

Goal: To equip you with the skills to design, document, and deliver a complete Mobile App Wireframe Kit, ready for developer handoff.

Duration: 6 Weeks

Target Audience: Aspiring UX/UI designers, product managers, business analysts, or anyone looking to enhance their mobile app design and documentation capabilities.


Weekly Schedule & Learning Objectives

Each week will build upon the previous, culminating in the creation of a full wireframe kit.

Week 1: Foundations of Wireframing & UI Principles

  • Focus: Understanding the role of wireframes, choosing the right tools, and grasping fundamental UI design principles.
  • Learning Objectives:

* Define what a wireframe is, its purpose, and its different fidelity levels (low, mid, high).

* Differentiate between wireframes, mockups, and prototypes.

* Select and set up a primary wireframing tool (e.g., Figma, Sketch, Adobe XD).

* Understand core UI principles such as hierarchy, consistency, alignment, and proximity.

* Begin sketching basic screen layouts and common UI elements.

  • Key Activities:

* Research different wireframing tools and make a selection.

* Complete introductory tutorials for your chosen tool.

* Analyze existing mobile apps, identifying their core UI elements and layout patterns.

* Practice sketching 3-5 common mobile app screens (e.g., login, profile, product list).

Week 2: User Flows & Information Architecture

  • Focus: Mapping user journeys and structuring app content logically.
  • Learning Objectives:

* Understand the importance of user flows and information architecture (IA) in app design.

* Create basic user flow diagrams for simple app scenarios.

* Develop a sitemap for a small mobile application.

* Design low-fidelity wireframes for key screens identified in the user flows.

  • Key Activities:

* Choose a simple mobile app concept (e.g., a basic to-do list, a recipe app).

* Define 2-3 primary user personas and their goals.

* Map out 2-3 critical user flows (e.g., "create new item," "view details," "edit profile").

* Create a sitemap for your chosen app concept.

* Wireframe 5-7 core screens in your chosen tool, focusing on content and layout.

Week 3: Component Library & Design System Thinking

  • Focus: Building reusable UI components and understanding the basics of design systems.
  • Learning Objectives:

* Identify common mobile UI components (buttons, input fields, navigation bars, cards, etc.).

* Create a basic, reusable component library within your wireframing tool.

* Understand the benefits of a component-based approach for consistency and efficiency.

* Apply components to refine existing wireframes.

  • Key Activities:

* Research common mobile UI patterns and component libraries (e.g., Material Design, Apple Human Interface Guidelines).

* Design and create at least 10 reusable components (e.g., primary button, secondary button, text input, checkbox, radio button, navbar, tab bar) in your tool.

* Organize these components into a clear library.

* Refactor your Week 2 wireframes using the newly created components.

Week 4: Interaction Patterns & Prototyping

  • Focus: Defining how users interact with the app and bringing wireframes to life with basic prototyping.
  • Learning Objectives:

* Understand common mobile interaction patterns (tap, swipe, long press, drag, pinch, zoom).

* Define basic states for components (e.g., hover, active, disabled).

* Create a low-fidelity interactive prototype linking key screens.

* Conduct basic usability testing on your prototype to identify friction points.

  • Key Activities:

* Explore examples of effective mobile interaction design.

* Add basic interactions (e.g., linking buttons to new screens, showing/hiding elements) to your wireframes to create a clickable prototype.

* Define component states (e.g., primary button: default, pressed, disabled).

* Perform a quick "hallway test" with 1-2 individuals to observe their interaction with your prototype.

* Iterate on your wireframes and prototype based on feedback.

Week 5: Documentation & Developer Handoff

  • Focus: Preparing your wireframes for development, including annotations and specifications.
  • Learning Objectives:

* Understand the importance of clear documentation for developers.

* Add detailed annotations and specifications to your wireframes.

* Create a "Developer Handoff" page outlining key information.

* Learn best practices for organizing and sharing design files.

  • Key Activities:

* Research best practices for developer handoff documentation.

* Annotate your wireframes with notes on functionality, interaction, and content (e.g., "Tapping this button navigates to [Screen X]", "This field accepts alphanumeric input only").

* Create a separate "Specifications" page detailing component usage, states, and overall app structure.

* Organize your wireframe file into logical pages/sections.

* Prepare your file for sharing, considering version control and accessibility for developers.

Week 6: Final Project & Refinement

  • Focus: Assembling a complete Mobile App Wireframe Kit for a chosen concept and refining it based on learned principles.
  • Learning Objectives:

* Integrate all learned concepts into a cohesive and professional wireframe kit.

* Demonstrate proficiency in creating screen flows, component libraries, interaction patterns, and developer notes.

* Present your wireframe kit effectively.

  • Key Activities:

* Select a new, slightly more complex mobile app concept, or refine your existing one significantly.

* Design a complete wireframe kit, applying all principles from Weeks 1-5.

* Ensure consistency across all screens and components.

* Review your entire kit against a professional checklist (see Assessment Strategies).

* Prepare a brief presentation or summary explaining your app concept and wireframe kit.


Recommended Resources

Tools:

  • Figma: (Highly Recommended for Collaboration & Prototyping)

* Figma Learn: [https://www.figma.com/learn/](https://www.figma.com/learn/)

* Figma Community: Explore templates and component libraries.

  • Sketch: (Mac-only, Industry Standard)

* Sketch Tutorials: [https://www.sketch.com/tutorials/](https://www.sketch.com/tutorials/)

  • Adobe XD: (Part of Adobe Creative Cloud)

* Adobe XD Learn & Support: [https://helpx.adobe.com/xd/get-started.html](https://helpx.adobe.com/xd/get-started.html)

  • Miro / Whimsical: (For brainstorming, user flows, and low-fidelity sketching)

* Miro Academy: [https://miro.com/academy/](https://miro.com/academy/)

Learning Platforms & Articles:

  • Nielsen Norman Group (NN/g): Articles on UX basics, usability, and design principles.

Recommended:* "Wireframes: The First Step to a Better User Experience"

  • UX Planet (Medium): Diverse articles on UX/UI design.
  • Smashing Magazine: In-depth articles on web and mobile design.
  • Google's Material Design Guidelines: [https://m2.material.io/design](https://m2.material.io/design) (Understand component usage and interaction)
  • Apple Human Interface Guidelines: [https://developer.apple.com/design/human-interface-guidelines/](https://developer.apple.com/design/human-interface-guidelines/) (Understand iOS specific patterns)
  • Books:

* "Don't Make Me Think, Revisited" by Steve Krug (Usability)

* "The Design of Everyday Things" by Don Norman (Design Principles)

* "Lean UX: Applying Lean Principles to Improve User Experience" by Jeff Gothelf & Josh Seiden

Inspiration & Examples:

  • Mobbin.com: Real-world app screenshots and flows.
  • Pttrns.com: Mobile UI patterns and inspiration.
  • Dribbble / Behance: For visual inspiration (be cautious not to copy directly; focus on structure and flow).

Milestones

  • End of Week 2: Completed basic user flows and low-fidelity wireframes for 5-7 core screens of a simple app concept.
  • End of Week 4: Developed a reusable component library and created a clickable low-fidelity prototype demonstrating key user interactions.
  • End of Week 6 (Final Deliverable): A complete Mobile App Wireframe Kit for a chosen app concept, including:

* Clear screen flows.

* A well-organized component library.

* Defined interaction patterns.

* Detailed annotations and developer handoff notes.

* A brief presentation summarizing the app concept and the kit's structure.


Assessment Strategies

To ensure effective learning and skill development, the following assessment strategies will be employed:

  1. Self-Review Checklists: At the end of each week, use a provided checklist (or create your own based on the learning objectives) to review your work.

Example Checklist Item:* "Have I used consistent naming conventions for my components?"

Example Checklist Item:* "Do all primary user flows have corresponding wireframes?"

  1. Peer Feedback (Optional but Recommended): Share your work with a fellow learner, colleague, or mentor for constructive criticism. This helps identify blind spots and improve communication skills.

* Focus on clarity, completeness, and adherence to design principles.

  1. Practical Application & Project Submission: The successful completion of the weekly activities and the final project will be the primary measure of progress.

* The final wireframe kit will be evaluated against criteria such as:

* Completeness: Does it include all required elements (flows, components, interactions, notes)?

* Clarity: Is the documentation easy to understand for developers?

* Consistency: Are design elements and interactions consistent throughout the app?

* Usability: Does the prototype demonstrate a logical and intuitive user experience?

* Professionalism: Is the overall presentation clean, organized, and well-structured?

  1. Reflection Journals: Briefly document your challenges, breakthroughs, and key learnings each week. This fosters metacognition and reinforces understanding.

This study plan provides a structured path to mastering the creation of Mobile App Wireframe Kits. By diligently following the schedule, engaging with the resources, and actively applying the assessment strategies, you will develop a valuable and in-demand skill set. Good luck!

gemini Output

This deliverable provides a comprehensive Mobile App Wireframe Specification, structured in a machine-readable JSON format. This specification includes detailed definitions for screens, a reusable component library, screen flows, common interaction patterns, and crucial developer handoff notes. The goal is to offer a clear, actionable blueprint for design and development teams, ensuring consistency and efficiency.


Mobile App Wireframe Kit Specification (JSON)

This section presents the complete mobile app wireframe specification in a structured JSON format. This "code" serves as a detailed blueprint for the application's user interface and experience, providing a foundational layer for design and development.


{
  "_comment": "Mobile App Wireframe Kit Specification for TaskFlow App",
  "metadata": {
    "kitName": "TaskFlow Mobile App Wireframe Kit",
    "version": "1.0.0",
    "description": "A comprehensive wireframe specification for the TaskFlow mobile application, outlining core screens, components, flows, and interactions.",
    "targetPlatform": "Cross-platform (iOS & Android considerations where noted)",
    "creationDate": "2023-10-27",
    "author": "PantheraHive AI Assistant"
  },
  "componentLibrary": [
    {
      "id": "COMP-BTN-001",
      "name": "Primary Button",
      "type": "Button",
      "description": "A prominent button for primary actions.",
      "properties": {
        "text": "Call to Action",
        "variant": "filled",
        "color": "primary",
        "state": "enabled",
        "icon": null,
        "fullWidth": true
      },
      "defaultInteractions": [
        {
          "trigger": "onTap",
          "action": "triggerHapticFeedback",
          "payload": { "type": "light" }
        }
      ],
      "accessibilityNotes": "Ensure sufficient contrast ratio. Provide clear, descriptive text labels."
    },
    {
      "id": "COMP-BTN-002",
      "name": "Secondary Button",
      "type": "Button",
      "description": "A less prominent button for secondary actions.",
      "properties": {
        "text": "Secondary Action",
        "variant": "outlined",
        "color": "secondary",
        "state": "enabled",
        "icon": null,
        "fullWidth": false
      },
      "defaultInteractions": [],
      "accessibilityNotes": "Ensure text is readable against the background. Consider button size for touch targets."
    },
    {
      "id": "COMP-INP-001",
      "name": "Text Input Field",
      "type": "InputField",
      "description": "Standard text input field.",
      "properties": {
        "label": "Label",
        "placeholder": "Enter text here...",
        "type": "text",
        "required": false,
        "errorMessage": null,
        "value": ""
      },
      "defaultInteractions": [
        {
          "trigger": "onChange",
          "action": "updateState",
          "payload": { "target": "value" }
        }
      ],
      "accessibilityNotes": "Associate labels correctly with input fields. Provide clear error messages."
    },
    {
      "id": "COMP-INP-002",
      "name": "Password Input Field",
      "type": "InputField",
      "description": "Text input field specifically for passwords, with toggle visibility.",
      "properties": {
        "label": "Password",
        "placeholder": "Enter your password",
        "type": "password",
        "required": true,
        "errorMessage": null,
        "value": "",
        "showPasswordToggle": true
      },
      "defaultInteractions": [
        {
          "trigger": "onChange",
          "action": "updateState",
          "payload": { "target": "value" }
        }
      ],
      "accessibilityNotes": "Ensure the password toggle is accessible and provides clear feedback."
    },
    {
      "id": "COMP-CHK-001",
      "name": "Checkbox",
      "type": "Checkbox",
      "description": "A checkbox component.",
      "properties": {
        "label": "Remember me",
        "checked": false,
        "disabled": false
      },
      "defaultInteractions": [
        {
          "trigger": "onChange",
          "action": "updateState",
          "payload": { "target": "checked" }
        }
      ],
      "accessibilityNotes": "Ensure the label is clickable and associated with the checkbox."
    },
    {
      "id": "COMP-APP-001",
      "name": "App Bar",
      "type": "AppBar",
      "description": "Top application bar with title and optional actions.",
      "properties": {
        "title": "Screen Title",
        "showBackButton": false,
        "leadingIcon": null,
        "trailingIcons": []
      },
      "defaultInteractions": [],
      "accessibilityNotes": "Ensure all interactive elements in the app bar are focusable and have descriptive labels."
    },
    {
      "id": "COMP-BNB-001",
      "name": "Bottom Navigation Bar",
      "type": "BottomNavigationBar",
      "description": "Bottom navigation for main app sections.",
      "properties": {
        "items": [
          { "label": "Tasks", "icon": "list", "route": "/tasks" },
          { "label": "Calendar", "icon": "calendar", "route": "/calendar" },
          { "label": "Settings", "icon": "settings", "route": "/settings" }
        ],
        "activeItem": "Tasks"
      },
      "defaultInteractions": [
        {
          "trigger": "onTapItem",
          "action": "navigateTo",
          "payload": { "target": "item.route" }
        }
      ],
      "accessibilityNotes": "Provide clear labels for each navigation item. Ensure sufficient spacing between items."
    },
    {
      "id": "COMP-CARD-001",
      "name": "Task Card",
      "type": "Card",
      "description": "Display unit for an individual task in a list.",
      "properties": {
        "taskTitle": "Task Name",
        "taskDescription": "Short description of the task.",
        "dueDate": "Today",
        "priority": "Medium",
        "isComplete": false
      },
      "defaultInteractions": [
        {
          "trigger": "onTap",
          "action": "navigateTo",
          "payload": { "target": "TaskDetailScreen", "params": { "taskId": "currentTask.id" } }
        },
        {
          "trigger": "onLongPress",
          "action": "showContextMenu",
          "payload": { "options": ["Mark Complete", "Edit", "Delete"] }
        },
        {
          "trigger": "onSwipeLeft",
          "action": "markTaskComplete",
          "payload": { "taskId": "currentTask.id" }
        }
      ],
      "accessibilityNotes": "Ensure card content is readable. Swiping actions should have visual and haptic feedback."
    },
    {
      "id": "COMP-MOD-001",
      "name": "Confirmation Modal",
      "type": "Modal",
      "description": "A modal dialog for confirming actions.",
      "properties": {
        "title": "Confirm Action",
        "message": "Are you sure you want to proceed?",
        "confirmButtonText": "Confirm",
        "cancelButtonText": "Cancel"
      },
      "defaultInteractions": [
        {
          "trigger": "onConfirm",
          "action": "hideModal",
          "payload": {}
        },
        {
          "trigger": "onCancel",
          "action": "hideModal",
          "payload": {}
        }
      ],
      "accessibilityNotes": "Modals should trap focus, be dismissible via escape/back button, and announce their content."
    }
  ],
  "screens": [
    {
      "id": "SCR-SPL-001",
      "name": "Splash Screen",
      "layoutType": "CenterAligned",
      "components": [
        {
          "componentId": "COMP-APP-001",
          "instanceId": "APPBAR-SPLASH",
          "position": "top",
          "properties": {
            "title": "TaskFlow",
            "showBackButton": false,
            "trailingIcons": []
          }
        },
        {
          "componentId": "COMP-BTN-001",
          "instanceId": "BTN-GET-STARTED",
          "position": "center",
          "properties": {
            "text": "Get Started",
            "fullWidth": false
          },
          "interactions": [
            {
              "trigger": "onTap",
              "action": "navigateTo",
              "target": "SCR-LOG-001"
            }
          ]
        }
      ]
    },
    {
      "id": "SCR-LOG-001",
      "name": "Login Screen",
      "layoutType": "VerticalStack",
      "components": [
        {
          "componentId": "COMP-APP-001",
          "instanceId": "APPBAR-LOGIN",
          "position": "top",
          "properties": {
            "title": "Login",
            "showBackButton": true
          },
          "interactions": [
            {
              "trigger": "onBack",
              "action": "navigateBack"
            }
          ]
        },
        {
          "componentId": "COMP-INP-001",
          "instanceId": "INP-EMAIL",
          "position": "center",
          "properties": {
            "label": "Email",
            "placeholder": "your@example.com",
            "type": "email",
            "required": true
          }
        },
        {
          "componentId": "COMP-INP-002",
          "instanceId": "INP-PASSWORD",
          "position": "center",
          "properties": {
            "label": "Password",
gemini Output

Mobile App Wireframe Kit Specification: Recipe Sharing App

Project: Recipe Sharing App

Document Version: 1.0

Date: October 26, 2023


1. Introduction & Purpose

This document provides a comprehensive wireframe specification for the "Recipe Sharing App". It outlines the core user interface (UI) structure, user flows, key components, and interaction patterns, serving as the foundational blueprint for the app's development.

The purpose of this specification is to:

  • Establish a clear understanding of the app's functional layout and user experience at a structural level.
  • Provide a reference for all stakeholders (designers, developers, product managers) regarding screen content and navigation.
  • Facilitate efficient development by detailing the necessary UI elements and their expected behaviors before visual design begins.
  • Enable early feedback on the app's usability and information architecture.

This deliverable focuses on the skeletal structure and functionality, not the visual aesthetics or detailed branding.


2. App Overview

The "Recipe Sharing App" aims to provide users with a platform to discover, save, and share recipes. Key features include:

  • User registration and profile management.
  • Browsing and searching for recipes by various criteria (cuisine, ingredients, dietary needs).
  • Viewing detailed recipe information (ingredients, instructions, nutrition, user reviews).
  • Adding new recipes to the platform.
  • Saving favorite recipes and creating meal plans.

3. Screen Flows

This section details the primary user journeys within the application, illustrating the sequence of screens a user will navigate to complete specific tasks. Each flow outlines the entry point, the screens involved, and the key actions that transition between them.

3.1. Onboarding & Account Creation

User Story: As a new user, I want to create an account so I can access personalized features and save recipes.

  1. [Screen 1.0] Splash Screen:

* Content: App Logo, brief tagline.

* Action: Auto-transitions after 2-3 seconds.

  1. [Screen 1.1] Welcome/Onboarding Carousel (3 screens):

* Content: Each screen highlights a key feature with an image/icon and short text.

* Actions: Swipe left/right to navigate, "Skip" button (top right), "Get Started" button (last screen).

* Transitions:

* Swipe left/right → Next/Previous Onboarding Screen.

* "Skip" → [Screen 1.3] Login/Sign Up.

* "Get Started" → [Screen 1.3] Login/Sign Up.

  1. [Screen 1.3] Login/Sign Up:

* Content: "Login" tab, "Sign Up" tab, input fields for email/password, social login options (Google, Apple).

* Actions:

* Tap "Sign Up" tab → Activates Sign Up form.

* Enter credentials & Tap "Login" → [Screen 2.0] Home/Browse Recipes.

* Tap "Sign Up with Email" → [Screen 1.4] Registration Details.

* Tap "Login with [Social Provider]" → Authenticate via provider → [Screen 2.0] Home/Browse Recipes.

  1. [Screen 1.4] Registration Details (if "Sign Up with Email" selected):

* Content: Input fields for Name, Email, Password, Confirm Password. Checkbox for "Agree to Terms & Conditions".

* Actions:

* Tap "Sign Up" button → Create account → [Screen 2.0] Home/Browse Recipes.

* Tap "Back" arrow → [Screen 1.3] Login/Sign Up.

3.2. Browse & Search Recipes

User Story: As a user, I want to easily find recipes based on my preferences or discover new ones.

  1. [Screen 2.0] Home/Browse Recipes:

* Content: Top navigation (Search bar, Filters icon), Featured Recipes carousel, Recently Added recipes section, Categories (e.g., "Breakfast", "Dinner") as scrollable cards. Bottom navigation bar.

* Actions:

* Tap Search bar → [Screen 2.1] Search Results.

* Tap Filters icon → [Screen 2.2] Filter Options (Modal).

* Tap on a Recipe Card → [Screen 3.0] Recipe Details.

* Tap on a Category Card → [Screen 2.3] Category Recipes.

* Scroll down → Load more recipes.

  1. [Screen 2.1] Search Results:

* Content: Search input field (pre-filled if from Home), Filters icon, list of recipe cards matching search query.

* Actions:

* Type in search field → Real-time search update.

* Tap Filters icon → [Screen 2.2] Filter Options (Modal).

* Tap on a Recipe Card → [Screen 3.0] Recipe Details.

* Tap "Back" arrow → [Screen 2.0] Home/Browse Recipes.

  1. [Screen 2.2] Filter Options (Modal):

* Content: Checkboxes/radio buttons for various filters (e.g., Cuisine, Dietary, Prep Time, Ingredients). "Apply Filters" button, "Clear All" button.

* Actions:

* Select filters, Tap "Apply Filters" → Return to previous screen (e.g., [Screen 2.0] or [Screen 2.1]) with filtered results.

* Tap "Clear All" → Reset filters.

* Tap outside modal or "X" icon → Close modal without applying.

  1. [Screen 2.3] Category Recipes:

* Content: Header with Category Name, list of recipe cards belonging to that category.

* Actions:

* Tap on a Recipe Card → [Screen 3.0] Recipe Details.

* Tap "Back" arrow → [Screen 2.0] Home/Browse Recipes.

3.3. View Recipe Details

User Story: As a user, I want to view all the details of a recipe, including ingredients, instructions, and user reviews.

  1. [Screen 3.0] Recipe Details:

* Content: Recipe image/carousel, Recipe Title, Author, Rating, "Save" icon, "Share" icon. Sections for: Ingredients (list), Instructions (numbered steps), Nutrition Info (expandable), Comments/Reviews (list with "Add Comment" button).

* Actions:

* Tap "Save" icon → Toggle save status (e.g., change icon appearance).

* Tap "Share" icon → Open native share sheet.

* Tap "Add Comment" → [Screen 3.1] Add Comment (Modal).

* Scroll down → View all sections.

* Tap "Back" arrow → Previous screen (e.g., [Screen 2.0], [Screen 2.1], [Screen 2.3]).

  1. [Screen 3.1] Add Comment (Modal):

* Content: Text area for comment, Star rating selector, "Submit" button, "Cancel" button.

* Actions:

* Enter text, select rating, Tap "Submit" → Post comment, close modal, update [Screen 3.0] comments section.

* Tap "Cancel" or outside modal → Close modal without submitting.

3.4. Add New Recipe

User Story: As a user, I want to add my own recipes to the app to share with others.

  1. [Screen 4.0] Add Recipe (from Bottom Nav):

* Content: Multi-step form. Step 1: Basic Info (Title, Description, Prep Time, Cook Time, Servings). "Next" button.

* Actions:

* Fill fields, Tap "Next" → [Screen 4.1] Ingredients.

* Tap "Cancel" (top right) → Discard changes, return to [Screen 2.0] Home.

  1. [Screen 4.1] Add Recipe: Ingredients:

* Content: Input field to add individual ingredients (e.g., "1 cup flour"), "Add Ingredient" button, list of added ingredients (with delete option). "Previous" and "Next" buttons.

* Actions:

* Add ingredients → Update list.

* Tap "Previous" → [Screen 4.0] Basic Info.

* Tap "Next" → [Screen 4.2] Instructions.

  1. [Screen 4.2] Add Recipe: Instructions:

* Content: Input field to add individual instruction steps, "Add Step" button, numbered list of added steps (with reorder/delete options). "Previous" and "Submit" buttons.

* Actions:

* Add steps → Update list.

* Tap "Previous" → [Screen 4.1] Ingredients.

* Tap "Submit" → Upload recipe, show success message, navigate to [Screen 3.0] Recipe Details (for the newly added recipe).


4. Component Library

This section details the reusable UI components used throughout the application, defining their structure, states, and basic usage.

4.1. Navigation

  • Bottom Navigation Bar:

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

* Components: 4-5 icons with text labels.

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

* Usage: Persistent across most main screens (Home, Saved, Add Recipe, Profile).

  • Top Navigation Bar (App Bar):

* Purpose: Screen title, contextual actions, back navigation.

* Components:

* Left: Back arrow icon (<), Menu icon (for side drawer, if applicable).

* Center: Screen Title (text).

* Right: Action icons (e.g., Search, Filter, Save, Share, Edit).

* States: Active, Disabled (for actions).

* Usage: Varies per screen.

  • Tabs:

* Purpose: Switch between sub-sections on a single screen.

* Components: Horizontal set of text labels.

* States: Inactive, Active (highlighted with indicator).

* Usage: E.g., Login/Sign Up screen.

4.2. Buttons

  • Primary Button:

* Purpose: Main call-to-action on a screen.

* States: Default, Hover/Pressed, Disabled (greyed out, non-interactive).

* Usage: "Submit", "Get Started", "Apply Filters". Full width or content-sized.

  • Secondary Button:

* Purpose: Less prominent actions, often complementary to primary.

* States: Default, Hover/Pressed, Disabled.

* Usage: "Cancel", "Back", "Clear All". Outline or text-only.

  • Icon Button:

* Purpose: Action triggered by an icon.

* States: Default, Pressed.

* Usage: "Save" (bookmark), "Share", "Filter", "Delete" (trash can).

4.3. Input Fields

  • Text Input Field:

* Purpose: Allow users to enter text.

* Components: Label/Placeholder text, Input area, Optional clear icon (X).

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

* Usage: Email, Password, Recipe Title, Search.

  • Text Area:

* Purpose: Multi-line text input.

* Components: Label/Placeholder text, Larger input area.

* States: Default, Focused, Error, Disabled.

* Usage: Recipe Description, Comment.

  • Dropdown/Picker:

* Purpose: Select an option from a predefined list.

* Components: Input field that reveals a list/picker on tap.

* States: Default, Open.

* Usage: Cuisine type, Prep Time range.

  • Checkbox:

* Purpose: Select one or more options from a list.

* Components: Square box, label.

* States: Unchecked, Checked, Disabled.

* Usage: Dietary preferences, "Agree to Terms".

  • Radio Button:

* Purpose: Select a single option from a group.

* Components: Circle, label.

* States: Unselected, Selected, Disabled.

* Usage: Sorting options.

4.4. Information Display

  • Recipe Card:

* Purpose: Compact display of recipe information for browsing.

* Components: Image thumbnail, Recipe Title, Author, Rating (stars), Optional "Save" icon.

* States: Default.

* Usage: Home screen, Search results, Category lists.

  • List Item:

* Purpose: Display items in a scrollable list.

* Components: Text label, optional icon/thumbnail, optional secondary text, optional right-arrow icon for navigation.

* States: Default, Pressed.

* Usage: Ingredients list, Instructions list, Settings menu.

  • Modal/Dialog:

* Purpose: Overlay content for critical information or short tasks.

* Components: Title, message, action buttons.

* States: Visible (overlaying main content).

* Usage: "Add Comment", "Confirm Delete", Filter Options.

  • Rating Stars:

* Purpose: Display or input a star rating.

* Components: 5 star icons.

* States: Filled (rated), Empty (not rated), Half-filled

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