Full Stack App Blueprint
Run ID: 69cb5b7361b1021a29a884e12026-03-31Development
PantheraHive BOS
BOS Dashboard

Full Stack Application Blueprint: Detailed Deliverable

This document provides a comprehensive and detailed blueprint for a robust, scalable, and maintainable full-stack application. It covers the core components, technology choices, architectural patterns, and strategic considerations for frontend, backend, database, authentication, deployment, and testing, complete with actionable code examples.


1. Introduction

This blueprint serves as a foundational guide for developing a modern full-stack application. It outlines a professional, production-ready architecture using industry-standard technologies and best practices. The goal is to provide a clear roadmap for your development team, ensuring consistency, scalability, and maintainability from inception to deployment.

Key Deliverables in this Blueprint:


2. Overall Architecture

The proposed architecture adopts a decoupled, microservices-oriented (or modular monolithic) approach, separating the frontend client from the backend API. This allows for independent development, scaling, and technology choices for each layer.

text • 702 chars
---

### 3. Frontend Blueprint

The frontend will be a dynamic and responsive Single Page Application (SPA), providing a rich user experience.

#### 3.1. Technology Stack

*   **Framework:** React.js (with TypeScript)
*   **Build Tool:** Vite
*   **State Management:** React Context API + TanStack Query (for server state) / Zustand (for client state)
*   **Routing:** React Router DOM
*   **Styling:** Tailwind CSS (utility-first CSS framework)
*   **Form Management:** React Hook Form (with Zod for validation)
*   **HTTP Client:** Axios (or native `fetch` wrapped)

#### 3.2. Core Components Structure

Components will be organized by feature or domain, promoting reusability and maintainability.

Sandboxed live preview

Full Stack Application Blueprint: Architectural Plan

Project Title: [Placeholder for Specific Application Name, e.g., "Customer Relationship Management (CRM) Platform"]

Date: October 26, 2023

Prepared For: [Customer Name/Organization]


1. Project Overview & Core Requirements

This blueprint outlines the architectural design for a robust, scalable, and maintainable full-stack application. The goal is to provide a comprehensive technical foundation, enabling efficient development and future expansion.

Core Application Purpose: [Example: To streamline customer interactions, manage sales pipelines, and provide analytical insights for businesses.]

Key Features (Example):

  • User Authentication & Authorization (Admin, Sales Rep, Customer roles)
  • Dashboard for real-time data visualization
  • Customer Profile Management (CRUD operations)
  • Sales Pipeline & Opportunity Tracking
  • Task & Activity Management
  • Reporting & Analytics
  • Notification System

Non-Functional Requirements:

  • Scalability: Ability to handle increasing user load and data volume.
  • Performance: Fast response times (under 2 seconds for critical operations).
  • Security: Robust protection against common web vulnerabilities.
  • Maintainability: Clean, modular code for easy updates and bug fixes.
  • Reliability: High availability and fault tolerance.
  • User Experience: Intuitive and responsive interface.

2. Architectural Style: Layered Monolith with Service-Oriented Principles

Justification:

A Layered Monolith provides a balanced approach for initial development velocity and manageability, especially for projects with a clear domain boundary. It simplifies deployment and testing compared to distributed microservices. To ensure future flexibility and scalability, we will adopt Service-Oriented Principles within the monolith, structuring the codebase into distinct, loosely coupled modules (e.g., User Service, Customer Service, Sales Service). This approach facilitates eventual extraction into microservices if specific parts of the application require independent scaling or technology stacks in the future, without the initial overhead.

Key Layers:

  • Presentation Layer (Frontend): Handles user interface and user interaction logic.
  • Application Layer (Backend API): Exposes business logic via APIs, orchestrates operations across domain services.
  • Domain Layer (Business Logic): Encapsulates core business rules and entities, independent of data persistence.
  • Infrastructure Layer (Data & External Services): Manages database interactions, external API calls, caching, logging, etc.

3. Frontend Architecture

3.1. Framework/Library Choice:

  • Technology: React.js
  • Justification: Component-based architecture, large community support, rich ecosystem, excellent performance for dynamic UIs, strong job market for developers.

