Caching System
Run ID: 69cbac7261b1021a29a8b3e72026-03-31Development
PantheraHive BOS
BOS Dashboard

Caching System: Comprehensive Study Plan

This document outlines a detailed and structured study plan designed to provide a thorough understanding of Caching Systems, from fundamental concepts to advanced architectural considerations and practical implementations. This plan is tailored for professionals seeking to deepen their expertise in system design, performance optimization, and distributed systems.


1. Introduction to the Study Plan

The goal of this study plan is to equip you with the knowledge and practical skills necessary to design, implement, and manage efficient and reliable caching solutions. Caching is a critical component in modern software architectures, enabling significant improvements in application performance, scalability, and user experience. This plan spans six weeks, covering theoretical foundations, popular technologies, best practices, and hands-on exercises.


2. Learning Objectives

Upon successful completion of this study plan, you will be able to:

  • Understand Core Concepts: Articulate the fundamental principles of caching, including its benefits, trade-offs, and various types.
  • Differentiate Cache Types: Identify and explain different levels of caching (CPU, OS, application, database, CDN) and their appropriate use cases.
  • Master Eviction Policies: Analyze and apply various cache eviction policies (e.g., LRU, LFU, FIFO) based on specific application requirements.
  • Ensure Data Consistency: Implement strategies for maintaining cache consistency and handling cache invalidation effectively.
  • Design Distributed Caches: Understand the challenges and solutions associated with distributed caching, including consistent hashing, replication, and partitioning.
  • Utilize Caching Technologies: Gain practical experience with popular caching systems like Redis and Memcached, including their features, data structures, and operational aspects.
  • Optimize Performance: Monitor, benchmark, and troubleshoot caching systems to identify performance bottlenecks and implement optimizations.
  • Address Security Concerns: Recognize and mitigate security risks associated with caching, such as data exposure and denial-of-service attacks.
  • Apply Caching in System Design: Integrate caching solutions into complex system architectures, considering scalability, reliability, and cost-effectiveness.
  • Implement Practical Solutions: Develop and integrate caching layers into sample applications, demonstrating a hands-on understanding of the concepts.

3. Weekly Schedule

This 6-week schedule provides a structured progression through the key aspects of caching systems. Each week includes theoretical learning, practical exercises, and recommended readings.


Week 1: Fundamentals of Caching & Local Caching

  • Learning Objectives:

* Define caching, its purpose, and core benefits/drawbacks.

* Understand the cache hierarchy (CPU, OS, application, database, web).

* Differentiate between various types of caches.

* Grasp key caching metrics: hit ratio, miss ratio, latency, throughput.

* Explore browser caching mechanisms (HTTP Cache-Control, ETag, Last-Modified).

* Implement basic in-memory caching within an application.

  • Topics:

* What is Caching? Why do we need it?

* Benefits (performance, reduced load) and Drawbacks (stale data, complexity).

* Cache Hierarchy and Levels.

* Types of Caches: In-memory, File-system, Database, Web, CDN.

* Cache Hit/Miss Ratio, Latency, Throughput explained.

* Browser Caching: HTTP Headers (Cache-Control, Expires, ETag, Last-Modified).

* Application-level In-memory Caches (e.g., Guava Cache, Caffeine concepts).

  • Practical Exercises:

* Analyze HTTP headers for caching in web browser developer tools.

* Write a simple program demonstrating in-memory caching with a basic map.

  • Estimated Time: 8-12 hours

Week 2: Cache Eviction Policies & Consistency

  • Learning Objectives:

* Understand various cache invalidation strategies (write-through, write-back, etc.).

* Identify and apply different cache eviction policies (LRU, LFU, FIFO).

* Recognize cache consistency issues and strategies to mitigate them.

* Address the cache stampede/dog-piling problem.

  • Topics:

* Cache Invalidation Strategies:

* Write-Through

* Write-Back

* Write-Around

* Refresh-Ahead

* Cache Eviction Policies:

* Least Recently Used (LRU)

* Least Frequently Used (LFU)

* First-In, First-Out (FIFO)

* Adaptive Replacement Cache (ARC)

* Most Recently Used (MRU)

* Random Replacement

* Cache Consistency Issues: Stale data, race conditions.

