API Documentation Writer
Run ID: 69ccaf193e7fb09ff16a41e02026-04-01Development
PantheraHive BOS
BOS Dashboard

Product Catalog API Documentation

Welcome to the Product Catalog API documentation! This guide provides comprehensive information on how to integrate with our robust API to manage your product listings, retrieve product details, and maintain your catalog with ease. Designed for developers, this documentation covers everything from authentication to detailed endpoint specifications, ensuring a smooth and efficient integration experience.


Table of Contents

* [Product Object](#product-object)

* [Error Object](#error-object)

* [List All Products](#list-all-products)

* [Retrieve a Specific Product](#retrieve-a-specific-product)

* [Create a New Product](#create-a-new-product)

* [Update an Existing Product](#update-an-existing-product)

* [Delete a Product](#delete-a-product)


Introduction

The Product Catalog API empowers you to programmatically interact with your product inventory. Whether you're building an e-commerce platform, an inventory management system, or a mobile application, our API provides the tools necessary to perform CRUD (Create, Read, Update, Delete) operations on your product data. Key features include:


Getting Started

To get started, you'll need an API Key. Once you have your key, you can make your first API call. Here's a quick example to retrieve a list of all products:

text • 2,174 chars
Replace `YOUR_API_KEY` with your actual API key. A successful response will return a JSON array of product objects.

---

### Authentication

All requests to the Product Catalog API must be authenticated using an API Key. We use a Bearer Token scheme for authentication.

**How to Authenticate:**
Include your API Key in the `Authorization` header of every request, prefixed with `Bearer`.

**Header Example:**
`Authorization: Bearer YOUR_API_KEY`

**Obtaining Your API Key:**
Your API Key can be generated and managed from your developer dashboard. If you do not have one, please register an account or contact support.

**Security Best Practices:**
*   Keep your API Key confidential. Do not expose it in client-side code or public repositories.
*   Rotate your API Keys periodically for enhanced security.
*   Use HTTPS for all API calls to ensure encrypted communication.

---

### Base URL

The base URL for all API requests is:

`https://api.yourdomain.com/v1`

All endpoint paths listed in this documentation are relative to this base URL.

---

### Error Handling

Our API uses standard HTTP status codes to indicate the success or failure of an API request. In cases of failure, the API will return a JSON object containing specific error details to help you diagnose and resolve issues.

**Common HTTP Status Codes:**

*   **`200 OK`**: The request was successful (e.g., GET, PUT, DELETE).
*   **`201 Created`**: The request resulted in a new resource being created (e.g., POST).
*   **`204 No Content`**: The request was successful, but there is no content to return (e.g., successful DELETE).
*   **`400 Bad Request`**: The request was malformed or invalid.
*   **`401 Unauthorized`**: Authentication is required or has failed.
*   **`403 Forbidden`**: The authenticated user does not have the necessary permissions.
*   **`404 Not Found`**: The requested resource could not be found.
*   **`405 Method Not Allowed`**: The HTTP method used is not supported for the requested resource.
*   **`429 Too Many Requests`**: Rate limiting has been applied.
*   **`500 Internal Server Error`**: An unexpected error occurred on the server.

**Error Response Example:**

Sandboxed live preview

Step 1 of 3: Research Topic - API Documentation Writer

Introduction to the API Documentation Writer Role

The role of an API Documentation Writer is critical in the software development lifecycle, bridging the gap between developers and users (who are often other developers). Their primary responsibility is to create clear, accurate, comprehensive, and user-friendly documentation for Application Programming Interfaces (APIs). This documentation enables developers to understand, integrate, and effectively use an API, thereby accelerating adoption and reducing support overhead.

Core Responsibilities of an API Documentation Writer

An API Documentation Writer's duties extend beyond merely writing; they involve a deep understanding of technical concepts, user experience, and effective communication. Key responsibilities include:

  • API Specification Development:

* Working closely with API architects and developers to understand the API's functionality, endpoints, parameters, authentication methods, error codes, and data models.

* Translating complex technical specifications into easily digestible content for target audiences.

* Ensuring documentation accurately reflects the current state and intended behavior of the API.

  • Content Creation and Management:

* Writing clear, concise, and comprehensive API reference documentation (e.g., endpoint descriptions, request/response examples).

* Developing conceptual guides, tutorials, and "how-to" articles to demonstrate API usage for common use cases.

* Creating SDK documentation, sample code, and integration guides.

* Maintaining version control for documentation, ensuring updates align with API changes.

  • Tooling and Publishing:

* Utilizing various documentation tools (e.g., Swagger/OpenAPI, Postman, Markdown, Confluence, ReadMe.io, Stoplight) to generate and publish API documentation.

* Managing content within Content Management Systems (CMS) or static site generators.

* Ensuring discoverability and accessibility of documentation.

  • Collaboration and Communication:

* Acting as a liaison between development, product management, and support teams.

* Gathering feedback from internal and external users to continuously improve documentation.

* Participating in API design reviews to advocate for clear, consistent, and documentable API structures.

* Conducting user research to understand documentation needs and pain points.

  • Quality Assurance:

* Reviewing documentation for technical accuracy, clarity, grammar, and adherence to style guides.

* Testing code examples and API calls to ensure they work as described.

* Ensuring consistency in terminology and formatting across all documentation.

Essential Skills for an API Documentation Writer

To excel in this role, a unique blend of technical aptitude, writing prowess, and interpersonal skills is required:

  • Technical Proficiency:

* Understanding of APIs: Deep knowledge of RESTful APIs, GraphQL, SOAP, Webhooks, and related concepts (HTTP methods, status codes, JSON, XML).

* Programming Concepts: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, cURL) to understand and write code examples.

* Development Tools: Experience with Postman, Insomnia, cURL, Git, and other developer tools.

* Command Line Interface (CLI): Comfort working in a terminal environment.

  • Writing and Communication:

* Exceptional Writing Skills: Ability to write clearly, concisely, and accurately for technical audiences.

* Information Architecture: Skill in organizing complex information logically and intuitively.

* Audience Awareness: Ability to tailor content to different technical skill levels (e.g., beginner, intermediate, advanced).

* Editing and Proofreading: Meticulous attention to detail for grammar, spelling, and style.

  • Documentation Tools & Standards:

* OpenAPI/Swagger: Proficiency in using and generating documentation from OpenAPI specifications.

* Markdown/reStructuredText: Expertise in markdown languages for content creation.

* Static Site Generators: Experience with tools like Docusaurus, Sphinx, Jekyll, Hugo.

* Documentation Platforms: Familiarity with platforms like ReadMe.io, Stoplight, SwaggerHub, Confluence.

* Version Control: Experience with Git and GitHub/GitLab for collaborative documentation.

  • Soft Skills:

* Problem-Solving: Ability to break down complex technical problems into understandable components.

* Collaboration: Strong interpersonal skills to work effectively with cross-functional teams.

* Empathy: Ability to understand the user's perspective and anticipate their needs.

* Attention to Detail: Crucial for accuracy in technical documentation.

* Proactiveness: Ability to identify documentation gaps and initiate improvements.

Key Tools and Technologies

API Documentation Writers frequently utilize a suite of tools to perform their tasks:

  • API Specification Formats:

* OpenAPI Specification (formerly Swagger)

* AsyncAPI (for event-driven architectures)

* GraphQL Schema Definition Language (SDL)

  • API Development & Testing Tools:

* Postman

* Insomnia

* cURL

  • Documentation Generators & Platforms:

* Swagger UI / Swagger Editor

* Stoplight Studio

* ReadMe.io

* Docusaurus

* MkDocs

* Sphinx

* Jekyll / Hugo

* Confluence / GitBook

  • Version Control:

* Git (GitHub, GitLab, Bitbucket)

  • Text Editors/IDEs:

* VS Code

* Sublime Text

Best Practices in API Documentation

Effective API documentation adheres to several best practices:

  • Audience-Centric Approach: Design documentation with the target user in mind, providing relevant information at the right level of detail.
  • Clear Structure and Navigation: Organize content logically with a clear hierarchy, search functionality, and intuitive navigation.
  • Executable Examples: Include runnable code snippets in multiple languages, complete with request and response examples.
  • Consistency: Maintain a consistent style, tone, and terminology throughout all documentation.
  • Accuracy and Up-to-Date Content: Ensure documentation reflects the current state of the API and is updated promptly with any changes.
  • Comprehensive Coverage: Document all endpoints, parameters, authentication methods, error codes, rate limits, and best practices.
  • Getting Started Guides & Tutorials: Provide step-by-step guides for common use cases to help users quickly integrate.
  • Searchability: Implement robust search functionality to help users find information quickly.
  • Feedback Mechanisms: Offer ways for users to provide feedback, report issues, and suggest improvements.
  • Version Control & Changelogs: Clearly indicate API versions and document changes in a changelog.
  • Visual Aids: Use diagrams, flowcharts, and screenshots where appropriate to explain complex concepts.

Impact and Value Proposition

An effective API Documentation Writer significantly impacts a product's success by:

  • Accelerating Developer Onboarding: Reduces the learning curve for new users, leading to faster adoption.
  • Minimizing Support Costs: Clear documentation answers common questions, reducing the burden on support teams.
  • Improving Developer Experience (DX): A positive DX enhances satisfaction and encourages continued use of the API.
  • Increasing API Adoption: Well-documented APIs are more likely to be integrated and used.
  • Ensuring API Usability: Helps developers understand how to correctly and efficiently use the API.
  • Driving Innovation: Empowers developers to build new applications and integrations using the API.

This research provides a comprehensive overview of the API Documentation Writer role, encompassing responsibilities, essential skills, tools, and best practices, setting a strong foundation for generating detailed professional output in subsequent steps.

Create a New Product

Add a new product to the catalog.

  • POST /products

Description:

Creates a new product entry with the provided details and returns the newly created Product object.

Request Body:

A Product object. The id, created_at, and updated_at fields are generated by the API and should not be included in the request.

| Field | Type | Description | Required |

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

| name | string | The name of the product. | Yes |

| description | string | A detailed description of the product. | No |

| price | number | The current price of the product. | Yes |

| currency | string | The currency code (e.g., "USD", "EUR"). | Yes |

| category | string | The category the product belongs to. | No |

| sku | string | Stock Keeping Unit (unique identifier for inventory). | No |

| stock_level | integer| Current quantity of the product in stock. | Yes |

| is_available | boolean| Indicates if the product is

gemini Output

Professional API Documentation: Product Management System API

This document provides a comprehensive guide to integrating with the Product Management System API. It details authentication methods, available endpoints, request/response structures, and error handling, enabling developers to seamlessly interact with and manage product data programmatically.


1. Introduction

The Product Management System API allows developers to programmatically manage products, including creation, retrieval, updates, and deletion. This API is designed for building applications that integrate with product catalogs, inventory systems, e-commerce platforms, or any system requiring robust product data management.

Key Features:

  • RESTful Design: Predictable resource-oriented URLs and standard HTTP response codes.
  • JSON Payloads: All requests and responses are formatted using JSON.
  • Secure Authentication: Utilizes API Key for secure access.

2. Getting Started

To begin using the Product Management System API, follow these quick steps:

  1. Obtain an API Key: Register your application on the [Developer Portal](https://developer.example.com/register) to receive your unique API Key.
  2. Familiarize with Base URL: All API requests should be prefixed with the provided base URL.
  3. Test Authentication: Make a simple request to a public endpoint or a test endpoint to ensure your API Key is correctly configured.
  4. Explore Endpoints: Refer to the Endpoints Reference section below to understand available resources and operations.

3. Authentication

The Product Management System API uses API Key authentication. You must include your API Key in the X-API-Key header for every request. Failure to provide a valid API Key will result in a 401 Unauthorized error.

Header Name: X-API-Key

Example:


X-API-Key: YOUR_API_KEY_HERE

Example Request with Authentication:


curl -X GET \
  'https://api.example.com/v1/products' \
  -H 'Accept: application/json' \
  -H 'X-API-Key: YOUR_API_KEY_HERE'

4. Base URL

All requests to the Product Management System API should use the following base URL:

https://api.example.com/v1


5. Data Formats

The API exclusively uses JSON for both request bodies and response payloads.

  • Request Header: Content-Type: application/json
  • Accept Header: Accept: application/json

6. Rate Limiting

To ensure fair usage and system stability, the API imposes rate limits.

  • Limit: 100 requests per minute per API Key.
  • Exceeding Limit: Requests exceeding the limit will receive a 429 Too Many Requests status code.
  • Headers: The following headers are included in every response to help you manage your rate limit:

* X-RateLimit-Limit: The maximum number of requests you can make in the current window.

* X-RateLimit-Remaining: The number of requests remaining in the current window.

* X-RateLimit-Reset: The UTC epoch timestamp when the current rate limit window resets.


7. Error Handling

The API uses standard HTTP status codes to indicate the success or failure of an API request. In case of an error, the API will return a JSON object containing an error field with a descriptive message.

| HTTP Status Code | Description | Example Error Response |

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

| 200 OK | Request successful. | N/A |

| 201 Created | Resource successfully created. | N/A |

| 204 No Content | Request successful, no content to return. | N/A |

| 400 Bad Request| Invalid request payload or parameters. | { "error": "Invalid product data provided." } |

| 401 Unauthorized| Missing or invalid API Key. | { "error": "Authentication required." } |

| 403 Forbidden | API Key lacks necessary permissions. | { "error": "Access denied." } |

| 404 Not Found | Resource does not exist. | { "error": "Product not found." } |

| 405 Method Not Allowed| HTTP method not supported for this endpoint. | { "error": "Method not allowed for this resource." } |

| 409 Conflict | Resource already exists or a conflict occurred. | { "error": "Product SKU already exists." } |

| 422 Unprocessable Entity| Semantic errors in the request body. | { "error": "Validation failed: 'name' is required." } |

| 429 Too Many Requests| Rate limit exceeded. | { "error": "Rate limit exceeded. Please try again later." } |

| 500 Internal Server Error| An unexpected server error occurred. | { "error": "An unexpected error occurred." } |


8. Endpoints Reference

This section details all available API endpoints, their methods, parameters, and example requests/responses.

8.1 Product Object Structure

All product-related operations will interact with data structured as follows:


{
  "id": "string",            // Unique identifier for the product (UUID, read-only)
  "sku": "string",           // Stock Keeping Unit (unique, required)
  "name": "string",          // Product name (required)
  "description": "string",   // Product description (optional)
  "price": "number",         // Product price (required)
  "currency": "string",      // Currency code (e.g., "USD", "EUR", required)
  "stock": "integer",        // Current stock level (required)
  "category": "string",      // Product category (optional)
  "imageUrl": "string",      // URL to product image (optional)
  "createdAt": "string",     // ISO 8601 timestamp of creation (read-only)
  "updatedAt": "string"      // ISO 8601 timestamp of last update (read-only)
}

8.2 Products Resource

##### GET /products - List all products

Retrieves a list of all products in the system. Supports pagination and filtering.

Parameters:

| Name | Type | In | Description | Required | Default |

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

| limit | integer | Query | Maximum number of products to return. | No | 10 |

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

| category| string | Query | Filter products by category. | No | null |

| min_price| number | Query | Filter products with price greater than or equal to this value. | No | null |

| max_price| number | Query | Filter products with price less than or equal to this value. | No | null |

Example Request:


curl -X GET \
  'https://api.example.com/v1/products?limit=5&category=Electronics' \
  -H 'Accept: application/json' \
  -H 'X-API-Key: YOUR_API_KEY_HERE'

Example Success Response (Status: 200 OK):


[
  {
    "id": "prod_a1b2c3d4",
    "sku": "ELC-TV-001",
    "name": "Smart LED TV 55 inch",
    "description": "4K Ultra HD Smart TV with HDR.",
    "price": 799.99,
    "currency": "USD",
    "stock": 50,
    "category": "Electronics",
    "imageUrl": "https://example.com/images/tv.jpg",
    "createdAt": "2023-01-15T10:00:00Z",
    "updatedAt": "2023-10-20T14:30:00Z"
  },
  {
    "id": "prod_e5f6g7h8",
    "sku": "ELC-PHN-002",
    "name": "Smartphone X Pro",
    "description": "Flagship smartphone with advanced camera.",
    "price": 999.00,
    "currency": "USD",
    "stock": 120,
    "category": "Electronics",
    "imageUrl": "https://example.com/images/phone.jpg",
    "createdAt": "2023-02-01T09:00:00Z",
    "updatedAt": "2023-11-01T11:00:00Z"
  }
]

##### GET /products/{id} - Retrieve a single product

Retrieves the details of a specific product by its unique identifier.

Parameters:

| Name | Type | In | Description | Required |

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

| id | string | Path | The unique ID of the product. | Yes |

Example Request:


curl -X GET \
  'https://api.example.com/v1/products/prod_a1b2c3d4' \
  -H 'Accept: application/json' \
  -H 'X-API-Key: YOUR_API_KEY_HERE'

Example Success Response (Status: 200 OK):


{
  "id": "prod_a1b2c3d4",
  "sku": "ELC-TV-001",
  "name": "Smart LED TV 55 inch",
  "description": "4K Ultra HD Smart TV with HDR.",
  "price": 799.99,
  "currency": "USD",
  "stock": 50,
  "category": "Electronics",
  "imageUrl": "https://example.com/images/tv.jpg",
  "createdAt": "2023-01-15T10:00:00Z",
  "updatedAt": "2023-10-20T14:30:00Z"
}

Example Error Response (Status: 404 Not Found):


{
  "error": "Product with ID 'prod_invalid_id' not found."
}

##### POST /products - Create a new product

Creates a new product in the system.

Parameters:

| Name | Type | In | Description | Required |

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

| Body | object | Body | Product data to be created. See Product Object Structure. | Yes |

Request Body Schema:

  • sku (string, required): Unique Stock Keeping Unit.
  • name (string, required): Product name.
  • description (string, optional): Product description.
  • price (number, required): Product price. Must be positive.
  • currency (string, required): Currency code (e.g., "USD").
  • stock (integer, required): Initial stock level. Must be non-negative.
  • category (string, optional): Product category.
  • imageUrl (string, optional): URL to product image.

Example Request:


curl -X POST \
  'https://api.example.com/v1/products' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-Key: YOUR_API_KEY_HERE' \
  -d '{
        "sku": "BKS-NOV-003",
        "name": "The Great Novel",
        "description": "A thrilling adventure story.",
        "price": 19.99,
        "currency": "USD",
        "stock": 200,
        "category": "Books",
        "imageUrl": "https://example.com/images/great-novel.jpg"
      }'

Example Success Response (Status: 201 Created):


{
  "id": "prod_f9g0h1i2",
  "sku": "BKS-NOV-003",
  "name": "The Great Novel",
  "description": "A thrilling adventure story.",
  "price": 19.99,
  "currency": "USD",
  "stock": 200,
  "category": "Books",
  "imageUrl": "https://example.com/images/great-novel.jpg",
  "createdAt": "2023-12-01T15:00:00Z",
  "updatedAt": "2023-12-01T15:00:00Z"
}

Example Error Response (Status: 400 Bad Request):


{
  "error": "Validation failed: 'name' is required, 'price' must be positive."
}

Example Error Response (Status: 409 Conflict):


{
  "error": "Product with SKU 'BKS-NOV-003' already exists."
}

##### PUT /products/{id} - Update an existing product

Updates an existing product identified

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