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

API Documentation: Product Management API

Welcome to the comprehensive documentation for the Product Management API. This API provides a robust and intuitive way to manage your product catalog, enabling seamless integration with your applications and services. Whether you're building an e-commerce platform, an inventory management system, or a data analytics tool, our API offers the flexibility and power you need to interact with your product data efficiently.


Table of Contents

* [Product Object](#product-object)

* [Error Object](#error-object)

* [6.1. Get All Products](#61-get-all-products)

* [6.2. Get Product by ID](#62-get-product-by-id)

* [6.3. Create New Product](#63-create-new-product)

* [6.4. Update Product](#64-update-product)

* [6.5. Delete Product](#65-delete-product)


1. Introduction

The Product Management API allows you to perform standard CRUD (Create, Read, Update, Delete) operations on product resources. It's designed following RESTful principles, using standard HTTP methods and status codes, and communicating primarily through JSON payloads. This API is ideal for developers looking to programmatically manage product listings, inventory, and related attributes.

Key Features:


2. Authentication

Access to the Product Management API requires authentication. We currently support API Key authentication, which should be included in the Authorization header of every request.

Authentication Method: API Key

Header Name: Authorization

Header Value Format: Bearer YOUR_API_KEY

Example Request Header:

text • 1,976 chars
See the [Error Object](#error-object) section for the full schema.

---

### 5. Data Models

This section describes the structure of the JSON objects used in API requests and responses.

#### Product Object

Represents a single product in the catalog.

| Field       | Type      | Description                                                 | Required (Create) | Required (Update) |
| :---------- | :-------- | :---------------------------------------------------------- | :---------------- | :---------------- |
| `id`        | `string`  | **Unique identifier for the product.** (Auto-generated)     | No                | No                |
| `name`      | `string`  | **Name of the product.**                                    | Yes               | No                |
| `description` | `string`  | **Detailed description of the product.**                    | No                | No                |
| `price`     | `number`  | **Price of the product.** (e.g., `29.99`)                   | Yes               | No                |
| `currency`  | `string`  | **Currency of the price.** (e.g., `USD`, `EUR`)             | Yes               | No                |
| `sku`       | `string`  | **Stock Keeping Unit.** (Must be unique)                    | Yes               | No                |
| `quantity`  | `integer` | **Current stock quantity.**                                 | Yes               | No                |
| `category`  | `string`  | **Product category.** (e.g., `Electronics`, `Apparel`)      | No                | No                |
| `image_url` | `string`  | **URL to the product's main image.**                        | No                | No                |
| `created_at`| `string`  | **Timestamp when the product was created.** (ISO 8601)      | No                | No                |
| `updated_at`| `string`  | **Timestamp when the product was last updated.** (ISO 8601) | No                | No                |

**Example Product Object:**

Sandboxed live preview

As a professional AI assistant executing step 1 of the "API Documentation Writer" workflow, the following detailed research output has been generated based on the prompt "Generate detailed professional output for: API Documentation Writer". This output provides a comprehensive overview of the role, responsibilities, best practices, and tools associated with API Documentation Writing.


Research Output: The API Documentation Writer

This document outlines the core aspects of an API Documentation Writer's role, encompassing their responsibilities, essential skills, best practices, and the technical landscape they operate within. Effective API documentation is crucial for developer adoption, product success, and fostering a robust ecosystem around an API.

1. Introduction to API Documentation Writing

An API Documentation Writer is a specialized technical writer focused on creating clear, accurate, and user-friendly documentation for Application Programming Interfaces (APIs). Their primary goal is to empower developers to effectively understand, integrate, and utilize APIs with minimal friction. This role bridges the gap between complex technical systems and the end-users (other developers) who consume them, ensuring a smooth developer experience (DX).

2. Key Responsibilities of an API Documentation Writer

The role demands a blend of technical understanding, writing prowess, and user empathy. Key responsibilities include:

  • API Understanding: Deeply comprehending the functionality, architecture, and use cases of the APIs being documented, often by interacting directly with engineers and product managers.
  • Audience Analysis: Identifying the target audience (e.g., frontend developers, backend developers, data scientists, mobile developers) and tailoring content to their specific needs and technical proficiency.
  • Content Creation: Writing clear, concise, and comprehensive documentation, including API reference guides, tutorials, how-to guides, getting started guides, and troubleshooting sections.
  • Code Examples: Developing and maintaining accurate, runnable code examples in various programming languages to illustrate API usage.
  • Documentation Structure & Information Architecture: Designing intuitive navigation and logical organization for documentation portals, ensuring information is easily discoverable.
  • Collaboration: Working closely with software engineers, product managers, quality assurance testers, and UX designers to gather information, validate accuracy, and ensure alignment.
  • Maintenance & Updates: Regularly reviewing and updating existing documentation to reflect API changes, new features, and user feedback.
  • Tool Proficiency: Utilizing various documentation tools, specification formats (e.g., OpenAPI), and content management systems.
  • Feedback Integration: Establishing and responding to feedback channels to continuously improve documentation based on user input.
  • Advocacy for DX: Championing the developer experience within the product team, ensuring that documentation is considered a first-class product component.

3. Essential Skills for an API Documentation Writer

To excel in this role, an API Documentation Writer typically possesses:

  • Exceptional Technical Writing Skills: Ability to explain complex technical concepts clearly, concisely, and accurately.
  • Strong Understanding of Web Technologies: Familiarity with HTTP/HTTPS, RESTful principles, GraphQL, JSON, XML, authentication mechanisms (OAuth, API Keys), and common web protocols.
  • Programming Concepts: Basic understanding of at least one or more programming languages (e.g., Python, JavaScript, Java, Ruby, Go) to read code, write examples, and understand developer workflows.
  • Empathy for Developers: Ability to think like a developer, anticipate their questions, and understand their pain points.
  • Attention to Detail: Meticulousness in ensuring accuracy, consistency, and completeness across all documentation.
  • Information Architecture & UX Principles: Knowledge of how to structure content for optimal readability and navigation.
  • Version Control Systems: Proficiency with Git and platforms like GitHub, GitLab, or Bitbucket for managing documentation source code.
  • Communication & Interpersonal Skills: Ability to effectively communicate with technical and non-technical stakeholders.
  • Problem-Solving: Capability to independently research and resolve technical ambiguities.

4. Core Components of Effective API Documentation

Comprehensive API documentation typically includes:

  • Getting Started Guide:

* Quick overview of the API's purpose.

* Authentication instructions (API keys, OAuth setup).

* Prerequisites and installation steps (if applicable).

* First API call example.

  • API Reference:

* Endpoints: List of available API resources and their paths.

* HTTP Methods: Supported methods for each endpoint (GET, POST, PUT, DELETE, PATCH).

* Parameters: Detailed description of request parameters (path, query, header, body), including data types, validation rules, and examples.

* Request/Response Schemas: Clear definitions of request bodies and expected response structures (JSON, XML).

* Status Codes: Explanation of common HTTP status codes (2xx, 4xx, 5xx) and their meanings.

* Error Handling: Detailed explanations of error codes, messages, and troubleshooting steps.

* Code Examples: Snippets in multiple languages for making requests and parsing responses.

  • Tutorials & How-To Guides:

* Step-by-step instructions for common use cases and workflows.

* Practical examples demonstrating specific API features.

  • Authentication & Authorization:

* In-depth guide to security protocols and token management.

* Scope definitions and permission models.

  • Rate Limiting & Throttling:

* Policies and limits on API requests.

* Headers and best practices for handling limits.

  • SDKs & Libraries Documentation:

* Guides on using official or community-supported client libraries.

  • Changelog / Version History:

* Record of API updates, new features, deprecations, and breaking changes.

* Guidance on migrating between API versions.

  • Glossary:

* Definitions of API-specific terminology.

  • Support & Community:

* Information on how to get help, report bugs, or engage with the API community.

5. Best Practices for API Documentation

  • Audience-Centric Design: Always write with the developer in mind, using clear language and relevant examples.
  • Accuracy & Completeness: Ensure all information is technically correct and covers all aspects of the API.
  • Clarity & Conciseness: Avoid jargon where possible, and present information directly and efficiently.
  • Consistency: Maintain uniform terminology, formatting, and structure throughout the documentation.
  • Actionable Examples: Provide runnable code snippets in multiple popular languages that developers can copy and paste.
  • Interactivity: Implement "Try It Out" features (e.g., using Swagger UI) to allow developers to make live API calls directly from the documentation.
  • Searchability & Navigation: Implement robust search functionality and intuitive navigation to help users quickly find what they need.
  • Version Control: Clearly indicate API versions and provide documentation specific to each version.
  • Regular Updates: Establish a process for continuous documentation updates aligned with API development cycles.
  • Feedback Mechanisms: Provide clear channels for users to submit feedback, report errors, and suggest improvements.
  • Accessibility: Ensure documentation is accessible to users with disabilities.

6. Common Tools & Technologies

API Documentation Writers leverage a variety of tools:

  • API Specification Formats:

* OpenAPI Specification (OAS / Swagger): Industry standard for defining RESTful APIs in a machine-readable format.

* RAML (RESTful API Modeling Language): Another popular specification for designing and documenting RESTful APIs.

* API Blueprint: Markdown-based API description language.

  • Documentation Generators & Platforms:

* Swagger UI/Editor: Generates interactive documentation from OpenAPI specifications.

* Postman: Beyond testing, Postman can generate and host API documentation.

* ReadMe.io: A comprehensive platform for beautiful, interactive developer hubs.

* Stoplight: Tools for API design, documentation, and governance, including Studio and Prism.

* Docusaurus, GitBook, MkDocs, Sphinx: Static site generators often used for custom documentation sites.

* Slate: A static API documentation generator that's visually appealing.

  • Version Control Systems: Git (GitHub, GitLab, Bitbucket) for managing documentation source code.
  • Content Management Systems (CMS): Confluence, Notion, or custom solutions for managing documentation content.
  • Text Editors & IDEs: VS Code, Sublime Text, etc., for writing and editing content.
  • Testing Tools: Postman, Insomnia, cURL for validating API calls and examples.

7. Importance of API Documentation

High-quality API documentation is not just a nice-to-have; it is a critical component for:

  • Developer Adoption: Good documentation directly correlates with higher API adoption rates.
  • Reduced Support Costs: Clear documentation answers common questions, reducing the burden on support teams.
  • Faster Integration: Developers can integrate APIs more quickly and efficiently.
  • Ecosystem Growth: Encourages third-party developers to build applications and services on top of the API.
  • Brand Reputation: Reflects positively on the company's commitment to its developer community.
  • Internal Alignment: Serves as a single source of truth for internal teams (engineering, sales, marketing).

bash

curl -X PUT \

'https://api.yourdomain.com/v1/products/prod_789abc' \

-H 'Content-

gemini Output

Deliverable: Polished & Formatted API Documentation Structure

This document represents the polished and professionally formatted output for the "API Documentation Writer" workflow. It provides a comprehensive, well-structured template for API documentation, designed for clarity, usability, and maintainability. While the specific content for your API would have been generated in the preceding gemini step, this deliverable focuses on presenting that content in an optimal, customer-facing format.


1. Introduction & Purpose

This deliverable provides a robust, standardized framework for your API documentation. It's engineered to ensure developers can quickly understand, integrate, and utilize your API effectively. The structure is based on industry best practices, emphasizing clarity, practical examples, and easy navigation.

Key Objectives:

  • Clarity: Make complex concepts easy to grasp.
  • Usability: Enable developers to find information quickly.
  • Completeness: Cover all essential aspects of the API.
  • Consistency: Maintain a uniform style and structure throughout.
  • Actionability: Provide concrete examples for immediate implementation.

2. Core API Documentation Structure (Template)

Below is a detailed outline of a professional API documentation set. Each section includes a description of its purpose and examples of the type of content it would contain.


2.1. Overview / Getting Started

  • Purpose: Introduce the API, its core functionality, and guide new users through their initial setup.
  • Content:

* Welcome Message: Briefly describe what the API does and its primary benefits.

* Key Features: Highlight the main capabilities.

* Concepts: Define any fundamental terms or architectural patterns (e.g., RESTful principles, idempotency).

* Prerequisites: What developers need before starting (e.g., account registration, API key generation).

* Quickstart Guide: A minimal, end-to-end example to get a user making their first successful API call within minutes.


    # MyAwesomeAPI Documentation

    Welcome to the MyAwesomeAPI documentation! This API provides programmatic access to our powerful [brief description of service]. With MyAwesomeAPI, you can easily [list 2-3 key actions, e.g., manage user profiles, process payments, retrieve real-time data].

    ## Getting Started

    To begin using MyAwesomeAPI, you will need:
    1.  An active account on our [Platform Name] portal.
    2.  An API Key, generated from your developer dashboard.

    ### Quickstart Example: Fetching Resources

    Let's make your first API call! This example demonstrates how to retrieve a list of all available resources.

    **1. Obtain Your API Key:**
    Navigate to your [Developer Dashboard](link-to-dashboard) and generate a new API Key. Keep this key secure.

    **2. Make the Request:**
    Replace `YOUR_API_KEY` with your actual key.

curl -X GET "https://api.myawesomeapi.com/v1/resources" \

-H "Authorization: Bearer YOUR_API_KEY" \

-H "Content-Type: application/json"



    **3. Expected Response:**
    A successful response will return a JSON array of resources.

HTTP/1.1 200 OK

Content-Type: application/json

[

{

"id": "res_abc123",

"name": "Resource Alpha",

"status": "active"

},

{

"id": "res_def456",

"name": "Resource Beta",

"status": "inactive"

}

]



2.2. Authentication

  • Purpose: Explain how to authenticate requests to the API securely.
  • Content:

* Supported Methods: (e.g., API Keys, OAuth 2.0, JWT).

* API Key Authentication: How to obtain and use API keys (e.g., Authorization header, query parameter).

* OAuth 2.0 (if applicable): Detailed flow for different grant types (Authorization Code, Client Credentials, etc.), scope definitions, token refresh.

* Examples: Code snippets for various languages (curl, Python, Node.js, Ruby, etc.) demonstrating how to include authentication credentials in requests.


    ## Authentication

    All requests to MyAwesomeAPI must be authenticated using an API Key. Your API Key uniquely identifies your application and authorizes access to your resources.

    ### API Key Authentication

    Your API Key should be passed in the `Authorization` header of every request, using the `Bearer` scheme.

    **Header Format:** `Authorization: Bearer YOUR_API_KEY`

    **Example:**

curl -X GET "https://api.myawesomeapi.com/v1/users/me" \

-H "Authorization: Bearer sk_live_YOUR_API_KEY" \

-H "Content-Type: application/json"



    ### Sandbox vs. Production Keys

    *   **Sandbox Keys (e.g., `sk_test_...`):** Used for testing and development. These keys interact with our sandbox environment and do not affect live data.
    *   **Production Keys (e.g., `sk_live_...`):** Used for live applications. These keys interact with our production environment and manage real data.
    *   **Security:** Never expose your API keys in client-side code or public repositories. Treat them like passwords.

2.3. Error Handling

  • Purpose: Guide developers on how to interpret and handle errors returned by the API.
  • Content:

* Standard HTTP Status Codes: Explanation of common codes (2xx, 4xx, 5xx).

* Error Response Structure: Consistent JSON format for error messages.

* Specific Error Codes: A catalog of custom error codes (if any) with their meanings and suggested resolutions.

* Examples: How an error response looks.


    ## Error Handling

    MyAwesomeAPI uses standard HTTP status codes to indicate the success or failure of an API request. In cases of failure (4xx or 5xx status codes), the API will return a JSON object with additional details about the error.

    ### Error Response Structure

    All error responses will follow this consistent structure:

HTTP/1.1 400 Bad Request

Content-Type: application/json

{

"code": "invalid_parameter",

"message": "The 'name' parameter is required.",

"details": [

{

"field": "name",

"issue": "missing"

}

],

"trace_id": "err_abc123def456"

}



    *   `code` (string): A machine-readable error code.
    *   `message` (string): A human-readable description of the error.
    *   `details` (array, optional): A list of specific issues, often for validation errors.
    *   `trace_id` (string): A unique identifier for the error, useful for support requests.

    ### Common HTTP Status Codes

    *   **`200 OK`**: The request was successful.
    *   **`201 Created`**: A new resource was successfully created.
    *   **`204 No Content`**: The request was successful, but no content is returned (e.g., successful deletion).
    *   **`400 Bad Request`**: The request was malformed or invalid.
    *   **`401 Unauthorized`**: Authentication credentials were missing or invalid.
    *   **`403 Forbidden`**: The authenticated user does not have permission to access the resource.
    *   **`404 Not Found`**: The requested resource does not exist.
    *   **`429 Too Many Requests`**: Rate limit exceeded.
    *   **`500 Internal Server Error`**: An unexpected error occurred on the server.
    *   **`503 Service Unavailable`**: The server is temporarily unable to handle the request.

2.4. Rate Limiting

  • Purpose: Inform developers about API request limits and how to handle them.
  • Content:

* Policy: What are the limits (e.g., requests per second/minute/hour).

* Headers: HTTP headers returned with each request indicating current limits and remaining quota (e.g., X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset).

* Handling 429 Too Many Requests: Strategies for exponential backoff and retries.


    ## Rate Limiting

    To ensure fair usage and maintain API stability, MyAwesomeAPI enforces rate limits on all endpoints.

    ### Policy

    *   **Default Limit:** 100 requests per minute per API key.
    *   Higher limits may be available for enterprise plans.

    ### Rate Limit Headers

    The following headers are included in every API response to help you monitor your usage:

    *   `X-RateLimit-Limit`: The maximum number of requests allowed 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.

    ### Handling Rate Limit Exceeded (HTTP 429)

    If you exceed the rate limit, the API will return a `429 Too Many Requests` status code. You should implement an exponential backoff strategy when retrying requests to avoid immediately hitting the limit again.

    **Example Backoff Strategy:**
    1.  Wait 1 second, retry.
    2.  If still `429`, wait 2 seconds, retry.
    3.  If still `429`, wait 4 seconds, retry.
    4.  ... up to a maximum number of retries or total wait time.

2.5. Endpoints

  • Purpose: Detail each available API endpoint, including its method, URL, parameters, and examples. This is the core of the documentation.
  • Content:

* Grouped by Resource: Organize related endpoints together (e.g., "Users API", "Products API").

* For Each Endpoint:

* Method & URL: GET /v1/resources

* Description: What the endpoint does.

* Permissions/Scopes: Required authentication scopes.

* Parameters:

* Path Parameters: (e.g., id in /resources/{id}).

* Query Parameters: (e.g., limit, offset, sort).

* Header Parameters: (beyond authentication).

* Request Body Parameters: For POST, PUT, PATCH requests.

* For each parameter: Name, Type, Required/Optional, Description, Default Value, Example Value.

* Request Example: curl command, language-specific code.

* Response Example: JSON (or other format) for success (2xx) and common errors (4xx).

* Response Schema: Link to or embed the data model for the response.


    ## API Endpoints

    ### Users API

    The Users API allows you to manage user profiles and retrieve user-specific data.

    ---

    #### `GET /v1/users` - List All Users

    *   **Description:** Retrieves a paginated list of all users in your organization.
    *   **Permissions:** `users:read`

    **Query Parameters:**
    *   `limit` (integer, optional): Maximum number of users to return. Default: `20`. Max: `100`.
    *   `offset` (integer, optional): Number of users to skip before starting to collect the result set. Default: `0`.
    *   `status` (string, optional): Filter users by their status (e.g., `active`, `inactive`, `pending`).

    **Request Example:**

curl -X GET "https://api.myawesomeapi.com/v1/users?limit=10&status=active" \

-H "Authorization: Bearer YOUR_API_KEY"



    **Successful Response (HTTP 200 OK):**

{

"data": [

{

"id": "usr_789abc",

"email": "alice@example.com",

"name": "Alice Smith",

"status": "active",

"created_at": "2023-01-15T10:00:00Z"

},

{

"id": "usr_def012",

"email": "bob@example.com",

"name": "Bob Johnson",

"status": "active",

"created_at": "2023-01-16T11:30:00Z"

}

],

"meta": {

"total_count": 250,

"limit": 10,

"offset": 0,

"next_offset": 10

}

}



    **Error Response (HTTP 401 Unauthorized):**

{

"code": "authentication_required",

"message": "Missing or invalid authentication credentials."

}



    ---

    #### `POST /v1/users` - Create a New User

    *   **Description:** Creates a new user profile.
    *   **Permissions:** `users:write`

    **Request Body Parameters (application/json):**
    *   `email` (string, required): The user's email address. Must be unique.
    *   `name` (string, required): The user's full name.
    *   `password` (string, required): The user's password. Min 8 characters.
    *   `roles` (array of strings, optional): A list of roles to assign to the user (e.g., `admin
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);}});}