3.2. State Management:

  • Technology: React Query (for server state) & Zustand/Redux Toolkit (for global client state if needed, but prefer React Query for server data).
  • Justification: React Query excels at fetching, caching, synchronizing, and updating server data, reducing the need for complex client-side state management for server-derived data. Zustand/Redux Toolkit provides a lightweight and performant solution for managing truly global client-side state (e.g., UI themes, user preferences not stored on the server).

3.3. UI Component Library:

  • Technology: Chakra UI or Material-UI (MUI)
  • Justification: Provides a comprehensive set of accessible, customizable, and production-ready UI components, accelerating development and ensuring a consistent user experience. Both offer excellent theming capabilities.

3.4. Build Tools:

  • Technology: Vite (for development) & Rollup (underlying bundler for production)
  • Justification: Vite offers extremely fast hot module reloading (HMR) during development and optimized builds for production, leading to better developer experience and faster build times.

3.5. Deployment Strategy:

  • Method: Static Site Hosting with CDN
  • Provider: AWS S3 + CloudFront, Vercel, or Netlify
  • Justification: Frontend assets (HTML, CSS, JS, images) are static and can be served efficiently from a Content Delivery Network (CDN), ensuring low latency and high availability globally.

4. Backend Architecture

4.1. Programming Language/Framework Choice:

  • Technology: Node.js with Express.js
  • Justification: JavaScript end-to-end development, non-blocking I/O for high concurrency, large ecosystem (NPM), suitable for RESTful APIs. Express.js is a lightweight, flexible framework.

4.2. API Style:

  • Method: RESTful API
  • Justification: Widely adopted, stateless, cacheable, and easily consumed by various clients. Clear resource-based endpoints and standard HTTP methods.
  • API Specification: OpenAPI (Swagger) for documentation and client generation.

4.3. Database Integration:

  • Technology: TypeORM or Sequelize (for SQL databases)
  • Justification: Object-Relational Mapper (ORM) simplifies database interactions, provides type safety (with TypeScript), handles schema migrations, and abstracts away raw SQL queries, improving developer productivity and reducing errors.

4.4. Authentication & Authorization Strategy:

  • Authentication: JSON Web Tokens (JWT)

* Method: Users authenticate once, receive a JWT, and send it with subsequent requests. Token expiration and refresh token mechanisms will be implemented.

  • Authorization: Role-Based Access Control (RBAC)

* Method: Define roles (e.g., Admin, Sales Rep, Customer) and assign specific permissions to each role. Middleware will intercept requests and verify user's role/permissions against the required access level for the requested resource/action.

4.5. Logging & Monitoring:

  • Logging: Winston (Node.js) for structured logging.
  • Monitoring: Prometheus & Grafana (for metrics and dashboards), ELK Stack (Elasticsearch, Logstash, Kibana) or AWS CloudWatch/CloudTrail (for centralized log aggregation and analysis).
  • Justification: Essential for debugging, performance analysis, security auditing, and proactive issue detection.

4.6. Deployment Strategy:

  • Method: Containerization with Docker, orchestrated by Kubernetes (or AWS ECS for simpler deployments).
  • Provider: AWS EC2 instances managed by Kubernetes (EKS) or AWS Fargate (serverless containers).
  • Justification: Docker ensures consistent environments across development, testing, and production. Kubernetes provides robust orchestration for scaling, self-healing, load balancing, and automated deployments. Fargate offers a serverless container experience, reducing operational overhead.

5. Database Design

5.1. Type:

  • Technology: Relational Database
  • Specific Choice: PostgreSQL
  • Justification: ACID compliance, strong data integrity, robust transactional support, extensive feature set, excellent community support, well-suited for complex relationships and analytical queries common in CRM-like applications.

5.2. Schema Design Principles:

  • Normalization: Aim for 3NF to minimize data redundancy and improve integrity.
  • Indexes: Create appropriate indexes on frequently queried columns (e.g., foreign keys, user IDs, search fields) to optimize query performance.
  • Relationships: Define clear foreign key constraints to enforce referential integrity.
  • Data Types: Use appropriate data types for each column (e.g., UUID for primary keys, TEXT for long strings, TIMESTAMP WITH TIME ZONE for dates).
  • Example Tables (Conceptual):

