Mobile App Wireframe Kit
Run ID: 69ccc1163e7fb09ff16a4cda2026-04-01Design
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

This comprehensive study plan is designed to guide you through the process of mastering mobile app wireframing, from foundational concepts to building reusable wireframe kits and preparing for developer handoff. By following this structured approach, you will develop the practical skills and theoretical understanding necessary to create professional and effective mobile app wireframes.


1. Introduction & Overall Learning Objectives

Introduction:

A mobile app wireframe kit is a crucial asset in the design and development lifecycle, providing a low-fidelity blueprint for application interfaces, user flows, and interaction patterns. This study plan is tailored to equip you with the expertise to not only create individual wireframes but also to build a robust, reusable system that accelerates design processes and enhances collaboration.

Overall Learning Objectives:

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

  • Understand & Articulate: Clearly define wireframing, its purpose, benefits, and different fidelity levels within the mobile app design process.
  • Master Tools: Proficiently use industry-standard tools (e.g., Figma) to create low to mid-fidelity mobile app wireframes.
  • Design & Structure: Create and organize a comprehensive, reusable mobile UI component library and a structured wireframe kit.
  • Map User Journeys: Develop clear user flows and screen interaction patterns for mobile applications.
  • Apply Principles: Integrate fundamental UX/UI design principles (e.g., hierarchy, consistency, feedback) into your wireframe designs.
  • Prepare for Handoff: Generate detailed wireframe documentation, annotations, and specifications suitable for efficient developer handoff.

2. Weekly Study Schedule

This 4-week schedule is designed for focused learning, dedicating approximately 10-15 hours per week, including theoretical study and practical exercises.

Week 1: Foundations & Tool Mastery

  • Topics:

* Introduction to Wireframing: Definition, purpose, benefits, types (low-fidelity, mid-fidelity, high-fidelity), and its role in the design process.

* UX/UI Basics for Mobile: Key differences between mobile and desktop design, mobile-first philosophy, common mobile design constraints (screen size, input methods).

* Choosing & Setting Up a Wireframing Tool: Deep dive into Figma (recommended for its collaborative features and component capabilities). Workspace setup, basic interface, keyboard shortcuts.

* Basic UI Elements: Creating fundamental shapes, text fields, simple buttons, and icons within Figma.

* Grids & Layouts: Understanding basic grid systems for mobile, auto layout fundamentals.

  • Learning Objectives:

* Articulate the "what" and "why" of wireframing.

* Identify and differentiate between various wireframe fidelity levels.

* Set up a Figma account and workspace.

* Create basic geometric shapes, text, and simple icons.

* Apply basic grid principles and Figma's Auto Layout for organized design.

Week 2: Core Components & Screen Design

  • Topics:

* Common Mobile UI Components: Detailed exploration of essential mobile UI elements (e.g., navigation bars, tab bars, input fields, cards, lists, modals, toggles, sliders).

* Component States: Designing for different states (default, active, disabled, error, hover/pressed).

* Information Hierarchy: Principles of visual hierarchy and how to apply them to mobile screens.

* Designing Individual Screens: Practicing the design of common mobile screens (e.g., Login/Registration, Dashboard, Profile, Product Listing, Settings) using learned components and layouts.

* Consistency & Reusability: Introduction to making components reusable.

  • Learning Objectives:

* Design and implement a wide range of common mobile UI components.

* Create distinct visual states for interactive components.

* Apply principles of information hierarchy to enhance screen readability and usability.

* Design cohesive and functional individual mobile screens.

Week 3: Interaction, Flows & Prototyping

  • Topics:

* User Flows vs. Screen Flows: Understanding the difference and mapping out user journeys.