* Strategies for maintaining consistency: Time-to-Live (TTL), versioning, pub/sub.

* Cache Stampede / Dog-Piling problem and solutions (e.g., single-flight, locking).

  • Practical Exercises:

* Implement an LRU cache from scratch.

* Simulate cache invalidation scenarios and observe data consistency.

  • Estimated Time: 10-15 hours

Week 3: Distributed Caching & Architectures

  • Learning Objectives:

* Understand the necessity and benefits of distributed caching.

* Explore different distributed cache architectures.

* Grasp the concept of consistent hashing and its application.

* Familiarize with popular distributed caching systems (Redis, Memcached).

* Understand data partitioning and replication strategies in distributed caches.

  • Topics:

* Why Distributed Caching? Scalability, High Availability.

* Distributed Cache Architectures: Client-server, Peer-to-peer, CDN.

* Consistent Hashing: Principles and advantages for distributed systems.

* Data Partitioning (Sharding) and Replication strategies.

* Introduction to Popular Distributed Caching Systems:

* Redis: In-memory data structures, persistence, pub/sub, transactions.

* Memcached: Simple, high-performance key-value store.

* Other enterprise solutions (e.g., Apache Ignite, Hazelcast - conceptual overview).

* Cache-as-a-Service (CaaS) providers (e.g., AWS ElastiCache, Azure Cache for Redis).

  • Practical Exercises:

* Set up and interact with a local Redis instance using redis-cli.

* Experiment with basic Redis data types and commands (strings, hashes, lists, sets).

  • Estimated Time: 12-18 hours

Week 4: Performance, Monitoring & Security

  • Learning Objectives:

* Understand key metrics for monitoring cache performance.

* Utilize tools for benchmarking and monitoring caching systems.

* Identify and troubleshoot common caching issues.

* Recognize and address security considerations for cached data.

  • Topics:

* Benchmarking Cache Performance: Tools and methodologies.

* Key Metrics for Monitoring:

* Cache Hit/Miss Rate

* Latency (read/write)

* Memory Usage

* Eviction Rate

* Network I/O

* Monitoring Tools and Platforms (e.g., Prometheus/Grafana integration, built-in dashboards for Redis/Memcached).

* Troubleshooting Common Caching Issues:

* Stale data

* High latency

* Memory exhaustion

* Cache stampede

* Security Considerations for Caching:

* Data exposure (sensitive information in cache)

* Injection attacks (cache poisoning)

* Denial of Service (DoS) attacks

* Access control, encryption for cached data.

  • Practical Exercises:

* Use redis-cli INFO to inspect Redis metrics.

* Simulate a cache stampede and implement a basic locking mechanism to prevent it.

* Research security best practices for Redis/Memcached deployments.

  • Estimated Time: 10-15 hours

Week 5: Practical Implementation & Case Studies

  • Learning Objectives:

* Integrate caching into a web application using Redis or Memcached.

* Understand and implement CDN strategies for static and dynamic content.

* Analyze real-world caching architectures from major tech companies.

* Design a caching solution for a given problem scenario.

  • Topics:

* Integrating Caching into Applications:

* Example: Spring Boot with Redis Cache, Node.js with Memcached.

* Implementing cache-aside pattern.

* Content Delivery Networks (CDNs):

* How CDNs work (edge caching, global distribution).

* Integration with popular CDNs (e.g., Cloudflare, AWS CloudFront - conceptual).

* Caching static assets vs. dynamic content.

* Real-world Caching Architectures Case Studies:

* Netflix (Edge Caching, EVCache).

* Facebook (Memcached at scale).

* Twitter (Caching timelines).

* System Design Interview Practice: Applying caching concepts to common design problems.

  • Practical Exercises:

* Build a simple web API (e.g., using Python/Flask or Node.js/Express) and integrate Redis as a cache layer.

* Implement a "cache-aside" pattern for a data retrieval endpoint.

  • Estimated Time: 15-20 hours

Week 6: Advanced Topics & Capstone Project

  • Learning Objectives:

* Explore advanced caching patterns and emerging trends.

* Understand caching in specialized environments (microservices, serverless).

* Complete a capstone project demonstrating comprehensive understanding.

  • Topics:

* Event-Driven Caching and Cache invalidation via messaging queues.