* Users: id (PK), email (UNIQUE), password_hash, first_name, last_name, role_id (FK), created_at, updated_at

* Roles: id (PK), name (UNIQUE), description

* Customers: id (PK), user_id (FK, if customer is also a user), company_name, contact_person, email, phone, address, industry, created_at, updated_at

* Opportunities: id (PK), customer_id (FK), sales_rep_id (FK), name, stage, amount, close_date, created_at, updated_at

* Activities: id (PK), opportunity_id (FK), user_id (FK), type, description, due_date, status, created_at, updated_at

5.3. Migration Strategy:

  • Tool: TypeORM Migrations or Sequelize Migrations
  • Method: Database schema changes will be managed through version-controlled migration files. These migrations will be automatically applied during deployment, ensuring database schema consistency across environments.

6. Authentication & Authorization Details

6.1. Authentication Flow (JWT):

  1. Login: User sends credentials (username/password) to /api/auth/login.
  2. Verification: Backend validates credentials.
  3. Token Generation: If valid, backend generates an access_token (short-lived) and a refresh_token (long-lived).
  4. Response: Backend sends access_token and refresh_token to the client. The access_token is stored in memory or secure HTTP-only cookie, refresh_token in HTTP-only cookie.
  5. Subsequent Requests: Client includes access_token in Authorization: Bearer <token> header for all protected API calls.
  6. Token Refresh: When access_token expires, client uses refresh_token to request a new access_token from /api/auth/refresh.

6.2. Authorization (RBAC Implementation):

  1. Role Assignment: Each user is assigned one or more roles (e.g., Admin, Sales Rep, Customer).
  2. Permission Mapping: Define a mapping of roles to permissions (e.g., Admin can create_user, delete_customer; Sales Rep can view_customer, update_opportunity).
  3. Middleware: A backend middleware function will intercept API requests.
  4. Verification: The middleware extracts the user's role from the JWT payload and checks if that role has the necessary permission to access the requested endpoint or perform the action.
  5. Access Control: If authorized, the request proceeds; otherwise, a 403 Forbidden error is returned.

6.3. External Providers (Optional):

  • Integration: OAuth2 with Google/Microsoft for Single Sign-On (SSO).
  • Justification: Enhances user convenience and security by leveraging trusted identity providers.

7. Deployment Strategy

7.1. Cloud Provider Choice:

  • Provider: Amazon Web Services (AWS)
  • Justification: Comprehensive suite of services, high scalability, global reach, robust security features, and extensive documentation.

7.2. CI/CD Pipeline:

  • Tool: GitHub Actions or GitLab CI
  • Stages:

1. Code Commit: Developer pushes code to Git repository.

2. Build:

* Frontend: npm install, npm run build (creates static assets).

* Backend: npm install, runs ESLint, TypeScript compilation.

* Docker: Build Docker images for backend service.

3. Test: Run unit, integration, and end-to-end tests.

4. Deploy (Staging):

* Frontend: Upload static assets to S3 and invalidate CloudFront cache.

* Backend: Push Docker images to ECR (Elastic Container Registry). Deploy new image to a staging Kubernetes cluster (EKS) or Fargate service.

5. Manual Approval: For production deployment.

6. Deploy (Production):

* Frontend: Upload static assets to S3 and invalidate CloudFront cache.

* Backend: Deploy new image to production Kubernetes cluster (EKS) or Fargate service with rolling updates.

7.3. Containerization:

  • Tool: Docker
  • Method: Both frontend (as a static asset server during development, or bundled for static hosting) and backend services will be containerized. Dockerfiles will define the build environment and runtime configuration.

7.4. Orchestration:

  • Tool: AWS Elastic Kubernetes Service (EKS) or AWS Fargate
  • Justification: EKS provides a managed Kubernetes control plane, simplifying cluster management while offering full Kubernetes capabilities. Fargate offers a serverless compute engine for containers, abstracting away server management entirely. Choice depends on operational overhead tolerance and specific Kubernetes feature requirements.

7.5. Infrastructure as Code (IaC):

  • Tool: Terraform
  • Justification: Define and provision all cloud infrastructure (VPCs, subnets, databases, load balancers, EKS clusters, S3 buckets, etc.) using code. This ensures consistency, repeatability, and version control of the infrastructure.