* Flowcharting Techniques: Using tools like Miro or Whimsical (or Figma's native tools) to visualize user paths.

* Common Mobile Interaction Patterns: Gestures (tap, swipe, pinch), transitions (modal, push, dissolve), navigation patterns (drawer, tab bar, breadcrumbs).

* Basic Prototyping in Figma: Linking screens, creating simple click-through prototypes, basic animations (e.g., smart animate).

* Feedback & Affordance: Designing elements that clearly communicate their function and provide feedback to user actions.

  • Learning Objectives:

* Create clear and logical user and screen flow diagrams.

* Incorporate appropriate mobile interaction patterns into wireframes.

* Develop interactive, clickable prototypes using Figma.

* Design for clear user feedback and intuitive affordances.

Week 4: Advanced Concepts, Kit Creation & Handoff

  • Topics:

* Building a Reusable Component Library/Design System: In-depth use of Figma Components, Variants, Instances, and Auto Layout for creating a scalable system.

* Creating a Wireframe Kit Template: Assembling all learned components and patterns into a structured, easily deployable wireframe kit.

* Annotations & Documentation: Best practices for adding notes, specifications, and contextual information to wireframes.

* Developer Handoff Best Practices: Preparing files for developers, using tools like Inspect mode in Figma, exporting assets, communication strategies.

* Version Control & Collaboration: Managing design iterations and collaborating effectively in Figma.

  • Learning Objectives:

* Construct a robust and scalable mobile wireframe component library using advanced Figma features.

* Assemble a complete and well-organized mobile app wireframe kit.

* Annotate wireframes thoroughly for clarity and developer understanding.

* Prepare and deliver wireframe documentation for seamless developer handoff.

* Utilize Figma's collaboration and version history features effectively.


3. Recommended Resources

Software & Tools:

  • Figma (Primary Tool): The industry standard for UI/UX design, wireframing, prototyping, and design systems. (Free tier available).

Why:* Collaborative, powerful component system, extensive plugin ecosystem, widely adopted.

  • Miro / Whimsical (Optional for Flowcharting): Excellent for brainstorming, user flow diagrams, and initial concept mapping. (Free tiers available).
  • Mobbin.com / Pttrns.com: Resources for mobile app design inspiration and common UI patterns.

Online Courses & Tutorials:

  • Figma Learn: Official tutorials and documentation for mastering Figma features.

Link:* [https://www.figma.com/tutorials/](https://www.figma.com/tutorials/)

  • Udemy / Coursera / Skillshare: Search for courses like "Figma UI/UX Design Essentials," "Mobile App Wireframing & Prototyping," or "UX Design Fundamentals."

Recommendation:* Look for courses that include hands-on projects and cover component libraries.

  • YouTube Channels:

* Figma: Official channel for updates and tutorials.

* DesignCode: High-quality tutorials on UI design, Figma, and app development.

* Mizko: Practical Figma tips and UI design workflows.

* Traversy Media / The Net Ninja: Offer general web/app development context that informs design decisions.

Books & Articles:

  • "Don't Make Me Think, Revisited" by Steve Krug: A timeless classic on web usability, highly relevant to mobile UX.
  • "The Design of Everyday Things" by Don Norman: Fundamental principles of good design, interaction, and affordance.
  • Nielsen Norman Group (NN/g): Extensive articles and research on UX, usability, and mobile design guidelines.

Link:* [https://www.nngroup.com/](https://www.nngroup.com/)

  • Medium / UX Collective: Platforms for articles, case studies, and opinions on wireframing, mobile UI patterns, and UX best practices.

Community & Templates:

  • Figma Community: Explore thousands of free wireframe kits, UI templates, design systems, and plugins created by other designers.

Link:* [https://www.figma.com/community](https://www.figma.com/community)

  • **Reddit (r/userexperience, r/
gemini Output

This deliverable provides a comprehensive mobile app wireframe specification in a structured, machine-readable JSON format. This "code" serves as a detailed blueprint for developers and designers, outlining screen flows, a reusable component library, interaction patterns, and specific handoff notes.

The chosen format (JSON) ensures clarity, consistency, and ease of integration into development workflows or automated tooling.


Mobile App Wireframe Specification

1. Introduction

This document contains the complete wireframe specification for the "Panthera Tasks" mobile application. It is structured as a JSON file, representing a detailed blueprint of the application's user interface, user flows, and core interactions. This format is intended to facilitate seamless communication between design and development teams, serving as a single source of truth for UI structure

gemini Output

Mobile App Wireframe Kit: Complete Specification

This document provides a comprehensive wireframe specification for your mobile application, outlining the core user experience, interface components, interaction patterns, and essential notes for development. This serves as a foundational blueprint for the app's structure and functionality, preceding visual design and development.


1. Introduction and Purpose

This Wireframe Kit details the structural layout, information hierarchy, and functional behavior of the proposed mobile application. It aims to:

  • Define Core User Flows: Illustrate how users will navigate through the application to achieve their goals.
  • Specify Screen Layouts: Outline the arrangement of elements on each key screen.
  • Standardize UI Components: Establish a library of reusable interface elements and their states.
  • Detail Interaction Patterns: Describe how users will interact with the application and its components.
  • Facilitate Developer Handoff: Provide clear, actionable notes for the development team to ensure accurate implementation.

This document is a critical step in translating conceptual ideas into a tangible, functional structure, ensuring alignment between design vision and technical execution.


2. Screen Flows

This section details the primary user journeys within the application, illustrating the sequence of screens and user actions required to complete key tasks. Each flow is broken down into steps, indicating screen transitions and user interactions.

2.1. Flow 1: User Onboarding & Account Creation

Objective: Allow a new user to sign up and create an account.

  • Step 1: Welcome/Splash Screen

* Screen ID: ONB-001

* Elements: App Logo, Tagline, "Sign Up" Button, "Log In" Button.

* Interaction: Tap "Sign Up".

  • Step 2: Sign Up - Email & Password

* Screen ID: ONB-002

* Elements: Header "Create Account", Email Input Field, Password Input Field, "Confirm Password" Input Field, "Continue" Button, "Back" Button.

* Interaction: Enter details, Tap "Continue".

  • Step 3: Profile Details (Optional)

* Screen ID: ONB-003

* Elements: Header "Tell Us About You", Name Input Field, Profile Picture Uploader (optional), "Complete Setup" Button, "Skip" Button.

* Interaction: Enter details or skip, Tap "Complete Setup".

  • Step 4: Permissions Request (e.g., Notifications)

* Screen ID: ONB-004

* Elements: Permission prompt, "Allow" Button, "Deny" Button.

* Interaction: Tap "Allow" or "Deny".

  • Step 5: Home Screen / Dashboard

* Screen ID: HOM-001

* Elements: App-specific dashboard content, Bottom Navigation Bar.

* Interaction: User can now navigate the app.

2.2. Flow 2: Task Creation

Objective: Enable a logged-in user to create a new task.

  • Step 1: Home Screen (Task List View)

* Screen ID: HOM-001

* Elements: List of existing tasks, Floating Action Button (FAB) for "Add New Task".

* Interaction: Tap FAB.

  • Step 2: New Task Form

* Screen ID: TSK-001

* Elements: Header "New Task", Task Title Input Field, Description Text Area, Due Date Picker, Priority Selector, Category Selector, "Save Task" Button, "Cancel" Button.

* Interaction: Fill form fields, Tap "Save Task".

  • Step 3: Task List (Confirmation)

* Screen ID: HOM-001

* Elements: Updated task list with the newly added task, momentary "Task Created Successfully" Toast message.

* Interaction: View confirmation.


3. Wireframe Specifications (Example Screens)

This section provides detailed specifications for individual screens, outlining their purpose, key elements, and intended user interactions. Note: Actual wireframe images would accompany this section in a complete deliverable.

3.1. Screen: Home Screen (Task List)

  • Screen ID: HOM-001
  • Purpose: Display a list of tasks, allow quick actions, and provide navigation to other app sections.
  • Key Elements:

* Header Bar:

* Left: Hamburger Menu Icon (opens Side Navigation Drawer).

* Center: "My Tasks" Title.

* Right: Search Icon.

* Task List Area:

* Scrollable list of Task Cards.

* Each Task Card: Task Title, Due Date, Priority Indicator, Completion Checkbox.

* Empty State: "No tasks yet! Tap the '+' to add one." message, centered.

* Floating Action Button (FAB):

* Position: Bottom-right corner.

* Icon: Plus sign (+).

* Action: Tap to navigate to TSK-001 (New Task Form).

* Bottom Navigation Bar:

* Icons/Labels: "Tasks", "Calendar", "Settings".

* Active state for "Tasks".

  • User Interactions:

* Tap Hamburger Menu: Opens Side Navigation Drawer.

* Tap Search Icon: Navigates to Search Screen.

* Tap Task Card: Navigates to TSK-002 (Task Details Screen).

* Tap Completion Checkbox: Marks task as complete/incomplete (visual feedback: strikethrough/fade).

* Tap FAB: Navigates to TSK-001.

* Tap Bottom Nav Icons: Navigates to respective sections.

  • States: Default, Empty, Loading (spinner over list).

3.2. Screen: New Task Form

  • Screen ID: TSK-001
  • Purpose: Allow users to input details and create a new task.
  • Key Elements:

* Header Bar:

* Left: "X" (Close) Icon.

* Center: "New Task" Title.

* Right: "Save" Button (disabled until mandatory fields are filled).

* Task Title Input Field:

* Label: "Task Title"

* Placeholder: "e.g., Finish project report"

* Required field.

* Description Text Area:

* Label: "Description (Optional)"

* Placeholder: "Add more details..."

* Due Date Picker:

* Label: "Due Date"

* Default: "No Date"

* Interaction: Tap to open native date picker.

* Priority Selector:

* Label: "Priority"

* Options: Low, Medium, High (radio buttons or segmented control).

* Default: Medium.

* Category Selector:

* Label: "Category"

* Interaction: Tap to open modal with list of predefined categories (e.g., Work, Personal, Shopping).

* Attachment Uploader (Optional):

* Label: "Add Attachment"

* Icon: Paperclip.

* Interaction: Tap to open file picker (camera, gallery, files).

  • User Interactions:

* Tap "X" Icon: Discard form, return to previous screen (with confirmation dialog if fields are filled).

* Input text into fields.

* Tap Due Date field: Opens native date picker.

* Select Priority option.

* Tap Category field: Opens Category Selection Modal.

* Tap "Save" Button: Validates input, creates task, navigates to HOM-001, displays success toast.

  • States: Default, Input Error (e.g., empty required field), Saving (spinner on Save button).

4. Component Library

This section defines reusable UI components, ensuring consistency and efficiency in design and development. Each component includes its purpose, attributes, and various states.

4.1. Buttons

  • Purpose: Initiate an action.
  • Types:

* Primary Button: Main call to action. (e.g., "Save", "Continue")

* Secondary Button: Less prominent action. (e.g., "Cancel", "Skip")

* Tertiary Button (Text Link): Simple text-based action. (e.g., "Forgot Password?")

* Floating Action Button (FAB): Primary action for the current screen. (e.g., Add new item)

  • Attributes: Text Label, Icon (optional).
  • States:

* Default: Normal appearance.

* Hover: (Web/Desktop specific) Visual feedback on mouse-over.

* Pressed/Active: Visual feedback when tapped.

* Disabled: Greyed out, non-interactive.

* Loading: Spinner replaces text/icon, non-interactive.

4.2. Input Fields

  • Purpose: Allow users to enter text or select values.
  • Types:

* Text Input: Single line for short text (e.g., Title, Name).

* Text Area: Multi-line for longer text (e.g., Description).

* Password Input: Text hidden with mask.

* Date Picker: Opens native date/time selection.

* Dropdown/Selector: Opens a list of predefined options.

  • Attributes: Label, Placeholder Text, Helper Text (optional), Icon (optional, e.g., search icon).
  • States:

* Default: Clear border, placeholder visible.

* Focused: Highlighted border, cursor active.

* Filled: Contains user input.

* Error: Red border, error message below.

* Disabled: Greyed out, non-editable.

4.3. Checkboxes

  • Purpose: Allow users to select multiple options from a list or toggle a single setting.
  • Attributes: Label.
  • States:

* Unchecked: Empty square.

* Checked: Square with a checkmark.

* Indeterminate: Square with a dash (for parent checkboxes).

* Disabled (Unchecked/Checked): Greyed out, non-interactive.

4.4. Radio Buttons

  • Purpose: Allow users to select a single option from a group of mutually exclusive choices.
  • Attributes: Label, Group Name.
  • States:

* Unselected: Empty circle.

* Selected: Filled circle.

* Disabled (Unselected/Selected): Greyed out, non-interactive.

4.5. Cards

  • Purpose: Group related content and actions in a visually distinct container.
  • Attributes: Title, Subtitle, Image (optional), Description, Action Buttons/Icons.
  • States:

* Default: Standard background, shadow.

* Selected: Highlighted border/background.

* Disabled: Faded appearance.

4.6. Navigation Bar (Bottom)

  • Purpose: Provide primary navigation to top-level sections of the app.
  • Attributes: 3-5 navigation items, each with an Icon and Text Label.
  • States:

* Default: Inactive icon and label.

* Active: Highlighted icon and label for the current screen.

4.7. Modals / Dialogs

  • Purpose: Display critical information or request user input that requires immediate attention, temporarily blocking the main content.
  • Types:

* Alert Dialog: Short message, 1-2 action buttons (e.g., "Confirm Delete").

* Confirmation Dialog: Similar to alert, but often with a "Cancel" and "Confirm" option.

* Full-Screen Modal: For complex input forms or specific tasks (e.g., Category Selector).

  • Attributes: Title, Message/Content Area, Action Buttons.
  • States:

* Visible: Overlays content, background dimmed.

* Hidden: Not displayed.


5. Interaction Patterns

This section describes common interaction paradigms within the application, detailing how users will manipulate and receive feedback from the interface.

5.1. Form Submission

  • Description: The process of users entering data into an input form and submitting it to the application.
  • Trigger: User taps a "Submit," "Save," or "Create" button.
  • Effect:

1. Validation: Input fields are checked for correctness (e.g., required fields, valid email format).

If errors:* Error messages appear next to invalid fields, "Submit" button remains disabled or indicates error.

If valid:*

2. Loading State: The "Submit" button may transform into a spinner, or a full-screen overlay spinner appears to indicate processing.

3. Success Feedback: A success message (e.g., Toast notification) is displayed, and the user is navigated to the next relevant screen (e.g., list view).

4. Error Feedback: If

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
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

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

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/**(.+?)**/g,"$1"); hc=hc.replace(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); }function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}