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

API Documentation: Unleashing the Power of the PantheraConnect API

Welcome to the comprehensive documentation for the PantheraConnect API – your gateway to seamlessly integrating and extending the powerful capabilities of the PantheraHive platform. This documentation is meticulously crafted to empower developers, system architects, and technical enthusiasts to effortlessly connect, build, and innovate with our robust API.

We believe that exceptional tools deserve exceptional documentation. Our goal is to provide you with clear, concise, and actionable information, ensuring a smooth development experience from your first API call to the deployment of your integrated solution.


Getting Started: Your First Steps with PantheraConnect

The PantheraConnect API is a RESTful interface designed for simplicity and scalability. Before you dive into specific endpoints, here's what you need to know to get up and running.

1. API Overview

The PantheraConnect API provides programmatic access to core PantheraHive functionalities, including user management, project orchestration, data retrieval, and workflow automation. It enables you to:

2. Authentication

All requests to the PantheraConnect API must be authenticated. We primarily support API Key Authentication for secure and straightforward access.

1. Log in to your PantheraHive account.

2. Navigate to Settings > API Access.

3. Generate a new API Key. Treat your API key like a password; do not share it publicly.

Include your API key in the Authorization header of every request, prefixed with Bearer.

Example Header:

text • 1,516 chars
#### 6. Rate Limiting