8. Testing Strategy

8.1. Unit Tests:

  • Scope: Individual functions, components, or small modules.
  • Frontend: Jest & React Testing Library
  • Backend: Jest or Mocha/Chai
  • Goal: Verify correctness of isolated logic.

8.2. Integration Tests:

  • Scope: Interaction between different modules/components or between the application and external services (e.g., database, API calls).
  • Frontend: Testing component interactions with global state or API mocks.
  • Backend: Testing API endpoints, database interactions, service layer logic.
  • Tool: Supertest (for API testing), Jest/Mocha.
  • Goal: Ensure different parts of the system work together as expected.

8.3. End-to-End (E2E) Tests:

  • Scope: Simulate real user scenarios across the entire application stack (browser to database).
  • Tool: Cypress or Playwright
  • Goal: Validate critical user flows and overall system functionality from a user's perspective. Run on a dedicated staging environment.

8.4. Performance/Load Tests:

  • Scope: Measure application responsiveness and stability under various load conditions.
  • Tool: JMeter, k6, or Artillery.io
  • Goal: Identify performance bottlenecks and ensure the system meets NFRs for response times and throughput.

8.5. Security Tests:

  • Scope: Identify vulnerabilities in the application and infrastructure.
  • Methods:

* Static Application Security Testing (SAST): Analyze source code for common vulnerabilities (e.g., SonarQube).

* Dynamic Application Security Testing (DAST): Test the running application for vulnerabilities (e.g., OWASP ZAP, Burp Suite).

* Penetration Testing: Ethical hacking to uncover exploitable flaws (performed by security specialists).

  • Goal: Ensure the application is resilient against common attacks (OWASP Top 10).

9. Key Technologies Stack Summary

  • Frontend: React.js, React Query, Chakra UI/MUI, Vite
  • Backend: Node.js, Express.js, TypeScript, TypeORM
  • Database: PostgreSQL
  • Authentication: JWT, RBAC

4. Backend API Blueprint

The backend will expose a RESTful API, handling data persistence, business logic, and interactions with external services.

4.1. Technology Stack

  • Framework: Node.js (Express.js or NestJS for larger applications)
  • Language: TypeScript
  • ORM: TypeORM or Prisma (for database interaction)
  • Validation: Zod (or class-validator if using NestJS)
  • Authentication: jsonwebtoken (for JWT), bcryptjs (for password hashing)
  • Logging: Winston or Pino
  • Environment Variables: dotenv

4.2. API Endpoints Design (RESTful Principles)

Endpoints will be designed following RESTful conventions, using clear resource names and HTTP verbs.

Example Resource: /users

| Method | Endpoint | Description | Request Body (Example) | Response Body (Example) | Status |

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

| GET | /api/users | Get all users (with optional pagination/filters) | (None) | [{ id: '...', name: '...', email: '...' }] | 200 |

| GET | /api/users/:id | Get a specific user by ID | (None) | { id: '...', name: '...', email: '...' } | 200 |

| POST | /api/users | Create a new user | { name: '...', email: '...', password: '...' } | { id: '...', name: '...', email: '...' } | 201 |

| PUT | /api/users/:id | Update an existing user by ID (full replacement) | { name: '...', email: '...' } | { id: '...', name: '...', email: '...' } | 200 |

| PATCH| /api/users/:id | Partially update an existing user by ID | { email: 'new@example.com' } | { id: '...', name: '...', email: 'new@example.com' }| 200 |

| DELETE| /api/users/:id| Delete a user by ID | (None) | { message: 'User deleted successfully' } |

gemini Output

This document provides a comprehensive Full Stack Application Blueprint, detailing the architecture, components, and configurations required to build a robust and scalable application. This blueprint is designed to be a ready-to-build guide, covering frontend, backend, database, authentication, deployment, and testing aspects.


Full Stack Application Blueprint: PantheraConnect

1. Application Overview

Application Name: PantheraConnect

Purpose: A collaborative project management platform designed to streamline team workflows, task tracking, and communication for distributed teams.

