Mobile App Wireframe Kit
Run ID: 69ccb3033e7fb09ff16a44ca2026-04-01Design
PantheraHive BOS
BOS Dashboard

Mobile App Wireframe Kit: Comprehensive Specification

This document provides a detailed wireframe specification for a mobile application, outlining core user flows, a reusable component library, interaction patterns, and essential developer handoff notes. This serves as a foundational blueprint for development, ensuring clarity and consistency across the build process.


1. Introduction and Overview

This specification details the structural and interactive elements of the mobile application at a wireframe level. It focuses on user experience, core functionality, and technical considerations necessary for implementation.


2. Core User Flows

This section outlines critical user journeys within the application, detailing the sequence of screens and key decision points.

2.1. User Onboarding & Account Creation

text • 1,526 chars
---

### 3. Screen Specifications

This section provides detailed specifications for key screens, describing their structure, content, and navigational elements.

#### 3.1. Screen: Home Screen

*   **Screen ID:** `S-100`
*   **Purpose:** The primary entry point for logged-in users, displaying personalized content, featured products, and quick access to main sections.
*   **Key Elements:** Top Navigation Bar, Search Bar, Carousel/Banner, Product Grids/Lists, Bottom Navigation Bar.
*   **Layout Description:**
    *   **Header:** Fixed top navigation with App Logo/Title, optional Notifications icon.
    *   **Search:** Prominent search bar below the header.
    *   **Main Content:** Scrollable area containing:
        *   Hero Carousel/Banner (e.g., promotional offers).
        *   Horizontal scrolling sections (e.g., "New Arrivals," "Recommended for You").
        *   Vertical grid/list of product categories or featured items.
    *   **Footer:** Fixed bottom navigation bar with icons for Home, Categories, Cart, Profile.
*   **States:**
    *   **Default:** Content loaded and displayed.
    *   **Loading:** Skeleton loaders or spin indicators for dynamic content.
    *   **Empty/No Data:** Message indicating no content available (e.g., "No recommendations yet").
*   **Navigation:**
    *   **In:** From Onboarding/Login (F-001) or app launch (if logged in).
    *   **Out:** To Product Listing (S-101), Product Detail (S-102), Search Results (S-103), Cart (S-200), Profile (S-300), Category Page (S-101).

Sandboxed live preview

Step 1 of 3: Mobile App Wireframe Kit - Architectural Plan

This document outlines the architectural plan for developing a comprehensive Mobile App Wireframe Kit. This initial step focuses on defining the structure, content, and methodology that will guide the creation of the wireframe specification, ensuring a professional, detailed, and actionable output for subsequent design and development phases.


1. Introduction: Purpose of This Architectural Plan

This architectural plan serves as the foundational blueprint for the "Mobile App Wireframe Kit" workflow. It details the high-level structure, key sections, and content strategy for the complete mobile app wireframe specification. The goal is to establish a clear framework that will enable the creation of robust screen flows, a reusable component library, defined interaction patterns, and precise developer handoff notes, facilitating efficient and accurate app development.

2. Objectives of the Mobile App Wireframe Kit

The primary objectives of the Mobile App Wireframe Kit are:

  • Establish a Clear Visual Blueprint: Provide a low-fidelity visual representation of the app's structure, layout, and core functionality.
  • Define Core User Journeys: Illustrate critical user flows and screen sequences to ensure logical navigation and task completion.
  • Create a Reusable Component Library: Document standard UI elements and patterns for consistency and efficiency across the application.
  • Specify Interaction Behaviors: Detail how users will interact with the application, including gestures, transitions, and feedback mechanisms.
  • Facilitate Developer Handoff: Provide precise and unambiguous documentation for developers, reducing ambiguity and rework.
  • Enable Early Feedback & Iteration: Offer a tangible artifact for stakeholders to review and provide feedback on the app's structure and functionality before high-fidelity design or development.

3. Overall Architecture & Structure of the Wireframe Kit

The final Mobile App Wireframe Kit will be structured into the following key sections, designed to provide a holistic view of the application's user experience and underlying structure:

3.1. Section 1: Project & User Context Overview

  • 1.1. Project Summary: Brief description of the mobile application's purpose, target audience, and primary goals.
  • 1.2. Key User Personas (Optional/High-Level): A summary of the primary users the app is designed for, informing design decisions.
  • 1.3. Core Problem Statement & Value Proposition: What problem does the app solve, and what value does it offer users?
  • 1.4. Scope Definition: What features and functionalities are included/excluded in this wireframe kit.

3.2. Section 2: Core User Flows & Screen Flows

This section will visually map out the critical paths users take within the application.

  • 2.1. Overall Application Flow Diagram: A high-level visual representation of the main sections and how they connect.
  • 2.2. Detailed User Flow Diagrams:

* Each critical user journey (e.g., Onboarding, Item Purchase, Profile Management) will have its own dedicated flow diagram.

* Diagrams will show screens, decision points, and actions.

  • 2.3. Screen Flow Specifications:

* For each major flow, a sequence of wireframes will be presented.

* Each wireframe will include a brief description of its purpose and key elements.

* Annotations will highlight specific interactions and transitions between screens.

3.3. Section 3: Component Library

This section will document all reusable UI elements and patterns used throughout the application.

  • 3.1. Categorization: Components will be organized into logical categories (e.g., Navigation, Inputs, Buttons, Media, Data Display).
  • 3.2. Individual Component Specification: For each component:

* Name & Description: Clear naming and explanation of its purpose.

* States: Visual representation and description of various states (e.g., default, hover, active, disabled, error, loading).

* Usage Guidelines: Best practices and constraints for when and how to use the component.

* Placement Examples: Screenshots or wireframe snippets showing the component in context.

* Accessibility Considerations: Basic notes on accessibility (e.g., contrast, touch target size).

  • 3.3. Grid & Layout System: Definition of the responsive grid, spacing, and alignment principles.
  • 3.4. Typography & Iconography (Basic): Specification of font families, sizes, weights, and a basic icon set.

3.4. Section 4: Interaction Patterns & Micro-interactions

This section will detail how users interact with the app beyond static screens.

  • 4.1. Global Interaction Principles: Overarching guidelines for user interaction (e.g., consistency, feedback, direct manipulation).
  • 4.2. Common Interaction Patterns:

* Navigation: Taps, swipes, gestures for moving between screens.

* Data Entry: Keyboard types, auto-completion, validation feedback.

* Feedback Mechanisms: Loading indicators, success/error messages, toasts, haptic feedback.

* Gestures: Swipe-to-delete, pull-to-refresh, pinch-to-zoom (if applicable).

* Transitions: How screens transition (e.g., slide, fade, modal).

  • 4.3. Micro-interaction Specifications:

* Documentation of small, delightful, or functional animations (e.g., button presses, toggles, loading spinners).

* Description of trigger, action, and resulting feedback.

3.5. Section 5: Navigation Architecture

A dedicated section for the app's navigation structure.

  • 5.1. Primary Navigation: (e.g., Tab Bar, Hamburger Menu, Floating Action Button) - structure, items, and behavior.
  • 5.2. Secondary Navigation: (e.g., Top Navigation, Contextual Menus, Breadcrumbs) - structure and usage.
  • 5.3. Information Architecture Map: A visual hierarchy of all app sections and screens.

3.6. Section 6: Developer Handoff Specifications

This crucial section ensures developers have all necessary information to implement the wireframes accurately.

  • 6.1. General Handoff Guidelines: Best practices for developers to interpret the kit.
  • 6.2. Wireframe Annotations: Detailed notes directly on wireframes, specifying:

* Functional requirements.

* Conditional logic (e.g., "If user is logged in, show X; else, show Y").

* Error states and messages.

* Data requirements (e.g., "This field requires a valid email format").

* Accessibility notes (e.g., "This image requires alt text").

  • 6.3. Redlines/Measurements (High-Level): Basic spacing, padding, and font sizes where critical (detailed redlines are typically in UI design, but basic guidance helps).
  • 6.4. Asset Management Plan: How icons, images, and other assets will be provided (e.g., SVG, PNG, specified dimensions).

