API Documentation Writer
Run ID: 69cc4cac8f41b62a970c25672026-03-31Development
PantheraHive BOS
BOS Dashboard

As a professional AI assistant, I am executing step 2 of 3 for the "API Documentation Writer" workflow. This step focuses on generating comprehensive, detailed, and professional content.


Welcome to the Acme Product API Documentation!

Headline: Empower Your Applications with Seamless Product Integration

Body Text:

Welcome, developers! This documentation provides a comprehensive guide to integrating with the Acme Product API. Our API allows you to programmatically access and manage your product catalog, retrieve detailed product information, and streamline your e-commerce operations. Designed for ease of use and high performance, the Acme Product API enables you to build powerful applications, custom storefronts, inventory management systems, and more.

Whether you're looking to display real-time product data, synchronize inventory across platforms, or automate product updates, this guide will walk you through every step, from authentication to advanced endpoint usage. Let's get started and unlock the full potential of your product data!


1. Getting Started

This section provides essential information to help you quickly integrate with the Acme Product API.

1.1. Authentication

All requests to the Acme Product API must be authenticated using an API Key. Your API Key must be included in the Authorization header of every request.

Example:

text • 2,184 chars
---

## 3. Data Models

Understanding the structure of the data you'll be working with is crucial.

### 3.1. Product Object

The core `Product` object represents an item in your catalog.

| Field          | Type     | Description                                                          |
| :------------- | :------- | :------------------------------------------------------------------- |
| `id`           | string   | Unique identifier for the product (e.g., `prod_001`).                |
| `name`         | string   | Display name of the product.                                         |
| `slug`         | string   | URL-friendly identifier for the product.                             |
| `description`  | string   | Detailed description of the product.                                 |
| `price`        | object   | Object containing `amount` (number) and `currency` (string).       |
| `category`     | object   | Object containing `id`, `name`, and `slug` of the product's category. |
| `status`       | string   | Current status of the product (`active`, `inactive`, `draft`).       |
| `sku`          | string   | Stock Keeping Unit.                                                  |
| `stock_quantity` | integer  | Current number of items in stock.                                    |
| `image_url`    | string   | URL to the primary image of the product.                             |
| `created_at`   | datetime | Timestamp when the product was created (ISO 8601).                  |
| `updated_at`   | datetime | Timestamp when the product was last updated (ISO 8601).              |

### 3.2. Category Object

The `Category` object provides details about a product's classification.

| Field  | Type   | Description                                   |
| :----- | :----- | :-------------------------------------------- |
| `id`   | string | Unique identifier for the category.           |
| `name` | string | Display name of the category.                 |
| `slug` | string | URL-friendly identifier for the category.     |

---

## 4. Code Examples

Here are some common code examples to help you get started quickly.

### 4.1. Python Example: Fetching Products

Sandboxed live preview

Step 1 of 3: Gemini Research - API Documentation Writer

This deliverable provides a comprehensive research overview of the "API Documentation Writer" role, encompassing its core responsibilities, essential skills, common tools, and best practices. This foundational knowledge is crucial for generating detailed and professional API documentation.


1. Introduction to the API Documentation Writer Role

An API Documentation Writer is a specialized technical writer who focuses on creating clear, accurate, and user-friendly documentation for Application Programming Interfaces (APIs). Their primary goal is to bridge the gap between complex technical API functionalities and the developers or users who need to integrate with or utilize these APIs. They ensure that API consumers can quickly understand, implement, and troubleshoot API interactions, thereby accelerating adoption and reducing support overhead.

2. Core Responsibilities and Deliverables

The responsibilities of an API Documentation Writer are multifaceted, involving technical understanding, strong writing skills, and collaborative efforts.

  • API Analysis and Understanding:

* Deeply understand API design, functionality, architecture (e.g., REST, GraphQL, SOAP), and underlying business logic.

* Collaborate with engineers, product managers, and architects to gather comprehensive information about API endpoints, methods, parameters, data models, authentication mechanisms, and error handling.

* Analyze code, API specifications (e.g., OpenAPI/Swagger definitions), and existing test cases to ensure documentation accuracy.

  • Content Creation and Structuring:

* API Reference Documentation: Detailed descriptions of endpoints, request/response formats (JSON, XML), status codes, headers, query parameters, path parameters, and authentication methods.