* Machine Learning for Caching (e.g., predicting cacheability).

* Caching in Microservices Architectures: Dedicated caches, shared caches.

* Serverless Caching: Challenges and solutions.

* Future Trends in Caching: Persistent memory, edge computing.

* Review of all concepts and best practices.

  • Capstone Project:

* Goal: Design and implement a small application (e.g., a simplified e-commerce product catalog or a blog post viewer) that effectively utilizes a caching layer.

* Requirements:

* Use a distributed cache (e.g., Redis).

* Implement at least one cache invalidation strategy (e.g., TTL, explicit invalidation).

* Demonstrate cache hit/miss scenarios.

* Consider basic error handling and fallback mechanisms.

* Document your design choices and explain the caching strategy.

  • Estimated Time: 15-20 hours (including project work)

4. Recommended Resources

Leverage a variety of resources to gain a deep and practical understanding.

  • Books:

* "Designing Data-Intensive Applications" by Martin Kleppmann: Chapters on caching, distributed systems, and consistency are invaluable.

* "Redis in Action" by Josiah L. Carlson: Excellent practical guide for Redis.

* "System Design Interview – An Insider's Guide" by Alex Xu: Contains dedicated chapters on caching in system design.

  • Online Courses & Tutorials:

* Udemy/Coursera/Pluralsight: Search for courses on

gemini Output

Caching System: Comprehensive Review and Documentation

This document provides a detailed review and documentation of the Caching System, outlining its purpose, architecture, key features, benefits, implementation considerations, and operational best practices. This deliverable aims to equip your team with a clear understanding of the caching infrastructure and guide its optimal utilization and future development.


1. Executive Summary

A robust caching system is a cornerstone of modern, high-performance, and scalable applications. This document synthesizes the core aspects of your Caching System, emphasizing its critical role in enhancing application responsiveness, reducing backend load, and improving overall system efficiency. By strategically leveraging caching, we can significantly boost user experience, optimize resource utilization, and ensure the resilience of your services under varying load conditions.

This review provides actionable insights for optimizing current deployments and planning future enhancements, ensuring the caching infrastructure continues to meet evolving business demands.


2. Introduction to the Caching System

The Caching System serves as an intermediary layer between your application and its primary data sources (e.g., databases, external APIs). Its fundamental purpose is to store frequently accessed data in a fast-access layer, thereby minimizing the need to repeatedly fetch data from slower, more resource-intensive origins.

Key Objectives:

  • Improve Application Performance: Reduce latency and accelerate data retrieval for end-users.
  • Enhance Scalability: Allow the application to handle a higher volume of requests without overburdening primary data stores.
  • Reduce Operational Costs: Decrease the load on databases and backend services, potentially leading to lower infrastructure requirements.
  • Increase System Resilience: Provide a buffer against temporary slowdowns or outages of backend services.

3. Core Components and Conceptual Architecture

While specific implementations may vary (e.g., Redis, Memcached, in-memory caches, CDN), the conceptual architecture of a typical caching system involves several key components working in concert:

  • Cache Store: The actual data storage layer where cached items reside. This is typically a fast, in-memory key-value store (e.g., Redis, Memcached). It can be distributed across multiple nodes for high availability and scalability.
  • Cache Client/Library: An application-side component responsible for interacting with the cache store. It handles connection management, data serialization/deserialization, and cache operations (get, set, delete).
  • Application Logic: The part of your application that decides what to cache, when to cache it, and how to handle cache misses and invalidations.
  • Primary Data Source: The original, authoritative source of data (e.g., a SQL or NoSQL database, a microservice, an external API).

Conceptual Data Flow:

  1. Request Initiation: An application requests data.
  2. Cache Check: The application logic first queries the Cache Store via the Cache Client.
  3. Cache Hit: If the data is found in the cache (a "cache hit"), it is immediately returned to the application, bypassing the primary data source.
  4. Cache Miss: If the data is not found in the cache (a "cache miss"):

* The application fetches the data from the Primary Data Source.

* The retrieved data is then stored in the Cache Store (with an appropriate Time-to-Live, or TTL) for future requests.

* The data is returned to the application.


4. Key Features and Capabilities