Key Features:

  • User Authentication & Profile Management
  • Project Creation & Management
  • Task Assignment & Tracking (with status, priority, due dates)
  • Real-time Notifications
  • File Attachment & Sharing
  • Team Collaboration (comments, activity feed)
  • Dashboard for project overview

Target Audience: Small to medium-sized businesses, startups, and remote teams.

Core Technologies (High-Level):

  • Frontend: React.js, TypeScript, Tailwind CSS
  • Backend: Node.js (Express.js), TypeScript
  • Database: PostgreSQL
  • Authentication: JWT (JSON Web Tokens)
  • Deployment: Docker, AWS (ECS, RDS, S3)

2. Frontend Blueprint

Technology Stack:

  • Framework: React.js (v18+)
  • Language: TypeScript (v5+)
  • Styling: Tailwind CSS (v3+)
  • State Management: React Query (for server state), Zustand (for client state)
  • Routing: React Router DOM (v6+)
  • Build Tool: Vite (v4+)
  • UI Library (Optional, for complex components): Headless UI (for accessible components)

Component Architecture:

The frontend will follow a modular, component-driven architecture, separating concerns into:

  • Pages: Top-level components representing distinct routes (e.g., DashboardPage, ProjectDetailsPage, LoginPage).
  • Layouts: Components wrapping pages to provide consistent UI elements (e.g., AuthLayout, AppLayout with sidebar/navbar).
  • Features: Groupings of related components and logic for a specific feature (e.g., ProjectManagement, TaskManagement, UserAuth).
  • UI Components: Reusable, atomic components (e.g., Button, Input, Modal, Dropdown).
  • Hooks: Custom React Hooks for encapsulating reusable logic.

Key Components & Pages (Examples):

  • Authentication:

* LoginPage, RegisterPage, ForgotPasswordPage

* AuthForm (reusable component)

  • Dashboard:

* DashboardPage (overview of projects, tasks, activity)

* ProjectCard, TaskSummaryWidget, ActivityFeed

  • Project Management:

* ProjectListPage, ProjectDetailsPage, CreateProjectModal, EditProjectForm

* ProjectMembersList, ProjectSettingsPanel

  • Task Management:

* TaskBoard (Kanban-style board), TaskDetailsModal, CreateTaskForm, EditTaskForm

* TaskCard, TaskCommentSection

  • User Profile:

* UserProfilePage, EditProfileForm

  • Navigation:

* AppHeader, SidebarNavigation

Routing Strategy:

  • Public Routes: /login, /register, /forgot-password
  • Private/Protected Routes: /dashboard, /projects, /projects/:projectId, /tasks/:taskId, /profile
  • Nested Routes: For sub-features within a page (e.g., /projects/:projectId/settings).
  • Route Guards: Implemented using React Router's Outlet and custom components to protect private routes based on authentication status.

Styling & UI Framework:

  • Tailwind CSS: Utility-first CSS framework for rapid UI development and consistent styling.
  • Custom Theme: Configuration of Tailwind CSS to define a consistent color palette, typography, and spacing for the application.
  • Icon Library: React Icons or similar for common UI icons.

State Management:

  • Server State (Data Fetching): React Query will manage asynchronous data fetching, caching, and synchronization with the backend API.
  • Client State (UI State): Zustand will manage local, non-persistent UI state (e.g., modal open/close, form input values, sidebar visibility).
  • Context API: Used sparingly for global, static data (e.g., theme preferences).

3. Backend API Blueprint

Technology Stack:

  • Framework: Node.js (Express.js v4+)
  • Language: TypeScript (v5+)
  • ORM: TypeORM (v0.3+)
  • Database Driver: pg for PostgreSQL
  • Validation: Joi or Zod
  • Authentication: jsonwebtoken, bcrypt
  • Deployment: Docker

API Architecture:

  • RESTful API: Standardized endpoints, HTTP methods, and status codes.
  • Modular Structure: API routes, controllers, services, and repositories separated into logical modules (e.g., auth, users, projects, tasks, notifications).
  • Service Layer: Business logic encapsulated in service files, decoupled from controllers.
  • Repository Layer: Database interactions handled by TypeORM repositories, abstracted from services.

Key Endpoints (Examples):

| Module | HTTP Method | Endpoint | Description | Request Body (Example)

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