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

Mobile App Wireframe Specification Kit

This document provides a comprehensive, detailed, and structured specification for a mobile application wireframe kit. It encompasses screen flows, a robust component library, interaction patterns, and developer handoff notes, presented in a machine-readable, "code-like" format (JSON/YAML-inspired pseudo-code) for clarity and ease of implementation.


1. Project Overview

This Wireframe Specification Kit serves as the foundational blueprint for developing a mobile application. It outlines the application's structure, user interface components, user flows, and interaction logic at a low-fidelity level, ensuring a consistent design language and a clear path for development. The "code" generated here is a structured data representation that can be used by design tools, development teams, or automated systems to understand and implement the wireframes.


2. Wireframe Specification Structure

This section defines the overall data structure for representing the entire wireframe kit. Each screen, component, and interaction is systematically cataloged.

text • 1,001 chars
**Explanation:**
*   **`projectName`, `version`, `lastUpdated`, `metadata`**: Standard project identification and versioning.
*   **`colorPalette`, `typography`, `spacingSystem`**: Global design token definitions, crucial for consistent implementation. These would typically link to separate, more detailed specifications.
*   **`componentLibrary`**: An object containing definitions for all reusable UI elements.
*   **`screens`**: An array where each element defines a unique screen in the application.
*   **`screenFlows`**: An array outlining common user journeys through the application.
*   **`interactionPatterns`**: An array detailing standard UI interaction behaviors.
*   **`developerHandoffNotes`**: General instructions and considerations for the development team.

---

### 3. Component Library

This section defines common, reusable UI components. Each component includes properties, states, and usage guidelines, presented in a structured format for easy reference and implementation.

Sandboxed live preview

Mobile App Wireframe Kit: Architecture Plan

This document outlines the architectural plan for developing a comprehensive Mobile App Wireframe Kit. The purpose of this plan is to establish the foundational structure, content, and guidelines for the wireframe specification, ensuring a consistent, clear, and actionable deliverable for all stakeholders, particularly design and development teams.


1. Project Overview & Objectives

1.1. Project Title: Mobile App Wireframe Kit Specification

1.2. Purpose: To provide a low-fidelity visual representation of a mobile application's user interface, user flows, and core interactions. This specification serves as a blueprint for design and development, facilitating early feedback, alignment, and efficient execution throughout the product lifecycle.

1.3. Key Objectives:

* Define Clear User Journeys: Map out logical and intuitive paths users will take through the application.

* Establish a Consistent Component Library: Create a reusable set of UI elements to ensure uniformity and accelerate design/development.

* Document Interaction Patterns: Clearly articulate how common user actions will be handled across the application.

* Provide Developer Handoff Notes: Include essential information, constraints, and considerations for efficient and accurate implementation.

* Ensure Scalability & Maintainability: Design a structure that can easily accommodate future updates, new features, and evolving requirements.


2. Core Architectural Principles

These principles will guide the creation and organization of the entire wireframe kit, ensuring a high-quality and effective deliverable.

  • Clarity & Simplicity: Wireframes will focus on core functionality, layout, and information hierarchy, deliberately avoiding high-fidelity design details. Annotations will be concise, unambiguous, and easy to understand.
  • Consistency: Standardized component naming, interaction pattern definitions, and documentation format will be applied uniformly across all screens and sections to reduce ambiguity.
  • Reusability: Components and interaction patterns will be designed with reusability in mind, minimizing redundancy and maximizing efficiency in both design and development.
  • User-Centricity: All flows, screens, and interactions will be designed and documented with a strong focus on the end-user's goals, tasks, and overall experience.
  • Actionability: The specification will provide clear, practical guidance that directly informs and enables designers, developers, and quality assurance (QA) testers.
  • Scalability: The underlying architecture will be robust enough to support the seamless addition of new screens, components, features, and user flows as the application evolves.

3

json

// SCREEN_FLOWS_SPEC.json (Part of WIREFRAME_KIT_SPEC.json)