3.7. Section 7: Future Considerations & Scalability

  • 7.1. Potential Future Features: Placeholder for upcoming functionalities.
  • 7.2. Scalability Notes: How the current architecture can accommodate future growth.

4. Methodology & Workflow for Wireframe Creation

The creation of the Mobile App Wireframe Kit will follow a structured methodology:

  • Phase A: Information Gathering & Scope Definition (Current Step - Architectural Plan):

* Review project requirements and user input.

* Define the overall structure and content of the wireframe kit.

* Identify key user journeys and functionalities to be detailed.

  • Phase B: Core Flow Mapping & Wireframing (Step 2: Design & Prototyping):

* Translate user stories/requirements into initial screen layouts.

* Develop low-fidelity wireframes for all identified screens.

* Map out primary user flows and interactions using these wireframes.

  • Phase C: Component Inventory & Standardization (Step 2: Design & Prototyping):

* Identify recurring UI elements across wireframes.

* Design and document each component for the component library.

* Establish visual and functional consistency for all components.

  • Phase D: Interaction & Navigation Specification (Step 3: Refinement & Documentation):

* Detail specific interaction patterns and micro-interactions.

* Refine navigation structure and transitions between screens.

* Add annotations to wireframes for clarity on behavior and logic.

  • Phase E: Documentation & Handoff Preparation (Step 3: Refinement & Documentation):

* Compile all wireframes, flows, components, and interaction specifications into a cohesive document.

* Add comprehensive developer handoff notes and guidelines.

* Ensure all elements are clearly labeled and easily accessible.

5. Recommended Tools & Technologies

  • Wireframing & Prototyping: Figma (preferred), Sketch, Adobe XD, Axure RP.
  • Flow Charting: Miro, whimsical.
  • Documentation: Markdown (for structured text), Confluence, or directly within design tools.

6. Key Deliverables for Subsequent Steps

Upon completion of this architectural plan, the following will be produced in the next steps:

  • Step 2 (gemini → generate_wireframes): Initial low-fidelity wireframes for core screens, preliminary user flow diagrams, and a draft of the component library.
  • Step 3 (gemini → finalize_specification): Complete, annotated wireframe specification, finalized screen flows, a comprehensive component library with states and usage guidelines, detailed interaction patterns, and developer handoff notes.

7. Next Steps: Client Review & Approval

This architectural plan is now ready for your review. Your feedback and approval on this structure are crucial before proceeding to the wireframe generation phase. Please let us know if any adjustments are needed to ensure this blueprint aligns perfectly with your vision for the Mobile App Wireframe Kit.

3.2. Screen: Product Detail Screen

  • Screen ID: S-102
  • Purpose: Displays comprehensive information about a specific product.
  • Key Elements: Image Gallery, Product Title, Price, Description, Add to Cart Button, Reviews Section.
  • Layout Description:

* Header: Top navigation with "Back" button and optional "Share" / "Favorite" icons.

* Main Content: Scrollable area containing:

* Product Image Gallery (horizontal swipe).

* Product Title, Brand, Price.

* Rating/Reviews summary.

* Product Description (expandable).

* Variant Selectors (e.g., Size, Color).

* "Add to Cart" / "Buy Now" button.

* Related Products section.

* Footer: Often a sticky "Add to Cart" or "Call to Action" bar.

  • States:

* Default: Product data loaded.

* Loading: Skeleton loaders for images and text blocks.

* Out of Stock: "Add to Cart" button disabled, clear message.

* Variant Selection: UI updates based on selected options.

  • Navigation:

* In: From Home (S-100), Product Listing (S-101), Search Results (S-1

gemini Output

Mobile App Wireframe Kit Specification

Date: October 26, 2023

Version: 1.0

Prepared For: [Customer Name/Team]


1. Introduction and Purpose

This document provides a comprehensive wireframe specification for your mobile application. It outlines the core user experience, defining the structure, layout, and functionality of the app's key screens and user flows. This deliverable focuses on the foundational elements of the user interface (UI) and user experience (UX), serving as a blueprint for subsequent visual design and development phases.

Key Objectives:

  • Clarify User Journeys: Map out how users will navigate and interact with the application to achieve their goals.
  • Define Core Functionality: Establish the essential features and actions available on each screen.
  • Standardize UI Elements: Provide a library of reusable components to ensure consistency and efficiency.
  • Guide Development: Offer clear instructions and considerations for developers during implementation.
  • Facilitate Feedback: Create a tangible artifact for stakeholders to review and provide feedback on the app's structure and flow before committing to high-fidelity design.

Please note that this specification focuses on the "what" and "how" of interaction and layout, not the final "look and feel" (colors, typography, specific imagery), which will be addressed in the subsequent UI design phase.


2. Screen Flows

This section details the primary user journeys within the application, illustrating the sequence of screens a user will encounter to complete specific tasks. Each flow is designed to be intuitive and efficient.

2.1 Primary User Flows Overview

We have identified and mapped the following critical user flows:

  1. User Onboarding & Account Creation: Guiding new users through initial setup.
  2. Main Feature Interaction (e.g., Content Browsing/Task Management): The core functionality of the application.
  3. Profile Management & Settings: Accessing and modifying user information and app preferences.
  4. Information Retrieval (e.g., Search/Filtering): How users find specific content or items.

2.2 Detailed Flow: User Onboarding & Account Creation

Goal: Allow new users to sign up or log in, and understand the app's core value proposition.

  • Screen 1: Splash Screen / Welcome Screen

* Purpose: Initial app launch, introduces branding briefly.

* Elements: Logo, optional short tagline, "Get Started" / "Log In" buttons.

* Navigation: Tapping "Get Started" leads to Onboarding Intro. Tapping "Log In" leads to Login Screen.

  • Screen 2: Onboarding Introduction (3-5 Screens)

* Purpose: Showcase key features and benefits with illustrative content.

* Elements: Image/icon, descriptive text, "Skip" button, "Next" button, progress indicator (dots).

* Navigation: Tapping "Next" advances to the next intro screen. Tapping "Skip" or the final "Done" button leads to Sign Up.

  • Screen 3: Sign Up Screen

* Purpose: Collect necessary user information for account creation.

* Elements: Email input, Password input (with toggle for visibility), "Sign Up" button, "Already have an account? Log In" link, optional social login buttons (Google, Apple).

* Navigation: Successful sign-up leads to Home Screen. "Log In" link leads to Login Screen.

  • Screen 4: Login Screen

* Purpose: Allow existing users to access their accounts.

* Elements: Email input, Password input, "Log In" button, "Forgot Password?" link, "Don't have an account? Sign Up" link, optional social login buttons.

* Navigation: Successful login leads to Home Screen. "Forgot Password?" leads to Password Reset Flow. "Sign Up" leads to Sign Up Screen.

  • Screen 5: Home Screen

* Purpose: The primary dashboard or entry point to the app's main features.

* Elements: (Refer to Home Screen wireframe for specifics)

* Navigation: Serves as the central hub for further navigation.

(Repeat similar detailed descriptions for other key flows, e.g., "Main Feature Interaction" with screens like "Dashboard," "Detail View," "Create New Item" etc.)

2.3 Navigation Model

The application will primarily utilize a Tab Bar Navigation for primary sections, complemented by Header Navigation (back buttons, titles, action icons) for contextual navigation within sections.

  • Tab Bar: Persistent at the bottom of the screen, providing quick access to 3-5 main sections.
  • Header Bar: Located at the top, containing screen titles, back buttons, and contextual actions (e.g., "Edit," "Save," "Search" icon).
  • Modals/Sheets: Used for temporary, focused tasks or information display that requires user attention, overlaying the current screen.

3. Component Library

This section outlines the reusable UI components that form the building blocks of the application. Standardizing these components ensures design consistency, accelerates development, and improves maintainability.

3.1 Buttons

| Component Name | Description | States/Variations

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