Mobile App Wireframe Kit
Run ID: 69cacdefeff1ba2b79624f722026-03-30Design
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: Study Plan for Creation & Utilization

This document outlines a comprehensive study plan designed to equip individuals with the knowledge and practical skills required to effectively create, manage, and utilize mobile app wireframe kits. This plan serves as the foundational "architecture" for understanding the core components and processes involved in generating high-quality wireframe specifications, which is the ultimate goal of the "Mobile App Wireframe Kit" workflow.

By following this structured approach, you will develop a deep understanding of wireframing principles, master essential tools, and learn best practices for organizing and documenting your design assets for seamless collaboration and developer handoff.


1. Introduction: The Value of Wireframing & Wireframe Kits

Wireframing is a crucial step in the mobile app design process, focusing on the layout, content, and functionality of an application without the distraction of visual aesthetics. A well-constructed Mobile App Wireframe Kit provides a standardized set of reusable components, screen flows, and interaction patterns, enabling designers to rapidly prototype, iterate, and communicate design ideas efficiently. This study plan will guide you through the journey of mastering these concepts.

2. Learning Objectives

Upon successful completion of this study plan, you will be able to:

  • Understand Wireframing Fundamentals: Grasp the purpose, benefits, and different fidelities of wireframes (low-fidelity vs. high-fidelity).
  • Apply Core UX Principles: Integrate fundamental usability, accessibility, and information hierarchy principles into wireframe designs.
  • Master Wireframing Tools: Proficiently use industry-standard tools (e.g., Figma, Sketch, Adobe XD) to create and manage wireframes.
  • Design Essential Mobile UI Components: Create a comprehensive library of common mobile user interface elements (buttons, inputs, navigation, lists, cards, etc.).
  • Develop Screen Flows & Interaction Patterns: Map out user journeys, define task flows, and illustrate basic interaction patterns within a mobile app.
  • Organize and Document Wireframe Kits: Establish clear naming conventions, folder structures, and documentation practices for a scalable and maintainable wireframe kit.
  • Prepare for Developer Handoff: Structure wireframes and their specifications for clear and efficient communication with development teams.
  • Critique and Iterate: Develop skills in self-critique and incorporating feedback to refine wireframe designs.

3. Prerequisites

While this plan is designed to be comprehensive, some foundational knowledge will be beneficial:

  • Basic understanding of mobile applications and their common functionalities.
  • Familiarity with computer usage and general software interfaces.
  • No prior design experience is strictly required, but an interest in design and problem-solving is highly recommended.

4. Weekly Schedule

This 4-week intensive study plan is structured to build knowledge progressively, with each week focusing on a key aspect of mobile app wireframing and kit creation.

Week 1: Wireframing Fundamentals & UX Principles

  • Learning Focus:

* Introduction to Wireframing: What it is, why it matters, its role in the design process.

* Fidelity Levels: Differentiating between low-fidelity, mid-fidelity, and high-fidelity wireframes.

