Product Roadmap Builder
Run ID: 69caf90f26e01bf7c6786f102026-03-30Business
PantheraHive BOS
BOS Dashboard

Build a strategic product roadmap with feature prioritization, milestone planning, resource allocation, risk assessment, and stakeholder communication plan.

Product Roadmap Builder: Research & Design Requirements

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Product Roadmap Builder" application. The goal is to create an intuitive, powerful, and collaborative tool that empowers product teams to strategically plan, prioritize, and communicate their product vision effectively.


1. Product Vision & Core Objectives

Vision: To provide product teams with a comprehensive, integrated platform for building, managing, and communicating strategic product roadmaps, fostering alignment and accelerating product delivery.

Core Objectives:

  • Enable clear visualization of product strategy and initiatives.
  • Facilitate data-driven feature prioritization.
  • Support efficient milestone planning and progress tracking.
  • Optimize resource allocation across initiatives.
  • Provide robust tools for identifying and mitigating risks.
  • Streamline stakeholder communication and alignment.
  • Promote collaboration within product teams.

2. Detailed Design Specifications

2.1. Functional Requirements

The application will support the following core functionalities:

  • Roadmap Creation & Management:

* Ability to create multiple roadmaps (e.g., by product line, time horizon).

* Configurable roadmap views (e.g., Now/Next/Later, Quarterly, Thematic).

* Drag-and-drop functionality for organizing features/initiatives.

* Versioning and historical tracking of roadmaps.

* Archiving and deletion of roadmaps.

  • Feature & Initiative Management:

* Creation, editing, and deletion of features/initiatives with detailed descriptions.

* Attributes for features: Name, Description, Owner, Status (Planned, In Progress, Completed, On Hold), Type (New Feature, Improvement, Bug Fix, Technical Debt), Dependencies, Tags.

* Ability to link features to epics, user stories, or external tickets (e.g., Jira, GitHub Issues).

* Support for sub-features or tasks within a main feature.

  • Feature Prioritization Engine:

* Configurable prioritization frameworks (e.g., RICE, MoSCoW, Weighted Scoring, Value vs. Effort Matrix).

* Customizable scoring criteria and weights.

* Visual representation of prioritization scores.

* Ability to re-prioritize based on changing inputs or strategic shifts.

  • Milestone Planning & Tracking:

* Definition of key milestones with target dates and descriptions.

* Association of features/initiatives with specific milestones.

* Visual timeline view showing milestones and associated work.

* Progress indicators for milestones based on linked features' status.

  • Resource Allocation:

* Definition of available resources (e.g., teams, individuals, budget).

* Allocation of resources to features/initiatives.

* Visualization of resource utilization and capacity.

* Alerts for over-allocation or under-utilization.

* Ability to track estimated vs. actual resource consumption.

  • Risk Assessment & Management:

* Identification and logging of potential risks associated with features or the overall roadmap.

* Risk attributes: Name, Description, Type (Technical, Market, Resource, Operational), Likelihood (Low, Medium, High), Impact (Low, Medium, High), Mitigation Plan, Owner, Status (Open, Mitigated, Closed).

* Visual risk matrix (Likelihood vs. Impact).

* Tracking of mitigation actions.

  • Stakeholder Communication & Collaboration:

* Configurable views for different stakeholder groups (e.g., Executive Summary, Engineering Focus, Sales View).

* Shareable roadmap links with granular access controls (view-only, comment, edit).

* Export options (PDF, CSV, Image).

* Comment functionality on features and roadmaps.

* In-app notifications for changes or comments.

* Integration with communication tools (e.g., Slack, Microsoft Teams) for updates.

  • User & Team Management:

* User roles and permissions (Admin, Editor, Viewer).

* Team creation and management.

* Single Sign-On (SSO) integration (optional).

  • Reporting & Analytics:

* Dashboard with key metrics (e.g., roadmap progress, feature velocity, risk exposure).

* Customizable reports on features, resources, and risks.