To ensure fair usage and system stability, the PantheraConnect API enforces rate limits.
*   **Default Limit:** 100 requests per minute per API key.
*   **Headers:** Look for the following headers in every response to monitor your rate limit status:
    *   `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 time (in UTC epoch seconds) when the current rate limit window resets.

If you exceed the rate limit, you will receive a `429 Too Many Requests` error.

---

### API Endpoints: Detailed Reference

This section provides a comprehensive reference for all available PantheraConnect API endpoints. Each endpoint description includes its purpose, HTTP method, URL path, parameters, and example requests/responses.

#### **Users Module**

##### 1. Get All Users

Retrieve a list of all users within your PantheraHive organization.

*   **Description:** Fetches an array of user objects, optionally filtered and paginated.
*   **HTTP Method:** `GET`
*   **URL Path:** `/users`

*   **Query Parameters:**
    *   `limit` (optional, integer): Maximum number of users to return. Default: `20`, Max: `100`.
    *   `offset` (optional, integer): Number of users to skip for pagination. Default: `0`.
    *   `role` (optional, string): Filter users by their role (e.g., `admin`, `member`, `viewer`).

*   **Example Request (cURL):**
    
Sandboxed live preview

Step 1 of 3: Research Topic - The API Documentation Writer

This deliverable provides a comprehensive research output defining the role, responsibilities, skills, tools, and best practices associated with an "API Documentation Writer." This foundational understanding is crucial for generating high-quality API documentation and forms the bedrock for the subsequent steps in this workflow.


1. Introduction to the API Documentation Writer

An API Documentation Writer is a specialized technical communicator focused on creating clear, accurate, and user-friendly documentation for Application Programming Interfaces (APIs). Their primary goal is to empower developers, system integrators, and other technical users to effectively understand, integrate, and utilize APIs. This role bridges the gap between complex technical functionality and practical application, ensuring a seamless developer experience.

2. Core Responsibilities of an API Documentation Writer

The responsibilities of an API Documentation Writer are multifaceted and extend beyond mere writing. They typically include:

  • Understanding APIs: Deeply comprehending the API's functionality, architecture, endpoints, request/response structures, authentication methods, and error handling. This often involves reading code, interacting with developers, and testing the API.
  • Audience Analysis: Identifying and understanding the target audience (e.g., front-end developers, back-end developers, mobile developers, data scientists) and tailoring content to their specific needs, technical proficiency, and use cases.
  • Content Creation:

* Writing clear and concise API reference documentation (endpoints, methods, parameters, data types, examples).

* Developing comprehensive API guides, tutorials, and getting started guides.

* Creating conceptual documentation explaining the API's purpose, design principles, and overarching architecture.

* Documenting authentication methods, error codes, rate limits, and security considerations.

* Crafting SDK documentation and integration examples.

  • Information Architecture: Structuring documentation logically, ensuring easy navigation and discoverability of information.
  • Tooling and Publishing: Utilizing various documentation tools (e.g., OpenAPI/Swagger, Markdown, static site generators) and publishing platforms.
  • Maintenance and Updates: Regularly reviewing and updating existing documentation to reflect API changes, new features, and user feedback.
  • Collaboration: Working closely with product managers, software engineers, QA testers, and other stakeholders to gather information and ensure accuracy.
  • Testing and Validation: Independently testing API endpoints or using provided sandbox environments to verify documentation accuracy and provide practical examples.
  • Feedback Integration: Soliciting and incorporating feedback from users and internal teams to continuously improve documentation quality and usability.

3. Essential Skills and Knowledge

To excel in this role, an API Documentation Writer requires a unique blend of technical, writing, and interpersonal skills:

3.1. Technical Skills

  • API Fundamentals: Strong understanding of RESTful principles, GraphQL, SOAP, webhooks, JSON, XML, HTTP methods, and status codes.
  • Programming Concepts: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, C#) to understand code examples and write simple scripts for testing.
  • Version Control: Proficiency with Git and GitHub/GitLab for managing documentation changes.
  • Command Line Interface (CLI): Ability to use basic CLI commands for interacting with APIs (e.g., curl).
  • Testing Tools: Experience with API testing tools like Postman, Insomnia, or cURL.
  • Documentation Standards: Knowledge of industry standards like OpenAPI Specification (OAS/Swagger), RAML, or API Blueprint.
  • Markup Languages: Expertise in Markdown, reStructuredText, or similar.

3.2. Writing and Communication Skills

  • Clarity and Conciseness: Ability to explain complex technical concepts in a simple, unambiguous, and direct manner.
  • Accuracy: Meticulous attention to detail to ensure technical correctness.
  • Audience Awareness: Tailoring tone, depth, and examples to the specific technical proficiency of the target audience.
  • Information Structuring: Organizing large volumes of information logically and accessibly.
  • Grammar and Style: Excellent command of English grammar, punctuation, and style guides.
  • Proactive Communication: Ability to ask probing questions to developers and stakeholders to extract necessary information.

3.3. Soft Skills

  • Problem-Solving: Identifying gaps in documentation or understanding and finding solutions.
  • Collaboration: Working effectively with cross-functional technical teams.
  • Empathy: Understanding the challenges developers face when integrating new APIs.
  • Autonomy: Ability to work independently and manage documentation projects.
  • Continuous Learning: Staying updated with new API technologies, documentation tools, and industry best practices.

4. Key Types of API Documentation

API documentation can be categorized into several types, each serving a distinct purpose:

  • Reference Documentation:

* Purpose: Provides a comprehensive, detailed list of all API endpoints, methods, parameters, request/response bodies, data types, authentication, and error codes.

* Examples: Automatically generated OpenAPI/Swagger UI, detailed API explorer.

  • Getting Started Guides/Tutorials:

* Purpose: Walks users through their first successful interaction with the API, often with step-by-step instructions and practical examples.

* Examples: "Hello World" examples, quickstart guides, basic integration walkthroughs.

  • Conceptual Documentation:

* Purpose: Explains the API's overall architecture, design philosophy, core concepts, use cases, and underlying business logic.

* Examples: Overview pages, architectural diagrams, explanations of key entities and relationships.

  • How-To Guides/Recipes:

* Purpose: Addresses specific tasks or common use cases, providing solutions to practical problems developers might encounter.

* Examples: "How to upload a file," "How to paginate results," "How to handle webhooks."

  • SDK Documentation:

* Purpose: Provides instructions and examples for using Software Development Kits (SDKs) that wrap the raw API calls in specific programming languages.

* Examples: Library function descriptions, installation instructions, code snippets for SDK usage.

  • Error Reference:

* Purpose: Details all possible error codes, their meanings, and potential solutions or troubleshooting steps.

* Examples: Table of HTTP status codes and custom error codes with descriptions.

5. Essential Tools and Technologies

An API Documentation Writer leverages a variety of tools:

  • API Specification Formats:

* OpenAPI Specification (OAS/Swagger): The dominant industry standard for defining RESTful APIs.

* RAML (RESTful API Modeling Language): Another popular specification language.

* API Blueprint: Markdown-based API description language.

  • Documentation Generators/Publishers:

* Swagger UI/Editor: Tools for visualizing and interacting with OpenAPI definitions.

* Stoplight Studio/Elements: Comprehensive API design and documentation platform.

* Postman: Can generate basic documentation from collections.

* Redocly: Creates beautiful, interactive API reference docs from OpenAPI.

* MkDocs, Docusaurus, Sphinx: Static site generators for general technical documentation, often used in conjunction with API-specific tools.

* ReadMe.io, DocuSign, Mintlify: Dedicated API documentation platforms.

  • Version Control Systems:

* Git: For tracking changes and collaboration.

* GitHub/GitLab/Bitbucket: Hosting and collaboration platforms.

  • API Testing Tools:

* Postman, Insomnia: For sending API requests and inspecting responses.

* cURL: Command-line tool for making HTTP requests.

  • Markup Editors:

* VS Code: Popular code editor with excellent Markdown support.

* Typora, Obsidian: Markdown-focused editors.

6. Best Practices for API Documentation

Effective API documentation adheres to several key principles:

  • Accuracy: The documentation must precisely reflect the API's current behavior.
  • Clarity and Conciseness: Use simple language, avoid jargon where possible, and get straight to the point.
  • Consistency: Maintain consistent terminology, formatting, and structure throughout the documentation.
  • Completeness: Cover all essential aspects of the API, including edge cases and error handling.
  • Discoverability: Ensure information is easy to find through clear navigation, search functionality, and logical organization.
  • Usability: Provide practical examples, code snippets in multiple languages, and interactive elements where possible.
  • Audience-Centric: Write for the intended audience, addressing their pain points and use cases.
  • Version Control: Clearly indicate the API version to which the documentation applies.
  • Feedback Mechanism: Offer a way for users to provide feedback and report issues.
  • Regular Updates: Keep documentation current with API changes and new features.

This comprehensive research on the "API Documentation Writer" provides a solid foundation for understanding the scope, requirements, and best practices involved in creating effective API documentation. This knowledge will directly inform the subsequent steps of outlining, drafting, and refining the API documentation deliverables.


SDKs & Libraries

To further streamline your development, we offer official and community-contributed SDKs (Software Development Kits) for popular programming languages. These SDKs handle authentication, error parsing, and provide convenient wrappers for all API endpoints.

  • Python SDK: pip install pantheraconnect-python
  • Node.js Library: npm install @pantherahive/connect-js
  • Go Module: go get github.com/pantherahive/connect-go

Check our [GitHub repository](https://github.com/pantherahive/connect-sdks) for the latest versions and community contributions.


Support & Feedback

We're here to help you succeed! If you encounter any issues, have questions, or want to provide feedback, please reach out through our dedicated channels:

  • Documentation Feedback: Spotted an error or have a suggestion for improvement? Use the "Feedback" button at the top right of this page.
  • Technical Support: For integration issues or bug reports, please submit a ticket via our [Support Portal](https://support.pantherahive.com).
  • Community Forum: Engage with other developers, share best practices, and find solutions in our [Developer Community Forum](https://community.pantherahive.com/developers).

Versioning

The PantheraConnect API uses a strict versioning scheme to ensure backward compatibility and clear communication of changes. The current version is v1.

  • Major Versions: Indicated by the number in the base URL (e.g., v1, v2). Major versions may introduce breaking changes and will be announced with ample deprecation notice.
  • Minor Changes: Non-breaking changes (e.g., adding new endpoints, new optional parameters, new fields in responses) are introduced within the current major version without altering the base URL.

Always refer to the latest version of this documentation for the most up-to-date information.


Glossary

  • API Key: A unique, secret token used to authenticate your application with the PantheraConnect API.
  • Endpoint: A specific URL that represents a particular resource or function within the API.
  • HTTP Method: An action to be performed on a resource (e.g., GET to retrieve, POST to create, PUT to update, DELETE to remove).
  • JSON (JavaScript Object Notation): A lightweight data-interchange format used for sending and receiving data with the API.
  • Pagination: A mechanism to divide a large set of results into smaller, manageable chunks.
  • Rate Limiting: A control mechanism that limits the number of API requests an application can make within a given timeframe.
  • RESTful API: An API that conforms to the principles of REST (Representational State Transfer), focusing on stateless client-server communication.
  • SDK (Software Development Kit): A set of tools, libraries, and documentation that helps developers build applications for a specific platform or API.

Ready to Build? Start Integrating Today!

The PantheraConnect API unlocks a world of possibilities for automating workflows, extending functionality, and creating powerful custom solutions. Dive into our endpoints, experiment with your API key, and transform the way you interact with PantheraHive.

[Explore All Endpoints Now](https://api.pantherahive.com/docs/endpoints)

[Get Your API Key](https://app.pantherahive.com/settings/api-access)

We're excited to see what you'll create!

gemini Output

API Documentation: PantheraProducts API

Document Version: 1.0.0

Date: October 26, 2023


1. Introduction

Welcome to the PantheraProducts API documentation! This API provides a robust and flexible interface for managing product data within the Panthera ecosystem. It allows developers to programmatically retrieve, create, update, and delete product information, enabling seamless integration with various applications, e-commerce platforms, and internal systems.

Key Features:

  • Comprehensive Product Management: Full CRUD (Create, Read, Update, Delete) operations for products.
  • Detailed Product Attributes: Support for various product attributes including name, description, price, category, stock, and more.
  • Secure Access: All API access requires authentication using API keys.
  • RESTful Design: Predictable, resource-oriented URLs and standard HTTP response codes for easy integration.
  • JSON-based Communication: Requests and responses are formatted in JSON for universal compatibility.

Target Audience:

This documentation is intended for developers, system integrators, and technical users who wish to interact with the PantheraProducts API. A basic understanding of RESTful APIs, HTTP protocols, and JSON is recommended.

Versioning:

This document describes Version 1.0.0 of the PantheraProducts API. Future versions may introduce new features, improvements, or breaking changes. We recommend monitoring our developer portal for updates and deprecation notices.


2. Getting Started

This section will guide you through the initial steps to interact with the PantheraProducts API.

2.1 Base URL

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

https://api.pantherahive.com/v1/products

2.2 Authentication

Access to the PantheraProducts API is secured using API Keys. You must include your API Key in the Authorization header of every request.

Header Format:

Authorization: Bearer YOUR_API_KEY

Replace YOUR_API_KEY with the actual API key provided to you by PantheraHive. If you do not have an API Key, please contact our support team.

2.3 Making Your First Request

Let's make a simple request to retrieve all products.

Example (cURL):


curl -X GET \
  https://api.pantherahive.com/v1/products \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Expected Successful Response (Status: 200 OK):


[
  {
    "id": "prod_001",
    "name": "Panthera Ultra Laptop",
    "description": "Powerful laptop for professionals.",
    "price": 1200.00,
    "category": "Electronics",
    "stock": 50,
    "createdAt": "2023-10-25T10:00:00Z",
    "updatedAt": "2023-10-25T10:00:00Z"
  },
  {
    "id": "prod_002",
    "name": "Panthera Wireless Mouse",
    "description": "Ergonomic wireless mouse.",
    "price": 25.99,
    "category": "Accessories",
    "stock": 200,
    "createdAt": "2023-10-25T10:05:00Z",
    "updatedAt": "2023-10-25T10:05:00Z"
  }
]

3. API Endpoints

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

3.1 Get All Products

Retrieves a list of all products.

  • Endpoint: /
  • Method: GET
  • Description: Returns an array of product objects. Supports pagination and filtering.

Request Headers:

  • Authorization: Bearer YOUR_API_KEY (Required)
  • Accept: application/json (Recommended)

Query Parameters:

  • limit (Optional, Integer): Maximum number of products to return. Default: 100. Max: 500.
  • offset (Optional, Integer): Number of products to skip for pagination. Default: 0.
  • category (Optional, String): Filter products by category.
  • min_price (Optional, Decimal): Filter products with a price greater than or equal to this value.
  • max_price (Optional, Decimal): Filter products with a price less than or equal to this value.
  • search (Optional, String): Search products by name or description (case-insensitive).

Successful Response (Status: 200 OK):

Array of Product objects. See 2.3 Making Your First Request for an example.

Product Object Schema:


{
  "type": "object",
  "properties": {
    "id": { "type": "string", "description": "Unique identifier for the product." },
    "name": { "type": "string", "description": "Name of the product." },
    "description": { "type": "string", "description": "Detailed description of the product." },
    "price": { "type": "number", "format": "float", "description": "Current price of the product." },
    "category": { "type": "string", "description": "Category the product belongs to." },
    "stock": { "type": "integer", "description": "Current stock level of the product." },
    "imageUrl": { "type": "string", "format": "uri", "description": "URL to the product's main image." },
    "createdAt": { "type": "string", "format": "date-time", "description": "Timestamp when the product was created." },
    "updatedAt": { "type": "string", "format": "date-time", "description": "Timestamp when the product was last updated." }
  },
  "required": ["id", "name", "description", "price", "category", "stock", "createdAt", "updatedAt"]
}

3.2 Get Product by ID

Retrieves details for a specific product by its unique ID.

  • Endpoint: /{productId}
  • Method: GET
  • Description: Returns a single product object if found.

Path Parameters:

  • productId (Required, String): The unique ID of the product.

Request Headers:

  • Authorization: Bearer YOUR_API_KEY (Required)
  • Accept: application/json (Recommended)

Successful Response (Status: 200 OK):

A single Product object.

Example Response:


{
  "id": "prod_001",
  "name": "Panthera Ultra Laptop",
  "description": "Powerful laptop for professionals.",
  "price": 1200.00,
  "category": "Electronics",
  "stock": 50,
  "imageUrl": "https://cdn.pantherahive.com/images/prod_001.jpg",
  "createdAt": "2023-10-25T10:00:00Z",
  "updatedAt": "2023-10-25T10:00:00Z"
}

Error Responses:

  • 404 Not Found: If no product with the given productId exists.

3.3 Create New Product

Creates a new product in the system.

  • Endpoint: /
  • Method: POST
  • Description: Adds a new product. The id will be automatically generated.

Request Headers:

  • Authorization: Bearer YOUR_API_KEY (Required)
  • Content-Type: application/json (Required)
  • Accept: application/json (Recommended)

Request Body (JSON):


{
  "type": "object",
  "properties": {
    "name": { "type": "string", "description": "Name of the product.", "minLength": 1 },
    "description": { "type": "string", "description": "Detailed description of the product." },
    "price": { "type": "number", "format": "float", "description": "Current price of the product.", "minimum": 0.01 },
    "category": { "type": "string", "description": "Category the product belongs to.", "minLength": 1 },
    "stock": { "type": "integer", "description": "Initial stock level of the product.", "minimum": 0 },
    "imageUrl": { "type": "string", "format": "uri", "description": "URL to the product's main image." }
  },
  "required": ["name", "description", "price", "category", "stock"]
}

Example Request Body:


{
  "name": "Panthera Smart Watch",
  "description": "Track your fitness and stay connected.",
  "price": 199.99,
  "category": "Wearables",
  "stock": 150,
  "imageUrl": "https://cdn.pantherahive.com/images/smart_watch.jpg"
}

Successful Response (Status: 201 Created):

Returns the newly created Product object, including its generated id and timestamps.

Example Response:


{
  "id": "prod_003",
  "name": "Panthera Smart Watch",
  "description": "Track your fitness and stay connected.",
  "price": 199.99,
  "category": "Wearables",
  "stock": 150,
  "imageUrl": "https://cdn.pantherahive.com/images/smart_watch.jpg",
  "createdAt": "2023-10-26T14:30:00Z",
  "updatedAt": "2023-10-26T14:30:00Z"
}

Error Responses:

  • 400 Bad Request: If the request body is invalid or missing required fields.

3.4 Update Product

Updates an existing product's details.

  • Endpoint: /{productId}
  • Method: PUT
  • Description: Replaces all updatable fields for a product identified by productId. All fields in the request body are required, even if unchanged. For partial updates, use PATCH.

Path Parameters:

  • productId (Required, String): The unique ID of the product to update.

Request Headers:

  • Authorization: Bearer YOUR_API_KEY (Required)
  • Content-Type: application/json (Required)
  • Accept: application/json (Recommended)

Request Body (JSON):

Same schema as 3.3 Create New Product, but all fields are required for a PUT operation.

Example Request Body:


{
  "name": "Panthera Ultra Laptop Pro",
  "description": "Next-gen powerful laptop for professionals.",
  "price": 1350.00,
  "category": "Electronics",
  "stock": 45,
  "imageUrl": "https://cdn.pantherahive.com/images/prod_001_v2.jpg"
}

Successful Response (Status: 200 OK):

Returns the updated Product object.

Example Response:


{
  "id": "prod_001",
  "name": "Panthera Ultra Laptop Pro",
  "description": "Next-gen powerful laptop for professionals.",
  "price": 1350.00,
  "category": "Electronics",
  "stock": 45,
  "imageUrl": "https://cdn.pantherahive.com/images/prod_001_v2.jpg",
  "createdAt": "2023-10-25T10:00:00Z",
  "updatedAt": "2023-10-26T15:00:00Z"
}

Error Responses:

  • 400 Bad Request: If the request body is invalid or missing required fields.
  • 404 Not Found: If no product with the given productId exists.

3.5 Partially Update Product

Performs a partial update on an existing product's details.

  • Endpoint: /{productId}
  • Method: PATCH
  • Description: Updates only the fields provided in the request body for a product identified by productId.

Path Parameters:

  • productId (Required, String): The unique ID of the product to update.

Request Headers:

  • Authorization: Bearer YOUR_API_KEY (Required)
  • Content-Type: application/json (Required)
  • Accept: application/json (Recommended)

Request Body (JSON):

Object containing only the fields to be updated. At least one field must be provided.

Example Request Body:


{
  "price": 1300.00,
  "stock": 40
}

Successful Response (Status: 200 OK):

Returns the partially updated Product object.

Example Response:


{
  "id": "prod_001",
  "name": "Panthera Ultra Laptop Pro",
  
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);}});}