{

"screenFlows": [

{

"flowId": "FLOW-001-UserOnboarding",

"name": "User Onboarding and Sign-up",

"description": "Guides a new user through registration and initial setup.",

"steps": [

{

"stepId": "S001",

"screen": "WelcomeScreen",

"action": "User taps 'Get Started'",

"transitionTo": "SignUpScreen"

},

{

"stepId": "S002",

"screen": "SignUpScreen",

"action": "User enters email and password, taps 'Sign Up'",

"validation": [

{"field": "email", "rule": "isValidEmail", "onFail": {"showError": "Invalid email format"}},

{"field": "password", "rule": "minLength(8)", "onFail": {"showError": "Password too short"}}

],

"onSuccess": {

"transitionTo": "VerificationScreen",

"dataPayload": {"email": "user_email"}

},

"onFail": {

"showToast": "Please correct the errors."

}

},

{

"stepId": "S003",

"screen": "VerificationScreen",

"action": "User enters OTP, taps 'Verify'",

"onSuccess": {

"transitionTo": "ProfileSetupScreen"

},

"onFail": {

"showError": "Invalid OTP. Please try again."

}

},

{

"stepId": "S004",

"screen": "ProfileSetupScreen",

"action": "User enters name and avatar, taps 'Complete Profile'",

"onSuccess": {

"transitionTo": "HomeScreen",

"clearBackStack": true

}

}

]

},

{

"flowId": "FLOW-002-TaskCreation",

"name": "Create New Task",

"description": "Flow for users to add a new task to their list.",

"steps": [

{

"stepId": "T001",

"screen": "HomeScreen",

"action": "User taps 'Add Task' FAB",

"transitionTo": "CreateTaskScreen",

"transitionType": "modal_slide_up"

},

{

"stepId": "T002",

"screen": "CreateTaskScreen",

"action": "User enters task details (title, description, due date, category)",

"validation": [

{"field": "title", "rule": "notEmpty", "onFail": {"showError": "Task title is required"}}

gemini Output

Mobile App Wireframe Kit: Complete Specification

Project: Mobile App Wireframe Kit

Deliverable: Complete Wireframe Specification

Date: October 26, 2023


1. Executive Summary

This document provides a comprehensive specification for the mobile application wireframes, serving as a foundational blueprint for the app's structure, user experience, and core functionalities. It details the proposed screen flows, defines a reusable component library, outlines key interaction patterns, and includes essential notes for the development team. This specification aims to ensure clarity, consistency, and efficiency throughout the design and development process, aligning all stakeholders on the app's fundamental user journey and interface elements.


2. Screen Flows: User Journeys & Navigation

Screen flows illustrate the sequential path a user takes to complete specific tasks within the application. They define the screens involved, decision points, and transitions, providing a clear roadmap of the user experience.

2.1. Onboarding & Account Creation Flow

Purpose: Guide new users through initial app setup and account registration.

Screens Involved:

  1. Welcome / Splash Screen: Initial app launch.

* Transition: Automatic after a few seconds or tap to skip.

  1. Onboarding Screens (3-4 screens): Highlight key features/benefits.

* Content: Short text, illustrative graphics.

* Interaction: Swipe left/right to navigate, "Skip" button, "Next" button.

* Decision Point: User can skip onboarding or proceed.

  1. Sign Up / Login Screen:

* Options: "Sign Up" (email, Google, Apple, Facebook), "Login" (existing users).

* Interaction: Tappable buttons, input fields for credentials.

* Validation: Real-time feedback for input errors.

  1. Profile Setup (Optional): Collect essential user information (e.g., name, profile picture, preferences).

* Interaction: Input fields, image picker, dropdowns.

* Action: "Save" or "Continue" button.

  1. Permissions Request (Optional): Ask for location, notifications, camera access.

* Interaction: System prompts.

  1. Home Screen: Upon successful onboarding/login.

2.2. Core Feature X Flow (Example: Item Browsing & Viewing)

Purpose: Allow users to discover and view details of items within the app.

Screens Involved:

  1. Home Screen / Dashboard:

* Content: Featured items, categories, search bar, navigation elements.

* Interaction: Scrollable content, tappable cards/list items, search icon/bar.

  1. Category / Search Results Screen: (If user taps a category or performs a search)

* Content: List/grid of items, filters, sort options.

* Interaction: Scroll to load more, tap filter/sort buttons, tap item card.

  1. Item Detail Screen: (Upon tapping an item from Home/Category/Search)

* Content: Item image gallery, description, price, related items, action buttons (e.g., "Add to Cart," "Favorite").

* Interaction: Swipe image gallery, scroll for details, tap action buttons.

* Navigation: Back button to previous screen.

  1. Confirmation / Feedback (Optional): (e.g., "Item added to cart" toast notification).

2.3. Profile Management Flow

Purpose: Enable users to view and update their personal information and app settings.

Screens Involved:

  1. Profile Icon / Tab: (From global navigation)

* Interaction: Tap to navigate to profile.

  1. Profile Overview Screen:

* Content: User's name, profile picture, summary of activity, list of settings/options (e.g., "Edit Profile," "Payment Methods," "Notifications," "Privacy," "Help," "Log Out").

* Interaction: Tappable list items.

  1. Edit Profile Screen: (Upon tapping "Edit Profile")

* Content: Editable fields for name, email, phone, address, profile picture.

* Interaction: Input fields, image picker.

* Action: "Save Changes" button.

* Validation: Real-time feedback for input errors.

  1. Settings Screens: (e.g., Notifications, Privacy)

* Content: Toggle switches, radio buttons, dropdowns for various settings.

* Action: Changes often save automatically or require a "Save" button.


3. Component Library

This section defines the reusable UI components that form the building blocks of the mobile application. Each component is described with its typical appearance, states, and usage guidelines to ensure consistency across the app.

3.1. Buttons

  • Primary Button:

* Appearance: Prominent color, solid fill, rounded corners.

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

* Usage: Main call-to-action (e.g., "Submit," "Add to Cart," "Continue").

  • Secondary Button:

* Appearance: Outline with primary color, transparent fill, rounded corners.

* States: Default, Hover/Pressed, Disabled.

* Usage: Less critical actions, alternatives (e.g., "Cancel," "Learn More").

  • Text Button:

* Appearance: Text only, primary color.

* States: Default, Hover/Pressed, Disabled.

* Usage: Subtle actions, navigation links within content (e.g., "Forgot Password?", "View All").

  • Icon Button:

* Appearance: Icon only, often in app bars or toolbars.

* States: Default, Pressed.

* Usage: Quick actions, navigation (e.g., "Back," "Menu," "Search," "Favorite").

3.2. Input Fields

  • Text Input Field:

* Appearance: Underlined or outlined box, placeholder text.

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

* Usage: Single-line text entry (e.g., name, email, password, search query).

* Variations: Password fields (toggle visibility), email (keyboard type), number (keyboard type).

  • Text Area:

* Appearance: Multi-line text input box.

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

* Usage: Multi-line text entry (e.g., comments, descriptions).

  • Dropdown / Selector:

* Appearance: Field with an arrow indicating a selectable list.

* States: Default, Focused, Selected, Disabled.

* Usage: Selecting from a predefined list of options (e.g., country, category).

3.3. Checkboxes & Radio Buttons

  • Checkbox:

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

* States: Unchecked, Checked, Indeterminate (for parent items), Disabled.

* Usage: Selecting one or more options from a list (e.g., "Remember Me," "Agree to Terms").

  • Radio Button:

* Appearance: Circular button, only one can be selected in a group.

* States: Unselected, Selected, Disabled.

* Usage: Selecting a single option from a mutually exclusive list (e.g., "Gender," "Payment Method").

3.4. Navigation Elements

  • Top App Bar / Header:

* Appearance: Fixed bar at the top of the screen.

* Content: Title, back button, menu icon, action icons (e.g., search, notifications).

* Usage: Global navigation, screen context, primary actions.

  • Bottom Navigation Bar:

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

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

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

  • Tab Bar:

* Appearance: Horizontal row of tabs, usually below the top app bar.

* States: Unselected, Selected (highlighted).

* Usage: Switching between different views/sub-sections within a single screen.

3.5. Cards & Lists

  • Card:

* Appearance: Rectangular container with shadow or distinct background, grouping related content.

* Content: Image, title, description, metadata, action buttons.

* Usage: Displaying individual items in a grid, news feeds, product listings.

  • List Item:

* Appearance: Row-based container, often with a leading icon/image, title, subtitle, and trailing icon.

* Usage: Displaying items in a vertical list, settings menus, contact lists.

3.6. Modals & Toasts

  • Modal / Dialog:

* Appearance: Overlay that appears on top of content, usually centered, dimming the background.

* Content: Title, message, action buttons (e.g., "Confirm," "Cancel").

* Usage: Critical alerts, confirmations, short forms that require immediate user attention.

  • Toast / Snackbar:

* Appearance: Small, temporary message box appearing at the bottom of the screen, disappearing automatically.

* Content: Brief status message (e.g., "Item added to cart," "Settings saved").

* Usage: Non-intrusive feedback for actions.


4. Interaction Patterns

Interaction patterns define how users engage with the app's UI elements and the expected system responses. These patterns ensure a consistent, intuitive, and satisfying user experience.

4.1. Tapping & Pressing

  • Single Tap: Activates buttons, selects list items, opens new screens, triggers actions.
  • Long Press: Reveals contextual menus, enables multi-selection, initiates drag-and-drop (where applicable).
  • Double Tap: Zooms in/out on images or text (if supported).

4.2. Swiping & Gestures

  • Swipe Horizontal: Navigates between tabs, dismisses items (e.g., notifications), browses image carousels.
  • Swipe Vertical: Scrolls through content, pulls to refresh (from top of scrollable content).
  • Pinch-to-Zoom: Scales content (e.g., maps, images).

4.3. Form Submission & Validation

  • Real-time Validation: Provide immediate feedback for input errors (e.g., invalid email format, password strength) as the user types.
  • On-Submit Validation: Re-validate all fields upon form submission and highlight any remaining errors.
  • Success Feedback: Display a toast message or navigate to a success screen upon successful submission.
  • Error Feedback: Clearly indicate which fields have errors and provide actionable messages.

4.4. Loading & Empty States

  • Loading Indicators: Use spinners or skeleton screens to indicate content is being loaded.

* Full Screen Loader: For initial app load or major data fetches.

* Partial Loader: For specific components or sections updating.

* Skeleton Screens: Placeholder content that mimics the final layout, providing a better perceived performance.

  • Empty States: Design screens to gracefully handle scenarios where there is no data (e.g., "No items in cart," "No friends yet").

* Content: Informative message, illustrative icon/graphic, clear call-to-action to help populate the content.

4.5. Feedback & Notifications

  • Toast Messages: Briefly inform users about non-critical actions (e.g., "Copied to clipboard," "Offline mode enabled").
  • Modals/Alerts: For critical information, warnings, or confirmations requiring user input.
  • In-App Notifications: Display banners or badges for new messages, updates, or important alerts.
  • Haptic Feedback: Use subtle vibrations to acknowledge significant user actions (e.g., successful submission, long press).

5. Developer Handoff Notes

These notes provide crucial information and guidelines for the development team to ensure accurate implementation of the wireframe specification and a high-quality final product.

5.1. General Principles

  • Fidelity: Implement the wireframes as closely as possible, paying attention to layout, spacing, and component usage.
  • Consistency: Adhere strictly to the defined component library and interaction patterns across all screens. Avoid introducing new UI elements or behaviors unless explicitly agreed upon.
  • Responsiveness: All layouts must adapt gracefully to different screen sizes and orientations (portrait/landscape, if applicable). Consider safe areas for notches and home indicators.
  • Accessibility: Implement standard accessibility practices (e.g., proper semantic elements, content descriptions for images/icons, sufficient contrast, touch target sizes).
  • Performance: Optimize for smooth animations, quick loading times, and efficient data handling.

5.2. Technical Considerations

  • Design System: Refer to the established design system (if available) for specific typography, color palettes, and spacing guidelines.
  • Platform Guidelines: Adhere to native platform guidelines (Human Interface Guidelines for iOS, Material Design for Android) where appropriate, especially for system-level interactions and patterns not explicitly covered.
  • State Management: Clearly distinguish between default, active, disabled, error, and loading states for all interactive components.
  • Error Handling: Implement robust error handling for API calls, network issues, and user input validation. Provide clear, user-friendly error messages and recovery options.
  • Data Models: Understand the underlying data structure required for each screen and component. Collaborate with the backend team for efficient data fetching and display.
  • Animations & Transitions: Keep animations subtle and functional. Focus on smooth screen transitions, component state changes, and feedback animations.
  • Internationalization (i18n): Design layouts to accommodate varying text lengths for different languages. Avoid hardcoding text.

5.3. Collaboration & Communication

  • Questions & Clarifications: Do not hesitate to reach out to the design team or product owner for any ambiguities or questions regarding the wireframes or specifications.
  • Feedback Loop: Provide regular feedback on
mobile_app_wireframe_kit.txt
Download source file
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);}});}