2.2. Non-Functional Requirements

  • Performance: Fast loading times (under 2 seconds), responsive interactions, efficient data processing for large roadmaps.
  • Security: Robust authentication (password hashing, MFA), authorization (role-based access control), data encryption (at rest and in transit), regular security audits.
  • Scalability: Ability to handle a growing number of users, roadmaps, and features without performance degradation.
  • Usability: Intuitive user interface, consistent design language, clear error messages, helpful tooltips.
  • Reliability: High uptime (99.9%), robust data backup and recovery mechanisms.
  • Maintainability: Well-documented codebase, modular architecture for easy updates and new feature development.
  • Accessibility: Adherence to WCAG 2.1 AA standards for users with disabilities.
  • Integrations: APIs for future integrations with project management, issue tracking, and communication tools.

2.3. High-Level Data Model

  • User: ID, Name, Email, Password Hash, Role, Teams.
  • Team: ID, Name, Members (User IDs).
  • Product: ID, Name, Description, Owner (User ID).
  • Roadmap: ID, Name, Description, Product ID, Type (Now/Next/Later, Quarterly, Thematic), Created By (User ID), Status (Draft, Active, Archived).
  • Feature/Initiative: ID, Name, Description, Roadmap ID, Owner (User ID), Status, Type, Priority Score, Start Date, End Date, Dependencies (Feature IDs), Tags.
  • Milestone: ID, Name, Description, Roadmap ID, Target Date, Status.
  • Feature_Milestone_Link: Feature ID, Milestone ID.
  • Resource: ID, Name, Type (Person, Team, Budget Item), Capacity.
  • Feature_Resource_Allocation: Feature ID, Resource ID, Allocated Time/Budget.
  • Risk: ID, Name, Description, Roadmap ID, Feature ID (optional), Type, Likelihood, Impact, Mitigation Plan, Owner (User ID), Status.
  • Stakeholder_Group: ID, Name, Description, Access Permissions.
  • Roadmap_Share_Link: ID, Roadmap ID, Token, Access Level (View, Comment, Edit), Stakeholder Group ID.
  • Comment: ID, Entity Type (Roadmap, Feature), Entity ID, User ID, Content, Timestamp.

3. Wireframe Descriptions (Key Screens)

3.1. Dashboard / Roadmap Overview

  • Layout: Left sidebar for main navigation (Dashboard, My Roadmaps, Teams, Settings). Main content area displays a list or grid of roadmaps.
  • Components:

* Header: Logo, Search bar, "New Roadmap" button, User profile/notifications.

