diff --git a/Projects/kompose/docs/.editorconfig b/Projects/kompose/docs/.editorconfig new file mode 100755 index 00000000..91422397 --- /dev/null +++ b/Projects/kompose/docs/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_size = 2 +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/Projects/kompose/docs/.env.example b/Projects/kompose/docs/.env.example new file mode 100644 index 00000000..7e60b075 --- /dev/null +++ b/Projects/kompose/docs/.env.example @@ -0,0 +1,2 @@ +# Public URL, used for OG Image when running nuxt generate +NUXT_PUBLIC_SITE_URL= diff --git a/Projects/kompose/docs/.gitignore b/Projects/kompose/docs/.gitignore index 4a7f73a2..6bbb425a 100644 --- a/Projects/kompose/docs/.gitignore +++ b/Projects/kompose/docs/.gitignore @@ -22,3 +22,6 @@ logs .env .env.* !.env.example + +# VSC +.history diff --git a/Projects/kompose/docs/.npmrc b/Projects/kompose/docs/.npmrc index 537e99fe..bf2e7648 100644 --- a/Projects/kompose/docs/.npmrc +++ b/Projects/kompose/docs/.npmrc @@ -1 +1 @@ -hoist=true +shamefully-hoist=true diff --git a/Projects/kompose/docs/README.md b/Projects/kompose/docs/README.md index 25b58212..0787bb89 100644 --- a/Projects/kompose/docs/README.md +++ b/Projects/kompose/docs/README.md @@ -1,23 +1,36 @@ -# Nuxt Minimal Starter +# Nuxt Docs Template -Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. +[![Nuxt UI](https://img.shields.io/badge/Made%20with-Nuxt%20UI-00DC82?logo=nuxt&labelColor=020420)](https://ui.nuxt.com) + +Use this template to build your own documentation with [Nuxt UI](https://ui.nuxt.com) quickly. + +- [Live demo](https://docs-template.nuxt.dev/) +- [Documentation](https://ui.nuxt.com/docs/getting-started/installation) + + + + + + Nuxt Docs Template + + + +## Quick Start + +```bash [Terminal] +npm create nuxt@latest -- -t github:nuxt-ui-templates/docs +``` + +## Deploy your own + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-name=docs&repository-url=https%3A%2F%2Fgithub.com%2Fnuxt-ui-templates%2Fdocs&demo-image=https%3A%2F%2Fui.nuxt.com%2Fassets%2Ftemplates%2Fnuxt%2Fdocs-dark.png&demo-url=https%3A%2F%2Fdocs-template.nuxt.dev%2F&demo-title=Nuxt%20Docs%20Template&demo-description=A%20documentation%20template%20powered%20by%20Nuxt%20Content.) ## Setup -Make sure to install dependencies: +Make sure to install the dependencies: ```bash -# npm -npm install - -# pnpm pnpm install - -# yarn -yarn install - -# bun -bun install ``` ## Development Server @@ -25,17 +38,7 @@ bun install Start the development server on `http://localhost:3000`: ```bash -# npm -npm run dev - -# pnpm pnpm dev - -# yarn -yarn dev - -# bun -bun run dev ``` ## Production @@ -43,33 +46,17 @@ bun run dev Build the application for production: ```bash -# npm -npm run build - -# pnpm pnpm build - -# yarn -yarn build - -# bun -bun run build ``` Locally preview production build: ```bash -# npm -npm run preview - -# pnpm pnpm preview - -# yarn -yarn preview - -# bun -bun run preview ``` Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. + +## Renovate integration + +Install [Renovate GitHub app](https://github.com/apps/renovate/installations/select_target) on your repository and you are good to go. diff --git a/Projects/kompose/docs/app/app.config.ts b/Projects/kompose/docs/app/app.config.ts new file mode 100644 index 00000000..3e67e7fc --- /dev/null +++ b/Projects/kompose/docs/app/app.config.ts @@ -0,0 +1,73 @@ +export default defineAppConfig({ + ui: { + colors: { + primary: 'emerald', + secondary: 'fuchsia', + neutral: 'zinc' + }, + footer: { + slots: { + root: 'border-t border-default', + left: 'text-sm text-muted' + } + } + }, + seo: { + siteName: 'Kompose' + }, + header: { + title: '', + to: '/', + logo: { + alt: '', + light: '', + dark: '' + }, + search: true, + colorMode: true, + links: [{ + 'icon': 'i-simple-icons-github', + 'to': 'https://github.com/nuxt-ui-templates/docs', + 'target': '_blank', + 'aria-label': 'GitHub' + }] + }, + footer: { + credits: `Built with Nuxt UI • © ${new Date().getFullYear()}`, + colorMode: false, + links: [{ + 'icon': 'i-simple-icons-discord', + 'to': 'https://go.nuxt.com/discord', + 'target': '_blank', + 'aria-label': 'Nuxt on Discord' + }, { + 'icon': 'i-simple-icons-x', + 'to': 'https://go.nuxt.com/x', + 'target': '_blank', + 'aria-label': 'Nuxt on X' + }, { + 'icon': 'i-simple-icons-github', + 'to': 'https://github.com/nuxt/ui', + 'target': '_blank', + 'aria-label': 'Nuxt UI on GitHub' + }] + }, + toc: { + title: 'Table of Contents', + bottom: { + title: 'Community', + edit: 'https://github.com/nuxt-ui-templates/docs/edit/main/content', + links: [{ + icon: 'i-lucide-star', + label: 'Star on GitHub', + to: 'https://github.com/nuxt/ui', + target: '_blank' + }, { + icon: 'i-lucide-book-open', + label: 'Nuxt UI docs', + to: 'https://ui.nuxt.com/docs/getting-started/installation/nuxt', + target: '_blank' + }] + } + } +}) diff --git a/Projects/kompose/docs/app/app.vue b/Projects/kompose/docs/app/app.vue index 09f935bb..be865190 100644 --- a/Projects/kompose/docs/app/app.vue +++ b/Projects/kompose/docs/app/app.vue @@ -1,6 +1,51 @@ + + diff --git a/Projects/kompose/docs/app/assets/css/main.css b/Projects/kompose/docs/app/assets/css/main.css new file mode 100644 index 00000000..09f710e5 --- /dev/null +++ b/Projects/kompose/docs/app/assets/css/main.css @@ -0,0 +1,25 @@ +@import "tailwindcss"; +@import "@nuxt/ui"; + +@source "../../../content/**/*"; + +@theme static { + --container-8xl: 90rem; + --font-sans: 'Public Sans', sans-serif; + + --color-green-50: #EFFDF5; + --color-green-100: #D9FBE8; + --color-green-200: #B3F5D1; + --color-green-300: #75EDAE; + --color-green-400: #00DC82; + --color-green-500: #00C16A; + --color-green-600: #00A155; + --color-green-700: #007F45; + --color-green-800: #016538; + --color-green-900: #0A5331; + --color-green-950: #052E16; +} + +:root { + --ui-container: var(--container-8xl); +} diff --git a/Projects/kompose/docs/app/components/AppFooter.vue b/Projects/kompose/docs/app/components/AppFooter.vue new file mode 100644 index 00000000..b8859719 --- /dev/null +++ b/Projects/kompose/docs/app/components/AppFooter.vue @@ -0,0 +1,23 @@ + + + diff --git a/Projects/kompose/docs/app/components/AppHeader.vue b/Projects/kompose/docs/app/components/AppHeader.vue new file mode 100644 index 00000000..3a95da96 --- /dev/null +++ b/Projects/kompose/docs/app/components/AppHeader.vue @@ -0,0 +1,72 @@ + + + diff --git a/Projects/kompose/docs/app/components/AppLogo.vue b/Projects/kompose/docs/app/components/AppLogo.vue new file mode 100644 index 00000000..521061f3 --- /dev/null +++ b/Projects/kompose/docs/app/components/AppLogo.vue @@ -0,0 +1,40 @@ + diff --git a/Projects/kompose/docs/app/components/OgImage/OgImageDocs.vue b/Projects/kompose/docs/app/components/OgImage/OgImageDocs.vue new file mode 100644 index 00000000..d365cd11 --- /dev/null +++ b/Projects/kompose/docs/app/components/OgImage/OgImageDocs.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/Projects/kompose/docs/app/components/PageHeaderLinks.vue b/Projects/kompose/docs/app/components/PageHeaderLinks.vue new file mode 100644 index 00000000..30a2dad4 --- /dev/null +++ b/Projects/kompose/docs/app/components/PageHeaderLinks.vue @@ -0,0 +1,84 @@ + + + diff --git a/Projects/kompose/docs/app/components/TemplateMenu.vue b/Projects/kompose/docs/app/components/TemplateMenu.vue new file mode 100644 index 00000000..3b63a1c6 --- /dev/null +++ b/Projects/kompose/docs/app/components/TemplateMenu.vue @@ -0,0 +1,49 @@ + diff --git a/Projects/kompose/docs/app/components/content/HeroBackground.vue b/Projects/kompose/docs/app/components/content/HeroBackground.vue new file mode 100644 index 00000000..2f14ef1e --- /dev/null +++ b/Projects/kompose/docs/app/components/content/HeroBackground.vue @@ -0,0 +1,88 @@ + + + diff --git a/Projects/kompose/docs/app/components/content/StarsBg.vue b/Projects/kompose/docs/app/components/content/StarsBg.vue new file mode 100644 index 00000000..70843756 --- /dev/null +++ b/Projects/kompose/docs/app/components/content/StarsBg.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/Projects/kompose/docs/app/error.vue b/Projects/kompose/docs/app/error.vue new file mode 100644 index 00000000..f66678c2 --- /dev/null +++ b/Projects/kompose/docs/app/error.vue @@ -0,0 +1,42 @@ + + + diff --git a/Projects/kompose/docs/app/layouts/docs.vue b/Projects/kompose/docs/app/layouts/docs.vue new file mode 100644 index 00000000..5d5fb86d --- /dev/null +++ b/Projects/kompose/docs/app/layouts/docs.vue @@ -0,0 +1,24 @@ + + + diff --git a/Projects/kompose/docs/app/pages/[...slug].vue b/Projects/kompose/docs/app/pages/[...slug].vue new file mode 100644 index 00000000..4e40a77d --- /dev/null +++ b/Projects/kompose/docs/app/pages/[...slug].vue @@ -0,0 +1,114 @@ + + + diff --git a/Projects/kompose/docs/content.config.ts b/Projects/kompose/docs/content.config.ts new file mode 100644 index 00000000..cfd8c1e3 --- /dev/null +++ b/Projects/kompose/docs/content.config.ts @@ -0,0 +1,24 @@ +import { defineContentConfig, defineCollection, z } from '@nuxt/content' + +export default defineContentConfig({ + collections: { + landing: defineCollection({ + type: 'page', + source: 'index.md' + }), + docs: defineCollection({ + type: 'page', + source: { + include: '**', + }, + schema: z.object({ + links: z.array(z.object({ + label: z.string(), + icon: z.string(), + to: z.string(), + target: z.string().optional() + })).optional() + }) + }) + } +}) diff --git a/Projects/kompose/docs/content/1.index.md b/Projects/kompose/docs/content/1.index.md new file mode 100644 index 00000000..af1647b9 --- /dev/null +++ b/Projects/kompose/docs/content/1.index.md @@ -0,0 +1,88 @@ +--- +title: Introduction to Kompose +description: Learn about Kompose, your Docker Compose Symphony Conductor for managing multiple stacks with style and grace. +--- + + + +**Kompose** is a powerful Bash orchestration tool for managing multiple Docker Compose stacks with style and grace. Think of it as a conductor for your Docker symphony - each stack plays its part, and Kompose makes sure they're all in harmony. + +**Kompose** is a powerful Bash orchestration tool for managing multiple Docker Compose stacks with style and grace. Think of it as a conductor for your Docker symphony - each stack plays its part, and Kompose makes sure they're all in harmony. + +### Why Kompose? + +:icon{name="lucide:target"} **One Command to Rule Them All** - Manage dozens of stacks with a single command +:icon{name="lucide:refresh-cw"} **Database Wizardry** - Export, import, and clean up PostgreSQL databases like a boss +:icon{name="lucide:tent"} **Hook System** - Extend functionality with custom pre/post operation hooks +:icon{name="lucide:globe"} **Network Maestro** - Smart network management with CLI overrides +:icon{name="lucide:lock-keyhole"} **Environment Juggler** - Override any environment variable on the fly +:icon{name="lucide:palette"} **Beautiful Output** - Color-coded logs and status indicators +:icon{name="lucide:flask-conical"} **Dry-Run Mode** - Test changes before applying them + +### :icon{name="lucide:music"} Stack Management +- **Pattern-based selection**: Target stacks with globs, comma-separated lists, or wildcards +- **Bulk operations**: Execute commands across multiple stacks simultaneously +- **Status monitoring**: Visual feedback with color-coded success/failure indicators +- **Smart filtering**: Include/exclude stacks with flexible pattern matching + +### :icon{name="lucide:hard-drive"} Database Operations +- **Automated backups**: Export PostgreSQL databases with timestamped dumps +- **Smart imports**: Auto-detect latest dumps or specify exact files +- **Drop & recreate**: Safe database import with connection termination +- **Cleanup utilities**: Keep only the latest dumps, remove old backups +- **Hook integration**: Custom pre/post operations for each database action + +### :icon{name="lucide:git-branch"} Extensibility +- **Custom hooks**: Define `pre_db_export`, `post_db_export`, `pre_db_import`, `post_db_import` +- **Stack-specific logic**: Each stack can have unique operational requirements +- **Environment access**: Hooks inherit all environment variables +- **Dry-run aware**: Test hook execution without side effects + +### :icon{name="lucide:globe"} Network Management +- **Unified network**: All stacks communicate on a single Docker network +- **CLI overrides**: Change network on-the-fly without editing configs +- **Traefik integration**: Seamless reverse proxy setup with proper network awareness +- **Multi-network support**: Special stacks can have additional internal networks + +### :icon{name="lucide:wrench"} Environment Control +- **Global overrides**: Set environment variables via CLI flags +- **Layered configs**: Root `.env` + stack `.env` + CLI overrides +- **Precedence rules**: CLI > Stack > Root configuration hierarchy +- **Real-time changes**: No need to edit files for temporary overrides + +## Quick Start + +```bash +# Start all stacks +./kompose.sh "*" up -d + +# View logs from specific stacks +./kompose.sh "blog,news" logs -f + +# Export all databases +./kompose.sh "*" db:export + +# Override network for staging +./kompose.sh --network staging "*" up -d +``` + +## Documentation Sections + +### Getting Started +- [Installation Guide](/installation) - Set up Kompose on your system +- [Quick Start](/guide/quick-start) - Get up and running in minutes + +### User Guide +- [Stack Management](/guide/stack-management) - Managing multiple stacks +- [Database Operations](/guide/database) - Backup and restore databases +- [Hooks System](/guide/hooks) - Extend with custom hooks +- [Configuration](/guide/configuration) - Configure Kompose and stacks +- [Network Architecture](/guide/network) - Understanding networking +- [Troubleshooting](/guide/troubleshooting) - Common issues and solutions + +### Stack Reference +- [All Stacks](/stacks) - Detailed documentation for each stack + +### Reference +- [CLI Reference](/reference/cli) - Complete command reference +- [Environment Variables](/reference/environment) - All configuration options diff --git a/Projects/kompose/docs/content/docs/installation.md b/Projects/kompose/docs/content/2.installation.md similarity index 90% rename from Projects/kompose/docs/content/docs/installation.md rename to Projects/kompose/docs/content/2.installation.md index 75979aa9..5d2e0a4e 100644 --- a/Projects/kompose/docs/content/docs/installation.md +++ b/Projects/kompose/docs/content/2.installation.md @@ -1,10 +1,8 @@ --- title: Installation Guide -description: Step-by-step guide to install and set up Kompose on your system +description: Running on your system in just a few minutes. --- -# Installation Guide - Get Kompose up and running on your system in just a few minutes. ## Prerequisites @@ -237,10 +235,10 @@ sudo systemctl enable docker Now that Kompose is installed, you can: -1. [Start with the Quick Start Guide](/docs/guide/quick-start) -2. [Learn about Stack Management](/docs/guide/stack-management) -3. [Explore Database Operations](/docs/guide/database) -4. [Set up Custom Hooks](/docs/guide/hooks) +1. [Start with the Quick Start Guide](/guide/quick-start) +2. [Learn about Stack Management](/guide/stack-management) +3. [Explore Database Operations](/guide/database) +4. [Set up Custom Hooks](/guide/hooks) ## Updating Kompose @@ -277,4 +275,4 @@ rm -rf /path/to/kompose --- -**Need Help?** Check out the [Troubleshooting Guide](/docs/guide/troubleshooting) or [open an issue](https://github.com/yourusername/kompose/issues) on GitHub. +**Need Help?** Check out the [Troubleshooting Guide](/guide/troubleshooting) or [open an issue](https://github.com/yourusername/kompose/issues) on GitHub. diff --git a/Projects/kompose/docs/content/docs/guide/configuration.md b/Projects/kompose/docs/content/3.guide/configuration.md similarity index 98% rename from Projects/kompose/docs/content/docs/guide/configuration.md rename to Projects/kompose/docs/content/3.guide/configuration.md index 106900c6..05f438b3 100644 --- a/Projects/kompose/docs/content/docs/guide/configuration.md +++ b/Projects/kompose/docs/content/3.guide/configuration.md @@ -3,8 +3,6 @@ title: Configuration description: Configure Kompose and your stacks --- -# Configuration - ### Root Configuration (`.env`) Global settings shared across all stacks: diff --git a/Projects/kompose/docs/content/docs/guide/database.md b/Projects/kompose/docs/content/3.guide/database.md similarity index 69% rename from Projects/kompose/docs/content/docs/guide/database.md rename to Projects/kompose/docs/content/3.guide/database.md index ea67da16..76484332 100644 --- a/Projects/kompose/docs/content/docs/guide/database.md +++ b/Projects/kompose/docs/content/3.guide/database.md @@ -3,27 +3,25 @@ title: Database Operations description: Export, import, and manage PostgreSQL databases --- -# Database Operations - - **Automated backups**: Export PostgreSQL databases with timestamped dumps - **Smart imports**: Auto-detect latest dumps or specify exact files - **Drop & recreate**: Safe database import with connection termination - **Cleanup utilities**: Keep only the latest dumps, remove old backups - **Hook integration**: Custom pre/post operations for each database action -### hook Extensibility +### :icon{name="lucide:git-branch"} Extensibility - **Custom hooks**: Define `pre_db_export`, `post_db_export`, `pre_db_import`, `post_db_import` - **Stack-specific logic**: Each stack can have unique operational requirements - **Environment access**: Hooks inherit all environment variables - **Dry-run aware**: Test hook execution without side effects -### network Network Management +### :icon{name="lucide:globe"} Network Management - **Unified network**: All stacks communicate on a single Docker network - **CLI overrides**: Change network on-the-fly without editing configs - **Traefik integration**: Seamless reverse proxy setup with proper network awareness - **Multi-network support**: Special stacks can have additional internal networks -### tools Environment Control +### :icon{name="lucide:wrench"} Environment Control - **Global overrides**: Set environment variables via CLI flags - **Layered configs**: Root `.env` + stack `.env` + CLI overrides - **Precedence rules**: CLI > Stack > Root configuration hierarchy diff --git a/Projects/kompose/docs/content/docs/guide/hooks.md b/Projects/kompose/docs/content/3.guide/hooks.md similarity index 85% rename from Projects/kompose/docs/content/docs/guide/hooks.md rename to Projects/kompose/docs/content/3.guide/hooks.md index 758b98a9..dfdf3726 100644 --- a/Projects/kompose/docs/content/docs/guide/hooks.md +++ b/Projects/kompose/docs/content/3.guide/hooks.md @@ -3,8 +3,6 @@ title: Hooks System description: Extend Kompose with custom hooks --- -# Hooks System - Extend Kompose functionality with custom hooks for each stack. ### Available Hooks @@ -77,14 +75,14 @@ The `sexy` stack uses hooks for Directus schema management: ### Hook Best Practices -check **DO:** +✅ **DO:** - Return 0 for success, 1 for failure - Use indented output: `echo " Message"` - Make non-critical operations return 0 - Check container status before `docker exec` - Test in dry-run mode first -cancel **DON'T:** +❌ **DON'T:** - Assume containers are running - Use blocking operations without timeouts - Forget error handling diff --git a/Projects/kompose/docs/content/3.guide/index.md b/Projects/kompose/docs/content/3.guide/index.md new file mode 100644 index 00000000..21d3677a --- /dev/null +++ b/Projects/kompose/docs/content/3.guide/index.md @@ -0,0 +1,27 @@ +--- +title: User Guide +description: Comprehensive guide to using Kompose +--- + +Learn everything you need to know about using Kompose effectively. + +## Getting Started + +- [Quick Start](/guide/quick-start) - Get up and running in minutes +- [Installation](/installation) - Detailed installation instructions + +## Core Concepts + +- [Stack Management](/guide/stack-management) - Managing multiple Docker Compose stacks +- [Database Operations](/guide/database) - Backup, restore, and maintain databases +- [Hooks System](/guide/hooks) - Extend functionality with custom hooks +- [Network Architecture](/guide/network) - Understanding networking in Kompose + +## Configuration + +- [Configuration Guide](/guide/configuration) - Configure Kompose and stacks +- [Environment Variables](/reference/environment) - All available environment variables + +## Troubleshooting + +- [Common Issues](/guide/troubleshooting) - Solutions to common problems diff --git a/Projects/kompose/docs/content/docs/guide/network.md b/Projects/kompose/docs/content/3.guide/network.md similarity index 98% rename from Projects/kompose/docs/content/docs/guide/network.md rename to Projects/kompose/docs/content/3.guide/network.md index 0c125332..ff219305 100644 --- a/Projects/kompose/docs/content/docs/guide/network.md +++ b/Projects/kompose/docs/content/3.guide/network.md @@ -3,8 +3,6 @@ title: Network Architecture description: Understanding Kompose network design --- -# Network Architecture - ### Single Network Design All stacks communicate through a unified Docker network: diff --git a/Projects/kompose/docs/content/docs/guide/quick-start.md b/Projects/kompose/docs/content/3.guide/quick-start.md similarity index 66% rename from Projects/kompose/docs/content/docs/guide/quick-start.md rename to Projects/kompose/docs/content/3.guide/quick-start.md index 308d77c4..3fd1de2e 100644 --- a/Projects/kompose/docs/content/docs/guide/quick-start.md +++ b/Projects/kompose/docs/content/3.guide/quick-start.md @@ -3,8 +3,6 @@ title: Quick Start description: Get started with Kompose in minutes --- -# Quick Start - ```bash # Clone the repository git clone https://github.com/yourusername/kompose.git @@ -25,5 +23,5 @@ chmod +x kompose.sh # Export all databases ./kompose.sh "*" db:export -# That's it! celebration +# That's it! :icon{name="lucide:party-popper"} ``` diff --git a/Projects/kompose/docs/content/docs/guide/stack-management.md b/Projects/kompose/docs/content/3.guide/stack-management.md similarity index 95% rename from Projects/kompose/docs/content/docs/guide/stack-management.md rename to Projects/kompose/docs/content/3.guide/stack-management.md index a1da896c..d197ceba 100644 --- a/Projects/kompose/docs/content/docs/guide/stack-management.md +++ b/Projects/kompose/docs/content/3.guide/stack-management.md @@ -3,8 +3,6 @@ title: Stack Management description: Learn how to manage multiple Docker Compose stacks --- -# Stack Management - ```bash # Start stacks ./kompose.sh up -d diff --git a/Projects/kompose/docs/content/docs/guide/troubleshooting.md b/Projects/kompose/docs/content/3.guide/troubleshooting.md similarity index 73% rename from Projects/kompose/docs/content/docs/guide/troubleshooting.md rename to Projects/kompose/docs/content/3.guide/troubleshooting.md index 949ce42a..10b66388 100644 --- a/Projects/kompose/docs/content/docs/guide/troubleshooting.md +++ b/Projects/kompose/docs/content/3.guide/troubleshooting.md @@ -3,11 +3,9 @@ title: Troubleshooting description: Common issues and solutions --- -# Troubleshooting - ### Common Issues -#### error 404 Error from Traefik +#### :icon{name="lucide:ban"} 404 Error from Traefik **Problem:** Websites return 404 even though containers are running @@ -33,7 +31,7 @@ http://your-server:8080 docker inspect blog_app | grep traefik ``` -#### database Database Import Fails +#### :icon{name="lucide:hard-drive"} Database Import Fails **Problem:** `db:import` command fails @@ -55,7 +53,7 @@ ls -lh news/*.sql ./kompose.sh news db:import 2>&1 | tee import.log ``` -#### connection Container Won't Connect to Network +#### :icon{name="lucide:plug"} Container Won't Connect to Network **Problem:** Container fails to join kompose network @@ -70,7 +68,7 @@ docker network create kompose ./kompose.sh "*" up -d ``` -#### hook Hooks Not Executing +#### :icon{name="lucide:git-branch"} Hooks Not Executing **Problem:** Custom hooks aren't running diff --git a/Projects/kompose/docs/content/docs/reference/cli.md b/Projects/kompose/docs/content/4.reference/cli.md similarity index 92% rename from Projects/kompose/docs/content/docs/reference/cli.md rename to Projects/kompose/docs/content/4.reference/cli.md index 234865aa..512ae493 100644 --- a/Projects/kompose/docs/content/docs/reference/cli.md +++ b/Projects/kompose/docs/content/4.reference/cli.md @@ -3,8 +3,6 @@ title: CLI Reference description: Complete command-line interface reference --- -# CLI Reference - Complete reference for all Kompose CLI commands and options. ## Synopsis @@ -116,7 +114,7 @@ Import PostgreSQL database from SQL dump file. ./kompose.sh db:import path/to/dump.sql ``` -**warning WARNING:** Drops and recreates the database! +**:icon{name="lucide:alert-triangle"} WARNING:** Drops and recreates the database! ### db:cleanup diff --git a/Projects/kompose/docs/content/docs/reference/environment.md b/Projects/kompose/docs/content/4.reference/environment.md similarity index 63% rename from Projects/kompose/docs/content/docs/reference/environment.md rename to Projects/kompose/docs/content/4.reference/environment.md index ca026719..81704138 100644 --- a/Projects/kompose/docs/content/docs/reference/environment.md +++ b/Projects/kompose/docs/content/4.reference/environment.md @@ -3,8 +3,6 @@ title: Environment Variables description: Complete reference for all environment variables --- -# Environment Variables - Complete reference for all environment variables used in Kompose. ## Global Variables @@ -107,17 +105,17 @@ DB_HOST=news-postgres # Overrides root ### Security -- check Use strong, random passwords -- check Never commit `.env` files to version control -- check Use `.env.example` as template -- check Rotate secrets regularly +- ✅ Use strong, random passwords +- ✅ Never commit `.env` files to version control +- ✅ Use `.env.example` as template +- ✅ Rotate secrets regularly ### Organization -- check Document custom variables -- check Group related variables -- check Use consistent naming -- check Keep defaults in root `.env` +- ✅ Document custom variables +- ✅ Group related variables +- ✅ Use consistent naming +- ✅ Keep defaults in root `.env` ## Generating Secrets diff --git a/Projects/kompose/docs/content/4.reference/index.md b/Projects/kompose/docs/content/4.reference/index.md new file mode 100644 index 00000000..bd0856f5 --- /dev/null +++ b/Projects/kompose/docs/content/4.reference/index.md @@ -0,0 +1,26 @@ +--- +title: Reference Documentation +description: Complete reference documentation for Kompose +--- + +Complete reference documentation for all aspects of Kompose. + +## Command Line + +- [CLI Reference](/reference/cli) - All commands and options +- [Stack Patterns](/reference/cli#stack-patterns) - Pattern matching syntax + +## Configuration + +- [Environment Variables](/reference/environment) - All environment variables +- [Configuration Files](/guide/configuration) - File structure and precedence + +## Stack Reference + +- [Stack Documentation](/stacks) - Detailed docs for each stack + +## Advanced Topics + +- [Network Architecture](/guide/network) - Network design and configuration +- [Hook System](/guide/hooks) - Writing custom hooks +- [Database Operations](/guide/database) - Advanced database management diff --git a/Projects/kompose/docs/content/5.stacks/auth.md b/Projects/kompose/docs/content/5.stacks/auth.md new file mode 100644 index 00000000..cff4e239 --- /dev/null +++ b/Projects/kompose/docs/content/5.stacks/auth.md @@ -0,0 +1,145 @@ +--- +title: Auth - The Bouncer at Your Digital Club +description: "You shall not pass... without proper credentials!" +navigation: + icon: i-lucide-lock-keyhole +--- + +> *"You shall not pass... without proper credentials!"* - Keycloak, probably + +## What's This All About? + +This stack is your authentication and identity management powerhouse. Think of it as the super-sophisticated bouncer for all your services - checking IDs, managing VIP lists, and making sure only the cool kids (authorized users) get into your digital club. + +## The Star of the Show + +### :icon{name="lucide:drama"} Keycloak + +**Container**: `auth_keycloak` +**Image**: `quay.io/keycloak/keycloak:latest` +**Home**: https://auth.pivoine.art + +Keycloak is like having a Swiss Army knife for authentication. It handles: +- :icon{name="lucide:user"} **Single Sign-On (SSO)**: Log in once, access everything. Magic! +- :icon{name="lucide:ticket"} **Identity Brokering**: Connect with Google, GitHub, and other OAuth providers +- :icon{name="lucide:users"} **User Management**: Keep track of who's who in your digital zoo +- :icon{name="lucide:lock"} **OAuth 2.0 & OpenID Connect**: Industry-standard security protocols (the fancy stuff) +- :icon{name="lucide:shield"} **Authorization Services**: Fine-grained control over who can do what + +## Configuration Breakdown + +### Database Connection +Keycloak stores all its secrets (not literally, they're hashed!) in PostgreSQL: +``` +Database: keycloak +Host: Shared data stack (postgres) +``` + +### Admin Access +**Username**: `admin` (creative, right?) +**Password**: Check your `.env` file (and change it, please!) + +### Proxy Mode +Running in `edge` mode because we're living on the edge (behind Traefik)! This tells Keycloak to trust the proxy headers for HTTPS and hostname info. + +## How It Works + +1. **Startup**: Keycloak boots up and connects to the PostgreSQL database +2. **Health Check**: Every 30 seconds, it's like "Hey, I'm still alive!" (/health endpoint) +3. **Proxy Magic**: Traefik routes `https://auth.pivoine.art` → Keycloak +4. **SSL Termination**: Traefik handles HTTPS, Keycloak just chills on HTTP internally + +## Environment Variables Explained + +| Variable | What It Does | Cool Factor | +|----------|-------------|-------------| +| `KC_DB` | Database type (postgres) | :icon{name="simple-icons:postgresql"} Elephants never forget | +| `KC_DB_URL` | JDBC connection string | :icon{name="lucide:plug"} The digital umbilical cord | +| `KC_HOSTNAME` | Public-facing URL | :icon{name="lucide:globe"} Your internet identity | +| `KC_PROXY` | Proxy mode setting | :icon{name="lucide:drama"} Trust the middleman | +| `KC_FEATURES` | Enabled features (docker) | 🐳 Whale hello there! | + +## Ports & Networking + +- **Internal Port**: 8080 (Keycloak's cozy home) +- **External Access**: Via Traefik at https://auth.pivoine.art +- **Network**: `kompose` (the gang's all here) + +## Health & Monitoring + +Keycloak does a self-check every 30 seconds: +```bash +curl -f http://localhost:8080/health +``` +If it doesn't respond within 5 seconds or fails 3 times in a row, Docker knows something's up and will restart it (like turning it off and on again, but automated). + +## Common Tasks + +### Access the Admin Console +``` +URL: https://auth.pivoine.art +Login: Your admin credentials from .env +``` + +### View Logs +```bash +docker logs auth_keycloak -f +``` + +### Restart After Config Changes +```bash +docker compose restart +``` + +### Connect a New Application +1. Log into Keycloak admin console +2. Create a new Client +3. Configure redirect URIs +4. Grab your client ID and secret +5. Integrate with your app (check Keycloak docs) + +## Integration Tips + +When integrating other services with Keycloak: +- **Discovery URL**: `https://auth.pivoine.art/realms/{realm}/.well-known/openid-configuration` +- **Default Realm**: Usually "master" but create your own! +- **Client Types**: Public (SPAs), Confidential (Backend apps) + +## Troubleshooting + +**Q: Can't log in to admin console?** +A: Check your `KC_ADMIN_USERNAME` and `KC_ADMIN_PASSWORD` in `.env` + +**Q: Getting SSL errors?** +A: Make sure `KC_HOSTNAME` matches your Traefik setup + +**Q: Changes not taking effect?** +A: Clear your browser cache, Keycloak loves to cache things + +**Q: Database connection issues?** +A: Ensure the `data` stack is running and healthy + +## Security Notes :icon{name="lucide:lock"} + +- :icon{name="lucide:siren"} **Change the default admin password** (seriously, do it now) +- :icon{name="lucide:lock-keyhole"} Database credentials are shared via root `.env` +- :icon{name="lucide:globe"} Always access via HTTPS in production +- :icon{name="lucide:file-text"} Enable audit logging for compliance +- :icon{name="lucide:target"} Use realms to separate different applications/teams + +## Fun Facts + +- Keycloak is maintained by Red Hat (yeah, the Linux people!) +- It supports social login with Google, Facebook, GitHub, and more +- You can theme it to match your brand (goodbye boring login pages!) +- It handles thousands of users without breaking a sweat + +## Resources + +- [Keycloak Documentation](https://www.keycloak.org/documentation) +- [Getting Started Guide](https://www.keycloak.org/guides#getting-started) +- [Admin REST API](https://www.keycloak.org/docs-api/latest/rest-api/) + +--- + +*Remember: With great authentication power comes great responsibility. Don't be the person who uses "admin/admin" in production.* :icon{name="lucide:shield-check"} diff --git a/Projects/kompose/docs/content/docs/stacks/auto.md b/Projects/kompose/docs/content/5.stacks/auto.md similarity index 74% rename from Projects/kompose/docs/content/docs/stacks/auto.md rename to Projects/kompose/docs/content/5.stacks/auto.md index fe91a7f5..78cc60a4 100644 --- a/Projects/kompose/docs/content/docs/stacks/auto.md +++ b/Projects/kompose/docs/content/5.stacks/auto.md @@ -1,10 +1,10 @@ --- -title: � Auto Stack - Your Ansible Automation Wingman +title: Auto - Ansible Automation Wingman description: "Automating the boring stuff since... well, today!" +navigation: + icon: i-lucide-bot --- -# 🤖 Auto Stack - Your Ansible Automation Wingman - > *"Automating the boring stuff since... well, today!"* - Semaphore UI ## What's This All About? @@ -13,7 +13,7 @@ This is your command center for Ansible automation! Semaphore UI is like having ## The Dream Team -### 🎯 Semaphore UI +### :icon{name="lucide:target"} Semaphore UI **Container**: `auto_app` **Image**: `semaphoreui/semaphore:v2.16.18` @@ -21,12 +21,12 @@ This is your command center for Ansible automation! Semaphore UI is like having **Home**: http://localhost:3000 (Traefik labels commented out - local access only for now!) Semaphore is the fancy GUI wrapper around Ansible that makes you look like a DevOps wizard: -- 📋 **Project Management**: Organize your playbooks like a boss -- 🎮 **Job Execution**: Run Ansible tasks with a click -- 📊 **Task Monitoring**: Watch your automation in real-time -- 📧 **Email Alerts**: Get notified when things succeed (or explode) -- 🔐 **User Management**: Team collaboration without the chaos -- 📜 **Audit Logs**: Know who deployed what and when +- :icon{name="lucide:clipboard"} **Project Management**: Organize your playbooks like a boss +- :icon{name="lucide:gamepad-2"} **Job Execution**: Run Ansible tasks with a click +- :icon{name="lucide:bar-chart"} **Task Monitoring**: Watch your automation in real-time +- :icon{name="lucide:mail"} **Email Alerts**: Get notified when things succeed (or explode) +- :icon{name="lucide:lock-keyhole"} **User Management**: Team collaboration without the chaos +- :icon{name="lucide:scroll"} **Audit Logs**: Know who deployed what and when ### 🏃‍♂️ Semaphore Runner @@ -65,10 +65,10 @@ Configured to send alerts via SMTP when tasks complete. Perfect for those "deplo | Variable | What It Does | Why You Care | |----------|-------------|--------------| -| `SEMAPHORE_DB_*` | PostgreSQL connection | 🐘 Where memories live | +| `SEMAPHORE_DB_*` | PostgreSQL connection | :icon{name="simple-icons:postgresql"} Where memories live | | `SEMAPHORE_ADMIN` | Admin username | 👑 The supreme commander | -| `SEMAPHORE_EMAIL_*` | SMTP settings | 📧 "Your deploy finished!" | -| `SEMAPHORE_RUNNER_REGISTRATION_TOKEN` | Runner auth token | 🎫 Runner's VIP pass | +| `SEMAPHORE_EMAIL_*` | SMTP settings | :icon{name="lucide:mail"} "Your deploy finished!" | +| `SEMAPHORE_RUNNER_REGISTRATION_TOKEN` | Runner auth token | :icon{name="lucide:ticket"} Runner's VIP pass | ## Ports & Networking @@ -170,15 +170,15 @@ A: Double-check SMTP settings in `.env` file **Q: Can't log in?** A: Default is `admin`/`changeme` - check if you changed it and forgot! -## Security Tips 🔒 +## Security Tips :icon{name="lucide:lock"} -- 🔑 Store SSH keys properly (private keys in Semaphore, never in repos) -- 🔐 Use Ansible Vault for sensitive variables -- 👥 Create individual user accounts (don't share the admin account) -- 📝 Review audit logs regularly -- 🚫 Don't store passwords in plain text in playbooks +- :icon{name="lucide:key"} Store SSH keys properly (private keys in Semaphore, never in repos) +- :icon{name="lucide:lock-keyhole"} Use Ansible Vault for sensitive variables +- :icon{name="lucide:users"} Create individual user accounts (don't share the admin account) +- :icon{name="lucide:file-text"} Review audit logs regularly +- :icon{name="lucide:ban"} Don't store passwords in plain text in playbooks -## Pro Tips 💡 +## Pro Tips :icon{name="lucide:lightbulb"} 1. **Use Surveys**: Create web forms for playbook variables (great for non-technical users) 2. **Schedule Tasks**: Set up cron-like scheduling for regular maintenance @@ -196,11 +196,11 @@ A: Default is `admin`/`changeme` - check if you changed it and forgot! ## Why Semaphore is Awesome -- ✨ Makes Ansible actually fun to use -- 🎨 Beautiful, modern interface -- 🔄 Task history and versioning +- :icon{name="lucide:sparkles"} Makes Ansible actually fun to use +- :icon{name="lucide:palette"} Beautiful, modern interface +- :icon{name="lucide:refresh-cw"} Task history and versioning - 👁️ Real-time execution logs -- 🎯 RBAC (Role-Based Access Control) +- :icon{name="lucide:target"} RBAC (Role-Based Access Control) - 🆓 Open source and free ## Resources @@ -211,4 +211,4 @@ A: Default is `admin`/`changeme` - check if you changed it and forgot! --- -*"Automation is not about replacing humans, it's about freeing them to do more interesting things. Like browsing memes while your servers configure themselves."* 🤖✨ +*"Automation is not about replacing humans, it's about freeing them to do more interesting things. Like browsing memes while your servers configure themselves."* :icon{name="lucide:bot"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/blog.md b/Projects/kompose/docs/content/5.stacks/blog.md similarity index 75% rename from Projects/kompose/docs/content/docs/stacks/blog.md rename to Projects/kompose/docs/content/5.stacks/blog.md index 7a5d4268..e396aa48 100644 --- a/Projects/kompose/docs/content/docs/stacks/blog.md +++ b/Projects/kompose/docs/content/5.stacks/blog.md @@ -1,30 +1,30 @@ --- -title: Blog Stack - Your Lightning-Fast Static Site Delivery +title: Blog - Lightning-Fast Static Site Delivery description: "Speed is my middle name" +navigation: + icon: i-lucide-file-text --- -# 📝 Blog Stack - Your Lightning-Fast Static Site Delivery - > *"Speed is my middle name"* - Static Web Server ## What's This All About? -This stack serves your static blog with the speed of a caffeinated cheetah! It's a blazing-fast static web server written in Rust 🦀, serving pre-built HTML, CSS, and JavaScript files without any server-side processing overhead. +This stack serves your static blog with the speed of a caffeinated cheetah! It's a blazing-fast static web server written in Rust :icon{name="simple-icons:rust"}, serving pre-built HTML, CSS, and JavaScript files without any server-side processing overhead. ## The Speed Demon -### ⚡ Static Web Server +### :icon{name="lucide:zap"} Static Web Server **Container**: `blog_app` **Image**: `joseluisq/static-web-server:latest` **Home**: https://pivoine.art Think of this as nginx's cooler, faster cousin who runs marathons in their spare time: -- 🚀 **Blazing Fast**: Written in Rust for maximum performance -- 📦 **Tiny Footprint**: Minimal resource usage -- 🎯 **Simple**: Does one thing really, really well -- 🔒 **Secure**: No dynamic code execution means fewer attack vectors -- 📊 **HTTP/2**: Modern protocol support for faster loading +- :icon{name="lucide:rocket"} **Blazing Fast**: Written in Rust for maximum performance +- :icon{name="lucide:package"} **Tiny Footprint**: Minimal resource usage +- :icon{name="lucide:target"} **Simple**: Does one thing really, really well +- :icon{name="lucide:lock"} **Secure**: No dynamic code execution means fewer attack vectors +- :icon{name="lucide:bar-chart"} **HTTP/2**: Modern protocol support for faster loading ## Architecture @@ -52,7 +52,7 @@ This means you can update your blog by just replacing files on the host! No cont ### No Health Check? No Problem! Static web servers are so simple and reliable that Docker health checks aren't really necessary. Traefik can tell if it's alive by checking the port - if it responds, it's healthy! -## Traefik Magic 🎩✨ +## Traefik Magic :icon{name="lucide:hat"}:icon{name="lucide:sparkles"} All the routing is handled by Traefik labels: - **HTTP → HTTPS**: Automatic redirect for security @@ -76,29 +76,29 @@ All the routing is handled by Traefik labels: 3. **That's it!** The server automatically serves the new content -No restarts, no cache clearing, no drama! 🎭 +No restarts, no cache clearing, no drama! :icon{name="lucide:drama"} ## What Makes Static Sites Awesome -### Speed 🏎️ +### Speed :icon{name="lucide:car"} - No database queries - No server-side rendering - Just pure file serving - CDN-friendly -### Security 🔒 +### Security :icon{name="lucide:lock"} - No SQL injection - No XSS vulnerabilities (from server) - No admin panel to hack - No WordPress updates to forget -### Cost 💰 +### Cost :icon{name="lucide:dollar-sign"} - Minimal server resources - Can handle huge traffic spikes - No expensive database servers - Can run on a potato (almost) -### Reliability 🎯 +### Reliability :icon{name="lucide:target"} - Nothing to break - Nothing to update constantly - No dependency conflicts @@ -112,7 +112,7 @@ No restarts, no cache clearing, no drama! 🎭 ## Common Static Site Generators -### Hugo 🚀 +### Hugo :icon{name="lucide:rocket"} The speed champion, written in Go ```bash hugo new site myblog @@ -121,7 +121,7 @@ hugo server -D hugo build ``` -### Jekyll 💎 +### Jekyll :icon{name="simple-icons:ruby"} The Ruby classic, GitHub Pages favorite ```bash jekyll new myblog @@ -129,7 +129,7 @@ jekyll serve jekyll build ``` -### Gatsby ⚛️ +### Gatsby :icon{name="simple-icons:react"} React-based, GraphQL-powered ```bash gatsby new myblog @@ -137,13 +137,13 @@ gatsby develop gatsby build ``` -### 11ty (Eleventy) 🎈 +### 11ty (Eleventy) :icon{name="lucide:heart"} Simple, JavaScript-based ```bash npx @11ty/eleventy ``` -## Performance Tips 💡 +## Performance Tips :icon{name="lucide:lightbulb"} 1. **Image Optimization**: Use WebP or AVIF formats 2. **Minification**: Compress CSS, JS, HTML @@ -185,7 +185,7 @@ A: Static sites are rarely slow - check your image sizes and network **Q: Can't access the site?** A: Verify Traefik is running and DNS points to your server -## Security Considerations 🛡️ +## Security Considerations :icon{name="lucide:shield"} ✅ **Good News**: Static sites are inherently secure ✅ **HTTPS**: Handled by Traefik with automatic certificates @@ -215,13 +215,13 @@ Create a `404.html` in your static site root: The server will automatically use it for missing pages! -## Content Ideas for Your Blog 📚 +## Content Ideas for Your Blog :icon{name="lucide:book-open"} -- 💻 Tech tutorials and guides -- 🎨 Design showcases and portfolios -- 📝 Personal thoughts and experiences -- 🔧 Project documentation -- 🎯 Case studies and success stories +- :icon{name="lucide:laptop"} Tech tutorials and guides +- :icon{name="lucide:palette"} Design showcases and portfolios +- :icon{name="lucide:file-text"} Personal thoughts and experiences +- :icon{name="lucide:wrench"} Project documentation +- :icon{name="lucide:target"} Case studies and success stories - 🌟 Whatever makes your heart sing! ## Fun Facts @@ -240,4 +240,4 @@ The server will automatically use it for missing pages! --- -*"The fastest code is the code that doesn't run. The fastest server is the one that just serves files."* - Ancient DevOps Wisdom 📜 +*"The fastest code is the code that doesn't run. The fastest server is the one that just serves files."* - Ancient DevOps Wisdom :icon{name="lucide:scroll"} diff --git a/Projects/kompose/docs/content/docs/stacks/chain.md b/Projects/kompose/docs/content/5.stacks/chain.md similarity index 64% rename from Projects/kompose/docs/content/docs/stacks/chain.md rename to Projects/kompose/docs/content/5.stacks/chain.md index d73dba9f..a4fdabef 100644 --- a/Projects/kompose/docs/content/docs/stacks/chain.md +++ b/Projects/kompose/docs/content/5.stacks/chain.md @@ -1,10 +1,10 @@ --- -title: ⛓ Chain Stack - Workflow Automation Powerhouse +title: Chain - Workflow Automation Powerhouse description: "If you can dream it, you can automate it!" +navigation: + icon: i-lucide-link-2 --- -# ⛓️ Chain Stack - Workflow Automation Powerhouse - > *"If you can dream it, you can automate it!"* - n8n philosophy ## What's This All About? @@ -13,7 +13,7 @@ This stack is your automation Swiss Army knife! n8n lets you connect different a ## The Star of the Show -### ⚡ n8n +### :icon{name="lucide:zap"} n8n **Container**: `chain_app` **Image**: `n8nio/n8n:latest` @@ -21,14 +21,14 @@ This stack is your automation Swiss Army knife! n8n lets you connect different a **Port**: 5678 n8n is workflow automation done right: -- 🔌 **400+ Integrations**: Connect virtually anything -- 🎨 **Visual Builder**: Drag-and-drop workflow creation -- 💻 **Code Nodes**: Write JavaScript when you need it -- 🪝 **Webhooks**: Trigger workflows from anywhere -- ⏰ **Scheduling**: Cron-style automation -- 📊 **Data Transformation**: Powerful data manipulation -- 🔄 **Error Handling**: Retry logic and fallbacks -- 📝 **Version Control**: Export workflows as JSON +- :icon{name="lucide:plug"} **400+ Integrations**: Connect virtually anything +- :icon{name="lucide:palette"} **Visual Builder**: Drag-and-drop workflow creation +- :icon{name="lucide:laptop"} **Code Nodes**: Write JavaScript when you need it +- :icon{name="lucide:git-branch"} **Webhooks**: Trigger workflows from anywhere +- :icon{name="lucide:clock"} **Scheduling**: Cron-style automation +- :icon{name="lucide:bar-chart"} **Data Transformation**: Powerful data manipulation +- :icon{name="lucide:refresh-cw"} **Error Handling**: Retry logic and fallbacks +- :icon{name="lucide:file-text"} **Version Control**: Export workflows as JSON ## Configuration Breakdown @@ -39,12 +39,12 @@ Database: n8n Host: Shared data stack (postgres) ``` -### Basic Auth 🔒 +### Basic Auth :icon{name="lucide:lock"} **Default Credentials**: - Username: `admin` - Password: `changeme` -**⚠️ CRITICAL**: Change these immediately after first login! +**:icon{name="lucide:alert-triangle"} CRITICAL**: Change these immediately after first login! ### Encryption Key Credentials are encrypted using `N8N_ENCRYPTION_KEY`. This is auto-generated during setup. Never lose this key or you'll lose access to saved credentials! @@ -65,7 +65,7 @@ Credentials are encrypted using `N8N_ENCRYPTION_KEY`. This is auto-generated dur Password: changeme ``` -3. **⚠️ IMMEDIATELY Change Password**: +3. **:icon{name="lucide:alert-triangle"} IMMEDIATELY Change Password**: - Click user icon (top right) - Settings → Personal - Change password @@ -99,12 +99,12 @@ A: Check `N8N_ENCRYPTION_KEY` hasn't changed **Q: Workflow not triggering?** A: Verify it's activated and check execution logs -## Security Notes 🔒 +## Security Notes :icon{name="lucide:lock"} -- 🔑 **Encryption Key**: Store securely -- 🔐 **Change Default Auth**: ASAP! -- 🌐 **HTTPS Only**: Via Traefik -- 🔒 **OAuth**: Use for sensitive integrations +- :icon{name="lucide:key"} **Encryption Key**: Store securely +- :icon{name="lucide:lock-keyhole"} **Change Default Auth**: ASAP! +- :icon{name="lucide:globe"} **HTTPS Only**: Via Traefik +- :icon{name="lucide:lock"} **OAuth**: Use for sensitive integrations ## Resources @@ -114,4 +114,4 @@ A: Verify it's activated and check execution logs --- -*"Automation isn't about replacing humans - it's about freeing them to do what they do best: think creatively and solve complex problems."* ⚡🔗 +*"Automation isn't about replacing humans - it's about freeing them to do what they do best: think creatively and solve complex problems."* :icon{name="lucide:zap"}:icon{name="lucide:link"} diff --git a/Projects/kompose/docs/content/docs/stacks/chat.md b/Projects/kompose/docs/content/5.stacks/chat.md similarity index 78% rename from Projects/kompose/docs/content/docs/stacks/chat.md rename to Projects/kompose/docs/content/5.stacks/chat.md index 2553e146..3d7ca553 100644 --- a/Projects/kompose/docs/content/docs/stacks/chat.md +++ b/Projects/kompose/docs/content/5.stacks/chat.md @@ -1,10 +1,10 @@ --- -title: � Chat Stack - Your Personal Notification HQ +title: Chat - Personal Notification HQ description: "Ding! You've got... pretty much everything" +navigation: + icon: i-lucide-message-circle --- -# 💬 Chat Stack - Your Personal Notification HQ - > *"Ding! You've got... pretty much everything"* - Gotify ## What's This All About? @@ -13,7 +13,7 @@ Gotify is your self-hosted push notification server! Think of it as your persona ## The Notification Ninja -### 🔔 Gotify Server +### :icon{name="lucide:bell"} Gotify Server **Container**: `chat_app` **Image**: `gotify/server:latest` @@ -21,12 +21,12 @@ Gotify is your self-hosted push notification server! Think of it as your persona Gotify is the Swiss Army knife of push notifications: - 📱 **Mobile Apps**: iOS and Android clients available -- 🌐 **Web Interface**: Check notifications in your browser -- 🔌 **REST API**: Send notifications from anything -- 🔒 **App Tokens**: Separate tokens for different applications -- 📊 **Priority Levels**: From "meh" to "WAKE UP NOW!" -- 🎨 **Markdown Support**: Rich formatted messages -- 📦 **Simple**: Written in Go, single binary, no fuss +- :icon{name="lucide:globe"} **Web Interface**: Check notifications in your browser +- :icon{name="lucide:plug"} **REST API**: Send notifications from anything +- :icon{name="lucide:lock"} **App Tokens**: Separate tokens for different applications +- :icon{name="lucide:bar-chart"} **Priority Levels**: From "meh" to "WAKE UP NOW!" +- :icon{name="lucide:palette"} **Markdown Support**: Rich formatted messages +- :icon{name="lucide:package"} **Simple**: Written in Go, single binary, no fuss ## How It Works @@ -50,14 +50,14 @@ Path: /app/data ``` This stores: -- 🗄️ SQLite database (users, apps, messages) +- :icon{name="lucide:database"} SQLite database (users, apps, messages) - 🖼️ Application images - ⚙️ Server configuration ### No Exposed Port All access goes through Traefik at https://chat.pivoine.art - clean and secure! -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} 1. **Start the stack**: ```bash @@ -74,7 +74,7 @@ All access goes through Traefik at https://chat.pivoine.art - clean and secure! 3. **IMMEDIATELY change the password**: - Click on your username - Go to Settings - - Change that password right now! 🔒 + - Change that password right now! :icon{name="lucide:lock"} 4. **Create an application**: - Apps → New Application @@ -106,7 +106,7 @@ def send_notification(title, message, priority=5): } requests.post(url, headers=headers, data=data) -send_notification("Deploy Complete", "Your app is live! 🚀") +send_notification("Deploy Complete", "Your app is live! :icon{name="lucide:rocket"}") ``` ### Using Bash Script @@ -127,7 +127,7 @@ notify() { notify "Backup Complete" "All files backed up successfully" 8 ``` -## Priority Levels 🎯 +## Priority Levels :icon{name="lucide:target"} | Priority | Use Case | Example | |----------|----------|---------| @@ -135,7 +135,7 @@ notify "Backup Complete" "All files backed up successfully" 8 | 2 | Low | FYI messages | | 5 | Normal | Standard notifications | | 8 | High | Important updates | -| 10 | Emergency | WAKE UP! SERVER IS ON FIRE! 🔥 | +| 10 | Emergency | WAKE UP! SERVER IS ON FIRE! :icon{name="lucide:flame"} | ## Real-World Use Cases @@ -208,13 +208,13 @@ Download from: ## Web Interface Features - 📱 Desktop notifications (browser permission needed) -- 🔍 Search through message history +- :icon{name="lucide:search"} Search through message history - 🗑️ Delete individual or all messages -- 👥 Manage applications and clients +- :icon{name="lucide:users"} Manage applications and clients - ⚙️ Configure server settings -- 📊 View message statistics +- :icon{name="lucide:bar-chart"} View message statistics -## Security Best Practices 🔒 +## Security Best Practices :icon{name="lucide:lock"} 1. **Change Default Credentials**: First thing, every time 2. **Use App Tokens**: Different token for each application/script @@ -236,7 +236,7 @@ curl -X POST "https://chat.pivoine.art/message" \ - ✅ Database migration - ✅ Frontend build - ✅ Backend restart -- ⚠️ Cache warmup (slower than expected) +- :icon{name="lucide:alert-triangle"} Cache warmup (slower than expected) **Next**: Monitor performance metrics" \ -F "priority=5" @@ -307,16 +307,16 @@ Use HTTP request node: - Headers: `X-Gotify-Key: YOUR_TOKEN` - Body: JSON with title, message, priority -## Why Gotify Rocks 🎸 +## Why Gotify Rocks :icon{name="lucide:music"} -- ✨ Self-hosted (your data, your server) +- :icon{name="lucide:sparkles"} Self-hosted (your data, your server) - 🆓 Completely free and open source -- 🚀 Super lightweight (Go binary + SQLite) +- :icon{name="lucide:rocket"} Super lightweight (Go binary + SQLite) - 📱 Native mobile apps -- 🔌 Dead simple API -- 🎨 Clean, modern interface -- 🔒 No third-party dependencies -- 💪 Active development +- :icon{name="lucide:plug"} Dead simple API +- :icon{name="lucide:palette"} Clean, modern interface +- :icon{name="lucide:lock"} No third-party dependencies +- :icon{name="lucide:dumbbell"} Active development ## Resources @@ -327,4 +327,4 @@ Use HTTP request node: --- -*"The only notifications worth getting are the ones you control."* - Someone who's tired of their phone buzzing 📵✨ +*"The only notifications worth getting are the ones you control."* - Someone who's tired of their phone buzzing :icon{name="lucide:phone-off"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/code.md b/Projects/kompose/docs/content/5.stacks/code.md similarity index 77% rename from Projects/kompose/docs/content/docs/stacks/code.md rename to Projects/kompose/docs/content/5.stacks/code.md index a2079d85..2a1cb0ee 100644 --- a/Projects/kompose/docs/content/docs/stacks/code.md +++ b/Projects/kompose/docs/content/5.stacks/code.md @@ -1,10 +1,10 @@ --- -title: � Code Stack - Your Private GitHub Alternative +title: Code - Private GitHub Alternative description: "Give them Git, make them great!" +navigation: + icon: i-lucide-git-branch --- -# 🦊 Code Stack - Your Private GitHub Alternative - > *"Give them Git, make them great!"* - Some wise developer ## What's This All About? @@ -13,7 +13,7 @@ This stack is your personal GitHub - a lightweight, powerful, self-hosted Git se ## The Star of the Show -### 🦊 Gitea +### :icon{name="lucide:git-branch"} Gitea **Container**: `code_app` **Image**: `gitea/gitea:latest` @@ -21,14 +21,14 @@ This stack is your personal GitHub - a lightweight, powerful, self-hosted Git se **SSH**: ssh://git@git.localhost:2222 Gitea packs a serious punch for its size: -- 📦 **Git Hosting**: Unlimited private/public repositories +- :icon{name="lucide:package"} **Git Hosting**: Unlimited private/public repositories - 🔀 **Pull Requests**: Full code review workflow - 🐛 **Issue Tracking**: Built-in project management -- 👥 **Organizations & Teams**: Multi-user collaboration -- 🪝 **Webhooks**: CI/CD integration ready -- 📝 **Wiki**: Documentation for your projects -- 🏷️ **Releases**: Package and distribute your software -- 🔐 **Built-in OAuth**: Use it as an auth provider! +- :icon{name="lucide:users"} **Organizations & Teams**: Multi-user collaboration +- :icon{name="lucide:git-branch"} **Webhooks**: CI/CD integration ready +- :icon{name="lucide:file-text"} **Wiki**: Documentation for your projects +- :icon{name="lucide:tag"} **Releases**: Package and distribute your software +- :icon{name="lucide:lock-keyhole"} **Built-in OAuth**: Use it as an auth provider! ## Configuration Breakdown @@ -57,12 +57,12 @@ On first access, you'll see the installation wizard. Most settings are pre-confi | Variable | What It Does | Cool Factor | |----------|-------------|-------------| -| `COMPOSE_PROJECT_NAME` | Stack identifier | 📦 Keeps things organized | -| `DOCKER_IMAGE` | Gitea version to use | 🏷️ Stay current or pinned | -| `TRAEFIK_HOST` | Your domain | 🌐 How the world finds you | -| `SSH_PORT` | SSH clone port | 🔌 Non-standard for safety | -| `APP_PORT` | Web interface port | 🎯 Internal routing | -| `DB_*` | Database connection | 🐘 Where memories live | +| `COMPOSE_PROJECT_NAME` | Stack identifier | :icon{name="lucide:package"} Keeps things organized | +| `DOCKER_IMAGE` | Gitea version to use | :icon{name="lucide:tag"} Stay current or pinned | +| `TRAEFIK_HOST` | Your domain | :icon{name="lucide:globe"} How the world finds you | +| `SSH_PORT` | SSH clone port | :icon{name="lucide:plug"} Non-standard for safety | +| `APP_PORT` | Web interface port | :icon{name="lucide:target"} Internal routing | +| `DB_*` | Database connection | :icon{name="simple-icons:postgresql"} Where memories live | ## Ports & Networking @@ -116,7 +116,7 @@ docker logs code_app -f - Email: your@email.com - Password: Strong and unique! -6. **Install!** 🎉 +6. **Install!** :icon{name="lucide:party-popper"} ### Creating Your First Repository @@ -240,16 +240,16 @@ A: Reset from CLI: docker exec code_app gitea admin user change-password --username admin --password newpassword ``` -## Security Notes 🔒 +## Security Notes :icon{name="lucide:lock"} -- 🔑 **SSH Keys**: Always use SSH keys, not passwords -- 🔐 **Database Credentials**: Stored in root `.env` -- 🌐 **HTTPS Only**: Traefik handles SSL automatically -- 👥 **Private Repos**: Default for security -- 🔒 **2FA**: Enable in user settings for extra security -- 📝 **Audit Log**: Review in admin panel regularly +- :icon{name="lucide:key"} **SSH Keys**: Always use SSH keys, not passwords +- :icon{name="lucide:lock-keyhole"} **Database Credentials**: Stored in root `.env` +- :icon{name="lucide:globe"} **HTTPS Only**: Traefik handles SSL automatically +- :icon{name="lucide:users"} **Private Repos**: Default for security +- :icon{name="lucide:lock"} **2FA**: Enable in user settings for extra security +- :icon{name="lucide:file-text"} **Audit Log**: Review in admin panel regularly -## Pro Tips 💡 +## Pro Tips :icon{name="lucide:lightbulb"} 1. **Protected Branches**: Require reviews before merging to main 2. **Git LFS**: Enable for large files (models, assets, etc.) @@ -269,4 +269,4 @@ docker exec code_app gitea admin user change-password --username admin --passwor --- -*"Why use someone else's Git when you can host your own? Take back control, one commit at a time."* 🦊✨ +*"Why use someone else's Git when you can host your own? Take back control, one commit at a time."* :icon{name="lucide:git-branch"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/dash.md b/Projects/kompose/docs/content/5.stacks/dash.md similarity index 99% rename from Projects/kompose/docs/content/docs/stacks/dash.md rename to Projects/kompose/docs/content/5.stacks/dash.md index 4b0d1e63..d107f7d7 100644 --- a/Projects/kompose/docs/content/docs/stacks/dash.md +++ b/Projects/kompose/docs/content/5.stacks/dash.md @@ -1,10 +1,10 @@ --- title: Homepage Dashboard (Dash) description: Documentation for the dash stack +navigation: + icon: i-lucide-bar-chart --- -# Homepage Dashboard (Dash) - This directory contains the configuration for the [Homepage](https://gethomepage.dev) dashboard service, which provides a centralized view of all kompose.sh services. ## Structure diff --git a/Projects/kompose/docs/content/docs/stacks/data.md b/Projects/kompose/docs/content/5.stacks/data.md similarity index 80% rename from Projects/kompose/docs/content/docs/stacks/data.md rename to Projects/kompose/docs/content/5.stacks/data.md index cfc7dc75..037d5ea5 100644 --- a/Projects/kompose/docs/content/docs/stacks/data.md +++ b/Projects/kompose/docs/content/5.stacks/data.md @@ -1,10 +1,10 @@ --- -title: Data Stack - The Memory Palace of Your Infrastructure +title: Data - The Memory Palace of Your Infrastructure description: "In data we trust... and backup, and replicate, and backup again" +navigation: + icon: i-lucide-database --- -# 🗄️ Data Stack - The Memory Palace of Your Infrastructure - > *"In data we trust... and backup, and replicate, and backup again"* - Every DBA Ever ## What's This All About? @@ -13,7 +13,7 @@ This is the beating heart of your infrastructure - where all the data lives, bre ## The Data Dream Team -### 🐘 PostgreSQL +### :icon{name="simple-icons:postgresql"} PostgreSQL **Container**: `data_postgres` **Image**: `postgres:latest` @@ -21,11 +21,11 @@ This is the beating heart of your infrastructure - where all the data lives, bre **Volume**: `pgdata` The elephant in the room (literally, look at the logo!). PostgreSQL is your rock-solid relational database: -- 💪 **ACID Compliance**: Your data stays consistent, always -- 🔒 **Rock Solid**: Banks trust it, you should too -- 📊 **Advanced Features**: JSON, full-text search, geospatial data -- 🚀 **Performance**: Handles millions of rows like a champ -- 🔄 **Extensible**: PostGIS, TimescaleDB, and more +- :icon{name="lucide:dumbbell"} **ACID Compliance**: Your data stays consistent, always +- :icon{name="lucide:lock"} **Rock Solid**: Banks trust it, you should too +- :icon{name="lucide:bar-chart"} **Advanced Features**: JSON, full-text search, geospatial data +- :icon{name="lucide:rocket"} **Performance**: Handles millions of rows like a champ +- :icon{name="lucide:refresh-cw"} **Extensible**: PostGIS, TimescaleDB, and more **Who Uses It**: - `auth` → Keycloak database @@ -33,20 +33,20 @@ The elephant in the room (literally, look at the logo!). PostgreSQL is your rock - `auto` → Semaphore database - `sexy` → Directus CMS database - `track` → Umami analytics database -- Basically, everyone! 🎉 +- Basically, everyone! :icon{name="lucide:party-popper"} -### ⚡ Redis +### :icon{name="lucide:zap"} Redis **Container**: `data_redis` **Image**: `redis:latest` **Port**: 6379 The speed demon of data storage! Redis is your in-memory cache: -- 🏎️ **Lightning Fast**: Sub-millisecond response times -- 💾 **In-Memory**: Data lives in RAM for max speed -- 🔑 **Key-Value Store**: Simple and effective -- 📦 **Pub/Sub**: Real-time messaging support -- ⏰ **Expiration**: Auto-delete old data +- :icon{name="lucide:car"} **Lightning Fast**: Sub-millisecond response times +- :icon{name="lucide:hard-drive"} **In-Memory**: Data lives in RAM for max speed +- :icon{name="lucide:key"} **Key-Value Store**: Simple and effective +- :icon{name="lucide:package"} **Pub/Sub**: Real-time messaging support +- :icon{name="lucide:clock"} **Expiration**: Auto-delete old data **Who Uses It**: - `sexy` → Directus cache for faster API responses @@ -60,11 +60,11 @@ The speed demon of data storage! Redis is your in-memory cache: **Home**: http://localhost:8088 Your graphical database management interface: -- 🖱️ **Visual Interface**: No SQL required (but you can if you want!) -- 📊 **Query Tool**: Run queries and see pretty results -- 🔍 **Database Explorer**: Browse tables, views, functions -- 📈 **Monitoring**: Check performance and connections -- 🛠️ **Management**: Create, modify, backup databases +- :icon{name="lucide:mouse"} **Visual Interface**: No SQL required (but you can if you want!) +- :icon{name="lucide:bar-chart"} **Query Tool**: Run queries and see pretty results +- :icon{name="lucide:search"} **Database Explorer**: Browse tables, views, functions +- :icon{name="lucide:trending-up"} **Monitoring**: Check performance and connections +- :icon{name="lucide:hammer"} **Management**: Create, modify, backup databases ## Architecture Overview @@ -119,7 +119,7 @@ ADMIN_PASSWORD=your_password **Data Persistence**: `pgadmin-data` volume stores your server configurations -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### Postgres @@ -244,7 +244,7 @@ docker exec data_redis redis-cli INFO stats docker exec -it data_redis redis-cli MONITOR ``` -### Flush All Data (⚠️ DANGER!) +### Flush All Data (:icon{name="lucide:alert-triangle"} DANGER!) ```bash docker exec data_redis redis-cli FLUSHALL @@ -265,7 +265,7 @@ docker exec data_redis redis-cli INFO memory | Redis | 6379 | 6379 | Direct + kompose network | | pgAdmin | 80 | 8088 | http://localhost:8088 | -## Volumes & Persistence 💾 +## Volumes & Persistence :icon{name="lucide:hard-drive"} ### pgdata PostgreSQL database files live here. **DON'T DELETE THIS** unless you enjoy pain! @@ -273,7 +273,7 @@ PostgreSQL database files live here. **DON'T DELETE THIS** unless you enjoy pain ### pgadmin-data Your pgAdmin settings and configurations. -## Security Best Practices 🔒 +## Security Best Practices :icon{name="lucide:lock"} 1. **Strong Passwords**: Use long, random passwords 2. **Network Isolation**: Only expose ports you need @@ -282,7 +282,7 @@ Your pgAdmin settings and configurations. 5. **SSL Connections**: Consider enabling for production 6. **Update Regularly**: Keep images up to date -## Performance Tips 💡 +## Performance Tips :icon{name="lucide:lightbulb"} ### PostgresSQL Server @@ -368,7 +368,7 @@ pgbouncer: - **SLOWLOG**: Track slow commands - **CLIENT LIST**: Active connections -## When Things Go Wrong 🚨 +## When Things Go Wrong :icon{name="lucide:siren"} ### Database Corruption 1. Stop all applications @@ -387,11 +387,11 @@ pgbouncer: 3. Increase max_connections (PostgreSQL) 4. Implement connection pooling -## Fun Database Facts 🎓 +## Fun Database Facts :icon{name="lucide:graduation-cap"} - PostgreSQL started in 1986 at UC Berkeley (older than some developers!) - Redis stands for "REmote DIctionary Server" -- PostgreSQL supports storing emojis (🐘💖) +- PostgreSQL supports storing emojis (:icon{name="simple-icons:postgresql"}💖) - Redis can process millions of operations per second - pgAdmin is used by database admins worldwide @@ -404,4 +404,4 @@ pgbouncer: --- -*"Data is the new oil, but unlike oil, you can actually back it up."* - Modern DevOps Proverb 💾✨ +*"Data is the new oil, but unlike oil, you can actually back it up."* - Modern DevOps Proverb :icon{name="lucide:hard-drive"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/dock.md b/Projects/kompose/docs/content/5.stacks/dock.md similarity index 81% rename from Projects/kompose/docs/content/docs/stacks/dock.md rename to Projects/kompose/docs/content/5.stacks/dock.md index 334e733d..3ae2957f 100644 --- a/Projects/kompose/docs/content/docs/stacks/dock.md +++ b/Projects/kompose/docs/content/5.stacks/dock.md @@ -1,10 +1,10 @@ --- -title: � Dock Stack - Your Docker Compose Command Center +title: Dock - Docker Compose Command Center description: "Making Docker Compose actually fun since 2023" +navigation: + icon: i-lucide-ship-wheel --- -# 🐳 Dock Stack - Your Docker Compose Command Center - > *"Making Docker Compose actually fun since 2023"* - Dockge ## What's This All About? @@ -21,13 +21,13 @@ Dockge (pronounced "dog-ee" 🐕) is a fancy, self-hosted web UI for managing Do **Home**: http://localhost:5001 Dockge makes Docker Compose management feel like playing with LEGO: -- 📋 **Visual Stack Management**: See all your compose stacks at a glance +- :icon{name="lucide:clipboard"} **Visual Stack Management**: See all your compose stacks at a glance - ✏️ **Built-in Editor**: Edit compose files right in the browser -- 🚀 **One-Click Deploy**: Start, stop, restart with a button -- 📊 **Real-time Logs**: Watch your containers do their thing -- 📝 **Compose File Preview**: See what you're deploying before you deploy it -- 🎨 **Clean Interface**: No cluttered UI, just what you need -- 🔄 **Update Tracking**: Know when your stacks have changes +- :icon{name="lucide:rocket"} **One-Click Deploy**: Start, stop, restart with a button +- :icon{name="lucide:bar-chart"} **Real-time Logs**: Watch your containers do their thing +- :icon{name="lucide:file-text"} **Compose File Preview**: See what you're deploying before you deploy it +- :icon{name="lucide:palette"} **Clean Interface**: No cluttered UI, just what you need +- :icon{name="lucide:refresh-cw"} **Update Tracking**: Know when your stacks have changes ## How It Works @@ -64,7 +64,7 @@ This is where Dockge looks for your compose files. All the `kompose` stacks shou mkdir -p /root/repos/compose ``` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} 1. **Ensure stacks directory exists**: ```bash @@ -84,7 +84,7 @@ mkdir -p /root/repos/compose 4. **Create your first user**: - First visitor gets to create the admin account - Choose a strong password - - You're in! 🎉 + - You're in! :icon{name="lucide:party-popper"} ## Using Dockge Like a Pro @@ -102,16 +102,16 @@ mkdir -p /root/repos/compose - 8080:80 ``` 4. **Click "Deploy"** -5. **Watch it go!** 🚀 +5. **Watch it go!** :icon{name="lucide:rocket"} ### Managing Existing Stacks From the dashboard, you can: - ▶️ **Start**: Fire up all containers - ⏸️ **Stop**: Gracefully stop everything -- 🔄 **Restart**: Quick bounce -- 📝 **Edit**: Change the compose file -- 🔧 **Update**: Pull new images and redeploy +- :icon{name="lucide:refresh-cw"} **Restart**: Quick bounce +- :icon{name="lucide:file-text"} **Edit**: Change the compose file +- :icon{name="lucide:wrench"} **Update**: Pull new images and redeploy - 🗑️ **Delete**: Remove stack completely ### Viewing Logs @@ -162,7 +162,7 @@ Then restart Dockge: docker compose down && docker compose up -d ``` -## Features You'll Love ❤️ +## Features You'll Love :icon{name="lucide:heart"} ### Terminal Access Click "Terminal" to get a shell in any container - no `docker exec` needed! @@ -185,9 +185,9 @@ Select multiple stacks and start/stop them all at once. - **Network**: `kompose` (sees all your other containers) - **Docker Socket**: Full access (read + write) -## Security Considerations 🔒 +## Security Considerations :icon{name="lucide:lock"} -### ⚠️ Important Security Notes +### :icon{name="lucide:alert-triangle"} Important Security Notes 1. **No Built-in Auth Beyond First User**: After creating admin, there's basic auth 2. **Docker Socket Access**: Dockge can do ANYTHING Docker can @@ -256,7 +256,7 @@ A: Check Docker socket performance, might have many containers **Q: Lost admin password?** A: Delete the Dockge volume and start fresh (you'll lose user accounts) -## Advanced Tips 💡 +## Advanced Tips :icon{name="lucide:lightbulb"} ### Custom Network Configuration @@ -313,12 +313,12 @@ services: ## Why Choose Dockge? -- 🎯 **Compose-Native**: Built specifically for docker-compose +- :icon{name="lucide:target"} **Compose-Native**: Built specifically for docker-compose - 🪶 **Lightweight**: Tiny footprint, fast UI -- 🎨 **Beautiful**: Clean, modern interface -- 🔧 **Simple**: Does one thing really well +- :icon{name="lucide:palette"} **Beautiful**: Clean, modern interface +- :icon{name="lucide:wrench"} **Simple**: Does one thing really well - 🆓 **Free**: Open source, no enterprise upsells -- 👨‍💻 **Dev-Friendly**: Doesn't hide the compose file from you +- 👨‍:icon{name="lucide:laptop"} **Dev-Friendly**: Doesn't hide the compose file from you ## Integration Ideas @@ -335,7 +335,7 @@ deploy: ### With Monitoring -Dockge + Grafana + Prometheus = 📊 Beautiful dashboards +Dockge + Grafana + Prometheus = :icon{name="lucide:bar-chart"} Beautiful dashboards ### With Backup Tools @@ -353,4 +353,4 @@ Automated backups of your compose files: --- -*"The best UI is the one that gets out of your way and lets you work."* - Dockge Philosophy 🐳✨ +*"The best UI is the one that gets out of your way and lets you work."* - Dockge Philosophy 🐳:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/home.md b/Projects/kompose/docs/content/5.stacks/home.md similarity index 64% rename from Projects/kompose/docs/content/docs/stacks/home.md rename to Projects/kompose/docs/content/5.stacks/home.md index ae336b18..ce252804 100644 --- a/Projects/kompose/docs/content/docs/stacks/home.md +++ b/Projects/kompose/docs/content/5.stacks/home.md @@ -1,10 +1,10 @@ --- -title: � Home Stack - Your Smart Home Command Center +title: Home - Smart Home Command Center description: "Home is where the automation is!" +navigation: + icon: i-lucide-home --- -# 🏠 Home Stack - Your Smart Home Command Center - > *"Home is where the automation is!"* - Every Home Assistant user ## What's This All About? @@ -13,7 +13,7 @@ This stack transforms your house into a smart home! Home Assistant is the open-s ## The Star of the Show -### 🏠 Home Assistant +### :icon{name="lucide:home"} Home Assistant **Container**: `home_app` **Image**: `ghcr.io/home-assistant/home-assistant:stable` @@ -21,14 +21,14 @@ This stack transforms your house into a smart home! Home Assistant is the open-s **Port**: 8123 Home Assistant is your smart home's mission control: -- 🔌 **2000+ Integrations**: Control almost anything -- 🤖 **Powerful Automations**: If this, then that (but better!) -- 🎨 **Beautiful UI**: Customizable dashboards +- :icon{name="lucide:plug"} **2000+ Integrations**: Control almost anything +- :icon{name="lucide:bot"} **Powerful Automations**: If this, then that (but better!) +- :icon{name="lucide:palette"} **Beautiful UI**: Customizable dashboards - 📱 **Mobile Apps**: Control from anywhere (iOS & Android) - 🗣️ **Voice Control**: Alexa, Google, Siri integration -- 🔐 **Privacy First**: Your data stays home +- :icon{name="lucide:lock-keyhole"} **Privacy First**: Your data stays home - 🌙 **Energy Monitoring**: Track usage and costs -- 📊 **History & Analytics**: Visualize your home +- :icon{name="lucide:bar-chart"} **History & Analytics**: Visualize your home ## Configuration Breakdown @@ -61,10 +61,10 @@ This makes backups super easy - just copy the config folder! | Variable | What It Does | Cool Factor | |----------|-------------|-------------| -| `COMPOSE_PROJECT_NAME` | Stack identifier | 📦 Organization | -| `TZ` | Your timezone | ⏰ CRITICAL for automations! | -| `TRAEFIK_HOST` | Domain name | 🌐 Your home's address | -| `APP_PORT` | Web interface port | 🎯 Internal routing | +| `COMPOSE_PROJECT_NAME` | Stack identifier | :icon{name="lucide:package"} Organization | +| `TZ` | Your timezone | :icon{name="lucide:clock"} CRITICAL for automations! | +| `TRAEFIK_HOST` | Domain name | :icon{name="lucide:globe"} Your home's address | +| `APP_PORT` | Web interface port | :icon{name="lucide:target"} Internal routing | ## Troubleshooting @@ -77,12 +77,12 @@ A: Check network mode is set to `host` for mDNS discovery **Q: Automations not triggering?** A: Verify timezone is set correctly - this is crucial! -## Security Notes 🔒 +## Security Notes :icon{name="lucide:lock"} -- 🔐 **Strong Password**: Your home security depends on it! -- 🌐 **HTTPS Only**: Traefik provides SSL automatically +- :icon{name="lucide:lock-keyhole"} **Strong Password**: Your home security depends on it! +- :icon{name="lucide:globe"} **HTTPS Only**: Traefik provides SSL automatically - 👁️ **Two-Factor**: Enable in user profile -- 🔑 **API Tokens**: Use long-lived tokens, not passwords +- :icon{name="lucide:key"} **API Tokens**: Use long-lived tokens, not passwords ## Resources @@ -92,4 +92,4 @@ A: Verify timezone is set correctly - this is crucial! --- -*"The smart home isn't about the technology - it's about making life simpler, more comfortable, and maybe a little more magical."* ✨🏠 +*"The smart home isn't about the technology - it's about making life simpler, more comfortable, and maybe a little more magical."* :icon{name="lucide:sparkles"}:icon{name="lucide:home"} diff --git a/Projects/kompose/docs/content/5.stacks/index.md b/Projects/kompose/docs/content/5.stacks/index.md new file mode 100644 index 00000000..efeac60a --- /dev/null +++ b/Projects/kompose/docs/content/5.stacks/index.md @@ -0,0 +1,51 @@ +--- +title: Stack Reference +description: Detailed documentation for all Kompose stacks +--- + +This section contains detailed documentation for each stack in the Kompose ecosystem. + +## Available Stacks + +- [Auth](/stacks/auth) +- [Auto](/stacks/auto) +- [Blog](/stacks/blog) +- [Chain](/stacks/chain) +- [Chat](/stacks/chat) +- [Code](/stacks/code) +- [Dash](/stacks/dash) +- [Data](/stacks/data) +- [Dock](/stacks/dock) +- [Home](/stacks/home) +- [Link](/stacks/link) +- [News](/stacks/news) +- [Proxy](/stacks/proxy) +- [Sexy](/stacks/sexy) +- [Trace](/stacks/trace) +- [Track](/stacks/track) +- [Vault](/stacks/vault) +- [Vpn](/stacks/vpn) + +## Stack Categories + +### Infrastructure Stacks +Core infrastructure services that other stacks depend on: +- [Data](/stacks/data) - PostgreSQL & Redis databases +- [Proxy](/stacks/proxy) - Traefik reverse proxy +- [Trace](/stacks/trace) - SigNoz observability +- [Vault](/stacks/vault) - Vaultwarden password manager +- [VPN](/stacks/vpn) - WireGuard VPN + +### Application Stacks +Production application services: +- [Auth](/stacks/auth) - Keycloak authentication +- [Blog](/stacks/blog) - Static website server +- [News](/stacks/news) - Letterspace newsletter platform +- [Sexy](/stacks/sexy) - Directus CMS + +### Utility Stacks +Management and monitoring tools: +- [Dock](/stacks/dock) - Dockge Docker UI +- [Chat](/stacks/chat) - Gotify notifications +- [Track](/stacks/track) - Umami analytics +- [Auto](/stacks/auto) - Semaphore CI/CD diff --git a/Projects/kompose/docs/content/docs/stacks/link.md b/Projects/kompose/docs/content/5.stacks/link.md similarity index 84% rename from Projects/kompose/docs/content/docs/stacks/link.md rename to Projects/kompose/docs/content/5.stacks/link.md index da3d5256..c9d9087f 100644 --- a/Projects/kompose/docs/content/docs/stacks/link.md +++ b/Projects/kompose/docs/content/5.stacks/link.md @@ -1,10 +1,10 @@ --- -title: � Link Stack - Bookmark Manager +title: Link - Bookmark Manager description: Documentation for the link stack +navigation: + icon: i-lucide-link --- -# 🔗 Link Stack - Bookmark Manager - Complete documentation for Linkwarden is available in the artifacts. ## Quick Start diff --git a/Projects/kompose/docs/content/docs/stacks/news.md b/Projects/kompose/docs/content/5.stacks/news.md similarity index 78% rename from Projects/kompose/docs/content/docs/stacks/news.md rename to Projects/kompose/docs/content/5.stacks/news.md index ed68322e..3f55a758 100644 --- a/Projects/kompose/docs/content/docs/stacks/news.md +++ b/Projects/kompose/docs/content/5.stacks/news.md @@ -1,19 +1,19 @@ --- -title: News Stack - Your Self-Hosted Newsletter Empire +title: News - Self-Hosted Newsletter Empire description: "Forget MailChimp, we're going full indie!" +navigation: + icon: i-lucide-newspaper --- -# 📰 News Stack - Your Self-Hosted Newsletter Empire - > *"Forget MailChimp, we're going full indie!"* - Letterspace ## What's This All About? -This is Letterspace - your open-source, privacy-focused newsletter platform! Think Substack meets indie-hacker meets "I actually own my subscriber list." Send beautiful newsletters, manage subscribers, track campaigns, and keep all your data under YOUR control! +This is Letterspace - open-source, privacy-focused newsletter platform! Think Substack meets indie-hacker meets "I actually own my subscriber list." Send beautiful newsletters, manage subscribers, track campaigns, and keep all your data under YOUR control! ## The Publishing Powerhouse -### 📬 Letterspace Backend +### :icon{name="lucide:mailbox"} Letterspace Backend **Container**: `news_backend` **Image**: Custom build from the monorepo @@ -21,14 +21,14 @@ This is Letterspace - your open-source, privacy-focused newsletter platform! Thi **Technology**: Node.js + Express + Prisma + PostgreSQL The brains of the operation: -- 📝 **Email Campaigns**: Create and send newsletters -- 👥 **Subscriber Management**: Import, export, segment -- 📊 **Analytics**: Track opens, clicks, and engagement -- 🎨 **Templates**: Reusable email templates -- 📧 **SMTP Integration**: Works with any email provider -- 🔐 **Double Opt-in**: Legal compliance built-in -- 🗄️ **Database-Driven**: PostgreSQL for reliability -- 🚀 **Cron Jobs**: Automated sending and maintenance +- :icon{name="lucide:file-text"} **Email Campaigns**: Create and send newsletters +- :icon{name="lucide:users"} **Subscriber Management**: Import, export, segment +- :icon{name="lucide:bar-chart"} **Analytics**: Track opens, clicks, and engagement +- :icon{name="lucide:palette"} **Templates**: Reusable email templates +- :icon{name="lucide:mail"} **SMTP Integration**: Works with any email provider +- :icon{name="lucide:lock-keyhole"} **Double Opt-in**: Legal compliance built-in +- :icon{name="lucide:database"} **Database-Driven**: PostgreSQL for reliability +- :icon{name="lucide:rocket"} **Cron Jobs**: Automated sending and maintenance ### The Stack Structure @@ -45,35 +45,35 @@ news/ │ └── shared/ ← Shared utilities ``` -## Features That Make You Look Pro ✨ +## Features That Make You Look Pro :icon{name="lucide:sparkles"} ### Campaign Management -- 📧 Create beautiful emails with templates +- :icon{name="lucide:mail"} Create beautiful emails with templates - 📅 Schedule sends for later -- 🎯 Segment subscribers by tags/lists -- 📝 Preview before sending -- 🔄 A/B testing (coming soon™) +- :icon{name="lucide:target"} Segment subscribers by tags/lists +- :icon{name="lucide:file-text"} Preview before sending +- :icon{name="lucide:refresh-cw"} A/B testing (coming soon™) ### Subscriber Management - 📥 Import via CSV - ✅ Double opt-in confirmation -- 🏷️ Tag and categorize -- 📊 View engagement history -- 🚫 Easy unsubscribe management +- :icon{name="lucide:tag"} Tag and categorize +- :icon{name="lucide:bar-chart"} View engagement history +- :icon{name="lucide:ban"} Easy unsubscribe management ### Analytics Dashboard -- 📈 Open rates +- :icon{name="lucide:trending-up"} Open rates - 👆 Click-through rates - 📉 Unsubscribe rates -- 📊 Subscriber growth over time -- 🎯 Campaign performance +- :icon{name="lucide:bar-chart"} Subscriber growth over time +- :icon{name="lucide:target"} Campaign performance ### Email Features -- 🎨 Custom HTML templates +- :icon{name="lucide:palette"} Custom HTML templates - 📱 Mobile-responsive designs - 🖼️ Image support -- 🔗 Link tracking -- 👤 Personalization ({{name}}, etc.) +- :icon{name="lucide:link"} Link tracking +- :icon{name="lucide:user"} Personalization ({{name}}, etc.) ## Configuration Breakdown @@ -108,7 +108,7 @@ JWT_SECRET=your-super-secret-key-here ``` Generate with: `openssl rand -hex 32` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} 1. **Ensure database exists**: ```bash @@ -177,7 +177,7 @@ The backend runs several automated jobs: - `GET /api/v1/lists` - View all lists - `POST /api/v1/lists/:id/subscribers` - Add to list -## Sending Your First Newsletter 📬 +## Sending Your First Newsletter :icon{name="lucide:mailbox"} 1. **Create a list**: ```bash @@ -233,7 +233,7 @@ The backend runs several automated jobs: - `Click` - Link clicks - `Unsubscribe` - Opt-outs -## Privacy & Compliance 🔒 +## Privacy & Compliance :icon{name="lucide:lock"} ### GDPR Compliant - ✅ Double opt-in @@ -317,7 +317,7 @@ docker exec news_backend npx prisma migrate reset **Q: API not responding?** A: Check if PostgreSQL is healthy and JWT_SECRET is set -## Email Best Practices 📧 +## Email Best Practices :icon{name="lucide:mail"} ### Subject Lines - Keep under 50 characters @@ -370,7 +370,7 @@ trackOpen(subscriberId, campaignId) trackClick(subscriberId, linkUrl) ``` -## Scaling Tips 🚀 +## Scaling Tips :icon{name="lucide:rocket"} ### For Large Lists (10k+ subscribers) 1. Use dedicated SMTP service (SendGrid, Mailgun) @@ -394,4 +394,4 @@ trackClick(subscriberId, linkUrl) --- -*"The money is in the list, but the trust is in respecting that list."* - Email Marketing Wisdom 💌✨ +*"The money is in the list, but the trust is in respecting that list."* - Email Marketing Wisdom 💌:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/proxy.md b/Projects/kompose/docs/content/5.stacks/proxy.md similarity index 84% rename from Projects/kompose/docs/content/docs/stacks/proxy.md rename to Projects/kompose/docs/content/5.stacks/proxy.md index 924d52c5..e1f01c2d 100644 --- a/Projects/kompose/docs/content/docs/stacks/proxy.md +++ b/Projects/kompose/docs/content/5.stacks/proxy.md @@ -1,10 +1,10 @@ --- -title: Proxy Stack - The Traffic Cop of Your Infrastructure +title: Proxy - The Traffic Cop of Your Infrastructure description: "Beep beep! Make way for HTTPS traffic!" +navigation: + icon: i-lucide-traffic-cone --- -# 🚦 Proxy Stack - The Traffic Cop of Your Infrastructure - > *"Beep beep! Make way for HTTPS traffic!"* - Traefik ## What's This All About? @@ -13,7 +13,7 @@ Traefik (pronounced "traffic") is your reverse proxy and load balancer extraordi ## The Traffic Master -### 🎯 Traefik +### :icon{name="lucide:target"} Traefik **Container**: `proxy_app` **Image**: `traefik:latest` @@ -21,13 +21,13 @@ Traefik (pronounced "traffic") is your reverse proxy and load balancer extraordi **Home**: http://localhost:8080/dashboard/ Traefik is the Swiss Army knife of reverse proxies: -- 🔒 **Auto SSL**: Let's Encrypt certificates automatically -- 🏷️ **Service Discovery**: Finds your containers via Docker labels -- 🔄 **Auto-Config**: No config files to edit (mostly!) -- 📊 **Dashboard**: Beautiful visual overview -- ⚡ **Fast**: Written in Go for max performance -- 🔌 **Middleware**: Compress, auth, rate limit, and more -- 🎯 **Load Balancing**: Distribute traffic intelligently +- :icon{name="lucide:lock"} **Auto SSL**: Let's Encrypt certificates automatically +- :icon{name="lucide:tag"} **Service Discovery**: Finds your containers via Docker labels +- :icon{name="lucide:refresh-cw"} **Auto-Config**: No config files to edit (mostly!) +- :icon{name="lucide:bar-chart"} **Dashboard**: Beautiful visual overview +- :icon{name="lucide:zap"} **Fast**: Written in Go for max performance +- :icon{name="lucide:plug"} **Middleware**: Compress, auth, rate limit, and more +- :icon{name="lucide:target"} **Load Balancing**: Distribute traffic intelligently ## How It Works @@ -85,7 +85,7 @@ Let's decode the Traefik startup commands: - Stores certs in `/letsencrypt/acme.json` - Auto-renewal (60 days before expiry) -## Dashboard Access 📊 +## Dashboard Access :icon{name="lucide:bar-chart"} ### Development/Testing ``` @@ -93,11 +93,11 @@ URL: http://localhost:8080/dashboard/ ``` **Features**: -- 📋 All routers and services -- 🔒 Active certificates -- 🌐 Entry points status -- 📊 Real-time metrics -- 🔍 Request logs +- :icon{name="lucide:clipboard"} All routers and services +- :icon{name="lucide:lock"} Active certificates +- :icon{name="lucide:globe"} Entry points status +- :icon{name="lucide:bar-chart"} Real-time metrics +- :icon{name="lucide:search"} Request logs ### Production (Secure It!) @@ -113,7 +113,7 @@ Generate password hash: htpasswd -nb admin your_password ``` -## Label-Based Configuration 🏷️ +## Label-Based Configuration :icon{name="lucide:tag"} Every service in kompose uses Traefik labels. Here's what they mean: @@ -158,7 +158,7 @@ labels: docker network create kompose ``` -## SSL Certificate Management 🔒 +## SSL Certificate Management :icon{name="lucide:lock"} ### Let's Encrypt Process @@ -174,7 +174,7 @@ docker network create kompose /var/local/data/traefik/letsencrypt/acme.json ``` -**⚠️ PROTECT THIS FILE!** +**:icon{name="lucide:alert-triangle"} PROTECT THIS FILE!** - Contains private keys - Encrypted by Traefik - Backup regularly @@ -189,7 +189,7 @@ http://localhost:8080/dashboard/#/http/routers sudo cat /var/local/data/traefik/letsencrypt/acme.json | jq '.resolver.Certificates' ``` -## Common Middleware 🔧 +## Common Middleware :icon{name="lucide:wrench"} ### Rate Limiting ```yaml @@ -218,7 +218,7 @@ sudo cat /var/local/data/traefik/letsencrypt/acme.json | jq '.resolver.Certifica - "traefik.http.middlewares.stripprefix.stripprefix.prefixes=/api" ``` -## Health Check 🏥 +## Health Check :icon{name="lucide:hospital"} Traefik has a built-in health check: ```bash @@ -271,7 +271,7 @@ docker logs proxy_app -f 4. **Check dashboard** to confirm routing -## Troubleshooting 🔍 +## Troubleshooting :icon{name="lucide:search"} **Q: Service not accessible?** ```bash @@ -334,7 +334,7 @@ services: - "traefik.http.services.myapp.loadbalancer.server.weight=10" ``` -## Security Best Practices 🛡️ +## Security Best Practices :icon{name="lucide:shield"} 1. **Secure Dashboard**: - Add authentication @@ -359,7 +359,7 @@ services: - Watch for unusual patterns - Set up alerts for errors -## Performance Tips ⚡ +## Performance Tips :icon{name="lucide:zap"} 1. **Enable Compression**: Already done for most services! 2. **HTTP/2**: Automatically enabled with HTTPS @@ -367,7 +367,7 @@ services: 4. **Caching**: Use middleware or CDN 5. **Keep-Alive**: Enabled by default -## Fun Traefik Facts 🎓 +## Fun Traefik Facts :icon{name="lucide:graduation-cap"} - Written in Go (blazing fast!) - Powers thousands of production systems @@ -384,4 +384,4 @@ services: --- -*"Life is like a reverse proxy - it's all about routing requests to the right destination."* - Ancient Traefik Wisdom 🚦✨ +*"Life is like a reverse proxy - it's all about routing requests to the right destination."* - Ancient Traefik Wisdom :icon{name="lucide:traffic-cone"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/sexy.md b/Projects/kompose/docs/content/5.stacks/sexy.md similarity index 80% rename from Projects/kompose/docs/content/docs/stacks/sexy.md rename to Projects/kompose/docs/content/5.stacks/sexy.md index 7ca04705..a7471807 100644 --- a/Projects/kompose/docs/content/docs/stacks/sexy.md +++ b/Projects/kompose/docs/content/5.stacks/sexy.md @@ -1,10 +1,10 @@ --- -title: � Sexy Stack - Your Headless CMS Runway +title: Sexy - Headless CMS Runway description: "We make content management look good!" +navigation: + icon: i-lucide-sparkles --- -# 💅 Sexy Stack - Your Headless CMS Runway - > *"We make content management look good!"* - Directus + SvelteKit ## What's This All About? @@ -13,7 +13,7 @@ This is your full-stack content management system! A headless CMS (Directus) pai ## The Power Couple -### 🎨 Directus API +### :icon{name="lucide:palette"} Directus API **Container**: `sexy_api` **Image**: `directus/directus:11.12.0` @@ -21,16 +21,16 @@ This is your full-stack content management system! A headless CMS (Directus) pai **Home**: https://sexy.pivoine.art/api Directus is the headless CMS that doesn't make you cry: -- 📊 **Database-First**: Works with your existing database +- :icon{name="lucide:bar-chart"} **Database-First**: Works with your existing database - 🎛️ **Admin Panel**: Beautiful UI out of the box -- 🔌 **REST + GraphQL**: Choose your flavor +- :icon{name="lucide:plug"} **REST + GraphQL**: Choose your flavor - 🖼️ **Asset Management**: Images, videos, files - all handled -- 👥 **User Roles**: Granular permissions -- 🔄 **Real-time**: WebSocket support for live updates -- 🎨 **Customizable**: Extensions, hooks, custom fields -- 🔐 **Auth**: Built-in user management and SSO +- :icon{name="lucide:users"} **User Roles**: Granular permissions +- :icon{name="lucide:refresh-cw"} **Real-time**: WebSocket support for live updates +- :icon{name="lucide:palette"} **Customizable**: Extensions, hooks, custom fields +- :icon{name="lucide:lock-keyhole"} **Auth**: Built-in user management and SSO -### ⚡ SvelteKit Frontend +### :icon{name="lucide:zap"} SvelteKit Frontend **Container**: `sexy_frontend` **Image**: `node:22` @@ -38,12 +38,12 @@ Directus is the headless CMS that doesn't make you cry: **Home**: https://sexy.pivoine.art The face of your content: -- 🚀 **Lightning Fast**: Svelte's magic compilation -- 🎯 **SEO Friendly**: Server-side rendering +- :icon{name="lucide:rocket"} **Lightning Fast**: Svelte's magic compilation +- :icon{name="lucide:target"} **SEO Friendly**: Server-side rendering - 📱 **Responsive**: Mobile-first design -- 🎨 **Beautiful**: Because sexy.pivoine.art deserves it -- 🔄 **Real-time Updates**: Live data from Directus -- 💅 **Styled**: Tailwind CSS + custom design +- :icon{name="lucide:palette"} **Beautiful**: Because sexy.pivoine.art deserves it +- :icon{name="lucide:refresh-cw"} **Real-time Updates**: Live data from Directus +- :icon{name="lucide:sparkles"} **Styled**: Tailwind CSS + custom design ## Architecture @@ -106,7 +106,7 @@ Running from `/var/www/sexy.pivoine.art`: node build/index.js ``` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### 1. Create Database ```bash @@ -163,16 +163,16 @@ Password: Your ADMIN_PASSWORD ### Data Model **Field Types**: -- 📝 Text (String, Text, Markdown) +- :icon{name="lucide:file-text"} Text (String, Text, Markdown) - 🔢 Numbers (Integer, Float, Decimal) - 📅 Dates (Date, DateTime, Time) - ✅ Booleans & Toggles -- 🎨 JSON & Code -- 🔗 Relations (O2M, M2O, M2M) +- :icon{name="lucide:palette"} JSON & Code +- :icon{name="lucide:link"} Relations (O2M, M2O, M2M) - 🖼️ Files & Images - 📍 Geolocation -## API Usage 🔌 +## API Usage :icon{name="lucide:plug"} ### REST API @@ -268,7 +268,7 @@ Directus automatically generates thumbnails: > ``` -## Real-Time Updates 🔄 +## Real-Time Updates :icon{name="lucide:refresh-cw"} ### WebSocket Connection @@ -288,7 +288,7 @@ client.subscribe('posts', { }); ``` -## Extensions & Customization 🔧 +## Extensions & Customization :icon{name="lucide:wrench"} ### Custom Hooks @@ -357,7 +357,7 @@ Custom extensions and functionality. - **Author**: Create own posts - **Public**: Read published content -## Performance Optimization 🚀 +## Performance Optimization :icon{name="lucide:rocket"} ### Caching Strategy ```javascript @@ -377,7 +377,7 @@ CACHE_TTL=300 // 5 minutes - Query result caching - Connection pooling -## Security Best Practices 🔒 +## Security Best Practices :icon{name="lucide:lock"} 1. **Change Default Password**: First thing! 2. **API Access Tokens**: Use tokens, not passwords @@ -429,15 +429,15 @@ A: Check WEBSOCKETS_ENABLED=true and wss:// connection - Version control - Multi-language support -## Why This Stack is Sexy 💅 +## Why This Stack is Sexy :icon{name="lucide:sparkles"} -- ✨ **Developer Experience**: Joy to work with -- 🚀 **Performance**: Fast out of the box -- 🎨 **Design**: Beautiful admin interface -- 🔧 **Flexibility**: Customize everything +- :icon{name="lucide:sparkles"} **Developer Experience**: Joy to work with +- :icon{name="lucide:rocket"} **Performance**: Fast out of the box +- :icon{name="lucide:palette"} **Design**: Beautiful admin interface +- :icon{name="lucide:wrench"} **Flexibility**: Customize everything - 📱 **Modern**: Built with latest tech - 🆓 **Open Source**: Free forever -- 💪 **Production Ready**: Powers serious sites +- :icon{name="lucide:dumbbell"} **Production Ready**: Powers serious sites ## Resources @@ -448,4 +448,4 @@ A: Check WEBSOCKETS_ENABLED=true and wss:// connection --- -*"Content management should feel like art, not work."* - Sexy Philosophy 💅✨ +*"Content management should feel like art, not work."* - Sexy Philosophy :icon{name="lucide:sparkles"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/trace.md b/Projects/kompose/docs/content/5.stacks/trace.md similarity index 74% rename from Projects/kompose/docs/content/docs/stacks/trace.md rename to Projects/kompose/docs/content/5.stacks/trace.md index 2b5e9c5b..bb990da9 100644 --- a/Projects/kompose/docs/content/docs/stacks/trace.md +++ b/Projects/kompose/docs/content/5.stacks/trace.md @@ -1,19 +1,19 @@ --- -title: � Trace Stack - Your Observability Command Center +title: Trace - Observability Command Center description: "When your app goes boom, we tell you why!" +navigation: + icon: i-lucide-search --- -# 🔍 Trace Stack - Your Observability Command Center - > *"When your app goes boom, we tell you why!"* - SigNoz ## What's This All About? -SigNoz is your all-in-one observability platform! Think of it as having X-ray vision for your applications - see traces, metrics, and logs all in one place. It's like Datadog or New Relic, but open-source and running on YOUR infrastructure. When something breaks at 3 AM, SigNoz tells you exactly what, where, and why! 🚨 +SigNoz is your all-in-one observability platform! Think of it as having X-ray vision for your applications - see traces, metrics, and logs all in one place. It's like Datadog or New Relic, but open-source and running on YOUR infrastructure. When something breaks at 3 AM, SigNoz tells you exactly what, where, and why! :icon{name="lucide:siren"} ## The Observability Avengers -### 🎯 SigNoz +### :icon{name="lucide:target"} SigNoz **Container**: `trace_app` **Image**: `signoz/signoz:v0.96.1` @@ -21,56 +21,56 @@ SigNoz is your all-in-one observability platform! Think of it as having X-ray vi **Home**: http://localhost:7070 Your main dashboard and query engine: -- 📊 **APM**: Application Performance Monitoring -- 🔍 **Distributed Tracing**: Follow requests across services -- 📈 **Metrics**: CPU, memory, custom metrics -- 📝 **Logs**: Centralized log management -- 🎯 **Alerting**: Get notified when things break -- 🔗 **Service Maps**: Visualize your architecture +- :icon{name="lucide:bar-chart"} **APM**: Application Performance Monitoring +- :icon{name="lucide:search"} **Distributed Tracing**: Follow requests across services +- :icon{name="lucide:trending-up"} **Metrics**: CPU, memory, custom metrics +- :icon{name="lucide:file-text"} **Logs**: Centralized log management +- :icon{name="lucide:target"} **Alerting**: Get notified when things break +- :icon{name="lucide:link"} **Service Maps**: Visualize your architecture - ⏱️ **Performance**: Find bottlenecks - 🐛 **Error Tracking**: Catch and debug errors -### 🗄️ ClickHouse +### :icon{name="lucide:database"} ClickHouse **Container**: `trace_clickhouse` **Image**: `clickhouse/clickhouse-server:25.5.6` The speed demon database: -- ⚡ **Columnar Storage**: Insanely fast queries -- 📊 **Analytics**: Perfect for time-series data -- 💾 **Compression**: Stores LOTS of data efficiently -- 🚀 **Performance**: Millions of rows/second -- 📈 **Scalable**: Grows with your needs +- :icon{name="lucide:zap"} **Columnar Storage**: Insanely fast queries +- :icon{name="lucide:bar-chart"} **Analytics**: Perfect for time-series data +- :icon{name="lucide:hard-drive"} **Compression**: Stores LOTS of data efficiently +- :icon{name="lucide:rocket"} **Performance**: Millions of rows/second +- :icon{name="lucide:trending-up"} **Scalable**: Grows with your needs -### 🐘 ZooKeeper +### :icon{name="simple-icons:postgresql"} ZooKeeper **Container**: `trace_zookeeper` **Image**: `signoz/zookeeper:3.7.1` The coordinator: -- 🎭 **Orchestration**: Manages distributed systems -- 🔄 **Coordination**: Keeps ClickHouse in sync -- 📋 **Configuration**: Centralized config management +- :icon{name="lucide:drama"} **Orchestration**: Manages distributed systems +- :icon{name="lucide:refresh-cw"} **Coordination**: Keeps ClickHouse in sync +- :icon{name="lucide:clipboard"} **Configuration**: Centralized config management -### 📡 OpenTelemetry Collector +### :icon{name="lucide:satellite"} OpenTelemetry Collector **Container**: `trace_otel_collector` **Image**: `signoz/signoz-otel-collector:v0.129.6` The data pipeline: - 📥 **Receives**: Traces, metrics, logs from apps -- 🔄 **Processes**: Transforms and enriches data +- :icon{name="lucide:refresh-cw"} **Processes**: Transforms and enriches data - 📤 **Exports**: Sends to ClickHouse -- 🎯 **Sampling**: Smart data collection -- 🔌 **Flexible**: Supports many data formats +- :icon{name="lucide:target"} **Sampling**: Smart data collection +- :icon{name="lucide:plug"} **Flexible**: Supports many data formats -### 🔧 Schema Migrators +### :icon{name="lucide:wrench"} Schema Migrators **Containers**: `trace_migrator_sync` & `trace_migrator_async` The database janitors: - 🗂️ **Migrations**: Set up database schema -- 🔄 **Updates**: Apply schema changes +- :icon{name="lucide:refresh-cw"} **Updates**: Apply schema changes - 🏗️ **Initialization**: Prepare ClickHouse ## Architecture Overview @@ -87,7 +87,7 @@ SigNoz UI ← You (investigate issues) ## The Three Pillars of Observability -### 1. 📊 Metrics (The Numbers) +### 1. :icon{name="lucide:bar-chart"} Metrics (The Numbers) What's happening right now? - Request rate (requests/second) - Error rate (errors/second) @@ -96,7 +96,7 @@ What's happening right now? **Example**: "API calls are up 200% but error rate is only 1%" -### 2. 🔍 Traces (The Journey) +### 2. :icon{name="lucide:search"} Traces (The Journey) How did a request flow through your system? - Distributed tracing across services - See exact path of each request @@ -105,7 +105,7 @@ How did a request flow through your system? **Example**: "User login → Auth service (50ms) → Database (200ms) → Session storage (10ms)" -### 3. 📝 Logs (The Details) +### 3. :icon{name="lucide:file-text"} Logs (The Details) What exactly happened? - Application logs - System logs @@ -144,7 +144,7 @@ SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 STORAGE=clickhouse # Backend storage engine ``` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### 1. Ensure Dependencies Ready ```bash @@ -240,42 +240,42 @@ span.end(); 3. See your service appear! 4. Click on it to see traces -## Using SigNoz Like a Pro 🎯 +## Using SigNoz Like a Pro :icon{name="lucide:target"} ### Services View See all your microservices: -- 📊 Request rate +- :icon{name="lucide:bar-chart"} Request rate - ⏱️ Latency (P50, P90, P99) - ❌ Error rate -- 🔥 Top endpoints +- :icon{name="lucide:flame"} Top endpoints ### Traces View Debug individual requests: -- 🔍 Search by service, operation, duration -- 📈 Visualize request flow +- :icon{name="lucide:search"} Search by service, operation, duration +- :icon{name="lucide:trending-up"} Visualize request flow - ⏱️ See exact timings - 🐛 Find errors with full context ### Metrics View (Dashboards) Create custom dashboards: -- 📊 Application metrics -- 💻 Infrastructure metrics -- 📈 Business KPIs -- 🎯 Custom queries +- :icon{name="lucide:bar-chart"} Application metrics +- :icon{name="lucide:laptop"} Infrastructure metrics +- :icon{name="lucide:trending-up"} Business KPIs +- :icon{name="lucide:target"} Custom queries ### Logs View Query all your logs: -- 🔍 Full-text search -- 🏷️ Filter by attributes -- ⏰ Time-based queries -- 🔗 Correlation with traces +- :icon{name="lucide:search"} Full-text search +- :icon{name="lucide:tag"} Filter by attributes +- :icon{name="lucide:clock"} Time-based queries +- :icon{name="lucide:link"} Correlation with traces ### Alerts Set up notifications: -- 📧 Email alerts -- 💬 Slack notifications +- :icon{name="lucide:mail"} Email alerts +- :icon{name="lucide:message-circle"} Slack notifications - 📱 PagerDuty integration -- 🔔 Custom webhooks +- :icon{name="lucide:bell"} Custom webhooks ## Common Queries & Dashboards @@ -303,8 +303,8 @@ Limit: 10 ### Service Dependencies Auto-generated service map shows: -- 🔗 Which services call which -- 📊 Request volumes +- :icon{name="lucide:link"} Which services call which +- :icon{name="lucide:bar-chart"} Request volumes - ⏱️ Latencies between services - ❌ Error rates @@ -416,7 +416,7 @@ zookeeper_data → /bitnami/zookeeper ``` Coordination state. -## Performance Tuning 🚀 +## Performance Tuning :icon{name="lucide:rocket"} ### Sampling Don't send ALL traces (too expensive): @@ -442,7 +442,7 @@ environment: MAX_MEMORY_USAGE: 10000000000 # 10GB ``` -## Troubleshooting 🔧 +## Troubleshooting :icon{name="lucide:wrench"} **Q: No data appearing in SigNoz?** ```bash @@ -510,7 +510,7 @@ Set and track SLOs: 4. Optimize query 5. Verify improvement in metrics -### 2. Error Investigation 🔥 +### 2. Error Investigation :icon{name="lucide:flame"} **Problem**: Users reporting 500 errors **Solution**: 1. Check error rate dashboard @@ -519,7 +519,7 @@ Set and track SLOs: 4. Identify null pointer exception 5. Deploy fix and monitor -### 3. Capacity Planning 📊 +### 3. Capacity Planning :icon{name="lucide:bar-chart"} **Problem**: Need to scale before Black Friday **Solution**: 1. Review historical metrics @@ -540,13 +540,13 @@ Set and track SLOs: ## Why SigNoz is Awesome - 🆓 **Open Source**: Free forever, no limits -- 🚀 **Fast**: ClickHouse is CRAZY fast -- 🎯 **Complete**: Metrics + Traces + Logs in one -- 📊 **Powerful**: Query anything, any way -- 🔒 **Private**: Your data stays on your server -- 💰 **Cost-Effective**: No per-seat pricing -- 🛠️ **Flexible**: Customize everything -- 📈 **Scalable**: Grows with your needs +- :icon{name="lucide:rocket"} **Fast**: ClickHouse is CRAZY fast +- :icon{name="lucide:target"} **Complete**: Metrics + Traces + Logs in one +- :icon{name="lucide:bar-chart"} **Powerful**: Query anything, any way +- :icon{name="lucide:lock"} **Private**: Your data stays on your server +- :icon{name="lucide:dollar-sign"} **Cost-Effective**: No per-seat pricing +- :icon{name="lucide:hammer"} **Flexible**: Customize everything +- :icon{name="lucide:trending-up"} **Scalable**: Grows with your needs ## Resources @@ -557,4 +557,4 @@ Set and track SLOs: --- -*"You can't fix what you can't see. SigNoz makes everything visible."* - Observability Wisdom 🔍✨ +*"You can't fix what you can't see. SigNoz makes everything visible."* - Observability Wisdom :icon{name="lucide:search"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/track.md b/Projects/kompose/docs/content/5.stacks/track.md similarity index 75% rename from Projects/kompose/docs/content/docs/stacks/track.md rename to Projects/kompose/docs/content/5.stacks/track.md index 596a521b..23c89b75 100644 --- a/Projects/kompose/docs/content/docs/stacks/track.md +++ b/Projects/kompose/docs/content/5.stacks/track.md @@ -1,19 +1,19 @@ --- -title: � Track Stack - Your Privacy-First Analytics HQ +title: Track - Privacy-First Analytics HQ description: "We count visitors, not cookies!" +navigation: + icon: i-lucide-bar-chart --- -# 📊 Track Stack - Your Privacy-First Analytics HQ - > *"We count visitors, not cookies!"* - Umami Analytics ## What's This All About? -Umami is your self-hosted, privacy-focused alternative to Google Analytics! It's like having all the insights without selling your soul (or your visitors' data) to Big Tech. Track what matters, respect privacy, stay GDPR compliant, and sleep well at night knowing you're not contributing to the surveillance economy! 🕵️‍♂️ +Umami is your self-hosted, privacy-focused alternative to Google Analytics! It's like having all the insights without selling your soul (or your visitors' data) to Big Tech. Track what matters, respect privacy, stay GDPR compliant, and sleep well at night knowing you're not contributing to the surveillance economy! :icon{name="lucide:search"} ## The Analytics Ace -### 📈 Umami +### :icon{name="lucide:trending-up"} Umami **Container**: `track_app` **Image**: `ghcr.io/umami-software/umami:postgresql-latest` @@ -21,36 +21,36 @@ Umami is your self-hosted, privacy-focused alternative to Google Analytics! It's **Home**: https://umami.pivoine.art Umami is analytics done right: -- 🔒 **Privacy-First**: No cookies, no tracking pixels, no creepy stuff +- :icon{name="lucide:lock"} **Privacy-First**: No cookies, no tracking pixels, no creepy stuff - 🇪🇺 **GDPR Compliant**: By design, not as an afterthought -- 📊 **Beautiful Dashboards**: Real-time, clean, insightful +- :icon{name="lucide:bar-chart"} **Beautiful Dashboards**: Real-time, clean, insightful - 🌍 **Multi-Site**: Track unlimited websites -- 👥 **Team Features**: Invite team members +- :icon{name="lucide:users"} **Team Features**: Invite team members - 📱 **Events Tracking**: Custom events and goals -- 🎨 **Simple Script**: Just one line of JavaScript +- :icon{name="lucide:palette"} **Simple Script**: Just one line of JavaScript - 🆓 **Open Source**: Free forever, your data, your server -## Features That Make Sense ✨ +## Features That Make Sense :icon{name="lucide:sparkles"} ### Core Metrics -- 📈 **Page Views**: Real-time visitor counts -- 👤 **Unique Visitors**: Who's new, who's returning -- 🌐 **Referrers**: Where traffic comes from +- :icon{name="lucide:trending-up"} **Page Views**: Real-time visitor counts +- :icon{name="lucide:user"} **Unique Visitors**: Who's new, who's returning +- :icon{name="lucide:globe"} **Referrers**: Where traffic comes from - 📱 **Devices**: Desktop vs Mobile vs Tablet - 🌍 **Countries**: Geographic distribution -- 🖥️ **Browsers**: Chrome, Firefox, Safari, etc. -- 💻 **Operating Systems**: Windows, Mac, Linux, etc. -- 📄 **Pages**: Most popular content +- :icon{name="lucide:monitor"} **Browsers**: Chrome, Firefox, Safari, etc. +- :icon{name="lucide:laptop"} **Operating Systems**: Windows, Mac, Linux, etc. +- :icon{name="lucide:file"} **Pages**: Most popular content ### Advanced Features -- 🎯 **Custom Events**: Track buttons, forms, videos +- :icon{name="lucide:target"} **Custom Events**: Track buttons, forms, videos - ⏱️ **Time on Site**: Engagement metrics -- 📊 **Real-time Data**: Live visitor updates +- :icon{name="lucide:bar-chart"} **Real-time Data**: Live visitor updates - 📅 **Date Ranges**: Custom time periods -- 🔍 **Filters**: Drill down into data +- :icon{name="lucide:search"} **Filters**: Drill down into data - 📤 **Export Data**: CSV downloads -- 🔗 **Share Links**: Public dashboard links -- 🎨 **Themes**: Light/Dark mode +- :icon{name="lucide:link"} **Share Links**: Public dashboard links +- :icon{name="lucide:palette"} **Themes**: Light/Dark mode ## Configuration Breakdown @@ -77,7 +77,7 @@ Every 30 seconds, Umami pings itself: curl -f http://localhost:3000/api/heartbeat ``` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### 1. Create Database ```bash @@ -96,7 +96,7 @@ Username: admin Password: umami ``` -**🚨 IMMEDIATELY CHANGE THE PASSWORD!** +**:icon{name="lucide:siren"} IMMEDIATELY CHANGE THE PASSWORD!** 1. Click on username → Profile 2. Change password 3. Breathe easy @@ -134,15 +134,15 @@ Place in `` section: - + ``` -## Tracking Events 🎯 +## Tracking Events :icon{name="lucide:target"} ### Automatic Tracking -Page views are tracked automatically. That's it! 🎉 +Page views are tracked automatically. That's it! :icon{name="lucide:party-popper"} ### Custom Events @@ -228,13 +228,13 @@ umami.track('Social Share', { }); ``` -## Dashboard Features 📊 +## Dashboard Features :icon{name="lucide:bar-chart"} ### Overview - 👁️ Real-time visitor count -- 📈 Views & visitors today +- :icon{name="lucide:trending-up"} Views & visitors today - 🕐 Average time on site -- 🔄 Bounce rate +- :icon{name="lucide:refresh-cw"} Bounce rate ### Realtime View Watch visitors as they browse: @@ -245,10 +245,10 @@ Watch visitors as they browse: ### Reports - 📅 Custom date ranges -- 📊 Page comparisons +- :icon{name="lucide:bar-chart"} Page comparisons - 🌍 Geographic heatmaps - 📱 Device breakdowns -- 🔍 Referrer analysis +- :icon{name="lucide:search"} Referrer analysis ### Filters Drill down with: @@ -259,7 +259,7 @@ Drill down with: - OS - URL path -## Multi-Website Management 🌐 +## Multi-Website Management :icon{name="lucide:globe"} ### Add Multiple Sites ``` @@ -286,7 +286,7 @@ Website → Share → Enable & Copy URL Anyone with the link can view stats (no login needed)! -## Privacy Features 🔒 +## Privacy Features :icon{name="lucide:lock"} ### What Umami Does NOT Track - ❌ Personal information @@ -317,7 +317,7 @@ Umami is GDPR-compliant by default: - **Network**: `kompose` (database access) - **Database**: PostgreSQL (from data stack) -## API Access 🔌 +## API Access :icon{name="lucide:plug"} Umami has a REST API for programmatic access! @@ -351,7 +351,7 @@ curl -X POST https://umami.pivoine.art/api/send \ }' ``` -## Performance & Scaling 📈 +## Performance & Scaling :icon{name="lucide:trending-up"} ### For Small Sites (<10k/month) Default setup works great! No optimization needed. @@ -362,10 +362,10 @@ Default setup works great! No optimization needed. - ✅ Monitor disk space ### For Large Sites (100k+/month) -- 🚀 Increase PostgreSQL memory -- 🚀 Add read replicas -- 🚀 Consider CDN for script.js -- 🚀 Enable database connection pooling +- :icon{name="lucide:rocket"} Increase PostgreSQL memory +- :icon{name="lucide:rocket"} Add read replicas +- :icon{name="lucide:rocket"} Consider CDN for script.js +- :icon{name="lucide:rocket"} Enable database connection pooling ### Optimization Tips ```sql @@ -376,7 +376,7 @@ VACUUM ANALYZE; SELECT * FROM pg_stat_user_indexes; ``` -## Data Management 🗄️ +## Data Management :icon{name="lucide:database"} ### Export Data ``` @@ -400,7 +400,7 @@ DELETE FROM event WHERE created_at < NOW() - INTERVAL '1 year'; ``` -## Troubleshooting 🔧 +## Troubleshooting :icon{name="lucide:wrench"} **Q: Script not loading?** A: Check browser console for errors, verify script URL is correct @@ -463,22 +463,22 @@ Install via plugin or add to theme's `header.php`: | Feature | Umami | Google Analytics | |---------|-------|------------------| | Privacy | ✅ Excellent | ❌ Terrible | -| GDPR | ✅ Compliant | ⚠️ Complicated | +| GDPR | ✅ Compliant | :icon{name="lucide:alert-triangle"} Complicated | | Data Ownership | ✅ Yours | ❌ Google's | | Cookie Banner | ✅ Not needed | ❌ Required | -| Speed | ✅ Fast | ⚠️ Slower | -| Setup | ✅ Simple | ⚠️ Complex | +| Speed | ✅ Fast | :icon{name="lucide:alert-triangle"} Slower | +| Setup | ✅ Simple | :icon{name="lucide:alert-triangle"} Complex | | Cost | ✅ Free | ✅ Free (but...) | | Learning Curve | ✅ Easy | ❌ Steep | -## Why Track with Umami? 🎯 +## Why Track with Umami? :icon{name="lucide:target"} -- 🔒 **Privacy**: Respect your visitors -- 📊 **Insights**: Get data that matters -- 🎨 **Simple**: No complexity overload +- :icon{name="lucide:lock"} **Privacy**: Respect your visitors +- :icon{name="lucide:bar-chart"} **Insights**: Get data that matters +- :icon{name="lucide:palette"} **Simple**: No complexity overload - 🆓 **Free**: No limits, no upsells -- 🚀 **Fast**: Lightweight script -- 💪 **Reliable**: Self-hosted stability +- :icon{name="lucide:rocket"} **Fast**: Lightweight script +- :icon{name="lucide:dumbbell"} **Reliable**: Self-hosted stability - 🌍 **Ethical**: Do the right thing ## Advanced Features @@ -512,4 +512,4 @@ Track conversion paths: --- -*"The best analytics are the ones that respect privacy while still giving you the insights you need."* - Ethical Analytics Manifesto 📊✨ +*"The best analytics are the ones that respect privacy while still giving you the insights you need."* - Ethical Analytics Manifesto :icon{name="lucide:bar-chart"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/vault.md b/Projects/kompose/docs/content/5.stacks/vault.md similarity index 72% rename from Projects/kompose/docs/content/docs/stacks/vault.md rename to Projects/kompose/docs/content/5.stacks/vault.md index 4638cc14..2ee85c69 100644 --- a/Projects/kompose/docs/content/docs/stacks/vault.md +++ b/Projects/kompose/docs/content/5.stacks/vault.md @@ -1,19 +1,19 @@ --- -title: Vault Stack - Your Password Fort Knox +title: Vault - Password Fort Knox description: "One password to rule them all!" +navigation: + icon: i-lucide-lock-keyhole --- -# 🔐 Vault Stack - Your Password Fort Knox - > *"One password to rule them all!"* - Vaultwarden ## What's This All About? -Vaultwarden is your self-hosted password manager - a lightweight, Rust-powered alternative to Bitwarden. It's like having a super-secure vault in your pocket, accessible from anywhere, that remembers all your passwords so you don't have to! No more "password123" or writing passwords on sticky notes. 🔒 +Vaultwarden is your self-hosted password manager - a lightweight, Rust-powered alternative to Bitwarden. It's like having a super-secure vault in your pocket, accessible from anywhere, that remembers all your passwords so you don't have to! No more "password123" or writing passwords on sticky notes. :icon{name="lucide:lock"} ## The Security Guardian -### 🛡️ Vaultwarden +### :icon{name="lucide:shield"} Vaultwarden **Container**: `vault_app` **Image**: `vaultwarden/server:latest` @@ -21,15 +21,15 @@ Vaultwarden is your self-hosted password manager - a lightweight, Rust-powered a **Home**: https://vault.pivoine.art Vaultwarden is your digital security blanket: -- 🔐 **Password Vault**: Store unlimited passwords +- :icon{name="lucide:lock-keyhole"} **Password Vault**: Store unlimited passwords - 🗂️ **Secure Notes**: Credit cards, identities, documents -- 🔄 **Sync Everywhere**: Desktop, mobile, browser extensions -- 👥 **Sharing**: Securely share with family/team -- 🔑 **2FA Support**: TOTP, YubiKey, Duo +- :icon{name="lucide:refresh-cw"} **Sync Everywhere**: Desktop, mobile, browser extensions +- :icon{name="lucide:users"} **Sharing**: Securely share with family/team +- :icon{name="lucide:key"} **2FA Support**: TOTP, YubiKey, Duo - 📱 **Mobile Apps**: iOS & Android (official Bitwarden apps) -- 🌐 **Browser Extensions**: Chrome, Firefox, Safari, Edge -- 💰 **Free**: All premium features, no limits -- 🦀 **Rust-Powered**: Secure, fast, resource-efficient +- :icon{name="lucide:globe"} **Browser Extensions**: Chrome, Firefox, Safari, Edge +- :icon{name="lucide:dollar-sign"} **Free**: All premium features, no limits +- :icon{name="simple-icons:rust"} **Rust-Powered**: Secure, fast, resource-efficient ## Why Vaultwarden vs Bitwarden Official? @@ -37,7 +37,7 @@ Vaultwarden is your digital security blanket: |---------|-------------|-------------------| | Resource Usage | 🟢 Tiny | 🟡 Heavy (needs MSSQL) | | Setup | 🟢 Simple | 🟡 Complex | -| Premium Features | 🟢 All free | 💰 Paid | +| Premium Features | 🟢 All free | :icon{name="lucide:dollar-sign"} Paid | | Compatibility | ✅ 100% | ✅ 100% | | Updates | 🟢 Community | 🟢 Official | @@ -46,32 +46,32 @@ Both use the same client apps - just different servers! ## Features That Matter 🌟 ### Password Management -- 🔐 **Unlimited Passwords**: No caps, no limits -- 🔍 **Search**: Find credentials instantly -- 📁 **Folders**: Organize by category -- 🏷️ **Tags**: Multiple ways to organize +- :icon{name="lucide:lock-keyhole"} **Unlimited Passwords**: No caps, no limits +- :icon{name="lucide:search"} **Search**: Find credentials instantly +- :icon{name="lucide:folder"} **Folders**: Organize by category +- :icon{name="lucide:tag"} **Tags**: Multiple ways to organize - ⭐ **Favorites**: Quick access to common items -- 📝 **Notes**: Attach notes to any item +- :icon{name="lucide:file-text"} **Notes**: Attach notes to any item ### Secure Storage Types -- 🔑 **Login**: Username + password combos +- :icon{name="lucide:key"} **Login**: Username + password combos - 💳 **Card**: Credit/debit card info - 🆔 **Identity**: Personal info, addresses -- 📄 **Secure Note**: Encrypted text +- :icon{name="lucide:file"} **Secure Note**: Encrypted text ### Security Features -- 🔒 **End-to-End Encryption**: Zero-knowledge architecture -- 🔐 **Master Password**: Only you know it +- :icon{name="lucide:lock"} **End-to-End Encryption**: Zero-knowledge architecture +- :icon{name="lucide:lock-keyhole"} **Master Password**: Only you know it - 📱 **Two-Factor Auth**: Extra security layer -- 🔄 **Password Generator**: Strong random passwords -- ⚠️ **Security Reports**: Weak, reused, compromised passwords -- 📊 **Vault Health**: Check security score +- :icon{name="lucide:refresh-cw"} **Password Generator**: Strong random passwords +- :icon{name="lucide:alert-triangle"} **Security Reports**: Weak, reused, compromised passwords +- :icon{name="lucide:bar-chart"} **Vault Health**: Check security score ### Sharing & Organization -- 👥 **Organizations**: Team password sharing -- 📁 **Collections**: Group shared passwords -- 🔐 **Granular Permissions**: Control who sees what -- 📧 **Emergency Access**: Trusted contacts can request access +- :icon{name="lucide:users"} **Organizations**: Team password sharing +- :icon{name="lucide:folder"} **Collections**: Group shared passwords +- :icon{name="lucide:lock-keyhole"} **Granular Permissions**: Control who sees what +- :icon{name="lucide:mail"} **Emergency Access**: Trusted contacts can request access ## Configuration Breakdown @@ -113,7 +113,7 @@ SIGNUPS_ALLOWED=false ``` Disable public signups after creating your account! -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### 1. Start the Stack ```bash @@ -128,7 +128,7 @@ Email: your@email.com Master Password: Something STRONG! ``` -**⚠️ MASTER PASSWORD WARNING**: +**:icon{name="lucide:alert-triangle"} MASTER PASSWORD WARNING**: - Only you know it - Cannot be recovered if lost - Write it down somewhere safe @@ -164,7 +164,7 @@ docker compose restart 3. Enter: `https://vault.pivoine.art` 4. Login with your credentials -## Using Your Vault 🔑 +## Using Your Vault :icon{name="lucide:key"} ### Adding Passwords @@ -172,7 +172,7 @@ docker compose restart 1. Visit website and login 2. Extension detects login form 3. Click "Save" when prompted -4. Done! 🎉 +4. Done! :icon{name="lucide:party-popper"} **Manually**: 1. Click "+" in vault @@ -214,11 +214,11 @@ Access at: `https://vault.pivoine.art/admin` **Admin Token Required** (from .env) ### Admin Features -- 👥 View all users -- 🔐 Disable/delete users -- 📧 Resend invitations +- :icon{name="lucide:users"} View all users +- :icon{name="lucide:lock-keyhole"} Disable/delete users +- :icon{name="lucide:mail"} Resend invitations - 🗑️ Delete accounts -- 📊 View diagnostics +- :icon{name="lucide:bar-chart"} View diagnostics - ⚙️ Configure settings ### Useful Admin Tasks @@ -234,7 +234,7 @@ Admin Panel → Diagnostics ``` Shows config, health checks, versions -## Sharing with Organizations 👥 +## Sharing with Organizations :icon{name="lucide:users"} ### Create Organization 1. New → Organization @@ -254,7 +254,7 @@ Shows config, health checks, versions 3. Set permissions per user 4. Members can access shared passwords -## Security Best Practices 🛡️ +## Security Best Practices :icon{name="lucide:shield"} ### Master Password - ✅ Use a passphrase: `correct-horse-battery-staple` @@ -271,11 +271,11 @@ Shows config, health checks, versions - ✅ Consider hardware key (YubiKey) ### Vault Hygiene -- 🔄 Regular security reports -- 🔍 Update weak passwords +- :icon{name="lucide:refresh-cw"} Regular security reports +- :icon{name="lucide:search"} Update weak passwords - 🗑️ Remove old accounts -- 📧 Use unique emails when possible -- 🔐 Never reuse passwords +- :icon{name="lucide:mail"} Use unique emails when possible +- :icon{name="lucide:lock-keyhole"} Never reuse passwords ### Backup Strategy ```bash @@ -328,7 +328,7 @@ tar -czf vault-backup-$(date +%Y%m%d).tar.gz ./bitwarden/ └── rsa_key.* # Server keys ``` -**🚨 CRITICAL**: Backup this entire directory regularly! +**:icon{name="lucide:siren"} CRITICAL**: Backup this entire directory regularly! ## Performance & Limits @@ -343,7 +343,7 @@ tar -czf vault-backup-$(date +%Y%m%d).tar.gz ./bitwarden/ - Organizations: Unlimited - File attachments: 1GB per user (configurable) -## Troubleshooting 🔧 +## Troubleshooting :icon{name="lucide:wrench"} **Q: Can't log in?** A: Check master password, verify server URL in apps @@ -381,7 +381,7 @@ Vaultwarden supports imports from: 4. Upload file 5. Import! -## Browser Extension Tips 💡 +## Browser Extension Tips :icon{name="lucide:lightbulb"} ### Keyboard Shortcuts - `Ctrl+Shift+L`: Auto-fill last used login @@ -427,13 +427,13 @@ Organize shared items: ## Why Self-Host Your Passwords? -- 🔒 **Full Control**: Your data, your server +- :icon{name="lucide:lock"} **Full Control**: Your data, your server - 🕵️ **Privacy**: No third-party access -- 💰 **Cost**: Free premium features -- 🚀 **Performance**: Local network speed -- 🛡️ **Security**: You control the security +- :icon{name="lucide:dollar-sign"} **Cost**: Free premium features +- :icon{name="lucide:rocket"} **Performance**: Local network speed +- :icon{name="lucide:shield"} **Security**: You control the security - 🌍 **Independence**: Not dependent on cloud service -- 📊 **Transparency**: Open source, auditable +- :icon{name="lucide:bar-chart"} **Transparency**: Open source, auditable ## Resources @@ -443,4 +443,4 @@ Organize shared items: --- -*"The best password is the one you don't have to remember because it's safely stored in your vault."* - Password Wisdom 🔐✨ +*"The best password is the one you don't have to remember because it's safely stored in your vault."* - Password Wisdom :icon{name="lucide:lock-keyhole"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/stacks/vpn.md b/Projects/kompose/docs/content/5.stacks/vpn.md similarity index 81% rename from Projects/kompose/docs/content/docs/stacks/vpn.md rename to Projects/kompose/docs/content/5.stacks/vpn.md index 7e02f741..1e13162a 100644 --- a/Projects/kompose/docs/content/docs/stacks/vpn.md +++ b/Projects/kompose/docs/content/5.stacks/vpn.md @@ -1,10 +1,10 @@ --- -title: � VPN Stack - Your Encrypted Tunnel to Freedom +title: VPN - Encrypted Tunnel to Freedom description: "The internet, but make it private!" +navigation: + icon: i-lucide-plug --- -# 🔌 VPN Stack - Your Encrypted Tunnel to Freedom - > *"The internet, but make it private!"* - WireGuard ## What's This All About? @@ -13,7 +13,7 @@ WG-Easy is your self-hosted VPN server powered by WireGuard! It's like having yo ## The Privacy Protector -### 🛡️ WG-Easy +### :icon{name="lucide:shield"} WG-Easy **Container**: `vpn_app` **Image**: `ghcr.io/wg-easy/wg-easy:15` @@ -21,24 +21,24 @@ WG-Easy is your self-hosted VPN server powered by WireGuard! It's like having yo **Home**: https://vpn.pivoine.art WG-Easy makes WireGuard actually easy: -- 🎨 **Beautiful Web UI**: Manage VPN from browser +- :icon{name="lucide:palette"} **Beautiful Web UI**: Manage VPN from browser - 📱 **QR Codes**: Instant mobile setup -- 👥 **Multi-Client**: Unlimited devices -- ⚡ **WireGuard**: Modern, fast, secure protocol -- 📊 **Traffic Stats**: See bandwidth usage -- 🔒 **Encrypted**: Industry-standard crypto +- :icon{name="lucide:users"} **Multi-Client**: Unlimited devices +- :icon{name="lucide:zap"} **WireGuard**: Modern, fast, secure protocol +- :icon{name="lucide:bar-chart"} **Traffic Stats**: See bandwidth usage +- :icon{name="lucide:lock"} **Encrypted**: Industry-standard crypto - 🌍 **Route All Traffic**: Or split-tunnel -- 🚀 **Performance**: Faster than OpenVPN +- :icon{name="lucide:rocket"} **Performance**: Faster than OpenVPN ## WireGuard: The Modern VPN Protocol ### Why WireGuard is Awesome -- ⚡ **Fast**: 4000+ lines of code vs OpenVPN's 600,000+ -- 🔒 **Secure**: State-of-the-art cryptography +- :icon{name="lucide:zap"} **Fast**: 4000+ lines of code vs OpenVPN's 600,000+ +- :icon{name="lucide:lock"} **Secure**: State-of-the-art cryptography - 📱 **Battery Friendly**: Less power consumption -- 🔄 **Roaming**: Seamless connection switching +- :icon{name="lucide:refresh-cw"} **Roaming**: Seamless connection switching - 🐧 **Linux Kernel**: Built into Linux 5.6+ -- 🎯 **Simple**: Easier to audit and configure +- :icon{name="lucide:target"} **Simple**: Easier to audit and configure ## Configuration Breakdown @@ -93,7 +93,7 @@ sysctls: - net.ipv4.conf.all.src_valid_mark=1 # Packet routing ``` -## First Time Setup 🚀 +## First Time Setup :icon{name="lucide:rocket"} ### 1. Ensure Ports are Open @@ -201,7 +201,7 @@ AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25 ``` -## Using Your VPN 🌐 +## Using Your VPN :icon{name="lucide:globe"} ### Full Tunnel (All Traffic) @@ -209,7 +209,7 @@ PersistentKeepalive = 25 - ✅ Complete privacy - ✅ Bypass geo-blocks - ✅ Secure public WiFi -- ⚠️ Slightly slower (routing through your server) +- :icon{name="lucide:alert-triangle"} Slightly slower (routing through your server) ### Split Tunnel (Selective Routing) @@ -222,27 +222,27 @@ AllowedIPs = 10.0.0.0/24 # Only home network ``` **Benefits**: -- 🏠 Access home services -- 🌐 Normal internet speed -- 📊 Less VPN bandwidth +- :icon{name="lucide:home"} Access home services +- :icon{name="lucide:globe"} Normal internet speed +- :icon{name="lucide:bar-chart"} Less VPN bandwidth -## Traffic Statistics 📊 +## Traffic Statistics :icon{name="lucide:bar-chart"} Web UI shows for each client: - 📥 **Download**: Data received - 📤 **Upload**: Data sent - 🕐 **Last Seen**: When last connected -- 📈 **Charts**: Bandwidth over time +- :icon{name="lucide:trending-up"} **Charts**: Bandwidth over time ## Common Use Cases -### 1. Secure Public WiFi ☕ +### 1. Secure Public WiFi :icon{name="lucide:coffee"} ``` Coffee Shop WiFi → WireGuard → Your Server → Internet ``` Encrypt traffic on untrusted networks. -### 2. Access Home Network 🏠 +### 2. Access Home Network :icon{name="lucide:home"} ``` You (anywhere) → VPN → Home Network → NAS, Printer, etc. ``` @@ -266,7 +266,7 @@ Deploy VPN servers in different countries: - EU server for European services - Home server for local access -## Security Features 🔒 +## Security Features :icon{name="lucide:lock"} ### Encryption - **Protocol**: Noise Protocol Framework @@ -274,7 +274,7 @@ Deploy VPN servers in different countries: - **Cipher**: ChaCha20-Poly1305 - **Hash**: BLAKE2s -**Translation**: Military-grade encryption! 💪 +**Translation**: Military-grade encryption! :icon{name="lucide:dumbbell"} ### Authentication - **Public/Private Keys**: Per-client keypairs @@ -286,7 +286,7 @@ Deploy VPN servers in different countries: - **Perfect Forward Secrecy**: Past sessions stay secure - **IP Masquerading**: Hides your real IP -## DNS Configuration 🌐 +## DNS Configuration :icon{name="lucide:globe"} ### Default DNS (Cloudflare) ```bash @@ -315,7 +315,7 @@ WG_DEFAULT_DNS=94.140.14.14 WG_DEFAULT_DNS=192.168.1.2 ``` -## Performance Optimization ⚡ +## Performance Optimization :icon{name="lucide:zap"} ### Enable BBR (Better Congestion Control) ```bash @@ -338,7 +338,7 @@ MTU = 1420 # Default, try 1500 if stable PersistentKeepalive = 25 ``` -## Troubleshooting 🔧 +## Troubleshooting :icon{name="lucide:wrench"} **Q: Can't connect to VPN?** ```bash @@ -442,7 +442,7 @@ docker logs vpn_app -f ### Bandwidth Stats Web UI shows real-time graphs for each client! -## Backup & Restore 🔄 +## Backup & Restore :icon{name="lucide:refresh-cw"} ### Backup Configuration ```bash @@ -463,7 +463,7 @@ docker exec vpn_app tar -xzf /tmp/wg-backup.tar.gz -C / docker compose restart ``` -## Security Best Practices 🛡️ +## Security Best Practices :icon{name="lucide:shield"} 1. **Strong Password**: Use bcrypt hash for web UI 2. **Regular Updates**: Keep WG-Easy updated @@ -475,13 +475,13 @@ docker compose restart ## Why Self-Host a VPN? -- 🔒 **Full Control**: Your server, your rules -- 💰 **Cost Effective**: No monthly fees -- 🚀 **Performance**: Direct to your server +- :icon{name="lucide:lock"} **Full Control**: Your server, your rules +- :icon{name="lucide:dollar-sign"} **Cost Effective**: No monthly fees +- :icon{name="lucide:rocket"} **Performance**: Direct to your server - 🕵️ **Privacy**: No third-party logging - 🌍 **Flexibility**: Use any server location -- 📊 **Transparency**: You know what's happening -- 🛠️ **Customization**: Configure exactly as needed +- :icon{name="lucide:bar-chart"} **Transparency**: You know what's happening +- :icon{name="lucide:hammer"} **Customization**: Configure exactly as needed ## Resources @@ -491,4 +491,4 @@ docker compose restart --- -*"Privacy is not about having something to hide. It's about protecting what you value."* - VPN Philosophy 🔒✨ +*"Privacy is not about having something to hide. It's about protecting what you value."* - VPN Philosophy :icon{name="lucide:lock"}:icon{name="lucide:sparkles"} diff --git a/Projects/kompose/docs/content/docs/guide/index.md b/Projects/kompose/docs/content/docs/guide/index.md deleted file mode 100644 index 9e12af0f..00000000 --- a/Projects/kompose/docs/content/docs/guide/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: User Guide -description: Comprehensive guide to using Kompose ---- - -# User Guide - -Learn everything you need to know about using Kompose effectively. - -## Getting Started - -- [Quick Start](/docs/guide/quick-start) - Get up and running in minutes -- [Installation](/docs/installation) - Detailed installation instructions - -## Core Concepts - -- [Stack Management](/docs/guide/stack-management) - Managing multiple Docker Compose stacks -- [Database Operations](/docs/guide/database) - Backup, restore, and maintain databases -- [Hooks System](/docs/guide/hooks) - Extend functionality with custom hooks -- [Network Architecture](/docs/guide/network) - Understanding networking in Kompose - -## Configuration - -- [Configuration Guide](/docs/guide/configuration) - Configure Kompose and stacks -- [Environment Variables](/docs/reference/environment) - All available environment variables - -## Troubleshooting - -- [Common Issues](/docs/guide/troubleshooting) - Solutions to common problems diff --git a/Projects/kompose/docs/content/docs/index.md b/Projects/kompose/docs/content/docs/index.md deleted file mode 100644 index c10ba8a1..00000000 --- a/Projects/kompose/docs/content/docs/index.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Introduction to Kompose -description: Learn about Kompose, your Docker Compose Symphony Conductor for managing multiple stacks with style and grace. ---- - -# Introduction to Kompose - -**Kompose** is a powerful Bash orchestration tool for managing multiple Docker Compose stacks with style and grace. Think of it as a conductor for your Docker symphony - each stack plays its part, and Kompose makes sure they're all in harmony. - -**Kompose** is a powerful Bash orchestration tool for managing multiple Docker Compose stacks with style and grace. Think of it as a conductor for your Docker symphony - each stack plays its part, and Kompose makes sure they're all in harmony. - -### Why Kompose? - -target **One Command to Rule Them All** - Manage dozens of stacks with a single command -reload **Database Wizardry** - Export, import, and clean up PostgreSQL databases like a boss -tent **Hook System** - Extend functionality with custom pre/post operation hooks -network **Network Maestro** - Smart network management with CLI overrides -lock **Environment Juggler** - Override any environment variable on the fly -colors **Beautiful Output** - Color-coded logs and status indicators -test **Dry-Run Mode** - Test changes before applying them - -### music Stack Management -- **Pattern-based selection**: Target stacks with globs, comma-separated lists, or wildcards -- **Bulk operations**: Execute commands across multiple stacks simultaneously -- **Status monitoring**: Visual feedback with color-coded success/failure indicators -- **Smart filtering**: Include/exclude stacks with flexible pattern matching - -### database Database Operations -- **Automated backups**: Export PostgreSQL databases with timestamped dumps -- **Smart imports**: Auto-detect latest dumps or specify exact files -- **Drop & recreate**: Safe database import with connection termination -- **Cleanup utilities**: Keep only the latest dumps, remove old backups -- **Hook integration**: Custom pre/post operations for each database action - -### hook Extensibility -- **Custom hooks**: Define `pre_db_export`, `post_db_export`, `pre_db_import`, `post_db_import` -- **Stack-specific logic**: Each stack can have unique operational requirements -- **Environment access**: Hooks inherit all environment variables -- **Dry-run aware**: Test hook execution without side effects - -### network Network Management -- **Unified network**: All stacks communicate on a single Docker network -- **CLI overrides**: Change network on-the-fly without editing configs -- **Traefik integration**: Seamless reverse proxy setup with proper network awareness -- **Multi-network support**: Special stacks can have additional internal networks - -### tools Environment Control -- **Global overrides**: Set environment variables via CLI flags -- **Layered configs**: Root `.env` + stack `.env` + CLI overrides -- **Precedence rules**: CLI > Stack > Root configuration hierarchy -- **Real-time changes**: No need to edit files for temporary overrides - -## Quick Start - -```bash -# Start all stacks -./kompose.sh "*" up -d - -# View logs from specific stacks -./kompose.sh "blog,news" logs -f - -# Export all databases -./kompose.sh "*" db:export - -# Override network for staging -./kompose.sh --network staging "*" up -d -``` - -## Documentation Sections - -### Getting Started -- [Installation Guide](/docs/installation) - Set up Kompose on your system -- [Quick Start](/docs/guide/quick-start) - Get up and running in minutes - -### User Guide -- [Stack Management](/docs/guide/stack-management) - Managing multiple stacks -- [Database Operations](/docs/guide/database) - Backup and restore databases -- [Hooks System](/docs/guide/hooks) - Extend with custom hooks -- [Configuration](/docs/guide/configuration) - Configure Kompose and stacks -- [Network Architecture](/docs/guide/network) - Understanding networking -- [Troubleshooting](/docs/guide/troubleshooting) - Common issues and solutions - -### Stack Reference -- [All Stacks](/docs/stacks) - Detailed documentation for each stack - -### Reference -- [CLI Reference](/docs/reference/cli) - Complete command reference -- [Environment Variables](/docs/reference/environment) - All configuration options diff --git a/Projects/kompose/docs/content/docs/reference/index.md b/Projects/kompose/docs/content/docs/reference/index.md deleted file mode 100644 index 61d18199..00000000 --- a/Projects/kompose/docs/content/docs/reference/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Reference Documentation -description: Complete reference documentation for Kompose ---- - -# Reference Documentation - -Complete reference documentation for all aspects of Kompose. - -## Command Line - -- [CLI Reference](/docs/reference/cli) - All commands and options -- [Stack Patterns](/docs/reference/cli#stack-patterns) - Pattern matching syntax - -## Configuration - -- [Environment Variables](/docs/reference/environment) - All environment variables -- [Configuration Files](/docs/guide/configuration) - File structure and precedence - -## Stack Reference - -- [Stack Documentation](/docs/stacks) - Detailed docs for each stack - -## Advanced Topics - -- [Network Architecture](/docs/guide/network) - Network design and configuration -- [Hook System](/docs/guide/hooks) - Writing custom hooks -- [Database Operations](/docs/guide/database) - Advanced database management diff --git a/Projects/kompose/docs/content/docs/stacks/auth.md b/Projects/kompose/docs/content/docs/stacks/auth.md deleted file mode 100644 index 49a1ecd8..00000000 --- a/Projects/kompose/docs/content/docs/stacks/auth.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Auth Stack - The Bouncer at Your Digital Club -description: "You shall not pass... without proper credentials!" ---- - -# lock Auth Stack - The Bouncer at Your Digital Club - -> *"You shall not pass... without proper credentials!"* - Keycloak, probably - -## What's This All About? - -This stack is your authentication and identity management powerhouse. Think of it as the super-sophisticated bouncer for all your services - checking IDs, managing VIP lists, and making sure only the cool kids (authorized users) get into your digital club. - -## The Star of the Show - -### theater Keycloak - -**Container**: `auth_keycloak` -**Image**: `quay.io/keycloak/keycloak:latest` -**Home**: https://auth.pivoine.art - -Keycloak is like having a Swiss Army knife for authentication. It handles: -- user **Single Sign-On (SSO)**: Log in once, access everything. Magic! -- ticket **Identity Brokering**: Connect with Google, GitHub, and other OAuth providers -- users **User Management**: Keep track of who's who in your digital zoo -- security **OAuth 2.0 & OpenID Connect**: Industry-standard security protocols (the fancy stuff) -- shield **Authorization Services**: Fine-grained control over who can do what - -## Configuration Breakdown - -### Database Connection -Keycloak stores all its secrets (not literally, they're hashed!) in PostgreSQL: -``` -Database: keycloak -Host: Shared data stack (postgres) -``` - -### Admin Access -**Username**: `admin` (creative, right?) -**Password**: Check your `.env` file (and change it, please!) - -### Proxy Mode -Running in `edge` mode because we're living on the edge (behind Traefik)! This tells Keycloak to trust the proxy headers for HTTPS and hostname info. - -## How It Works - -1. **Startup**: Keycloak boots up and connects to the PostgreSQL database -2. **Health Check**: Every 30 seconds, it's like "Hey, I'm still alive!" (/health endpoint) -3. **Proxy Magic**: Traefik routes `https://auth.pivoine.art` → Keycloak -4. **SSL Termination**: Traefik handles HTTPS, Keycloak just chills on HTTP internally - -## Environment Variables Explained - -| Variable | What It Does | Cool Factor | -|----------|-------------|-------------| -| `KC_DB` | Database type (postgres) | elephant Elephants never forget | -| `KC_DB_URL` | JDBC connection string | plug The digital umbilical cord | -| `KC_HOSTNAME` | Public-facing URL | globe Your internet identity | -| `KC_PROXY` | Proxy mode setting | proxy Trust the middleman | -| `KC_FEATURES` | Enabled features (docker) | docker Whale hello there! | - -## Ports & Networking - -- **Internal Port**: 8080 (Keycloak's cozy home) -- **External Access**: Via Traefik at https://auth.pivoine.art -- **Network**: `kompose` (the gang's all here) - -## Health & Monitoring - -Keycloak does a self-check every 30 seconds: -```bash -curl -f http://localhost:8080/health -``` -If it doesn't respond within 5 seconds or fails 3 times in a row, Docker knows something's up and will restart it (like turning it off and on again, but automated). - -## Common Tasks - -### Access the Admin Console -``` -URL: https://auth.pivoine.art -Login: Your admin credentials from .env -``` - -### View Logs -```bash -docker logs auth_keycloak -f -``` - -### Restart After Config Changes -```bash -docker compose restart -``` - -### Connect a New Application -1. Log into Keycloak admin console -2. Create a new Client -3. Configure redirect URIs -4. Grab your client ID and secret -5. Integrate with your app (check Keycloak docs) - -## Integration Tips - -When integrating other services with Keycloak: -- **Discovery URL**: `https://auth.pivoine.art/realms/{realm}/.well-known/openid-configuration` -- **Default Realm**: Usually "master" but create your own! -- **Client Types**: Public (SPAs), Confidential (Backend apps) - -## Troubleshooting - -**Q: Can't log in to admin console?** -A: Check your `KC_ADMIN_USERNAME` and `KC_ADMIN_PASSWORD` in `.env` - -**Q: Getting SSL errors?** -A: Make sure `KC_HOSTNAME` matches your Traefik setup - -**Q: Changes not taking effect?** -A: Clear your browser cache, Keycloak loves to cache things - -**Q: Database connection issues?** -A: Ensure the `data` stack is running and healthy - -## Security Notes security - -- alert **Change the default admin password** (seriously, do it now) -- lock Database credentials are shared via root `.env` -- globe Always access via HTTPS in production -- log Enable audit logging for compliance -- target Use realms to separate different applications/teams - -## Fun Facts - -- Keycloak is maintained by Red Hat (yeah, the Linux people!) -- It supports social login with Google, Facebook, GitHub, and more -- You can theme it to match your brand (goodbye boring login pages!) -- It handles thousands of users without breaking a sweat - -## Resources - -- [Keycloak Documentation](https://www.keycloak.org/documentation) -- [Getting Started Guide](https://www.keycloak.org/guides#getting-started) -- [Admin REST API](https://www.keycloak.org/docs-api/latest/rest-api/) - ---- - -*Remember: With great authentication power comes great responsibility. Don't be the person who uses "admin/admin" in production.* hero diff --git a/Projects/kompose/docs/content/docs/stacks/index.md b/Projects/kompose/docs/content/docs/stacks/index.md deleted file mode 100644 index 7edc78f6..00000000 --- a/Projects/kompose/docs/content/docs/stacks/index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Stack Reference -description: Detailed documentation for all Kompose stacks ---- - -# Stack Reference - -This section contains detailed documentation for each stack in the Kompose ecosystem. - -## Available Stacks - -- [Auth](/docs/stacks/auth) -- [Auto](/docs/stacks/auto) -- [Blog](/docs/stacks/blog) -- [Chain](/docs/stacks/chain) -- [Chat](/docs/stacks/chat) -- [Code](/docs/stacks/code) -- [Dash](/docs/stacks/dash) -- [Data](/docs/stacks/data) -- [Dock](/docs/stacks/dock) -- [Home](/docs/stacks/home) -- [Link](/docs/stacks/link) -- [News](/docs/stacks/news) -- [Proxy](/docs/stacks/proxy) -- [Sexy](/docs/stacks/sexy) -- [Trace](/docs/stacks/trace) -- [Track](/docs/stacks/track) -- [Vault](/docs/stacks/vault) -- [Vpn](/docs/stacks/vpn) - -## Stack Categories - -### Infrastructure Stacks -Core infrastructure services that other stacks depend on: -- [Data](/docs/stacks/data) - PostgreSQL & Redis databases -- [Proxy](/docs/stacks/proxy) - Traefik reverse proxy -- [Trace](/docs/stacks/trace) - SigNoz observability -- [Vault](/docs/stacks/vault) - Vaultwarden password manager -- [VPN](/docs/stacks/vpn) - WireGuard VPN - -### Application Stacks -Production application services: -- [Auth](/docs/stacks/auth) - Keycloak authentication -- [Blog](/docs/stacks/blog) - Static website server -- [News](/docs/stacks/news) - Letterspace newsletter platform -- [Sexy](/docs/stacks/sexy) - Directus CMS - -### Utility Stacks -Management and monitoring tools: -- [Dock](/docs/stacks/dock) - Dockge Docker UI -- [Chat](/docs/stacks/chat) - Gotify notifications -- [Track](/docs/stacks/track) - Umami analytics -- [Auto](/docs/stacks/auto) - Semaphore CI/CD diff --git a/Projects/kompose/docs/content/index.md b/Projects/kompose/docs/content/index.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Projects/kompose/docs/eslint.config.mjs b/Projects/kompose/docs/eslint.config.mjs new file mode 100644 index 00000000..934c3a1d --- /dev/null +++ b/Projects/kompose/docs/eslint.config.mjs @@ -0,0 +1,6 @@ +// @ts-check +import withNuxt from './.nuxt/eslint.config.mjs' + +export default withNuxt( + // Your custom configs here +) diff --git a/Projects/kompose/docs/nuxt.config.ts b/Projects/kompose/docs/nuxt.config.ts index 8d0adcb0..dcf77156 100644 --- a/Projects/kompose/docs/nuxt.config.ts +++ b/Projects/kompose/docs/nuxt.config.ts @@ -1,38 +1,100 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - compatibilityDate: '2025-07-15', - devtools: { enabled: true }, + modules: [ + '@nuxt/eslint', + '@nuxt/image', + '@nuxt/ui', + '@nuxt/content', + 'nuxt-og-image', + 'nuxt-llms' + ], + + // content: { + // build: { + // markdown: { + // // Object syntax can be used to override default options + // remarkPlugins: { + // // Override remark-emoji options + // 'remark-emoji': { + // options: { + // emoticon: true + // } + // }, + // // Disable remark-gfm + // 'remark-gfm': false, + // // Add remark-oembed + // 'remark-oembed': { + // // Options + // } + // }, + // } + // } + // }, + + devtools: { + enabled: false + }, + + css: ['~/assets/css/main.css'], + content: { - experimental: { nativeSqlite: true }, build: { markdown: { - // Object syntax can be used to override default options - remarkPlugins: { - // Override remark-emoji options - 'remark-emoji': { - options: { - emoticon: true - } - }, - // Disable remark-gfm - 'remark-gfm': false, - // Add remark-oembed - 'remark-oembed': { - // Options - } - }, + toc: { + searchDepth: 1 + } } } }, - modules: [ - '@nuxt/content', - '@nuxt/eslint', - '@nuxt/image', - '@nuxt/icon', - '@nuxt/fonts', - '@nuxt/scripts', - 'nuxt-zod-i18n', - '@nuxtjs/i18n' - ], - extends: ['docus'] + + compatibilityDate: '2024-07-11', + + nitro: { + prerender: { + routes: [ + '/' + ], + crawlLinks: true, + autoSubfolderIndex: false + } + }, + + eslint: { + config: { + stylistic: { + commaDangle: 'never', + braceStyle: '1tbs' + } + } + }, + + icon: { + provider: 'iconify' + }, + + llms: { + domain: 'https://docs-template.nuxt.dev/', + title: 'Nuxt Docs Template', + description: 'A template for building documentation with Nuxt UI and Nuxt Content.', + full: { + title: 'Nuxt Docs Template - Full Documentation', + description: 'This is the full documentation for the Nuxt Docs Template.' + }, + sections: [ + { + title: 'Getting Started', + contentCollection: 'docs', + contentFilters: [ + { field: 'path', operator: 'LIKE', value: '/getting-started%' } + ] + }, + { + title: 'Essentials', + contentCollection: 'docs', + contentFilters: [ + { field: 'path', operator: 'LIKE', value: '/essentials%' } + ] + } + ] + } }) diff --git a/Projects/kompose/docs/package.json b/Projects/kompose/docs/package.json index 1379dbff..8f4bab09 100644 --- a/Projects/kompose/docs/package.json +++ b/Projects/kompose/docs/package.json @@ -1,40 +1,36 @@ { - "name": "kompose-docs", - "type": "module", + "name": "nuxt-ui-template-docs", "private": true, + "type": "module", "scripts": { - "build": "nuxt build --extend docus", - "dev": "nuxt dev --extend docus", - "generate": "nuxt generate", + "build": "nuxt build", + "dev": "nuxt dev", "preview": "nuxt preview", - "postinstall": "nuxt prepare" + "postinstall": "nuxt prepare", + "lint": "eslint .", + "typecheck": "nuxt typecheck" }, "dependencies": { - "@googlemaps/markerclusterer": "^2.6.2", - "@nuxt/content": "3.7.1", - "@nuxt/eslint": "1.9.0", - "@nuxt/fonts": "0.11.4", - "@nuxt/icon": "2.0.0", - "@nuxt/image": "1.11.0", - "@nuxt/scripts": "0.12.1", - "@nuxtjs/i18n": "^10.1.0", - "@unhead/vue": "^2.0.18", - "docus": "^5.2.0", - "eslint": "^9.37.0", - "nuxt": "^4.1.3", - "nuxt-zod-i18n": "^1.12.1", - "remark-oembed": "^1.2.2", - "vue": "^3.5.22", - "vue-router": "^4.5.1", - "zod": "^3.25.76", - "zod-to-json-schema": "3.24.6" + "@iconify-json/lucide": "^1.2.68", + "@iconify-json/simple-icons": "^1.2.54", + "@iconify-json/vscode-icons": "^1.2.30", + "@nuxt/content": "^3.7.1", + "@nuxt/image": "^1.11.0", + "@nuxt/ui": "^4.0.1", + "@tailwindcss/typography": "^0.5.19", + "better-sqlite3": "^12.4.1", + "nuxt": "^4.1.2", + "nuxt-llms": "0.1.3", + "nuxt-og-image": "^5.1.11" }, - "packageManager": "pnpm@10.13.1", - "pnpm": { - "onlyBuiltDependencies": [ - "@tailwindcss/oxide", - "better-sqlite3", - "vue-demi" - ] - } + "devDependencies": { + "@nuxt/eslint": "^1.9.0", + "eslint": "^9.37.0", + "typescript": "^5.9.3", + "vue-tsc": "^3.1.0" + }, + "resolutions": { + "unimport": "4.1.1" + }, + "packageManager": "pnpm@10.18.0" } diff --git a/Projects/kompose/docs/pnpm-lock.yaml b/Projects/kompose/docs/pnpm-lock.yaml index f4d6d446..84d48a5f 100644 --- a/Projects/kompose/docs/pnpm-lock.yaml +++ b/Projects/kompose/docs/pnpm-lock.yaml @@ -4,69 +4,64 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + unimport: 4.1.1 + importers: .: dependencies: - '@googlemaps/markerclusterer': - specifier: ^2.6.2 - version: 2.6.2 + '@iconify-json/lucide': + specifier: ^1.2.68 + version: 1.2.69 + '@iconify-json/simple-icons': + specifier: ^1.2.54 + version: 1.2.54 + '@iconify-json/vscode-icons': + specifier: ^1.2.30 + version: 1.2.31 '@nuxt/content': - specifier: 3.7.1 - version: 3.7.1(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.9.3)) - '@nuxt/eslint': - specifier: 1.9.0 - version: 1.9.0(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) - '@nuxt/fonts': - specifier: 0.11.4 - version: 0.11.4(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(magicast@0.3.5)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) - '@nuxt/icon': - specifier: 2.0.0 - version: 2.0.0(magicast@0.3.5)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + specifier: ^3.7.1 + version: 3.7.1(better-sqlite3@12.4.1)(magicast@0.3.5) '@nuxt/image': - specifier: 1.11.0 + specifier: ^1.11.0 version: 1.11.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(magicast@0.3.5) - '@nuxt/scripts': - specifier: 0.12.1 - version: 0.12.1(@googlemaps/markerclusterer@2.6.2)(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) - '@nuxtjs/i18n': - specifier: ^10.1.0 - version: 10.1.0(@vue/compiler-dom@3.5.22)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(rollup@4.52.4)(vue@3.5.22(typescript@5.9.3)) - '@unhead/vue': - specifier: ^2.0.18 - version: 2.0.18(vue@3.5.22(typescript@5.9.3)) - docus: - specifier: ^5.2.0 - version: 5.2.0(@babel/parser@7.28.4)(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(@vue/compiler-dom@3.5.22)(better-sqlite3@12.4.1)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(eslint@9.37.0(jiti@2.6.1))(h3@1.15.4)(ioredis@5.8.1)(magicast@0.3.5)(nuxt@4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(rollup@4.52.4)(typescript@5.9.3)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(valibot@1.1.0(typescript@5.9.3))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76) + '@nuxt/ui': + specifier: ^4.0.1 + version: 4.0.1(@babel/parser@7.28.4)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76) + '@tailwindcss/typography': + specifier: ^0.5.19 + version: 0.5.19(tailwindcss@4.1.14) + better-sqlite3: + specifier: ^12.4.1 + version: 12.4.1 + nuxt: + specifier: ^4.1.2 + version: 4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.1.1(typescript@5.9.3))(yaml@2.8.1) + nuxt-llms: + specifier: 0.1.3 + version: 0.1.3(magicast@0.3.5) + nuxt-og-image: + specifier: ^5.1.11 + version: 5.1.11(@unhead/vue@2.0.19(vue@3.5.22(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + devDependencies: + '@nuxt/eslint': + specifier: ^1.9.0 + version: 1.9.0(@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) eslint: specifier: ^9.37.0 version: 9.37.0(jiti@2.6.1) - nuxt: - specifier: ^4.1.3 - version: 4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) - nuxt-zod-i18n: - specifier: ^1.12.1 - version: 1.12.1(magicast@0.3.5) - remark-oembed: - specifier: ^1.2.2 - version: 1.2.2 - vue: - specifier: ^3.5.22 - version: 3.5.22(typescript@5.9.3) - vue-router: - specifier: ^4.5.1 - version: 4.5.1(vue@3.5.22(typescript@5.9.3)) - zod: - specifier: ^3.25.76 - version: 3.25.76 - zod-to-json-schema: - specifier: 3.24.6 - version: 3.24.6(zod@3.25.76) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vue-tsc: + specifier: ^3.1.0 + version: 3.1.1(typescript@5.9.3) packages: - '@ai-sdk/gateway@1.0.33': - resolution: {integrity: sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g==} + '@ai-sdk/gateway@1.0.34': + resolution: {integrity: sha512-Vc/4fGlAW2uGmz6DnbRB9b7kdkbk4DQYNDYNdr/NHJxoaLsdNF3CE8i172rZ47+jEU2hGibcn5yivbgvjMi8Ig==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -81,8 +76,8 @@ packages: resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} - '@ai-sdk/vue@2.0.60': - resolution: {integrity: sha512-T4GRSty+verObCBMbXWZ6Yl8GS9Gba0IFNSpWpQi2u9iQYlApxO/57nThJQVa2FOgv4R0o5kQCrnStXwpyxfHQ==} + '@ai-sdk/vue@2.0.61': + resolution: {integrity: sha512-g+UfMy/x5gqShL25Cv2v5zWvfMpiLS2pgHZdv4CN1YkjqS/cuv0cU6Esg0jfOz8forvqgRz2HGFoFlyVhpWWJA==} engines: {node: '>=18'} peerDependencies: vue: ^3.3.4 @@ -480,9 +475,6 @@ packages: resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} engines: {node: '>=14'} - '@fingerprintjs/botd@1.9.1': - resolution: {integrity: sha512-7kv3Yolsx9E56i+L1hCEcupH5yqcI5cmVktxy6B0K7rimaH5qDXwsiA5FL+fkxeUny7XQKn7p13HvK7ofDZB3g==} - '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -495,9 +487,6 @@ packages: '@floating-ui/vue@1.1.9': resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==} - '@googlemaps/markerclusterer@2.6.2': - resolution: {integrity: sha512-U6uVhq8iWhiIckA89sgRu8OK35mjd6/3CuoZKWakKEf0QmRRWpatlsPb3kqXkoWSmbcZkopRiI4dnW6DQSd7bQ==} - '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -543,73 +532,6 @@ packages: '@internationalized/number@3.6.5': resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} - '@intlify/bundle-utils@11.0.1': - resolution: {integrity: sha512-5l10G5wE2cQRsZMS9y0oSFMOLW5IG/SgbkIUltqnwF1EMRrRbUAHFiPabXdGTHeexCsMTcxj/1w9i0rzjJU9IQ==} - engines: {node: '>= 20'} - peerDependencies: - petite-vue-i18n: '*' - vue-i18n: '*' - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vue-i18n: - optional: true - - '@intlify/core-base@11.1.12': - resolution: {integrity: sha512-whh0trqRsSqVLNEUCwU59pyJZYpU8AmSWl8M3Jz2Mv5ESPP6kFh4juas2NpZ1iCvy7GlNRffUD1xr84gceimjg==} - engines: {node: '>= 16'} - - '@intlify/core@11.1.12': - resolution: {integrity: sha512-Uccp4VtalUSk/b4F9nBBs7VGgIh9VnXTSHHQ+Kc0AetsHJLxdi04LfhfSi4dujtsTAWnHMHWZw07UbMm6Umq1g==} - engines: {node: '>= 16'} - - '@intlify/h3@0.7.1': - resolution: {integrity: sha512-D/9+L7IzPrOa7e6R/ztepXayAq+snfzBYIwAk3RbaQsLEXwVNjC5c+WKXjni1boc/plGRegw4/m33SaFwvdEpg==} - engines: {node: '>= 20'} - - '@intlify/message-compiler@11.1.12': - resolution: {integrity: sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==} - engines: {node: '>= 16'} - - '@intlify/shared@11.1.12': - resolution: {integrity: sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==} - engines: {node: '>= 16'} - - '@intlify/unplugin-vue-i18n@11.0.1': - resolution: {integrity: sha512-nH5NJdNjy/lO6Ne8LDtZzv4SbpVsMhPE+LbvBDmMeIeJDiino8sOJN2QB3MXzTliYTnqe3aB9Fw5+LJ/XVaXCg==} - engines: {node: '>= 20'} - peerDependencies: - petite-vue-i18n: '*' - vue: ^3.2.25 - vue-i18n: '*' - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vue-i18n: - optional: true - - '@intlify/utils@0.13.0': - resolution: {integrity: sha512-8i3uRdAxCGzuHwfmHcVjeLQBtysQB2aXl/ojoagDut5/gY5lvWCQ2+cnl2TiqE/fXj/D8EhWG/SLKA7qz4a3QA==} - engines: {node: '>= 18'} - - '@intlify/vue-i18n-extensions@8.0.0': - resolution: {integrity: sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==} - engines: {node: '>= 18'} - peerDependencies: - '@intlify/shared': ^9.0.0 || ^10.0.0 || ^11.0.0 - '@vue/compiler-dom': ^3.0.0 - vue: ^3.0.0 - vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0 - peerDependenciesMeta: - '@intlify/shared': - optional: true - '@vue/compiler-dom': - optional: true - vue: - optional: true - vue-i18n: - optional: true - '@ioredis/commands@1.4.0': resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} @@ -662,11 +584,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@miyaneee/rollup-plugin-json5@1.2.0': - resolution: {integrity: sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -791,28 +708,6 @@ packages: resolution: {integrity: sha512-ZLkIfleKHQF0PqTDEwuVVnnE/hyMdfY4m2zX8vRC0XMSbFS1I0MFcKkzWnJaMC13NYmGPnT3sX0o3lznweKHJQ==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/scripts@0.12.1': - resolution: {integrity: sha512-B6h6pT0tAuScve+6opooJL9Zj45OMxaXspxtG65NhXvoT61qQhA/9Mjx1DedWJT7le6YffIvDcciKVrb6xXYYA==} - peerDependencies: - '@googlemaps/markerclusterer': ^2.6.2 - '@paypal/paypal-js': ^8.1.2 - '@stripe/stripe-js': ^7.0.0 - '@types/google.maps': ^3.58.1 - '@types/vimeo__player': ^2.18.3 - '@types/youtube': ^0.1.0 - '@unhead/vue': ^2.0.3 - peerDependenciesMeta: - '@paypal/paypal-js': - optional: true - '@stripe/stripe-js': - optional: true - '@types/google.maps': - optional: true - '@types/vimeo__player': - optional: true - '@types/youtube': - optional: true - '@nuxt/telemetry@2.6.6': resolution: {integrity: sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag==} engines: {node: '>=18.12.0'} @@ -859,16 +754,9 @@ packages: '@nuxtjs/color-mode@3.5.2': resolution: {integrity: sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==} - '@nuxtjs/i18n@10.1.0': - resolution: {integrity: sha512-2h/6Y4ke+mYq3RrV71erTBn1HzKKKPGEJrzYW6GA8SAc91zb7jqyfRkElG95Cei+2+6XJrt73Djys5qTc0tCUw==} - engines: {node: '>=20.11.1'} - '@nuxtjs/mdc@0.17.4': resolution: {integrity: sha512-I5ZYUWVlE2xZAkfBG6B0/l2uddDZlr8X2WPVMPYNY4zocobBjMgykj4aqYXHY+N35HRYsa+IpuUCf30bR8xCbA==} - '@nuxtjs/robots@5.5.5': - resolution: {integrity: sha512-ZJZQHFrahJITNakvRx2+TAHH2xQMO0BHYANlPVQ2ZU7s3wQMnOjaYAyAuTjzbHlLqUqurpQQtYT3WNrsl3QpJg==} - '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -962,362 +850,181 @@ packages: cpu: [x64] os: [win32] - '@oxc-parser/binding-android-arm64@0.81.0': - resolution: {integrity: sha512-nGcfHGLkpy2R4Dm1TcpDDifVIZ0q50pvFkHgcbqLpdtbyM9NDlQp1SIgRdGtKPUXAVJz3LDV8hLYvCss8Bb5wg==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [android] - '@oxc-parser/binding-android-arm64@0.94.0': resolution: {integrity: sha512-Ficqj6MggRGFkemU4pVFTyth3jWVL/zpIWjGMTXaPU81l46ZDcYVFWp9ia6nfE5mm8UdVSI2trvmK+BpNUim7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.81.0': - resolution: {integrity: sha512-Xl0sB6UcAbU36d1nUs/JfPnihq0JD62xP7sFa/pML+ksxcwAEMMGzifOxNyQkInDzFp+Ql63GD7iJGbavPc5/w==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [darwin] - '@oxc-parser/binding-darwin-arm64@0.94.0': resolution: {integrity: sha512-uYyeMH9vMfb0JAdm6ZwHTgcTv53030elQKMnUbux9K5rxOCWbHUyeVACEv86V+E/Ft6RtkvWDIqUY4sYZRmcuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.81.0': - resolution: {integrity: sha512-OyHZuZjHBnZ6SOXe8fDD3i0Vf+Q0oVuaaWu2+ZtxRYDcIDTG67uMN6tg+JkCkYU7elMEJp+Tgw38uEPQWnt3eg==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [darwin] - '@oxc-parser/binding-darwin-x64@0.94.0': resolution: {integrity: sha512-Ek1fh8dw6b+/hzLo5jjPuxkshRxekjtTfhfWZ4RehMYiApT8Rj4k+7kcQ+zV1ZaF+1+yLgNqNja2RMRqx3MHzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.81.0': - resolution: {integrity: sha512-FLkXVaHT3PQSHEZkSB99s3Bz/E03tXu2jvspmwu34tlmLaEk3dqoAvYS/uZcBtetGXa3Y48sW/rtBwW6jE811w==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [freebsd] - '@oxc-parser/binding-freebsd-x64@0.94.0': resolution: {integrity: sha512-81bE/8F252Ew179uVo9FU67dmRc+n8QSMhj6mmMxisdI3ao5MjCI5jDL19mH3UeQ9uRUBSPFILmHBDQYNZ9oKw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.81.0': - resolution: {integrity: sha512-c4IXIYDmzMeuYaTtyWl9fj7L90BAN7KZ3eKKDWnmB+ekZd1QduKT8MJiLfv7/pSecxQFwzMTpZ0el++ccRprTQ==} - engines: {node: '>=20.0.0'} - cpu: [arm] - os: [linux] - '@oxc-parser/binding-linux-arm-gnueabihf@0.94.0': resolution: {integrity: sha512-aGOU8IYXVYGN2aRrvcU5+UdM7BzIVlm4m0REQzjpblQKRdZfWFtDBRJez+fK/F10g0H1AU5DQVgbW5aeko49Jw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.81.0': - resolution: {integrity: sha512-Jahl5EPtdF3z8Lv8/ErCgy5tF+324nPAaFxFC+xFjOE2NdS9e8IMeWR/WbkO5pOSueEGq76GrjOX9uj9SsKqCw==} - engines: {node: '>=20.0.0'} - cpu: [arm] - os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.94.0': resolution: {integrity: sha512-69/ZuYSZ4dd7UWoEOyf+pXYPtvUZguDQqjhxMx8fI0J30sEEqs1d/DBLLnog/afHmaapPEIEr6rp9jF6bYcgNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.81.0': - resolution: {integrity: sha512-ufLjqUhcMMyIOzvI7BeRGWyhS5bBsuu2Mkks2wBVlpcs9dFbtlnvKv8SToiM/TTP/DFRu9SrKMVUyD0cuKVlcw==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.94.0': resolution: {integrity: sha512-u55PGVVfZF/frpEcv/vowfuqsCd5VKz3wta8KZ3MBxboat7XxgRIMS8VQEBiJ3aYE80taACu5EfPN1y9DhiU0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-parser/binding-linux-arm64-musl@0.81.0': - resolution: {integrity: sha512-U4pce3jsMe1s8/BLrCJPqNFdm8IJRhk9Mwf0qw4D6KLa14LT/j32b7kASnFxpy+U0X8ywHGsir8nwPEcWsvrzA==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [linux] - '@oxc-parser/binding-linux-arm64-musl@0.94.0': resolution: {integrity: sha512-Qm2SEU7/f2b2Rg76Pj49BdMFF7Vv7+2qLPxaae4aH1515kzVv6nZW0bqCo4fPDDyiE4bryF7Jr+WKhllBxvXPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-parser/binding-linux-riscv64-gnu@0.81.0': - resolution: {integrity: sha512-AjjSbkoy0oHQaGMsLg7O+gY/Vbx12K7IWbxheDO1BNL0eIwiL3xRrhKdTtaHU1KcHm2/asTtwYdndAzXQX5Jyw==} - engines: {node: '>=20.0.0'} - cpu: [riscv64] - os: [linux] - '@oxc-parser/binding-linux-riscv64-gnu@0.94.0': resolution: {integrity: sha512-bZO3QAt0lsZjk351mVM85obMivbXG+tDiah5XmmOaGO8k4vEYmoiKr2YHJoA2eNpKhPJF8dNyIS7U+XAvirr9g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-parser/binding-linux-s390x-gnu@0.81.0': - resolution: {integrity: sha512-Dx4tOdUekDMa3k18MjogWLy+b9z3RmLBf4OUSwJs5iGkr/nc7kph/N8IPI4thVw4KbhEPZOq6SKUp7Q6FhPRzA==} - engines: {node: '>=20.0.0'} - cpu: [s390x] - os: [linux] - '@oxc-parser/binding-linux-s390x-gnu@0.94.0': resolution: {integrity: sha512-IdbJ/rwsaEPQx11mQwGoClqhAmVaAF9+3VmDRYVmfsYsrhX1Ue1HvBdVHDvtHzJDuumC/X/codkVId9Ss+7fVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-parser/binding-linux-x64-gnu@0.81.0': - resolution: {integrity: sha512-B4RwYZqmgZJg2AV3YWR8/zyjg2t/2GwEIdd5WS4NkDxX9NzHNv1tz1uwGurPyFskO9/S0PoXDFGeESCI5GrkuA==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [linux] - '@oxc-parser/binding-linux-x64-gnu@0.94.0': resolution: {integrity: sha512-TbtpRdViF3aPCQBKuEo+TcucwW3KFa6bMHVakgaJu12RZrFpO4h1IWppBbuuBQ9X7SfvpgC1YgCDGve9q6fpEA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-parser/binding-linux-x64-musl@0.81.0': - resolution: {integrity: sha512-VvZlPOG03uKRYPgynVcIvR42ygNRo4kiLKaoKWdpQESSfc1uRD6fNQI5V/O9dAfEmZuTM9dhpgszr9McCeRK6A==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [linux] - '@oxc-parser/binding-linux-x64-musl@0.94.0': resolution: {integrity: sha512-hlfoDmWvgSbexoJ9u3KwAJwpeu91FfJR6++fQjeYXD2InK4gZow9o3DRoTpN/kslZwzUNpiRURqxey/RvWh8JQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-parser/binding-wasm32-wasi@0.81.0': - resolution: {integrity: sha512-uGGqDuiO9JKWq5CiNDToZJPTQx6zqp0Wlj5zsKlKuN7AslvhdyzITCAyY+mtRcNEPl+k7j5uR7aIWFFhGuqycA==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@oxc-parser/binding-wasm32-wasi@0.94.0': resolution: {integrity: sha512-VoCtQZIsRZN8mszbdizh+5MwzbgbMxsPgT2hOzzILQLNY2o2OXG3xSiFNFakVhbWc9qSTaZ/MRDsqR+IM3fLFw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.81.0': - resolution: {integrity: sha512-rWL3ieNa8nNk4XHRQ58Hrt249UanJhmzsuBOei3l5xmMleTAnTsvUxKMK4eiFw4Cdku7C5C5VJFgq7+9yPwn8Q==} - engines: {node: '>=20.0.0'} - cpu: [arm64] - os: [win32] - '@oxc-parser/binding-win32-arm64-msvc@0.94.0': resolution: {integrity: sha512-3wsbMqV8V7WaLdiQ2oawdgKkCgMHXJ7VDuo6uIcXauU3wK6CG0QyDXRV9bPWzorGLRBUHndu/2VB1+9dgT9fvg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.81.0': - resolution: {integrity: sha512-XZCXKi5SW4ekpIY6O4yDZJHiLeVCJgvr6aT+vyQbNMlSEXKOieFTUZPsp9QiohvkXZE60ZEUqX3TP+8z9A7RRQ==} - engines: {node: '>=20.0.0'} - cpu: [x64] - os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.94.0': resolution: {integrity: sha512-UTQQ1576Nzhh4jr/YmvzqnuwTPOauB/TPzsnWzT+w8InHxL5JA1fmy01wB1F2BWT9AD6YV4BTB1ozRICYdAgjw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.81.0': - resolution: {integrity: sha512-CnOqkybZK8z6Gx7Wb1qF7AEnSzbol1WwcIzxYOr8e91LytGOjo0wCpgoYWZo8sdbpqX+X+TJayIzo4Pv0R/KjA==} - '@oxc-project/types@0.94.0': resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} - '@oxc-transform/binding-android-arm64@0.81.0': - resolution: {integrity: sha512-Lli18mT/TaUsQSXL7Q08xatbOySqKhruNpI/mGvSbIHXX7TfznNbQ/zbzNftKa4tvbJnDUXz7SV9JO1wXOoYSw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] - '@oxc-transform/binding-android-arm64@0.94.0': resolution: {integrity: sha512-abxgEoomc5HNbDQaGhBWguR+W4cdrcEIwV8xIQ2qpUuhEUoHy6nQLfN/gREAZMdkyIaKwk12FckB9aNxVTte2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.81.0': - resolution: {integrity: sha512-EseJY9FQa1Ipow4quJ36i+1C5oEbrwJ3eKGZPw48/H5/5S+JFMHwPaE3NOF/aSLw8lkH6ghY6qKWanal2Jh8bA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] - '@oxc-transform/binding-darwin-arm64@0.94.0': resolution: {integrity: sha512-HbnmwC1pZ9M/nXqA36TpwF7vcXk+PgLMxDvvza5C9CCivfi3MUfqCvFMvRI0snlVm2PK2GAwWJjBtng1fR8LJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.81.0': - resolution: {integrity: sha512-L12EE6d/TveVsPKAaqqgW5IAA3xCh64RmsmJwxIJ7fBrnUg0qHfqENcxLfaFDwjDQe5mrZczuSYfOCwhoKWZdA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] - '@oxc-transform/binding-darwin-x64@0.94.0': resolution: {integrity: sha512-GADv5xcClQpYj5d6GLdPF6Qz/3OSn0d/LKhDklpW/5S42RQsGxI+83iXF1e61KITd4yp4VAvjEiuDM52zb4xYQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.81.0': - resolution: {integrity: sha512-l1LbYOq+q6VVI+lIMFd+ehkqLokMj2Zjeyza4PSMzAfXYeaIFHDGiQBn1KE+IXMNN/E4Dwj6b3LwtvdB/uLpeQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [freebsd] - '@oxc-transform/binding-freebsd-x64@0.94.0': resolution: {integrity: sha512-5H5V+H1CZoRQwbgAt/wLrN8oZwuYGP6xdXTuGUW2C2ON1DynMyxC4Padf8vjPcKbQph5GnLAuoaTafxokE2Z/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.81.0': - resolution: {integrity: sha512-8xmYvtpi1GDvsp5nmvnKyjceHLyxLIn2Esolm7GFTGrLxmcPo+ZUn2huAZCuOzSbjAqNRV/nU8At/2N93tLphg==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm-gnueabihf@0.94.0': resolution: {integrity: sha512-BoWVkKUqgmUs4hDvGPgCSUkIeEMBVvHU/mO348Dhp7XT9ijdnSBmRzY6hFaqRSq768Hn6KblM0NM1QV7jEvKOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.81.0': - resolution: {integrity: sha512-YaLHLoaWVyI458zaF3yEBKq2YIoYFftmnEHJ7mvbYwhfvH6SDwQez2TnjZEoB/UD+LX9XQfiIfX6VP35RAPHUQ==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.94.0': resolution: {integrity: sha512-XUAyt2EtSDycljMKfgDVg/T5C3aF5dR1mfMJAZUCPQkfJjXZwA/C0DTTC/xPlPm68WA4uRtVNLqExTHJ3JOPwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.81.0': - resolution: {integrity: sha512-jFTlu6KrTq/z9z/HfdsntxQz6lmrIyIOXC3iZVxyoz2MDulXHhYotKypRqBPPyblyKeMbX1BCPwwKiIyYfiXMQ==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.94.0': resolution: {integrity: sha512-5Y7FI2FgawingojBEo3df4sI/Sq73UhVZy3DlT9o94Pgu8o+ujlKPD20kFmOJ1jQNEJ4ScKr5vh6pemHSZjUgA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.81.0': - resolution: {integrity: sha512-Tk0fOSFxYN/CH2yZLF1Cy8rKHboW7OMubGULd9HUh3Mdi25yBngmc3sOdcLscLvBvutqgdSNn7e/gdPaodDlmw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - '@oxc-transform/binding-linux-arm64-musl@0.94.0': resolution: {integrity: sha512-QiyHubpKo7upYPfwB+8bjaTczd60PJdL2zJrMKgL+CDlmP6HZlnWXZkeVTA3S6QXnbulRlrtERmqS2DePszG0g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxc-transform/binding-linux-riscv64-gnu@0.81.0': - resolution: {integrity: sha512-8JWsRm8tR0DDLb+1UuZM/E46MscCGlklH5hMpKQpF2cH6NzED7184S7yMmamoIIuMQEGF6coOAToukoW0ItSzQ==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - '@oxc-transform/binding-linux-riscv64-gnu@0.94.0': resolution: {integrity: sha512-vh3PZGmoUCbfkqVGuB7fweuqthYxzAAGqhiAJAn8x4V+R86W5esCtxbm+PTyVawBT/eoq1cU8HhNVqE0rQlChg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxc-transform/binding-linux-s390x-gnu@0.81.0': - resolution: {integrity: sha512-Tb08GTZR0inR0hMXoP7MQx4G5YCTObJ8GEbBHKWMtL71RJhJGnJIn63DY3uvfPbi1XNW7uSJSzQ0mWMzelPAgg==} - engines: {node: '>=14.0.0'} - cpu: [s390x] - os: [linux] - '@oxc-transform/binding-linux-s390x-gnu@0.94.0': resolution: {integrity: sha512-DT3m7cF612RdHBmYK3Ave6OVT1iSvlbKo8T+81n6ZcFXO+L8vDJHzwMwMOXfeOLQ15zr0WmSHqBOZ14tHKNidw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.81.0': - resolution: {integrity: sha512-RalVuZu/iDzGJeQpyQ3KaJLsD11kvb/SLqKt0MXMkq2lBfIB4A1Pdx4JL0RuvcqjLPEgEWq8GcAPiyVeTYEtVQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-gnu@0.94.0': resolution: {integrity: sha512-kK5dt8wfxUD3MGXnLHWxv57oYinIwoRFcjw2oJD5DCoGTeXCmrFk4D0eGPAlZKOm7uvWMs9yNI8rg1KY5nEs1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.81.0': - resolution: {integrity: sha512-EdbKDZ4gA5jD5YKT15HgYMCcoHGYEqO5oFGn6uREWvc4BcJ6cDrK9oyttT5CO6Y35tgnSQElHVKDWXyTMIbQlA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - '@oxc-transform/binding-linux-x64-musl@0.94.0': resolution: {integrity: sha512-+zfNBO2qEPcSPTHVUxsiG3Hm0vxWzuL+DZX0wbbtjKwwhH2Jr1Eo26R+Dwc1SfbvoWen36NitKkd2arkpMW8KQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxc-transform/binding-wasm32-wasi@0.81.0': - resolution: {integrity: sha512-NCAj6b7fQvxM9U3UkbfFxelx458w8t7CnyRNvxlFpQjESCaYZ6hUzxHL57TGKUq6P7jKt6xjDdoFnVwZ36SR6w==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@oxc-transform/binding-wasm32-wasi@0.94.0': resolution: {integrity: sha512-rn3c2wGT3ha6j0VLykYOkXU5YyQYIeGXRsDPP7xyiZHVTVssoM0X1BuheFlgxmC1POXMT+dAAcVOFG5MdW1bnQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.81.0': - resolution: {integrity: sha512-zwZMMQAwfRM0uk5iMHf6q1fXG8qCcKU30qOhzdrxfO/rD+2Xz/ZfRTkGJzxG2cXAaJ3TRUzYdTr6YLxgGfTIbQ==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] - '@oxc-transform/binding-win32-arm64-msvc@0.94.0': resolution: {integrity: sha512-An/Dd+I8dH0b+VLEdfTrZP53S4Fha3w/aD71d1uZB14aU02hBt3ZwU8IE3RGZIJPxub9OZmCmJN66uTqkT6oXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.81.0': - resolution: {integrity: sha512-Y86Doj1eOkiY9Y+W51iJ3+/D9L+0eZ5Fl5AIQfQcHSGAjlF9geHeHxUsILZWEav12yuE/zeB5gO3AgJ801aJyQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.94.0': resolution: {integrity: sha512-HEE/8x6H67jPlkCDDB3xl74eR86zY6nLAql6onmidF5JPNXt9v2XGB6xEwr4brUIaMLPkl90plbdCy9jWhEjdQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1577,15 +1284,6 @@ packages: rollup: optional: true - '@rollup/plugin-yaml@4.1.2': - resolution: {integrity: sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -1771,10 +1469,6 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - '@tailwindcss/node@4.1.14': resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} @@ -1863,6 +1557,11 @@ packages: '@tailwindcss/postcss@4.1.14': resolution: {integrity: sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==} + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + '@tailwindcss/vite@4.1.14': resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==} peerDependencies: @@ -1893,33 +1592,18 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} @@ -1939,12 +1623,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/supercluster@7.1.3': - resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} - '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -2019,8 +1697,8 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@unhead/vue@2.0.18': - resolution: {integrity: sha512-2i3AWz+0G5eS11iJPDKXc8u+rciI63oT3uh/bYzehLiC688IQ2cCnthu0rvIv2sLB+8LKIj1jv8JIHZZTMnJOg==} + '@unhead/vue@2.0.19': + resolution: {integrity: sha512-7BYjHfOaoZ9+ARJkT10Q2TjnTUqDXmMpfakIAsD/hXiuff1oqWg1xeXT5+MomhNcC15HbiABpbbBmITLSHxdKg==} peerDependencies: vue: '>=3.5.18' @@ -2140,8 +1818,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@vercel/oidc@3.0.1': - resolution: {integrity: sha512-V/YRVrJDqM6VaMBjRUrd6qRMrTKvZjHdVdEmdXsOZMulTa3iK98ijKTc3wldBmst6W5rHpqMoKllKcBAHgN7GQ==} + '@vercel/oidc@3.0.2': + resolution: {integrity: sha512-JekxQ0RApo4gS4un/iMGsIL1/k4KUBe3HmnGcDvzHuFBdQdudEJgTqcsJC7y6Ul4Yw5CeykgvQbX2XeEJd0+DA==} engines: {node: '>= 20'} '@vitejs/plugin-vue-jsx@5.1.1': @@ -2167,15 +1845,6 @@ packages: '@volar/typescript@2.4.23': resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} - '@vue-macros/common@3.0.0-beta.15': - resolution: {integrity: sha512-DMgq/rIh1H20WYNWU7krIbEfJRYDDhy7ix64GlT4AVUJZZWCZ5pxiYVJR3A3GmWQPkn7Pg7i3oIiGqu4JGC65w==} - engines: {node: '>=20.18.0'} - peerDependencies: - vue: ^2.7.0 || ^3.2.25 - peerDependenciesMeta: - vue: - optional: true - '@vue-macros/common@3.0.0-beta.16': resolution: {integrity: sha512-8O2gWxWFiaoNkk7PGi0+p7NPGe/f8xJ3/INUufvje/RZOs7sJvlI1jnR4lydtRFa/mU0ylMXUXXjSK0fHDEYTA==} engines: {node: '>=20.18.0'} @@ -2355,8 +2024,8 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ai@5.0.60: - resolution: {integrity: sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA==} + ai@5.0.61: + resolution: {integrity: sha512-a+NtNgxjMiGvL46/+v7iNbKHLAg8VDheNhYFe9lL3MPiL9W5DNH45wMaahteCYS4WgoFgdQa2zz4CM5lkiXuOA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -2391,9 +2060,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apr-intercept@3.0.4: - resolution: {integrity: sha512-rDtf8HhtJL2OBKqKwZ3ehlTx1ZaiO0h7UQdBzFcntNtSD5ow/8sC4JpbMRVBwBL27m9wQwxEhmaAfHoAPBkVcA==} - archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -2492,9 +2158,6 @@ packages: resolution: {integrity: sha512-GM9c0cWWR8Ga7//Ves/9KRgTS8nLausCkP3CGiFLrnwA2CDUluXgaQqvrULoR2Ujrd/mz/lkX87F5BHFsNr5sQ==} hasBin: true - bcp-47-match@1.0.3: - resolution: {integrity: sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==} - better-sqlite3@12.4.1: resolution: {integrity: sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==} engines: {node: 20.x || 22.x || 23.x || 24.x} @@ -2575,14 +2238,6 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2596,9 +2251,6 @@ packages: caniuse-lite@1.0.30001749: resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} - ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2613,15 +2265,9 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - character-entities-html4@1.1.4: - resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} @@ -2674,9 +2320,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -2705,9 +2348,6 @@ packages: colortranslator@5.0.0: resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==} - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2818,9 +2458,6 @@ packages: css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-selector-parser@1.4.1: - resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} - css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} @@ -2940,10 +2577,6 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -2995,16 +2628,6 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} - direction@1.0.4: - resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} - hasBin: true - - docus@5.2.0: - resolution: {integrity: sha512-sYqMkdxaOIMVIXwbvdqx6TWZcRN/0cA++BoxZ5zPCZqQHmZFDRXNnqjL8xIrtXmzWmyF+SzVT6Xt2sjKCDxALw==} - peerDependencies: - better-sqlite3: 12.x - nuxt: 4.x - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -3018,9 +2641,6 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dot-prop@10.1.0: resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==} engines: {node: '>=20'} @@ -3164,11 +2784,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - eslint-config-flat-gitignore@2.1.0: resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==} peerDependencies: @@ -3283,15 +2898,6 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -3354,10 +2960,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.3.2: - resolution: {integrity: sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==} - engines: {node: '>=6.0.0'} - fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} @@ -3485,10 +3087,6 @@ packages: get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -3548,10 +3146,6 @@ packages: resolution: {integrity: sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==} engines: {node: '>=20'} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3582,9 +3176,6 @@ packages: hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - hast-util-has-property@1.0.4: - resolution: {integrity: sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==} - hast-util-has-property@3.0.0: resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} @@ -3594,18 +3185,12 @@ packages: hast-util-is-body-ok-link@3.0.1: resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} - hast-util-is-element@1.1.0: - resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==} - hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} hast-util-minify-whitespace@1.0.1: resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -3615,12 +3200,6 @@ packages: hast-util-raw@9.1.0: resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - hast-util-select@4.0.2: - resolution: {integrity: sha512-8EEG2//bN5rrzboPWD2HdS3ugLijNioS1pqOTIolXNf67xxShYw4SQEmVXd3imiBG+U2bC2nVTySr/iRAA7Cjg==} - - hast-util-to-html@7.1.3: - resolution: {integrity: sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==} - hast-util-to-html@9.0.5: resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} @@ -3630,24 +3209,15 @@ packages: hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - hast-util-to-string@1.0.4: - resolution: {integrity: sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==} - hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} hast-util-to-text@4.0.2: resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - hast-util-whitespace@1.0.4: - resolution: {integrity: sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==} - hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} @@ -3661,18 +3231,12 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - html-void-elements@1.0.5: - resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} html-whitespace-sensitive-tag-names@3.0.1: resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -3681,10 +3245,6 @@ packages: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -3854,9 +3414,6 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - is-wayland@0.1.0: resolution: {integrity: sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==} engines: {node: '>=20'} @@ -3951,13 +3508,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.1: - resolution: {integrity: sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - kdbush@4.0.2: - resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4105,13 +3655,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4285,11 +3828,6 @@ packages: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} @@ -4304,10 +3842,6 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -4409,9 +3943,6 @@ packages: xml2js: optional: true - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.78.0: resolution: {integrity: sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==} engines: {node: '>=10'} @@ -4465,13 +3996,6 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - not@0.1.0: - resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4487,9 +4011,6 @@ packages: resolution: {integrity: sha512-RaL6bHJujuZmw/G+uNWAHYktf3k4hdlBIy+FqudXji42IefrJKdSMkh5ixyhsfEHWsuTYGKxD2NU3sq990KGrQ==} hasBin: true - nuxt-define@1.0.0: - resolution: {integrity: sha512-CYZ2WjU+KCyCDVzjYUM4eEpMF0rkPmkpiFrybTqqQCRpUbPt2h3snswWIpFPXTi+osRCY6Og0W/XLAQgDL4FfQ==} - nuxt-llms@0.1.3: resolution: {integrity: sha512-+LaySko5UnlZw37GoTbsRX6KBFccSAzh6ENAYjV+xlVwsG8lSMz+IWnE7z5rstyVxHiX3Rx62M9JVut4jotJ3w==} @@ -4508,9 +4029,6 @@ packages: peerDependencies: h3: ^1 - nuxt-zod-i18n@1.12.1: - resolution: {integrity: sha512-QXEKQnX4r+UzCxCi+bAfhWZK/JMm4ij3WTItbkyiPEucbKu/A73ghmICuIiPNoyr/ct8PXN1qtc8wdjGs1MSAA==} - nuxt@4.1.3: resolution: {integrity: sha512-FPl+4HNIOTRYWQXtsZe5KJAr/eddFesuXABvcSTnFLYckIfnxcistwmbtPlkJhkW6vr/Jdhef5QqqYYkBsowGg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4572,36 +4090,19 @@ packages: resolution: {integrity: sha512-7+9iyxwpzfjuiEnSqNJYzTsC1Oud742PPkr/4S1bGY930U4tApdLEK8zmgbT57c1/56cfNOndqZaeQZiAfnJ5A==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.81.0: - resolution: {integrity: sha512-iceu9s70mZyjKs6V2QX7TURkJj1crnKi9csGByWvOWwrR5rwq0U0f49yIlRAzMP4t7K2gRC1MnyMZggMhiwAVg==} - engines: {node: '>=20.0.0'} - oxc-parser@0.94.0: resolution: {integrity: sha512-refms9HQoAlTYIazONYkuX5A3rFGPddbD6Otyc+A0/pj1WTttR8TsZRlMzQxCfhexxfrbinqd7ebkEoYNuCmLQ==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.81.0: - resolution: {integrity: sha512-Sfb7sBZJoA7GPNlgeVvwqSS+fKFG5Lu2N4CJIlKPdkBgMDwVqUPOTVrEXHYaoYilA2x0VXVwLWqjcW3CwrfzSA==} - engines: {node: '>=14.0.0'} - oxc-transform@0.94.0: resolution: {integrity: sha512-nHFFyPVWNNe7WLsAiQ6iwfsuTW/1esT+BJg+9rlvcSa0mfcZTpNo3TlBfj9IerLdDmYHJnSYsx8jjFZhoGfZ1w==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-walker@0.4.0: - resolution: {integrity: sha512-x5TJAZQD3kRnRBGZ+8uryMZUwkTYddwzBftkqyJIcmpBOXmoK/fwriRKATjZroR2d+aS7+2w1B0oz189bBTwfw==} - peerDependencies: - oxc-parser: '>=0.72.0' - oxc-walker@0.5.2: resolution: {integrity: sha512-XYoZqWwApSKUmSDEFeOKdy3Cdh95cOcSU8f7yskFWE4Rl3cfL5uwyY+EV7Brk9mdNLy+t5SseJajd6g7KncvlA==} peerDependencies: oxc-parser: '>=0.72.0' - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -4627,9 +4128,6 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4885,6 +4383,10 @@ packages: peerDependencies: postcss: ^8.4.32 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -4945,9 +4447,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -4970,10 +4469,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -5082,9 +4577,6 @@ packages: remark-mdc@3.6.0: resolution: {integrity: sha512-f+zgMYMBChoZJnpWM2AkfMwIC2sS5+vFQQdOVho58tUOh5lDP9SnZj2my8PeXBgt8MFQ+jc97vFFzWH21JXICQ==} - remark-oembed@1.2.2: - resolution: {integrity: sha512-zTHfSCgBIJV7D2UHanWlUT1sDqulOuAv9eVGl3XhV2o2tGDUgyVjMz5Ctx560IysJ+Qni4p0C3vkR1n3EubNRQ==} - remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -5098,9 +4590,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5117,9 +4606,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} @@ -5289,9 +4775,6 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -5351,9 +4834,6 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@3.1.0: - resolution: {integrity: sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -5397,9 +4877,6 @@ packages: peerDependencies: postcss: ^8.4.32 - supercluster@8.0.1: - resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} - superjson@2.2.2: resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} @@ -5505,10 +4982,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tosource@2.0.0-alpha.3: - resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==} - engines: {node: '>=10'} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -5575,8 +5048,8 @@ packages: unenv@2.0.0-rc.21: resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} - unhead@2.0.18: - resolution: {integrity: sha512-WisN0JGW+ydCpWnarD70mc9VP2m6zWX8ebW2ZpHm/gpishkdyBQskZvd8cesfF8JSL/P8rIhEm9d256njnyPgA==} + unhead@2.0.19: + resolution: {integrity: sha512-gEEjkV11Aj+rBnY6wnRfsFtF2RxKOLaPN4i+Gx3UhBxnszvV6ApSNZbGk7WKyy/lErQ6ekPN63qdFL7sa1leow==} unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} @@ -5602,8 +5075,8 @@ packages: unifont@0.4.1: resolution: {integrity: sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==} - unimport@5.4.1: - resolution: {integrity: sha512-wMZ2JKUCleCK2zfRHeWcbrUHKXOC3SVBYkyn/wTGzh0THX6sT4hSjuKXxKANN4/WMbT6ZPM4JzcDcnhD2x9Bpg==} + unimport@4.1.1: + resolution: {integrity: sha512-j9+fijH6aDd05yv1fXlyt7HSxtOWtGtrZeYTVBsSUg57Iuf+Ps2itIZjeyu7bEQ4k0WOgYhHrdW8m/pJgOpl5g==} engines: {node: '>=18.12.0'} unist-builder@4.0.0: @@ -5612,9 +5085,6 @@ packages: unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -5624,15 +5094,9 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} - unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -5669,15 +5133,6 @@ packages: '@nuxt/kit': optional: true - unplugin-vue-router@0.14.0: - resolution: {integrity: sha512-ipjunvS5e2aFHBAUFuLbHl2aHKbXXXBhTxGT9wZx66fNVPdEQzVVitF8nODr1plANhTTa3UZ+DQu9uyLngMzoQ==} - peerDependencies: - '@vue/compiler-sfc': ^3.5.17 - vue-router: ^4.5.1 - peerDependenciesMeta: - vue-router: - optional: true - unplugin-vue-router@0.15.0: resolution: {integrity: sha512-PyGehCjd9Ny9h+Uer4McbBjjib3lHihcyUEILa7pHKl6+rh8N7sFyw4ZkV+N30Oq2zmIUG7iKs3qpL0r+gXAaQ==} peerDependencies: @@ -5782,14 +5237,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valibot@1.1.0: - resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - vaul-vue@0.4.1: resolution: {integrity: sha512-A6jOWOZX5yvyo1qMn7IveoWN91mJI5L3BUKsIwkg6qrTGgHs1Sb1JF/vyLJgnbN1rH4OOOxFbtqL9A46bOyGUQ==} peerDependencies: @@ -5947,17 +5394,17 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - vue-i18n@11.1.12: - resolution: {integrity: sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==} - engines: {node: '>= 16'} - peerDependencies: - vue: ^3.0.0 - vue-router@4.5.1: resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==} peerDependencies: vue: ^3.2.0 + vue-tsc@3.1.1: + resolution: {integrity: sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + vue@3.5.22: resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} peerDependencies: @@ -6048,10 +5495,6 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -6063,10 +5506,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml-eslint-parser@1.3.0: - resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} - engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.8.1: resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} @@ -6113,19 +5552,16 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@ai-sdk/gateway@1.0.33(zod@3.25.76)': + '@ai-sdk/gateway@1.0.34(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - '@vercel/oidc': 3.0.1 + '@vercel/oidc': 3.0.2 zod: 3.25.76 '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': @@ -6139,10 +5575,10 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/vue@2.0.60(vue@3.5.22(typescript@5.9.3))(zod@3.25.76)': + '@ai-sdk/vue@2.0.61(vue@3.5.22(typescript@5.9.3))(zod@3.25.76)': dependencies: '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - ai: 5.0.60(zod@3.25.76) + ai: 5.0.61(zod@3.25.76) swrv: 1.1.0(vue@3.5.22(typescript@5.9.3)) optionalDependencies: vue: 3.5.22(typescript@5.9.3) @@ -6549,10 +5985,6 @@ snapshots: '@fastify/accept-negotiator@1.1.0': optional: true - '@fingerprintjs/botd@1.9.1': - dependencies: - tslib: 2.8.1 - '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 @@ -6573,12 +6005,6 @@ snapshots: - '@vue/composition-api' - vue - '@googlemaps/markerclusterer@2.6.2': - dependencies: - '@types/supercluster': 7.1.3 - fast-equals: 5.3.2 - supercluster: 8.0.1 - '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -6634,77 +6060,6 @@ snapshots: dependencies: '@swc/helpers': 0.5.17 - '@intlify/bundle-utils@11.0.1(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))': - dependencies: - '@intlify/message-compiler': 11.1.12 - '@intlify/shared': 11.1.12 - acorn: 8.15.0 - esbuild: 0.25.10 - escodegen: 2.1.0 - estree-walker: 2.0.2 - jsonc-eslint-parser: 2.4.1 - source-map-js: 1.2.1 - yaml-eslint-parser: 1.3.0 - optionalDependencies: - vue-i18n: 11.1.12(vue@3.5.22(typescript@5.9.3)) - - '@intlify/core-base@11.1.12': - dependencies: - '@intlify/message-compiler': 11.1.12 - '@intlify/shared': 11.1.12 - - '@intlify/core@11.1.12': - dependencies: - '@intlify/core-base': 11.1.12 - '@intlify/shared': 11.1.12 - - '@intlify/h3@0.7.1': - dependencies: - '@intlify/core': 11.1.12 - '@intlify/utils': 0.13.0 - - '@intlify/message-compiler@11.1.12': - dependencies: - '@intlify/shared': 11.1.12 - source-map-js: 1.2.1 - - '@intlify/shared@11.1.12': {} - - '@intlify/unplugin-vue-i18n@11.0.1(@vue/compiler-dom@3.5.22)(eslint@9.37.0(jiti@2.6.1))(rollup@4.52.4)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@intlify/bundle-utils': 11.0.1(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3))) - '@intlify/shared': 11.1.12 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.22)(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - debug: 4.4.3 - fast-glob: 3.3.3 - pathe: 2.0.3 - picocolors: 1.1.1 - unplugin: 2.3.10 - vue: 3.5.22(typescript@5.9.3) - optionalDependencies: - vue-i18n: 11.1.12(vue@3.5.22(typescript@5.9.3)) - transitivePeerDependencies: - - '@vue/compiler-dom' - - eslint - - rollup - - supports-color - - typescript - - '@intlify/utils@0.13.0': {} - - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.22)(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@babel/parser': 7.28.4 - optionalDependencies: - '@intlify/shared': 11.1.12 - '@vue/compiler-dom': 3.5.22 - vue: 3.5.22(typescript@5.9.3) - vue-i18n: 11.1.12(vue@3.5.22(typescript@5.9.3)) - '@ioredis/commands@1.4.0': {} '@isaacs/balanced-match@4.0.1': {} @@ -6773,12 +6128,6 @@ snapshots: - encoding - supports-color - '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.52.4)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - json5: 2.2.3 - rollup: 4.52.4 - '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.5.0 @@ -6849,7 +6198,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/content@3.7.1(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.9.3))': + '@nuxt/content@3.7.1(better-sqlite3@12.4.1)(magicast@0.3.5)': dependencies: '@nuxt/kit': 4.1.3(magicast@0.3.5) '@nuxtjs/mdc': 0.17.4(magicast@0.3.5) @@ -6900,7 +6249,6 @@ snapshots: zod-to-json-schema: 3.24.6(zod@3.25.76) optionalDependencies: better-sqlite3: 12.4.1 - valibot: 1.1.0(typescript@5.9.3) transitivePeerDependencies: - bufferutil - drizzle-orm @@ -7026,7 +6374,7 @@ snapshots: get-port-please: 3.2.0 mlly: 1.8.0 pathe: 2.0.3 - unimport: 5.4.1 + unimport: 4.1.1 transitivePeerDependencies: - '@typescript-eslint/utils' - '@vue/compiler-sfc' @@ -7168,7 +6516,7 @@ snapshots: tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 4.1.1 untyped: 2.0.0 transitivePeerDependencies: - magicast @@ -7195,7 +6543,7 @@ snapshots: tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 4.1.1 untyped: 2.0.0 transitivePeerDependencies: - magicast @@ -7210,50 +6558,6 @@ snapshots: std-env: 3.9.0 ufo: 1.6.1 - '@nuxt/scripts@0.12.1(@googlemaps/markerclusterer@2.6.2)(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@googlemaps/markerclusterer': 2.6.2 - '@nuxt/kit': 4.1.3(magicast@0.3.5) - '@unhead/vue': 2.0.18(vue@3.5.22(typescript@5.9.3)) - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) - consola: 3.4.2 - defu: 6.1.4 - h3: 1.15.4 - magic-string: 0.30.19 - ofetch: 1.4.1 - ohash: 2.0.11 - pathe: 2.0.3 - pkg-types: 2.3.0 - sirv: 3.0.2 - std-env: 3.9.0 - ufo: 1.6.1 - unplugin: 2.3.10 - unstorage: 1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) - valibot: 1.1.0(typescript@5.9.3) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - db0 - - idb-keyval - - ioredis - - magicast - - typescript - - uploadthing - - vue - '@nuxt/telemetry@2.6.6(magicast@0.3.5)': dependencies: '@nuxt/kit': 3.19.3(magicast@0.3.5) @@ -7271,9 +6575,9 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/ui@4.0.1(@babel/parser@7.28.4)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76)': + '@nuxt/ui@4.0.1(@babel/parser@7.28.4)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76)': dependencies: - '@ai-sdk/vue': 2.0.60(vue@3.5.22(typescript@5.9.3))(zod@3.25.76) + '@ai-sdk/vue': 2.0.61(vue@3.5.22(typescript@5.9.3))(zod@3.25.76) '@iconify/vue': 5.0.0(vue@3.5.22(typescript@5.9.3)) '@internationalized/date': 3.10.0 '@internationalized/number': 3.6.5 @@ -7286,7 +6590,7 @@ snapshots: '@tailwindcss/postcss': 4.1.14 '@tailwindcss/vite': 4.1.14(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) '@tanstack/vue-table': 8.21.3(vue@3.5.22(typescript@5.9.3)) - '@unhead/vue': 2.0.18(vue@3.5.22(typescript@5.9.3)) + '@unhead/vue': 2.0.19(vue@3.5.22(typescript@5.9.3)) '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) '@vueuse/integrations': 13.9.0(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.22(typescript@5.9.3)) colortranslator: 5.0.0 @@ -7320,7 +6624,6 @@ snapshots: vaul-vue: 0.4.1(reka-ui@2.5.1(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) vue-component-type-helpers: 3.1.1 optionalDependencies: - valibot: 1.1.0(typescript@5.9.3) vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) zod: 3.25.76 transitivePeerDependencies: @@ -7365,7 +6668,7 @@ snapshots: - vite - vue - '@nuxt/vite-builder@4.1.3(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(yaml@2.8.1)': + '@nuxt/vite-builder@4.1.3(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vue-tsc@3.1.1(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))(yaml@2.8.1)': dependencies: '@nuxt/kit': 4.1.3(magicast@0.3.5) '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) @@ -7394,7 +6697,7 @@ snapshots: unenv: 2.0.0-rc.21 vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1) vite-node: 3.2.4(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1) - vite-plugin-checker: 0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) + vite-plugin-checker: 0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.1.1(typescript@5.9.3)) vue: 3.5.22(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -7431,65 +6734,6 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.1.0(@vue/compiler-dom@3.5.22)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(rollup@4.52.4)(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@intlify/core': 11.1.12 - '@intlify/h3': 0.7.1 - '@intlify/shared': 11.1.12 - '@intlify/unplugin-vue-i18n': 11.0.1(@vue/compiler-dom@3.5.22)(eslint@9.37.0(jiti@2.6.1))(rollup@4.52.4)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) - '@intlify/utils': 0.13.0 - '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.52.4) - '@nuxt/kit': 4.1.3(magicast@0.3.5) - '@rollup/plugin-yaml': 4.1.2(rollup@4.52.4) - '@vue/compiler-sfc': 3.5.22 - cookie-es: 2.0.0 - defu: 6.1.4 - devalue: 5.3.2 - h3: 1.15.4 - knitwork: 1.2.0 - magic-string: 0.30.19 - mlly: 1.8.0 - nuxt-define: 1.0.0 - ohash: 2.0.11 - oxc-parser: 0.81.0 - oxc-transform: 0.81.0 - oxc-walker: 0.4.0(oxc-parser@0.81.0) - pathe: 2.0.3 - typescript: 5.9.3 - ufo: 1.6.1 - unplugin: 2.3.10 - unplugin-vue-router: 0.14.0(@vue/compiler-sfc@3.5.22)(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) - unstorage: 1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) - vue-i18n: 11.1.12(vue@3.5.22(typescript@5.9.3)) - vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vue/compiler-dom' - - aws4fetch - - db0 - - eslint - - idb-keyval - - ioredis - - magicast - - petite-vue-i18n - - rollup - - supports-color - - uploadthing - - vue - '@nuxtjs/mdc@0.17.4(magicast@0.3.5)': dependencies: '@nuxt/kit': 4.1.3(magicast@0.3.5) @@ -7539,23 +6783,6 @@ snapshots: - magicast - supports-color - '@nuxtjs/robots@5.5.5(h3@1.15.4)(magicast@0.3.5)(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@fingerprintjs/botd': 1.9.1 - '@nuxt/kit': 4.1.3(magicast@0.3.5) - consola: 3.4.2 - defu: 6.1.4 - nuxt-site-config: 3.2.9(h3@1.15.4)(magicast@0.3.5)(vue@3.5.22(typescript@5.9.3)) - pathe: 2.0.3 - pkg-types: 2.3.0 - sirv: 3.0.2 - std-env: 3.9.0 - ufo: 1.6.1 - transitivePeerDependencies: - - h3 - - magicast - - vue - '@opentelemetry/api@1.9.0': {} '@oxc-minify/binding-android-arm64@0.94.0': @@ -7605,195 +6832,99 @@ snapshots: '@oxc-minify/binding-win32-x64-msvc@0.94.0': optional: true - '@oxc-parser/binding-android-arm64@0.81.0': - optional: true - '@oxc-parser/binding-android-arm64@0.94.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.81.0': - optional: true - '@oxc-parser/binding-darwin-arm64@0.94.0': optional: true - '@oxc-parser/binding-darwin-x64@0.81.0': - optional: true - '@oxc-parser/binding-darwin-x64@0.94.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.81.0': - optional: true - '@oxc-parser/binding-freebsd-x64@0.94.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.81.0': - optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.94.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.81.0': - optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.94.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.81.0': - optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.94.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.81.0': - optional: true - '@oxc-parser/binding-linux-arm64-musl@0.94.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.81.0': - optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.94.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.81.0': - optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.94.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.81.0': - optional: true - '@oxc-parser/binding-linux-x64-gnu@0.94.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.81.0': - optional: true - '@oxc-parser/binding-linux-x64-musl@0.94.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.81.0': - dependencies: - '@napi-rs/wasm-runtime': 1.0.6 - optional: true - '@oxc-parser/binding-wasm32-wasi@0.94.0': dependencies: '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.81.0': - optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.94.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.81.0': - optional: true - '@oxc-parser/binding-win32-x64-msvc@0.94.0': optional: true - '@oxc-project/types@0.81.0': {} - '@oxc-project/types@0.94.0': {} - '@oxc-transform/binding-android-arm64@0.81.0': - optional: true - '@oxc-transform/binding-android-arm64@0.94.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.81.0': - optional: true - '@oxc-transform/binding-darwin-arm64@0.94.0': optional: true - '@oxc-transform/binding-darwin-x64@0.81.0': - optional: true - '@oxc-transform/binding-darwin-x64@0.94.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.81.0': - optional: true - '@oxc-transform/binding-freebsd-x64@0.94.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.81.0': - optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.94.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.81.0': - optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.94.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.81.0': - optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.94.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.81.0': - optional: true - '@oxc-transform/binding-linux-arm64-musl@0.94.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.81.0': - optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.94.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.81.0': - optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.94.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.81.0': - optional: true - '@oxc-transform/binding-linux-x64-gnu@0.94.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.81.0': - optional: true - '@oxc-transform/binding-linux-x64-musl@0.94.0': optional: true - '@oxc-transform/binding-wasm32-wasi@0.81.0': - dependencies: - '@napi-rs/wasm-runtime': 1.0.6 - optional: true - '@oxc-transform/binding-wasm32-wasi@0.94.0': dependencies: '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.81.0': - optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.94.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.81.0': - optional: true - '@oxc-transform/binding-win32-x64-msvc@0.94.0': optional: true @@ -7991,14 +7122,6 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@rollup/plugin-yaml@4.1.2(rollup@4.52.4)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - js-yaml: 4.1.0 - tosource: 2.0.0-alpha.3 - optionalDependencies: - rollup: 4.52.4 - '@rollup/pluginutils@5.3.0(rollup@4.52.4)': dependencies: '@types/estree': 1.0.8 @@ -8146,10 +7269,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.14': dependencies: '@jridgewell/remapping': 2.3.5 @@ -8222,6 +7341,11 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.14 + '@tailwindcss/typography@0.5.19(tailwindcss@4.1.14)': + dependencies: + postcss-selector-parser: 6.0.10 + tailwindcss: 4.1.14 + '@tailwindcss/vite@4.1.14(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@tailwindcss/node': 4.1.14 @@ -8251,37 +7375,18 @@ snapshots: tslib: 2.8.1 optional: true - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 24.7.0 - '@types/responselike': 1.0.3 - '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 '@types/estree@1.0.8': {} - '@types/geojson@7946.0.16': {} - - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/http-cache-semantics@4.0.4': {} - '@types/json-schema@7.0.15': {} - '@types/keyv@3.1.4': - dependencies: - '@types/node': 24.7.0 - '@types/lodash@4.17.20': {} '@types/mdast@4.0.4': @@ -8300,14 +7405,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/responselike@1.0.3': - dependencies: - '@types/node': 24.7.0 - - '@types/supercluster@7.1.3': - dependencies: - '@types/geojson': 7946.0.16 - '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -8411,10 +7508,10 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3))': + '@unhead/vue@2.0.19(vue@3.5.22(typescript@5.9.3))': dependencies: hookable: 5.5.3 - unhead: 2.0.18 + unhead: 2.0.19 vue: 3.5.22(typescript@5.9.3) '@unocss/core@66.5.2': {} @@ -8518,7 +7615,7 @@ snapshots: - rollup - supports-color - '@vercel/oidc@3.0.1': {} + '@vercel/oidc@3.0.2': {} '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: @@ -8550,16 +7647,6 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@vue-macros/common@3.0.0-beta.15(vue@3.5.22(typescript@5.9.3))': - dependencies: - '@vue/compiler-sfc': 3.5.22 - ast-kit: 2.1.3 - local-pkg: 1.1.2 - magic-string-ast: 1.0.3 - unplugin-utils: 0.2.5 - optionalDependencies: - vue: 3.5.22(typescript@5.9.3) - '@vue-macros/common@3.0.0-beta.16(vue@3.5.22(typescript@5.9.3))': dependencies: '@vue/compiler-sfc': 3.5.22 @@ -8771,9 +7858,9 @@ snapshots: agent-base@7.1.4: {} - ai@5.0.60(zod@3.25.76): + ai@5.0.61(zod@3.25.76): dependencies: - '@ai-sdk/gateway': 1.0.33(zod@3.25.76) + '@ai-sdk/gateway': 1.0.34(zod@3.25.76) '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) '@opentelemetry/api': 1.9.0 @@ -8805,8 +7892,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - apr-intercept@3.0.4: {} - archiver-utils@5.0.2: dependencies: glob: 10.4.5 @@ -8908,8 +7993,6 @@ snapshots: baseline-browser-mapping@2.8.14: {} - bcp-47-match@1.0.3: {} - better-sqlite3@12.4.1: dependencies: bindings: 1.5.0 @@ -9002,18 +8085,6 @@ snapshots: cac@6.7.14: {} - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - callsites@3.1.0: {} camelize@1.0.1: {} @@ -9027,8 +8098,6 @@ snapshots: caniuse-lite@1.0.30001749: {} - ccount@1.1.0: {} - ccount@2.0.1: {} chalk@4.1.2: @@ -9040,12 +8109,8 @@ snapshots: char-regex@1.0.2: {} - character-entities-html4@1.1.4: {} - character-entities-html4@2.1.0: {} - character-entities-legacy@1.1.4: {} - character-entities-legacy@3.0.0: {} character-entities@2.0.2: {} @@ -9110,10 +8175,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - clone@2.1.2: {} cluster-key-slot@1.1.2: {} @@ -9140,8 +8201,6 @@ snapshots: colortranslator@5.0.0: {} - comma-separated-tokens@1.0.8: {} - comma-separated-tokens@2.0.3: {} commander@11.1.0: {} @@ -9236,8 +8295,6 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 - css-selector-parser@1.4.1: {} - css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 @@ -9350,8 +8407,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 - defer-to-connect@2.0.1: {} - define-lazy-prop@2.0.0: {} define-lazy-prop@3.0.0: {} @@ -9382,101 +8437,6 @@ snapshots: diff@8.0.2: {} - direction@1.0.4: {} - - docus@5.2.0(@babel/parser@7.28.4)(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(@vue/compiler-dom@3.5.22)(better-sqlite3@12.4.1)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(eslint@9.37.0(jiti@2.6.1))(h3@1.15.4)(ioredis@5.8.1)(magicast@0.3.5)(nuxt@4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(rollup@4.52.4)(typescript@5.9.3)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(valibot@1.1.0(typescript@5.9.3))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76): - dependencies: - '@iconify-json/lucide': 1.2.69 - '@iconify-json/simple-icons': 1.2.54 - '@iconify-json/vscode-icons': 1.2.31 - '@nuxt/content': 3.7.1(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.9.3)) - '@nuxt/image': 1.11.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(magicast@0.3.5) - '@nuxt/kit': 4.1.3(magicast@0.3.5) - '@nuxt/ui': 4.0.1(@babel/parser@7.28.4)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.1)(magicast@0.3.5)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))(zod@3.25.76) - '@nuxtjs/i18n': 10.1.0(@vue/compiler-dom@3.5.22)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(rollup@4.52.4)(vue@3.5.22(typescript@5.9.3)) - '@nuxtjs/mdc': 0.17.4(magicast@0.3.5) - '@nuxtjs/robots': 5.5.5(h3@1.15.4)(magicast@0.3.5)(vue@3.5.22(typescript@5.9.3)) - '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) - better-sqlite3: 12.4.1 - defu: 6.1.4 - exsolve: 1.0.7 - git-url-parse: 16.1.0 - minimark: 0.2.0 - motion-v: 1.7.2(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) - nuxt: 4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) - nuxt-llms: 0.1.3(magicast@0.3.5) - nuxt-og-image: 5.1.11(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) - pkg-types: 2.3.0 - scule: 1.3.0 - tailwindcss: 4.1.14 - ufo: 1.6.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@babel/parser' - - '@capacitor/preferences' - - '@deno/kv' - - '@electric-sql/pglite' - - '@emotion/is-prop-valid' - - '@inertiajs/vue3' - - '@libsql/client' - - '@netlify/blobs' - - '@planetscale/database' - - '@unhead/vue' - - '@upstash/redis' - - '@valibot/to-json-schema' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vue/compiler-dom' - - '@vue/composition-api' - - async-validator - - aws4fetch - - axios - - bare-buffer - - bufferutil - - change-case - - db0 - - drauu - - drizzle-orm - - embla-carousel - - encoding - - eslint - - focus-trap - - h3 - - idb-keyval - - ioredis - - joi - - jwt-decode - - magicast - - mysql2 - - nprogress - - petite-vue-i18n - - qrcode - - react - - react-dom - - react-native-b4a - - rollup - - sortablejs - - sqlite3 - - superstruct - - supports-color - - typescript - - universal-cookie - - unstorage - - uploadthing - - utf-8-validate - - valibot - - vite - - vue - - vue-router - - yup - - zod - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -9495,11 +8455,6 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - dot-prop@10.1.0: dependencies: type-fest: 5.0.1 @@ -9637,14 +8592,6 @@ snapshots: escape-string-regexp@5.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-config-flat-gitignore@2.1.0(eslint@9.37.0(jiti@2.6.1)): dependencies: '@eslint/compat': 1.4.0(eslint@9.37.0(jiti@2.6.1)) @@ -9681,7 +8628,7 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 9.0.5 + minimatch: 10.0.3 semver: 7.7.3 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 @@ -9821,14 +8768,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - espree@9.6.1: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 - - esprima@4.0.1: {} - esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -9894,8 +8833,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.3.2: {} - fast-fifo@1.3.2: {} fast-glob@3.3.3: @@ -10013,10 +8950,6 @@ snapshots: get-port-please@3.2.0: {} - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - get-stream@8.0.1: {} get-stream@9.0.1: @@ -10086,20 +9019,6 @@ snapshots: slash: 5.1.0 unicorn-magic: 0.3.0 - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -10152,8 +9071,6 @@ snapshots: vfile-location: 5.0.3 web-namespaces: 2.0.1 - hast-util-has-property@1.0.4: {} - hast-util-has-property@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -10166,8 +9083,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-is-element@1.1.0: {} - hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -10180,8 +9095,6 @@ snapshots: hast-util-whitespace: 3.0.0 unist-util-is: 6.0.0 - hast-util-parse-selector@2.2.5: {} - hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 @@ -10210,36 +9123,6 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-select@4.0.2: - dependencies: - bcp-47-match: 1.0.3 - comma-separated-tokens: 1.0.8 - css-selector-parser: 1.4.1 - direction: 1.0.4 - hast-util-has-property: 1.0.4 - hast-util-is-element: 1.1.0 - hast-util-to-string: 1.0.4 - hast-util-whitespace: 1.0.4 - not: 0.1.0 - nth-check: 2.1.1 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - unist-util-visit: 2.0.3 - zwitch: 1.0.5 - - hast-util-to-html@7.1.3: - dependencies: - ccount: 1.1.0 - comma-separated-tokens: 1.0.8 - hast-util-is-element: 1.1.0 - hast-util-whitespace: 1.0.4 - html-void-elements: 1.0.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - stringify-entities: 3.1.0 - unist-util-is: 4.1.0 - xtend: 4.0.2 - hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 @@ -10281,8 +9164,6 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-string@1.0.4: {} - hast-util-to-string@3.0.1: dependencies: '@types/hast': 3.0.4 @@ -10294,20 +9175,10 @@ snapshots: hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 - hast-util-whitespace@1.0.4: {} - hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -10322,14 +9193,10 @@ snapshots: hookable@5.5.3: {} - html-void-elements@1.0.5: {} - html-void-elements@3.0.0: {} html-whitespace-sensitive-tag-names@3.0.1: {} - http-cache-semantics@4.2.0: {} - http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -10340,11 +9207,6 @@ snapshots: http-shutdown@1.2.2: {} - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -10522,8 +9384,6 @@ snapshots: is-unicode-supported@2.1.0: {} - is-url@1.2.4: {} - is-wayland@0.1.0: {} is-what@4.1.16: {} @@ -10599,15 +9459,6 @@ snapshots: json5@2.2.3: {} - jsonc-eslint-parser@2.4.1: - dependencies: - acorn: 8.15.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - semver: 7.7.3 - - kdbush@4.0.2: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -10746,12 +9597,6 @@ snapshots: longest-streak@3.1.0: {} - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 - - lowercase-keys@2.0.0: {} - lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -11113,16 +9958,12 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@2.6.0: {} - mime@3.0.0: {} mime@4.1.0: {} mimic-fn@4.0.0: {} - mimic-response@1.0.1: {} - mimic-response@3.1.0: {} minimark@0.2.0: {} @@ -11265,7 +10106,7 @@ snapshots: uncrypto: 0.1.3 unctx: 2.4.1 unenv: 2.0.0-rc.21 - unimport: 5.4.1 + unimport: 4.1.1 unplugin-utils: 0.3.1 unstorage: 1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) untyped: 2.0.0 @@ -11301,11 +10142,6 @@ snapshots: - supports-color - uploadthing - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - node-abi@3.78.0: dependencies: semver: 7.7.3 @@ -11344,10 +10180,6 @@ snapshots: normalize-range@0.1.2: {} - normalize-url@6.1.0: {} - - not@0.1.0: {} - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -11375,21 +10207,19 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-define@1.0.0: {} - nuxt-llms@0.1.3(magicast@0.3.5): dependencies: '@nuxt/kit': 3.19.3(magicast@0.3.5) transitivePeerDependencies: - magicast - nuxt-og-image@5.1.11(@unhead/vue@2.0.18(vue@3.5.22(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)): + nuxt-og-image@5.1.11(@unhead/vue@2.0.19(vue@3.5.22(typescript@5.9.3)))(h3@1.15.4)(magicast@0.3.5)(unstorage@1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)): dependencies: '@nuxt/devtools-kit': 2.6.5(magicast@0.3.5)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)) '@nuxt/kit': 4.1.3(magicast@0.3.5) '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 - '@unhead/vue': 2.0.18(vue@3.5.22(typescript@5.9.3)) + '@unhead/vue': 2.0.19(vue@3.5.22(typescript@5.9.3)) '@unocss/core': 66.5.2 '@unocss/preset-wind3': 66.5.2 chrome-launcher: 1.2.1 @@ -11449,15 +10279,7 @@ snapshots: - magicast - vue - nuxt-zod-i18n@1.12.1(magicast@0.3.5): - dependencies: - '@nuxt/kit': 3.19.3(magicast@0.3.5) - defu: 6.1.4 - zod: 3.25.76 - transitivePeerDependencies: - - magicast - - nuxt@4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1): + nuxt@4.1.3(@parcel/watcher@2.5.1)(@types/node@24.7.0)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.1.1(typescript@5.9.3))(yaml@2.8.1): dependencies: '@nuxt/cli': 3.29.2(magicast@0.3.5) '@nuxt/devalue': 2.0.2 @@ -11465,8 +10287,8 @@ snapshots: '@nuxt/kit': 4.1.3(magicast@0.3.5) '@nuxt/schema': 4.1.3 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 4.1.3(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(yaml@2.8.1) - '@unhead/vue': 2.0.18(vue@3.5.22(typescript@5.9.3)) + '@nuxt/vite-builder': 4.1.3(@types/node@24.7.0)(eslint@9.37.0(jiti@2.6.1))(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(typescript@5.9.3)(vue-tsc@3.1.1(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))(yaml@2.8.1) + '@unhead/vue': 2.0.19(vue@3.5.22(typescript@5.9.3)) '@vue/shared': 3.5.22 c12: 3.3.0(magicast@0.3.5) chokidar: 4.0.3 @@ -11513,7 +10335,7 @@ snapshots: ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 4.1.1 unplugin: 2.3.10 unplugin-vue-router: 0.15.0(@vue/compiler-sfc@3.5.22)(typescript@5.9.3)(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) unstorage: 1.17.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) @@ -11660,26 +10482,6 @@ snapshots: '@oxc-minify/binding-win32-arm64-msvc': 0.94.0 '@oxc-minify/binding-win32-x64-msvc': 0.94.0 - oxc-parser@0.81.0: - dependencies: - '@oxc-project/types': 0.81.0 - optionalDependencies: - '@oxc-parser/binding-android-arm64': 0.81.0 - '@oxc-parser/binding-darwin-arm64': 0.81.0 - '@oxc-parser/binding-darwin-x64': 0.81.0 - '@oxc-parser/binding-freebsd-x64': 0.81.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.81.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.81.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.81.0 - '@oxc-parser/binding-linux-arm64-musl': 0.81.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.81.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.81.0 - '@oxc-parser/binding-linux-x64-gnu': 0.81.0 - '@oxc-parser/binding-linux-x64-musl': 0.81.0 - '@oxc-parser/binding-wasm32-wasi': 0.81.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.81.0 - '@oxc-parser/binding-win32-x64-msvc': 0.81.0 - oxc-parser@0.94.0: dependencies: '@oxc-project/types': 0.94.0 @@ -11700,24 +10502,6 @@ snapshots: '@oxc-parser/binding-win32-arm64-msvc': 0.94.0 '@oxc-parser/binding-win32-x64-msvc': 0.94.0 - oxc-transform@0.81.0: - optionalDependencies: - '@oxc-transform/binding-android-arm64': 0.81.0 - '@oxc-transform/binding-darwin-arm64': 0.81.0 - '@oxc-transform/binding-darwin-x64': 0.81.0 - '@oxc-transform/binding-freebsd-x64': 0.81.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.81.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.81.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.81.0 - '@oxc-transform/binding-linux-arm64-musl': 0.81.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.81.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.81.0 - '@oxc-transform/binding-linux-x64-gnu': 0.81.0 - '@oxc-transform/binding-linux-x64-musl': 0.81.0 - '@oxc-transform/binding-wasm32-wasi': 0.81.0 - '@oxc-transform/binding-win32-arm64-msvc': 0.81.0 - '@oxc-transform/binding-win32-x64-msvc': 0.81.0 - oxc-transform@0.94.0: optionalDependencies: '@oxc-transform/binding-android-arm64': 0.94.0 @@ -11736,19 +10520,11 @@ snapshots: '@oxc-transform/binding-win32-arm64-msvc': 0.94.0 '@oxc-transform/binding-win32-x64-msvc': 0.94.0 - oxc-walker@0.4.0(oxc-parser@0.81.0): - dependencies: - estree-walker: 3.0.3 - magic-regexp: 0.10.0 - oxc-parser: 0.81.0 - oxc-walker@0.5.2(oxc-parser@0.94.0): dependencies: magic-regexp: 0.10.0 oxc-parser: 0.94.0 - p-cancelable@2.1.1: {} - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -11771,11 +10547,6 @@ snapshots: pako@0.2.9: {} - param-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -12009,6 +10780,11 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 @@ -12072,10 +10848,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - property-information@6.5.0: {} property-information@7.1.0: {} @@ -12093,8 +10865,6 @@ snapshots: queue-microtask@1.2.3: {} - quick-lru@5.1.1: {} - radix3@1.1.2: {} randombytes@2.1.0: @@ -12286,17 +11056,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-oembed@1.2.2: - dependencies: - apr-intercept: 3.0.4 - got: 11.8.6 - hast-util-select: 4.0.2 - hast-util-to-html: 7.1.3 - hastscript: 6.0.0 - is-url: 1.2.4 - mime: 2.6.0 - param-case: 3.0.4 - remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -12322,8 +11081,6 @@ snapshots: require-directory@2.1.1: {} - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -12336,10 +11093,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - restructure@3.0.2: {} reusify@1.1.0: {} @@ -12569,8 +11322,6 @@ snapshots: source-map@0.7.6: {} - space-separated-tokens@1.1.5: {} - space-separated-tokens@2.0.2: {} spdx-exceptions@2.5.0: {} @@ -12628,12 +11379,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - stringify-entities@3.1.0: - dependencies: - character-entities-html4: 1.1.4 - character-entities-legacy: 1.1.4 - xtend: 4.0.2 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -12669,10 +11414,6 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 7.1.0 - supercluster@8.0.1: - dependencies: - kdbush: 4.0.2 - superjson@2.2.2: dependencies: copy-anything: 3.0.5 @@ -12799,8 +11540,6 @@ snapshots: toidentifier@1.0.1: {} - tosource@2.0.0-alpha.3: {} - totalist@3.0.1: {} tr46@0.0.3: {} @@ -12858,7 +11597,7 @@ snapshots: pathe: 2.0.3 ufo: 1.6.1 - unhead@2.0.18: + unhead@2.0.19: dependencies: hookable: 5.5.3 @@ -12893,22 +11632,22 @@ snapshots: css-tree: 3.1.0 ohash: 2.0.11 - unimport@5.4.1: + unimport@4.1.1: dependencies: acorn: 8.15.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 + fast-glob: 3.3.3 local-pkg: 1.1.2 magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 - pkg-types: 2.3.0 + pkg-types: 1.3.1 scule: 1.3.0 strip-literal: 3.1.0 - tinyglobby: 0.2.15 unplugin: 2.3.10 - unplugin-utils: 0.3.1 + unplugin-utils: 0.2.5 unist-builder@4.0.0: dependencies: @@ -12919,8 +11658,6 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-is@4.1.0: {} - unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -12933,22 +11670,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@3.1.1: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 4.1.0 - unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-visit@2.0.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -12960,7 +11686,7 @@ snapshots: local-pkg: 1.1.2 magic-string: 0.30.19 picomatch: 4.0.3 - unimport: 5.4.1 + unimport: 4.1.1 unplugin: 2.3.10 unplugin-utils: 0.3.1 optionalDependencies: @@ -12994,28 +11720,6 @@ snapshots: transitivePeerDependencies: - supports-color - unplugin-vue-router@0.14.0(@vue/compiler-sfc@3.5.22)(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)): - dependencies: - '@vue-macros/common': 3.0.0-beta.15(vue@3.5.22(typescript@5.9.3)) - '@vue/compiler-sfc': 3.5.22 - ast-walker-scope: 0.8.3 - chokidar: 4.0.3 - fast-glob: 3.3.3 - json5: 2.2.3 - local-pkg: 1.1.2 - magic-string: 0.30.19 - mlly: 1.8.0 - pathe: 2.0.3 - picomatch: 4.0.3 - scule: 1.3.0 - unplugin: 2.3.10 - unplugin-utils: 0.2.5 - yaml: 2.8.1 - optionalDependencies: - vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) - transitivePeerDependencies: - - vue - unplugin-vue-router@0.15.0(@vue/compiler-sfc@3.5.22)(typescript@5.9.3)(vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)): dependencies: '@vue-macros/common': 3.0.0-beta.16(vue@3.5.22(typescript@5.9.3)) @@ -13123,10 +11827,6 @@ snapshots: util-deprecate@1.0.2: {} - valibot@1.1.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - vaul-vue@0.4.1(reka-ui@2.5.1(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)): dependencies: '@vueuse/core': 10.11.1(vue@3.5.22(typescript@5.9.3)) @@ -13181,7 +11881,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-checker@0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(vue-tsc@3.1.1(typescript@5.9.3)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -13196,6 +11896,7 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) optionator: 0.9.4 typescript: 5.9.3 + vue-tsc: 3.1.1(typescript@5.9.3) vite-plugin-inspect@11.3.3(@nuxt/kit@3.19.3(magicast@0.3.5))(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)): dependencies: @@ -13274,18 +11975,17 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)): - dependencies: - '@intlify/core-base': 11.1.12 - '@intlify/shared': 11.1.12 - '@vue/devtools-api': 6.6.4 - vue: 3.5.22(typescript@5.9.3) - vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 vue: 3.5.22(typescript@5.9.3) + vue-tsc@3.1.1(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.23 + '@vue/language-core': 3.1.1(typescript@5.9.3) + typescript: 5.9.3 + vue@3.5.22(typescript@5.9.3): dependencies: '@vue/compiler-dom': 3.5.22 @@ -13351,19 +12051,12 @@ snapshots: cssfilter: 0.0.10 optional: true - xtend@4.0.2: {} - y18n@5.0.8: {} yallist@3.1.1: {} yallist@5.0.0: {} - yaml-eslint-parser@1.3.0: - dependencies: - eslint-visitor-keys: 3.4.3 - yaml: 2.8.1 - yaml@2.8.1: {} yargs-parser@21.1.1: {} @@ -13411,6 +12104,4 @@ snapshots: zod@3.25.76: {} - zwitch@1.0.5: {} - zwitch@2.0.4: {} diff --git a/Projects/kompose/docs/pnpm-workspace.yaml b/Projects/kompose/docs/pnpm-workspace.yaml index fc6236cf..ad403904 100644 --- a/Projects/kompose/docs/pnpm-workspace.yaml +++ b/Projects/kompose/docs/pnpm-workspace.yaml @@ -1,3 +1,10 @@ -onlyBuiltDependencies: +ignoredBuiltDependencies: + - '@parcel/watcher' - '@tailwindcss/oxide' + - esbuild + - unrs-resolver - vue-demi + +onlyBuiltDependencies: + - better-sqlite3 + - sharp diff --git a/Projects/kompose/docs/public/_robots.txt b/Projects/kompose/docs/public/_robots.txt deleted file mode 100644 index 0ad279c7..00000000 --- a/Projects/kompose/docs/public/_robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-Agent: * -Disallow: diff --git a/Projects/kompose/docs/renovate.json b/Projects/kompose/docs/renovate.json new file mode 100644 index 00000000..7180aab7 --- /dev/null +++ b/Projects/kompose/docs/renovate.json @@ -0,0 +1,13 @@ +{ + "extends": [ + "github>nuxt/renovate-config-nuxt" + ], + "lockFileMaintenance": { + "enabled": true + }, + "packageRules": [{ + "matchDepTypes": ["resolutions"], + "enabled": false + }], + "postUpdateOptions": ["pnpmDedupe"] +} diff --git a/Projects/kompose/docs/server/routes/raw/[...slug].md.get.ts b/Projects/kompose/docs/server/routes/raw/[...slug].md.get.ts new file mode 100644 index 00000000..0bdd7966 --- /dev/null +++ b/Projects/kompose/docs/server/routes/raw/[...slug].md.get.ts @@ -0,0 +1,27 @@ +import { withLeadingSlash } from 'ufo' +import { stringify } from 'minimark/stringify' +import { queryCollection } from '@nuxt/content/nitro' +import type { Collections } from '@nuxt/content' + +export default eventHandler(async (event) => { + const slug = getRouterParams(event)['slug.md'] + if (!slug?.endsWith('.md')) { + throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true }) + } + + const path = withLeadingSlash(slug.replace('.md', '')) + + const page = await queryCollection(event, 'docs' as keyof Collections).path(path).first() + if (!page) { + throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true }) + } + + // Add title and description to the top of the page if missing + if (page.body.value[0]?.[0] !== 'h1') { + page.body.value.unshift(['blockquote', {}, page.description]) + page.body.value.unshift(['h1', {}, page.title]) + } + + setHeader(event, 'Content-Type', 'text/markdown; charset=utf-8') + return stringify({ ...page.body, type: 'minimark' }, { format: 'markdown/html' }) +}) diff --git a/Projects/kompose/docs/tsconfig.json b/Projects/kompose/docs/tsconfig.json index 307b2134..a746f2a7 100644 --- a/Projects/kompose/docs/tsconfig.json +++ b/Projects/kompose/docs/tsconfig.json @@ -1,18 +1,4 @@ { // https://nuxt.com/docs/guide/concepts/typescript - "files": [], - "references": [ - { - "path": "./.nuxt/tsconfig.app.json" - }, - { - "path": "./.nuxt/tsconfig.server.json" - }, - { - "path": "./.nuxt/tsconfig.shared.json" - }, - { - "path": "./.nuxt/tsconfig.node.json" - } - ] + "extends": "./.nuxt/tsconfig.json" }