* Core UX Principles: Usability heuristics (e.g., Nielsen's 10 Heuristics), information architecture basics, user-centered design.

* Tool Introduction: Hands-on setup and basic usage of your chosen wireframing tool (e.g., Figma workspace, basic shapes, text, grouping).

  • Activities:

* Read articles/watch videos on wireframing basics.

* Practice creating simple layouts for common mobile screens (e.g., a login screen, a profile page) using basic shapes and text.

* Analyze existing popular mobile apps and identify their core layout structures.

  • Deliverable/Milestone: Create low-fidelity wireframes for a simple 3-screen mobile app flow (e.g., onboarding: Welcome -> Create Account -> Home Dashboard).

Week 2: Mobile UI Components & Interaction Patterns

  • Learning Focus:

* Common Mobile UI Patterns: Navigation (tabs, drawers, breadcrumbs), data input (text fields, dropdowns, checkboxes), lists, cards, modals.

* Designing Essential Components: Buttons (primary, secondary, ghost), text fields (various states), toggles, sliders, radio buttons, avatars.

* Basic Interaction Design: Understanding tap targets, swipe gestures, basic transitions (e.g., screen to screen linking).

* Component States: Designing for active, inactive, hover, error, and loading states.

  • Activities:

* Study common mobile UI design patterns and best practices.

* Recreate standard mobile UI components within your chosen tool.

* Experiment with linking screens to simulate basic user interactions.

  • Deliverable/Milestone: Design a library of at least 10 core mobile UI components with their different states. Apply these components to refine your Week 1 wireframes, introducing mid-fidelity details.

Week 3: Screen Flows, Information Architecture & Kit Organization

  • Learning Focus:

* Mapping User Flows: Understanding user tasks and mapping them into step-by-step screen flows.

* Advanced Information Architecture: Organizing content and features logically within a mobile app structure.

* Creating a Component Library: Structuring reusable components within your design tool for efficiency and consistency (e.g., Figma Components, Sketch Symbols).

* Naming Conventions & Folder Structure: Developing systematic approaches for organizing layers, frames, and files within your wireframe kit.

* Version Control Basics: Understanding the importance of versioning for design files.

  • Activities:

* Choose a specific mobile app feature (e.g., "ordering food," "booking an appointment") and map out its complete user flow from start to finish.

* Start building a master component library, converting your Week 2 components into reusable assets.

* Organize your wireframe project file with clear naming and grouping.

  • Deliverable/Milestone: Develop a comprehensive screen flow for a medium-complexity feature (e.g., "user profile editing" or "product search and filtering") using your component library. Ensure proper organization within your design file.

Week 4: Advanced Wireframing, Prototyping & Handoff

  • Learning Focus:

* Basic Prototyping: Connecting screens, adding simple animations/transitions to create interactive wireframes.

* Wireframe Documentation: Annotating wireframes with functionality descriptions, interaction notes, and edge cases.

* Developer Handoff Best Practices: Preparing design files for developers, including specifications, asset export, and communication strategies.

* Responsive Wireframing (Introduction): Briefly touching on how wireframes adapt to different screen sizes.

* Accessibility Considerations: Basic checks for contrast, text size, and touch target size.

  • Activities:

* Add basic interactive prototypes to your Week 3 screen flow.

* Practice annotating wireframes with developer notes directly in your design tool or a separate document.

* Simulate a developer handoff scenario, preparing your files as if delivering to a team.

  • Deliverable/Milestone: Consolidate all learned concepts into a mini-wireframe kit for a small, complete app feature (e.g., a "To-Do List" app with add, edit, delete, mark complete functionality). This kit should include:

* A structured component library.

* Complete screen flows.

* Basic interactive prototype.

* Developer handoff notes for key screens/interactions.

5. Recommended Resources

  • Books:

* "Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability" by Steve Krug (Essential for UX fundamentals).

* "The Design of Everyday Things" by Don Norman (Classic on design principles).

* "Designing Interfaces" by Jenifer Tidwell (Comprehensive guide to UI patterns).

* "Lean UX: Applying Lean Principles to Improve User Experience" by Jeff Gothelf & Josh Seiden (For understanding agile design processes).

  • Online Courses & Tutorials:

* Figma Learn/Sketch Tutorials/Adobe XD Learn: Official documentation and tutorials are excellent starting points.

* Coursera/edX/Udemy: Search for "UX/UI Design," "Mobile App Design," or specific tool courses (e.g., "Figma Master

gemini Output

This document provides the comprehensive wireframe specification for your mobile application, "TaskFlow". It details the user interface structure, user flows, reusable components, interaction patterns, and critical notes for development teams. This output is designed to be directly actionable for developers, ensuring consistency and adherence to the intended user experience.


Mobile App Wireframe Specification: TaskFlow App

1. Introduction

This document serves as the comprehensive wireframe specification for the "TaskFlow" mobile application. It details the user interface (UI) structure, user flows, reusable components, interaction patterns, and critical notes for development teams. The goal is to provide a clear, actionable blueprint for UI implementation, ensuring consistency and adherence to the intended user experience.

  • Application Name: TaskFlow
  • **
gemini Output

Mobile App Wireframe Specification

Project: [Your Project Name/App Name]

Date: October 26, 2023

Version: 1.0

Prepared For: [Client Name/Team]


1. Introduction and Overview

This document provides a comprehensive Mobile App Wireframe Specification, serving as a foundational blueprint for the [Your Project Name/App Name] mobile application. It details the core functional structure, user flows, essential UI components, and interaction patterns at a low-fidelity level.

The primary goal of this specification is to establish a clear understanding of the application's functionality and user experience before visual design and development commence. It focuses on:

  • User Flows: Mapping out key user journeys and screen sequences.
  • Component Library: Defining reusable UI elements and their basic behaviors.
  • Interaction Patterns: Describing how users will interact with the application.
  • Developer Handoff Notes: Providing crucial guidance for the development team.

This document is a living specification and will be refined based on feedback and subsequent design phases.


2. Screen Flows

This section outlines the primary user journeys within the application, detailing the sequence of screens and user actions for critical tasks. Each flow is described sequentially, assuming the user starts from a logical entry point.

(Note: Visual wireframe diagrams corresponding to these flows will be provided separately as visual assets.)

2.1. User Onboarding & Account Creation

Objective: Allow new users to understand the app's value and create an account or log in.

  1. Splash Screen:

* Description: Displays app logo and branding briefly.

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

  1. Welcome / Onboarding Tour (Optional Skip):

* Description: 2-3 swipeable screens highlighting key features/benefits.

* Actions:

* Swipe left/right to navigate tour screens.

* "Skip" button (top right) to go directly to Sign Up/Log In.

* "Get Started" button (last tour screen) to go to Sign Up/Log In.

  1. Sign Up / Log In Choice Screen:

* Description: Presents options for new users or returning users.

* Actions:

* "Create Account" button (Primary)

* "Sign In" button (Secondary)

* "Continue as Guest" button (Tertiary - if applicable for app functionality)

  1. Create Account Form:

* Description: Form fields for user registration.

* Fields: Full Name, Email Address, Password, Confirm Password.

* Actions:

* "Register" button (Primary, enabled upon valid input).

* Link to "Terms of Service" and "Privacy Policy".

* "Already have an account? Sign In" link.

  1. Email Verification (Modal/Screen):

* Description: Informs user to check email for verification link.

* Actions:

* "Resend Email" button.

* "Continue" button (navigates to Home/Profile Setup after successful verification).

  1. Profile Setup (Optional):

* Description: Screen for users to complete initial profile details (e.g., profile picture, interests).

* Actions:

* Upload Profile Picture (Tap to open camera/gallery).

* Input fields for optional details.

* "Save Profile" button.

* "Skip for now" button.

  1. Home Screen:

* Description: The main dashboard or content feed, indicating successful onboarding.

2.2. Product Browsing & Detail View

Objective: Allow users to discover products/content and view their details.

  1. Home Screen:

* Description: Displays categories, featured items, search bar, and personalized content.

* Actions:

* Tap on a category card/link.

* Tap on a featured item card.

* Tap on the Search Bar.

* Scroll vertically to load more content.

  1. Category Listing Screen:

* Description: Displays a list or grid of items belonging to a selected category.

* Elements: Top navigation with category title, back button, filter/sort icon.

* Actions:

* Tap on an item card to view details.

* Tap Filter icon to open filter/sort options modal.

* Scroll vertically to load more items (infinite scroll).

  1. Search Results Screen:

* Description: Displays items matching the user's search query.

* Elements: Search input with clear button, back button, list/grid of results.

* States: "No Results Found" message.

* Actions:

* Tap on an item card to view details.

* Refine search query.

  1. Product/Content Detail Screen:

* Description: Provides comprehensive information about a selected item.

* Elements:

* Image Carousel (swipeable).

* Product Title, Price/Cost.

* Description (collapsible for long text).

* Ratings/Reviews section (view all reviews link).

* "Add to Cart" / "Buy Now" / "Favorite" button (depending on app type).

* Related Items section (horizontal scroll).

* Actions:

* Swipe horizontally on image carousel.

* Tap "Add to Cart" (shows confirmation toast/snackbar).

* Tap "Buy Now" (initiates checkout flow).

* Tap "Favorite" icon (changes state, adds to user's favorites).

* Tap "View All Reviews" to navigate to a dedicated reviews screen.

2.3. Checkout Process (E-commerce Example)

Objective: Guide users through purchasing items from their cart.

  1. Shopping Cart Screen:

* Description: Lists all items added by the user, quantities, and subtotal.

* Elements: Item list (with image, name, price, quantity selector, remove button), Subtotal, Shipping Estimate, Total, Promo Code input.

* Actions:

* Adjust item quantity (stepper +/-).

* Remove item (swipe left or dedicated button).

* Apply Promo Code (input field + button).

* "Continue Shopping" button.

* "Proceed to Checkout" button (Primary, enabled when cart is not empty).

  1. Shipping Information Screen:

* Description: Collects user's shipping address and allows selection of shipping method.

* Elements: Saved Addresses list (if available), Add New Address form (Name, Address Line 1, Line 2, City, State/Province, Zip/Postal Code, Country), Shipping Method selection (Radio buttons/list).

* Actions:

* Select a saved address.

* Fill out and save a new address.

* Select a shipping method.

* "Continue to Payment" button.

  1. Payment Information Screen:

* Description: Collects payment details and allows selection of payment method.

* Elements: Saved Payment Methods list (if available), Add New Card form (Card Number, Expiry Date, CVV), Other payment options (e.g., PayPal, Apple Pay, Google Pay).

* Actions:

* Select a saved payment method.

* Enter new credit/debit card details.

* Select alternative payment gateway.

* "Continue to Order Summary" button.

  1. Order Summary Screen:

* Description: A final review of all order details before placing the order.

* Elements: List of items, Shipping Address, Shipping Method, Payment Method (masked), Subtotal, Shipping Cost, Tax, Total.

* Actions:

* "Edit" links next to each section (e.g., Shipping, Payment) to navigate back and modify.

* "Place Order" button (Primary, confirms purchase).

  1. Order Confirmation Screen:

* Description: Confirms successful order placement with an order ID.

* Elements: Success message, Order ID, Estimated Delivery Date (if available).

* Actions:

* "View Order Details" button (navigates to order history).

* "Continue Shopping" button (navigates to Home screen).


3. Component Library

This section defines the reusable UI components that will form the building blocks of the application. Each component is described with its primary purpose, common states, and basic behavior.

3.1. Buttons

  • Purpose: Initiate an action or navigate.
  • Types:

* Primary Button: Main call-to-action (e.g., "Submit", "Sign Up").

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

* Secondary Button: Less prominent actions (e.g., "Cancel", "Learn More").

* States: Default, Hover/Pressed, Disabled.

* Tertiary/Text Button: Minimalist actions, often for navigation or secondary options (e.g., "Forgot Password?", "Skip").

* States: Default, Hover/Pressed.

* Icon Button: Button with only an icon (e.g., "Settings", "Share").

* States: Default, Hover/Pressed, Active.

  • Behavior: Tappable area, visual feedback on press, disabled state prevents interaction.

3.2. Input Fields

  • Purpose: Allow users to enter text, numbers, or select options.
  • Types:

* Text Input: Single line text (e.g., Name, Address).

*

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