The Caching System offers a range of features designed to provide efficient and reliable data access:

  • High-Speed Data Retrieval: Leverages in-memory storage for extremely low-latency read operations.
  • Distributed Architecture: Supports horizontal scaling across multiple nodes to handle high throughput and large datasets.
  • Configurable Eviction Policies: Automatically removes less-frequently or least-recently used data when the cache reaches capacity (e.g., LRU - Least Recently Used, LFU - Least Frequently Used).
  • Time-to-Live (TTL) Management: Allows data to be stored for a predefined duration, ensuring eventual consistency and preventing stale data.
  • Support for Diverse Data Types: Capable of storing various data structures (strings, hashes, lists, sets, sorted sets, etc.), depending on the chosen cache technology.
  • Persistence (Optional): Some cache technologies offer options for data persistence to disk, allowing the cache to recover data after restarts (e.g., Redis RDB and AOF).
  • Replication and High Availability: Mechanisms to replicate cache data across multiple instances, ensuring continuous operation even if a node fails.
  • Atomic Operations: Support for operations that guarantee data integrity during concurrent access.

5. Benefits of the Caching System

Implementing and optimizing the Caching System delivers significant advantages:

  • 🚀 Improved Application Performance: End-users experience faster page loads, quicker data retrieval, and a more responsive application overall.
  • 📉 Reduced Backend Load: Offloads a substantial portion of read requests from databases and other backend services, freeing up their resources for write operations and complex queries.
  • 📈 Enhanced Scalability: Allows your application to serve a larger user base and handle peak traffic spikes more effectively without requiring a proportional increase in primary data store capacity.
  • 💰 Lower Infrastructure Costs: By reducing the load on expensive database instances, caching can lead to savings in computing, memory, and storage resources.
  • 🛡️ Increased System Resilience: Acts as a buffer, enabling the application to continue serving some data even if the primary data source experiences temporary issues or slowdowns.
  • 🌐 Better User Experience: A faster and more reliable application directly translates to higher user satisfaction and engagement.

6. Implementation Strategies and Best Practices

To maximize the effectiveness of your Caching System, consider the following strategies and best practices:

6.1. Identify Cacheable Data

  • Static Content: Images, CSS, JavaScript files (often handled by CDNs, but application-level caching for metadata).
  • Frequently Accessed Dynamic Data: Product catalogs, user profiles, configuration settings, leaderboards.
  • Computationally Expensive Results: Aggregated reports, complex query results that don't change frequently.
  • Session Data: For improved session management and scalability.

6.2. Choose the Right Caching Strategy

  • Cache-Aside (Lazy Loading): The most common pattern. Application code is responsible for checking the cache first, and if a miss occurs, fetching from the database and populating the cache.

* Pros: Simple to implement, robust to cache failures, only caches data that is requested.

* Cons: Initial requests for data are slower (cache miss), potential for stale data if not properly invalidated.

  • Read-Through: The cache client itself is responsible for fetching data from the primary source on a miss.

* Pros: Simplifies application code, cache manages loading.

* Cons: More complex cache implementation.

  • Write-Through/Write-Back: For write operations, data is written to the cache first and then propagated to the primary data source. Less common for general-purpose caching due to complexity and consistency challenges.

6.3. Cache Key Design

  • Consistency: Ensure cache keys are generated consistently across all parts of your application.
  • Granularity: Design keys to be specific enough to avoid false hits but broad enough to maximize reusability (e.g., user:123, product:category:electronics).
  • Versioning (Optional): Include a version number in keys if data schemas change frequently, allowing for graceful cache invalidation during deployments.

6.4. Time-to-Live (TTL) Management

  • Appropriate TTLs: Set TTLs based on data freshness requirements. Highly dynamic data may have short TTLs (seconds), while static data can have long TTLs (hours, days).
  • No Expiration for Critical Static Data: For truly static data, consider no expiration or extremely long TTLs, relying on explicit invalidation.
  • Jitter: Introduce slight random variations in TTLs to prevent "thundering herd" scenarios where many cached items expire simultaneously, leading to a sudden spike in backend load.