* Roadmap Cards/List Items: Each card/item displays: Roadmap Name, Product Name, Status (Active, Draft), Last Updated, Owner, Key Metrics (e.g., % Complete, # Open Risks).

* Filtering/Sorting: Options to filter by Product, Status, Owner; sort by Last Updated, Name.

* Quick Actions: Ellipsis menu on each card for View, Edit, Share, Archive, Delete.

  • Interaction: Clicking a roadmap card navigates to the Roadmap Editor.

3.2. Roadmap Editor (Main Canvas)

  • Layout:

* Header: Roadmap Name, "Save" button, "Share" button, "Export" button, View Selector (e.g., Now/Next/Later, Quarterly, Timeline, Table).

* Left Sidebar (Collapsible): Feature list, filters, search.

* Main Canvas: The chosen roadmap visualization (e.g., swimlanes for Now/Next/Later, timeline for Quarterly).

* Right Sidebar (Contextual, Collapsible): Displays details of a selected feature, milestone, or risk.

  • Components:

* Swimlanes/Buckets (Now/Next/Later): Clearly defined sections.

* Feature Cards: Drag-and-droppable within and between sections. Displays: Feature Name, Owner, Status Icon, Priority Score (optional).

* Milestone Markers: Visual indicators on the timeline/roadmap.

* "Add Feature" Button: Within each section or a global button.

* Toolbar: Options for zoom, legend, filters (e.g., by Owner, Status, Tag).

  • Interaction:

* Drag-and-drop features to reorder or move between sections/timeframes.

* Clicking a feature card opens its details in the right sidebar.

* Inline editing for feature names on the canvas.

* View selector changes the main canvas layout.

3.3. Feature Details (Right Sidebar / Modal)

  • Layout: A form-like panel or modal.
  • Components:

* Header: Feature Name (editable), Status dropdown, "Delete" button, "Close" button.

* Basic Info: Description (rich text editor), Owner (user selector), Type dropdown, Tags input.

* Prioritization: Section with configurable fields for chosen framework (e.g., RICE scores for Reach, Impact, Confidence, Effort), calculated Priority Score.

* Milestones: Link to existing milestones or create new ones.

* Resources: Assign resources, view allocated time/budget.

* Dependencies: List of dependent features, ability to add new dependencies.

* Risks: List of associated risks, ability to add new risks.

* Comments: Threaded comment section.

* Activity Log: History of changes to the feature.

  • Interaction: Auto-saves changes or explicit "Save" button.

3.4. Resource Allocation View

  • Layout: Table or Gantt-like chart view.
  • Components:

* Header: Timeframe selector (Week, Month, Quarter), "Add Resource" button.

* Resource List (Rows): Each row represents a resource (person/team).

* Time Slots (Columns): Represent days/weeks/months.

* Allocated Blocks: Visual blocks within time slots, representing features/initiatives assigned to that resource. Displays Feature Name, estimated effort.

* Capacity Bar: Visual indicator showing resource utilization (e.g., green for under-capacity, yellow for near, red for over-capacity).

  • Interaction: Drag-and-drop allocated blocks to reassign or reschedule. Click an allocated block to view feature details.

3.5. Risk Management View

  • Layout: Table view, possibly with a configurable Risk Matrix visualization.
  • Components:

* Header: "Add Risk" button, Filters (by Likelihood, Impact, Status, Owner).

* Risk Table: Columns: Risk Name, Description, Type, Likelihood (dropdown), Impact (dropdown), Mitigation Plan, Owner, Status.

* Risk Matrix (Optional): 2x2 or 3x3 grid showing risks plotted by Likelihood and Impact.

  • Interaction: Clicking a risk row opens its details in a sidebar/modal. Inline editing for quick updates.

3.6. Stakeholder Communication Setup

  • Layout: Tabbed interface or sections for different communication aspects.
  • Components:

* Shareable Links Section:

* List of existing share links.

* "Generate New Link" button.

* For each link: URL, Access Level (View-only, Comment), Configurable View (e.g., hide internal notes, show only specific features), Expiration Date, "Revoke" button.

* Export Options: Buttons for PDF, CSV, Image, Presentation format.

* Integrations: Connect to Slack/Teams for automated updates (e.g., "Notify channel on major roadmap changes").

  • Interaction: Easy generation and management of shareable views.

4. Color Palettes

The color palette aims for a professional, clean, and modern aesthetic that is visually appealing and highly functional.

  • Primary Brand Color: #007BFF (A vibrant, trustworthy blue)

Usage:* Main call-to-action buttons, primary navigation highlights, active states, key data visualizations.

  • Secondary Accent Color: #28A745 (A fresh, positive green)

Usage:* Success messages, "Add" buttons, completion indicators, positive progress.

  • Neutral Palette:

* #343A40 (Dark Gray): Body text, primary headings.

* #6C757D (Medium Gray): Secondary text, disabled states, borders.

* #F8F9FA (Light Gray): Backgrounds for cards, panels, alternating table rows.

* #E9ECEF (Lighter Gray): Borders, separators, input field backgrounds.

* #FFFFFF (White): Main background, card backgrounds, modal backgrounds.

  • Semantic Colors:

* Success: #28A745 (Green) - Already defined as secondary.

* Warning: #FFC107 (Amber/Yellow) - Alerts for potential issues, moderate risks.

* Error: #DC3545 (Red) - Error messages, critical risks, deletion actions.

* Info: #17A2B8 (Cyan) - Informational messages, non-critical alerts.

  • Data Visualization Palette: A set of 5-7 distinct, accessible colors for charts and graphs (e.g., different shades of blue, purple, teal, orange, green) ensuring contrast and clarity.

Accessibility:

  • Ensure sufficient contrast ratios (at least AA standard) between text and background colors.
  • Use color primarily for emphasis, but always provide secondary indicators (icons, text labels) for color-blind users.
  • Consider a dark mode option for user preference and reduced eye strain.

5. UX Recommendations

5.1. User Flow & Onboarding

  • First-Time User Experience:

1. Welcome Tour: A brief, interactive tour highlighting key features upon first login.

2. "Create Your First Roadmap" Wizard: A guided process to set up the initial roadmap, prompting for name, product, and initial features/milestones.

3. Contextual Help: Tooltips and "empty state" messages with suggestions.

  • Creating a Roadmap: Intuitive step-by-step process, allowing users to choose a template or start from scratch.

5.2. Interaction Design

  • Drag-and-Drop: Core interaction for organizing features on the roadmap canvas and allocating resources. Provide visual cues during drag (e.g., ghosting, highlight drop zones).
  • Inline Editing: Allow direct editing of feature names, descriptions, and other quick attributes on the roadmap view or in tables, reducing clicks.
  • Contextual Actions: Use right-click menus or ellipsis icons (...) for actions specific to an item (e.g., Edit, Duplicate, Delete, Move).
  • Real-time Feedback: Visual confirmation for actions (e.g., "Saved successfully" toast message, loading spinners).
  • Undo/Redo: Essential for complex roadmap editing.
  • **Keyboard
gemini Output

Here are the detailed design specifications, wireframe descriptions, color palettes, and UX recommendations for the "Product Roadmap Builder" tool, structured for clarity and actionability.


1. Detailed Design Specifications

The Product Roadmap Builder will be a robust web application designed for clarity, collaboration, and strategic decision-making.

1.1. Core Structure and Navigation

  • Left Sidebar Navigation: A persistent, collapsible navigation bar on the left side of the screen.

* Modules: Dashboard, Roadmaps, Features, Milestones, Resources, Risks, Reports, Integrations, Settings.

* Visual Cues: Icons for each module, text labels, and an indicator for the active module.

* Collapsible State: Allows users to

gemini Output

Finalized Design Assets & Specifications: Product Roadmap Builder

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Product Roadmap Builder." This comprehensive guide will serve as a foundational blueprint for the development of a professional, intuitive, and highly functional tool designed to empower product teams in strategic planning and execution.


1. Introduction & Design Philosophy

The Product Roadmap Builder is envisioned as a central hub for strategic product planning, offering clarity, collaboration, and data-driven insights. Our design philosophy centers around Clarity, Actionability, and Collaboration, ensuring users can easily visualize their product's future, make informed decisions, and work seamlessly with their teams.

Core Design Principles:

  • Clarity: Information is presented in an organized, digestible manner, reducing cognitive load.
  • Actionability: Users can easily interact with data, make changes, and drive progress.
  • Collaboration: Features are designed to foster team communication and shared understanding.
  • Scalability: The design accommodates growing roadmaps, teams, and product portfolios.
  • Intuitive: Simple, consistent interactions that feel natural and require minimal training.
  • Visual Appeal: A clean, modern aesthetic that is professional and engaging without being distracting.

2. Detailed Design Specifications

This section details the specifications for key UI components and their functionalities across the application.

2.1. Global Elements & Navigation

  • Primary Navigation (Left Sidebar):

* Structure: Collapsible sidebar with main navigation links.

* Items: Dashboard, Roadmaps, Features (or Initiatives), Prioritization, Resources, Risks, Reports, Settings.

* Active State: Highlighted background color and/or accent line.

* Collapsed State: Icons only, expands on hover or click.

* Top: Logo/Product Name.

* Bottom: User Profile/Settings access.

  • Top Bar:

* Global Search: "Search all roadmaps, features, users..." (Icon: Magnifying Glass).

* Notifications: (Icon: Bell, with badge for unread counts).

* Quick Add: "+ Add New" button (Dropdown for: Feature, Milestone, Roadmap).

* Help/Support: (Icon: Question Mark).

  • Buttons:

* Primary CTA: Solid background, high contrast text (e.g., "Create Roadmap", "Save Changes").

* Secondary Button: Outline with primary color, transparent background (e.g., "Cancel", "Export").

* Tertiary/Text Button: Text only, for less prominent actions (e.g., "View Details").

* Icon Buttons: For common actions (e.g., Edit, Delete, Filter, Sort).

  • Forms & Inputs:

* Text Fields: Clear labels, placeholder text, validation states (success, error).

* Dropdowns/Selects: Consistent styling, searchable options for long lists.

* Date Pickers: Intuitive calendar interface for start/end dates.

* Sliders/Toggles: For binary options.

* Rich Text Editor: For descriptions (bold, italics, lists, links).

2.2. Dashboard / Overview Screen

  • Layout: Grid-based with customizable widgets.
  • Widgets:

* Roadmap Progress Summary: Visual progress bar for key roadmaps (e.g., Q1 2024, Product A). Shows % completion, number of features done/in progress.

* Upcoming Milestones: List of next 3-5 critical milestones with dates and associated roadmap.

* High-Priority Features: List of top 5 unstarted or in-progress features.

* Resource Allocation Overview: Summary of team capacity vs. allocated effort (e.g., "Team X: 80% utilized").

* Key Risks: List of top 3-5 high-impact, high-likelihood risks.

* Activity Feed: Recent changes, comments, and updates across all roadmaps.

  • Actions: "View All Roadmaps" button, "Create New Roadmap" button.

2.3. Roadmap View Screen (Primary Interaction)

This is the core of the application, allowing users to visualize and manage their roadmap.

  • Views:

* Timeline View (Default):

* Structure: Horizontal timeline (quarters, months). Swimlanes for Themes, Product Lines, or Teams.

* Feature Cards: Rectangular blocks representing features/initiatives.

* Information: Feature Title, Owner (avatar), Status (color-coded tag), Start/End Dates (displayed on card).

* Interaction: Drag-and-drop to reschedule, resize to adjust effort/duration. Click to open Feature Detail Pane.

* Dependencies: Visual lines or arrows connecting dependent features.

* Milestones: Diamond or star icons on the timeline, with labels.

* Current Date Indicator: Vertical line.

* Zoom Levels: Day, Week, Month, Quarter, Year.

* List View:

* Structure: Sortable, filterable table.

* Columns: Feature Name, Status, Priority, Owner, Start Date, End Date, Progress, Dependencies, Risks.

* Interaction: Inline editing for quick updates. Bulk actions (edit, delete, change status).

* Kanban Board View:

* Structure: Columns representing Status (e.g., Backlog, To Do, In Progress, Review, Done). Customizable columns.

* Feature Cards: Similar to Timeline View, but with additional priority indicators.

* Interaction: Drag-and-drop between columns to change status.

  • Filters & Controls (Top of View):

* Roadmap Selector: Dropdown to switch between roadmaps.

* Filters: By Owner, Status, Priority, Theme, Product Line, Custom Fields. (Icon: Funnel).

* Grouping: By Theme, Owner, Quarter/Month.

* Sort: By Start Date, Priority, Name.

* Export: (Icon: Download). Options: PDF, CSV, Image.

* Share: (Icon: Share). Generate read-only link, invite collaborators.

* "Add Feature" Button: (Primary CTA).

2.4. Feature / Initiative Detail Pane

Opens as a side panel or modal when a feature card is clicked, providing comprehensive details.

  • Header: Feature Title (editable), Status Tag, "Close" button.
  • Key Information:

* Description: Rich text editor for detailed explanation.

* Priority: Dropdown (e.g., Must-Have, Should-Have, Could-Have, Won't-Have; or RICE/WSJF score display).

* Owner: User selector (avatar, name).

* Stakeholders: Multi-user selector.

* Dates: Start Date, End Date (date picker).

* Effort/Estimate: Numerical input (e.g., story points, person-days).

* Dependencies: Link to other features (searchable dropdown). Visual indicator for blocked/blocking.

* Associated Roadmap: Link to parent roadmap.

* Theme/Product Line: Dropdown.

* Milestone: Associated milestone (dropdown).

  • Sub-sections (Tabs or Accordions):

* Risks: List of associated risks (link to Risk Management). Add new risk button.

* Resources: List of allocated team members/resources, their roles, and estimated effort.

* Attachments: File upload, list of attached documents.

* Comments/Activity Log: Real-time commenting, timestamped activity feed for changes.

  • Actions: "Save Changes", "Delete Feature", "Duplicate Feature".

2.5. Prioritization Matrix/Tool

  • Layout: Interactive canvas.
  • Methods: Support for common frameworks (e.g., 2x2 Value vs. Effort matrix, RICE scoring, WSJF).
  • Value vs. Effort Matrix:

* X-axis: Effort (Low to High).

* Y-axis: Value (Low to High).

* Feature Bubbles: Represent individual features, size can indicate urgency or confidence.

* Interaction: Drag-and-drop features within the matrix. Hover for quick details.

  • Scoring Input: For RICE/WSJF, dedicated input fields for Reach, Impact, Confidence, Effort (RICE) or Value, Time Criticality, Risk Reduction, Job Size (WSJF). Auto-calculates score and updates priority.
  • Actions: "Apply Priorities to Roadmap", "Save as Draft".

2.6. Resource Allocation View

  • Layout: Calendar/Timeline view or Table view.
  • Timeline View:

* Rows: Team Members or Roles.

* Columns: Weeks/Months.

* Blocks: Show allocated effort for features. Color-coded by project/roadmap.

* Capacity Bar: Visual bar showing individual/team capacity vs. allocated work. Highlights over-allocation.

  • Table View:

* Columns: Team Member, Role, Available Capacity, Allocated Capacity, Remaining Capacity, List of Assigned Features.

  • Actions: "Allocate Resource", "View Team Capacity".

2.7. Risk Management Section

  • Risk Register:

* Table: Risk ID, Description, Likelihood (dropdown: Low, Medium, High), Impact (dropdown: Low, Medium, High), Risk Score (auto-calculated), Mitigation Plan, Owner, Status (Open, Mitigated, Closed), Date Identified.

* Sorting/Filtering: By any column.

  • Risk Detail Pane: Similar to Feature Detail Pane, for individual risk management.
  • Actions: "Add New Risk", "Export Risks".

2.8. Reports & Analytics

  • Pre-built Reports:

* Roadmap Health: % completion, feature velocity, planned vs. actual.

* Risk Exposure: Summary of high-impact risks.

* Resource Utilization: Team capacity vs. allocation.

* Feature Distribution: By status, owner, priority.

  • Custom Report Builder: Drag-and-drop interface for selecting data points, charts, and filters.
  • Visualization: Bar charts, pie charts, line graphs, tables.
  • Export Options: PDF, CSV, Image.

3. Key Wireframe Descriptions

Below are high-level descriptions for the primary screens, outlining their structural layout and key components.

3.1. Wireframe: Main Dashboard

  • Header: Logo (top-left), Global Search, Notifications, Quick Add, User Profile (top-right).
  • Left Sidebar: Collapsible navigation menu (Dashboard, Roadmaps, Features, Prioritization, etc.).
  • Main Content Area (Grid Layout):

* Row 1: "Roadmap Progress Summary" widget (large, prominent), "Upcoming Milestones" widget (list).

* Row 2: "High-Priority Features" widget (list), "Resource Allocation Overview" widget (gauge/bar chart), "Key Risks" widget (list).

* Row 3: "Recent Activity Feed" widget (full width, scrollable).

  • Call to Action: Prominent "Create New Roadmap" button, possibly integrated into the roadmap progress widget.

3.2. Wireframe: Roadmap Timeline View

  • Header: Same as Dashboard.
  • Left Sidebar: Navigation menu.
  • **Top
product_roadmap_builder.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

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

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

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

"+title+"

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

$1

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

$1

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

$1

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

"); h+="

"+hc+"

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