* Getting Started Guides & Tutorials: Step-by-step instructions for initial setup, authentication, and making the first API call.

* Integration Guides: Walkthroughs for integrating the API into various platforms or programming languages.

* Use Cases & Examples: Practical, runnable code snippets in multiple programming languages (e.g., Python, JavaScript, cURL) demonstrating common API interactions.

* SDK Documentation: Guides and references for Software Development Kits.

* Authentication & Authorization Guides: Clear instructions on how to secure API access.

* Error Handling & Troubleshooting Guides: Explanation of common error codes, their meanings, and potential solutions.

* Changelogs & Versioning: Documenting API updates, breaking changes, and versioning strategies.

  • Tooling and Publishing:

* Utilize specialized documentation tools and frameworks (see Section 4).

* Manage documentation content using version control systems (e.g., Git).

* Publish and maintain documentation on developer portals, static site generators, or content management systems.

  • Collaboration and Feedback:

* Actively engage with developers, quality assurance (QA) engineers, and product managers throughout the API development lifecycle.

* Incorporate feedback from internal stakeholders and external users to continuously improve documentation quality and usability.

* Participate in API design reviews to advocate for documentation-friendly API structures.

  • Maintenance and Updates:

* Regularly review and update documentation to reflect API changes, new features, and deprecations.

* Ensure consistency in terminology, style, and formatting across all documentation.

3. Essential Skills for an API Documentation Writer

A successful API Documentation Writer possesses a unique blend of technical acumen, strong communication abilities, and organizational skills.

  • Technical Proficiency:

* API Concepts: Deep understanding of RESTful principles, GraphQL, SOAP, HTTP methods, request/response cycles.

* Data Formats: Proficiency with JSON and XML structures.

* Programming Basics: Ability to read and understand code snippets (e.g., Python, JavaScript, Java, cURL) to verify API behavior and create accurate examples.

* API Tools: Experience with API testing tools like Postman, Insomnia, or Swagger UI to validate API calls and responses.

* Version Control: Familiarity with Git and platforms like GitHub/GitLab for managing documentation source code.

  • Writing & Communication Skills:

* Clarity and Conciseness: Ability to explain complex technical concepts in simple, unambiguous language.

* Accuracy: Meticulous attention to detail to ensure technical correctness.

* Audience Awareness: Tailoring content to different technical proficiencies (e.g., beginner, intermediate, advanced developer).

* Information Architecture: Strong ability to structure and organize vast amounts of information logically and accessibly.

* Grammar and Style: Excellent command of English grammar, punctuation, and adherence to style guides.

  • Problem-Solving & Analytical Skills:

* Ability to deconstruct complex systems and workflows into manageable, understandable components.

* Identifying gaps in existing information or potential points of confusion for users.

* Troubleshooting example code and API calls.

  • Collaboration & Interpersonal Skills:

* Effectively interview Subject Matter Experts (SMEs) to extract necessary technical details.

* Work collaboratively in agile development environments.

* Receive and provide constructive feedback.

4. Common Tools and Technologies

API Documentation Writers leverage a variety of tools to create, manage, and publish high-quality documentation.

  • API Specification Formats:

* OpenAPI Specification (OAS) / Swagger: Industry standard for defining RESTful APIs, often used as a source for generating documentation.

* AsyncAPI: For event-driven architectures.

  • Documentation Generators & Frameworks:

* Redoc, Swagger UI: Tools that render OpenAPI definitions into interactive documentation.

* Docusaurus, MkDocs, GitBook: Static site generators popular for creating developer portals and technical documentation.

* Sphinx: Python-based documentation generator, often used for Python projects.

* Postman Documentation: Built-in feature within Postman for generating documentation from API collections.

  • Version Control Systems:

* Git: Essential for tracking changes, collaboration, and managing different versions of documentation.

* GitHub, GitLab, Bitbucket: Platforms for hosting Git repositories and collaborating on documentation projects.

  • API Testing & Development Tools:

* Postman, Insomnia: Used for making API calls, testing endpoints, and verifying responses, crucial for example creation.

* cURL: Command-line tool for transferring data with URLs, frequently used for basic API examples.

  • Text Editors & IDEs:

* VS Code, Sublime Text, Atom: Popular editors for writing Markdown, YAML, JSON, and other documentation formats.

  • Diagramming Tools:

* draw.io, Lucidchart, Miro: For creating flowcharts, architecture diagrams, and sequence diagrams to illustrate API workflows.

5. Best Practices in API Documentation

Adhering to best practices ensures that API documentation is not only accurate but also highly usable and effective.

  • Accuracy and Completeness:

* Ensure all API endpoints, parameters, and responses are precisely documented and reflect the current API state.

* Cover edge cases, error conditions, and rate limits.

  • Clarity and Conciseness:

* Use plain language, avoiding jargon where possible or providing clear explanations.

* Get straight to the point, respecting the developer's time.

  • Consistency:

* Maintain a consistent style, tone, terminology, and formatting across all documentation.

* Adhere to a defined style guide (e.g., Google Developer Documentation Style Guide).

  • Discoverability and Navigation:

* Implement a clear, intuitive navigation structure.

* Provide robust search functionality.

* Use descriptive headings and a table of contents.

  • Usability and Interactivity:

* Offer interactive documentation where users can try out API calls directly (e.g., Swagger UI's "Try it out" feature).

* Ensure code examples are runnable, copy-pastable, and contextually relevant.

  • Examples and Code Snippets:

* Provide practical, real-world examples in multiple popular programming languages.

* Show both request and response examples for clarity.

  • Version Control and Changelogs:

* Clearly indicate API versions and document any breaking changes in a dedicated changelog.

* Link documentation to specific API versions.

  • Audience-Centric Approach:

* Consider the different personas of your API consumers (e.g., beginner developers, experienced engineers, technical managers) and tailor content accordingly.

  • Feedback Mechanisms:

* Include clear channels for users to provide feedback, report errors, or suggest improvements.

* Actively monitor and respond to user feedback.

6. Target Audiences for API Documentation

Effective API documentation considers the diverse needs of its target audiences:

  • External Developers/Partners: Building applications, integrating third-party services, extending platform functionality.
  • Internal Developers: Integrating internal services, building new features on existing APIs, understanding shared components.
  • Technical Managers/Product Managers: Understanding API capabilities, planning integrations, assessing feasibility.
  • Quality Assurance (QA) Engineers: Validating API functionality, designing test cases.
  • Solution Architects/Consultants: Designing system integrations, advising clients on API usage.
  • Customer Support Teams: Troubleshooting user issues related to API integration.

python

import requests

import os

API_KEY = os.environ.get("ACME_API_KEY") # Ensure your API key is set as an environment variable

BASE_URL = "https://api.acmeproducts.com/v1"

headers = {

"Authorization": f"Bearer {API_KEY}",

"Content-Type": "application/json"

}

def get_all_products(limit=10, category=None):

params = {"limit": limit}

if category:

params["category"] = category

try:

response = requests.get(f"{BASE_URL}/products", headers=headers, params=params)

response.raise_for_status() # Raise an exception for HTTP errors

return response.json()

except requests.exceptions.HTTPError as err:

print(f"HTTP error occurred: {err}")

print(f"Response: {err.response.json()}")

except Exception as err:

print(f"An error occurred: {err}")

return None

def create_product(product_data):

try:

response = requests.post(f"{BASE_URL}/products", headers=headers, json=product_data)

response

gemini Output

API Documentation: Product Catalog Management API (Version 1.0)

Date: October 26, 2023

Document Version: 1.0.0

Generated by: PantheraHive API Documentation Writer


1. Introduction

Welcome to the comprehensive API documentation for the Product Catalog Management API. This API provides a robust and efficient way to programmatically manage your product catalog, enabling seamless integration with e-commerce platforms, inventory systems, and other internal or external applications.

This documentation details all available endpoints, request/response formats, authentication methods, and error handling protocols to facilitate quick and successful integration.

2. Table of Contents

  • [1. Introduction](#1-introduction)
  • [2. Table of Contents](#2-table-of-contents)
  • [3. Getting Started](#3-getting-started)

* [3.1. Base URL](#31-base-url)

* [3.2. Authentication](#32-authentication)

  • [4. API Endpoints](#4-api-endpoints)

* [4.1. Products](#41-products)

* [4.1.1. List All Products](#411-list-all-products) (GET /products)

* [4.1.2. Get Product by ID](#412-get-product-by-id) (GET /products/{productId})

* [4.1.3. Create New Product](#413-create-new-product) (POST /products)

* [4.1.4. Update Product](#414-update-product) (PUT /products/{productId})

* [4.1.5. Delete Product](#415-delete-product) (DELETE /products/{productId})

  • [5. Data Models](#5-data-models)

* [5.1. Product Object](#51-product-object)

* [5.2. Error Object](#52-error-object)

  • [6. Error Handling](#6-error-handling)
  • [7. Rate Limiting](#7-rate-limiting)
  • [8. Changelog](#8-changelog)

3. Getting Started

This section guides you through the basic setup required to start interacting with the Product Catalog Management API.

3.1. Base URL

All API requests should be made to the following base URL:

https://api.example.com/v1

3.2. Authentication

The Product Catalog Management API uses API Key authentication. You must include your unique API key in the X-API-Key header for every request.

How to obtain your API Key:

API keys can be generated and managed through your developer dashboard at https://developer.example.com/dashboard.

Example Request Header:


GET /v1/products
Host: api.example.com
X-API-Key: YOUR_API_KEY_HERE

Authentication Errors:

  • 401 Unauthorized: No API key provided or invalid API key.
  • 403 Forbidden: API key lacks necessary permissions for the requested resource.

4. API Endpoints

This section details all available endpoints, including their HTTP methods, paths, parameters, request bodies, and expected responses.

4.1. Products

The /products resource allows you to manage individual product entries in your catalog.

##### 4.1.1. List All Products (GET /products)

Retrieves a paginated list of all products in the catalog.

  • Method: GET
  • Path: /products
  • Description: Fetches a list of all products, optionally filtered and paginated.

Request Headers:

| Header | Type | Description | Required | Example |

| :---------- | :----- | :-------------------------------- | :------- | :------------------ |

| X-API-Key | string | Your unique API key. | Yes | YOUR_API_KEY_HERE |

Query Parameters:

| Parameter | Type | Description | Required | Default | Example |

| :-------- | :------ | :------------------------------------------------ | :------- | :------ | :---------- |

| limit | integer | Maximum number of products to return per page. | No | 10 | 20 |

| offset | integer | Number of products to skip for pagination. | No | 0 | 10 |

| category| string | Filter products by category. | No | None | electronics |

| sort_by | string | Field to sort results by (e.g., name, price). | No | name | price |

| order | string | Sort order (asc or desc). | No | asc | desc |

Responses:

  • 200 OK

* Description: A list of product objects.

* Body Schema:


        {
          "type": "object",
          "properties": {
            "products": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Product"
              }
            },
            "total": {
              "type": "integer",
              "description": "Total number of products matching the criteria."
            },
            "limit": {
              "type": "integer"
            },
            "offset": {
              "type": "integer"
            }
          }
        }

* Example Body:


        {
          "products": [
            {
              "id": "prod_001",
              "name": "Wireless Headphones Pro",
              "description": "High-fidelity wireless headphones with noise cancellation.",
              "price": 199.99,
              "currency": "USD",
              "category": "Electronics",
              "sku": "WH-PRO-2023",
              "stock": 500,
              "created_at": "2023-10-01T10:00:00Z",
              "updated_at": "2023-10-25T15:30:00Z"
            },
            {
              "id": "prod_002",
              "name": "Ergonomic Office Chair",
              "description": "Adjustable ergonomic chair for maximum comfort.",
              "price": 349.00,
              "currency": "USD",
              "category": "Office Furniture",
              "sku": "OC-ERGO-ULTRA",
              "stock": 120,
              "created_at": "2023-09-15T09:00:00Z",
              "updated_at": "2023-10-20T11:00:00Z"
            }
          ],
          "total": 2,
          "limit": 10,
          "offset": 0
        }
  • 401 Unauthorized: See [Authentication Errors](#authentication-errors).
  • 500 Internal Server Error: See [Error Handling](#6-error-handling).

##### 4.1.2. Get Product by ID (GET /products/{productId})

Retrieves a single product by its unique identifier.

  • Method: GET
  • Path: /products/{productId}
  • Description: Fetches details for a specific product.

Request Headers:

| Header | Type | Description | Required | Example |

| :---------- | :----- | :-------------------------------- | :------- | :------------------ |

| X-API-Key | string | Your unique API key. | Yes | YOUR_API_KEY_HERE |

Path Parameters:

| Parameter | Type | Description | Required | Example |

| :---------- | :----- | :------------------------ | :------- | :--------- |

| productId | string | The unique ID of the product. | Yes | prod_001 |

Responses:

  • 200 OK

* Description: The requested product object.

* Body Schema: #/components/schemas/Product

* Example Body:


        {
          "id": "prod_001",
          "name": "Wireless Headphones Pro",
          "description": "High-fidelity wireless headphones with noise cancellation.",
          "price": 199.99,
          "currency": "USD",
          "category": "Electronics",
          "sku": "WH-PRO-2023",
          "stock": 500,
          "created_at": "2023-10-01T10:00:00Z",
          "updated_at": "2023-10-25T15:30:00Z"
        }
  • 404 Not Found

* Description: Product with the given ID was not found.

* Body Schema: #/components/schemas/Error

* Example Body:


        {
          "code": "PRODUCT_NOT_FOUND",
          "message": "Product with ID 'prod_999' not found."
        }
  • 401 Unauthorized: See [Authentication Errors](#authentication-errors).
  • 500 Internal Server Error: See [Error Handling](#6-error-handling).

##### 4.1.3. Create New Product (POST /products)

Adds a new product to the catalog.

  • Method: POST
  • Path: /products
  • Description: Creates a new product entry.

Request Headers:

| Header | Type | Description | Required | Example |

| :------------ | :----- | :-------------------------------- | :------- | :------------------ |

| X-API-Key | string | Your unique API key. | Yes | YOUR_API_KEY_HERE |

| Content-Type| string | Must be application/json. | Yes | application/json |

Request Body:

  • Body Schema:

    {
      "type": "object",
      "required": ["name", "description", "price", "currency", "category", "sku", "stock"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the product.",
          "maxLength": 255
        },
        "description": {
          "type": "string",
          "description": "Detailed description of the product."
        },
        "price": {
          "type": "number",
          "format": "float",
          "description": "Price of the product."
        },
        "currency": {
          "type": "string",
          "description": "Currency code (e.g., USD, EUR).",
          "pattern": "^[A-Z]{3}$"
        },
        "category": {
          "type": "string",
          "description": "Product category."
        },
        "sku": {
          "type": "string",
          "description": "Stock Keeping Unit (unique identifier for inventory).",
          "maxLength": 100
        },
        "stock": {
          "type": "integer",
          "description": "Current stock quantity.",
          "minimum": 0
        },
        "image_url": {
          "type": "string",
          "format": "uri",
          "description": "URL to the product image."
        },
        "attributes": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Additional product attributes (e.g., color, size)."
        }
      }
    }
  • Example Body:

    {
      "name": "Smart Watch Series X",
      "description": "Advanced smartwatch with health tracking and GPS.",
      "price": 299.99,
      "currency": "USD",
      "category": "Wearable Tech",
      "sku": "SW-X-2024",
      "stock": 300,
      "image_url": "https://example.com/images/smartwatch-x.jpg",
      "attributes": {
        "color": "Midnight Black",
        "storage": "32GB"
      }
    }

Responses:

  • 201 Created

* Description: The newly created product object, including its generated id.

* Body Schema: #/components/schemas/Product

* Example Body:


        {
          "id": "prod_003",
          "name": "Smart Watch Series X",
          "description": "Advanced smartwatch with health tracking and GPS.",
          "price": 299.99,
          "currency": "USD",
          "category": "Wearable Tech",
          "sku": "SW-X-2024",
          "stock": 300,
          "image_url": "https://example.com/images/smartwatch-x.jpg",
          "attributes": {
            "color": "Midnight Black",
            "storage": "32GB"
          },
          "created_at": "2023-10-26T14:00:00Z",
          "updated_at": "2023-10-26T14:00:00Z"
        }
  • 400 Bad Request

* Description: Invalid request payload (e.g., missing required fields, invalid data types).

* Body Schema: #/components/schemas/Error

* Example Body:


        {
          "code": "VALIDATION_ERROR",
          "message": "Invalid input for field 'price'. Must be a number.",
          "details": [
            {
              "field": "price",
              "issue": "must be a number"
            }
          ]
        }
  • 409 Conflict

* Description: A product with the provided SKU already exists.

* Body Schema: #/components/schemas/Error

* Example Body:


        {
          
api_documentation_writer.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);}});}