6.5. Cache Invalidation Strategies

  • Time-Based (TTL): The simplest method; data expires automatically.
  • Event-Based/Programmatic: Invalidate cache entries explicitly when the underlying data changes in the primary source (e.g., after a database update, publish an event to invalidate relevant cache keys).
  • Tag-Based/Pattern-Based: Invalidate groups of related keys based on tags or patterns.
  • Cache Warming: Pre-populate the cache with frequently accessed data, especially after deployments or restarts, to minimize initial cache misses.

6.6. Error Handling and Fallbacks

  • Graceful Degradation: Your application should be designed to function correctly (albeit potentially slower) if the caching system becomes unavailable. This is crucial for resilience.
  • Circuit Breaker Pattern: Implement a circuit breaker to prevent your application from continuously hammering a failing cache, allowing it to recover.

6.7. Capacity Planning

  • Monitor Usage: Continuously monitor cache memory usage, hit rate, and eviction rates.
  • Scale Proactively: Based on monitoring data, scale the cache infrastructure (add more nodes, increase memory) before performance bottlenecks occur.

6.8. Security Considerations

  • Access Control: Implement strong authentication and authorization for cache access, especially if sensitive data is cached.
  • Encryption: Consider encrypting sensitive data both in transit and at rest within the cache, depending on regulatory requirements and data sensitivity.
  • Network Segmentation: Deploy caching systems within secure network segments, limiting external access.

7. Monitoring, Maintenance, and Operations

Effective monitoring and proactive maintenance are crucial for ensuring the Caching System delivers consistent performance and reliability.

7.1. Key Metrics to Monitor

  • Cache Hit Rate: Percentage of requests served from the cache (higher is better). A low hit rate indicates inefficient caching or stale data.
  • Cache Miss Rate: Percentage of requests that require fetching data from the primary source.
  • Eviction Rate: How often items are removed due to memory pressure. A high eviction rate suggests insufficient cache capacity or overly aggressive TTLs.
  • Memory Usage: Total memory consumed by the cache.
  • Network Latency: Time taken for cache operations.
  • CPU Usage: Processing load on cache servers.
  • Number of Connections: Active client connections to the cache.
  • Persistence Status (if applicable): Health of data persistence mechanisms.

7.2. Alerting

  • Set up alerts for critical thresholds (e.g., cache hit rate drops below X%, memory usage exceeds Y%, high eviction rates, cache server unresponsiveness).
  • Integrate alerts with your existing incident management system.

7.3. Regular Review and Optimization

  • Periodically analyze cache usage patterns to identify new opportunities for caching or optimize existing strategies.
  • Review and adjust TTLs based on data volatility and business requirements.
  • Optimize cache keys and invalidation logic as application features evolve.

7.4. Backup and Recovery (if persistent)

  • For caching systems that offer persistence (e.g., Redis), implement regular backup routines.
  • Develop and test recovery procedures to minimize data loss and downtime.

7.5. Disaster Recovery

  • For mission-critical applications, consider deploying caching systems across multiple availability zones or regions for enhanced disaster recovery capabilities.

8. Future Enhancements and Roadmap

To continuously evolve and optimize your Caching System, consider the following potential enhancements:

  • Advanced Invalidation Patterns: Explore implementing Pub/Sub (Publish/Subscribe) mechanisms for real-time cache invalidation across distributed application instances.
  • Multi-Layered Caching: Introduce additional caching layers (e.g., client-side browser cache, CDN for static assets, application-level in-memory cache, distributed cache) to optimize for different data types and access patterns.
  • Automated Cache Warm-up: Develop tools or scripts to automatically pre-populate the cache with essential data following deployments or system restarts, reducing initial load spikes.
  • Predictive Caching: Investigate using machine learning to predict data access patterns and proactively cache relevant data before it's requested.
  • Integration with Observability Platforms: Enhance integration with existing logging, tracing, and metrics platforms for a unified view of system health and performance.
  • Cache-as-a-Service Adoption: Evaluate managed caching services (e.g., AWS ElastiCache, Azure Cache for Redis, Google Cloud Memorystore) for reduced operational overhead and built-in scalability.
  • Dynamic Cache Sizing: Implement auto-scaling for cache clusters based on real-time load and memory usage metrics.

9. Conclusion and Next Steps

The Caching System is a vital component of your application infrastructure, significantly contributing to performance, scalability, and cost efficiency. By understanding its architecture, capabilities

caching_system.md
Download as Markdown
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);}});}