vibes-plug 2.5.0 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/vibes-plug-core.md +32 -0
- package/.cursor/rules/vibes-plug-core.mdc +51 -0
- package/.cursorrules +42 -0
- package/AGENTS.md +37 -7
- package/BLUEPRINT.md +309 -217
- package/CHANGELOG.md +133 -1
- package/CLAUDE.md +70 -0
- package/LICENSE +1 -1
- package/README.md +641 -415
- package/index.js +19 -0
- package/package.json +44 -8
- package/plugin.json +24 -7
- package/scripts/generate_swarm_gif.py +295 -0
- package/scripts/install.js +201 -0
- package/skills/accessibility-testing-expert/SKILL.md +116 -0
- package/skills/ai-cost-token-optimizer/SKILL.md +82 -52
- package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
- package/skills/ai-llm-integration-expert/SKILL.md +185 -178
- package/skills/ai-media-generation-expert/SKILL.md +172 -0
- package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
- package/skills/angular-expert/SKILL.md +148 -0
- package/skills/api-design-expert/SKILL.md +6 -3
- package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
- package/skills/app-analyzer-optimizer/SKILL.md +6 -3
- package/skills/apple-ecosystem-expert/SKILL.md +144 -141
- package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
- package/skills/astro-framework-expert/SKILL.md +200 -0
- package/skills/async-queue-temporal-expert/SKILL.md +210 -24
- package/skills/authentication-identity-expert/SKILL.md +278 -275
- package/skills/auto-doc-updater/SKILL.md +7 -1
- package/skills/autonomous-chaos-monkey/SKILL.md +63 -63
- package/skills/autonomous-red-teamer/SKILL.md +172 -28
- package/skills/autonomous-tdd-debugger/SKILL.md +70 -64
- package/skills/background-jobs-queue-expert/SKILL.md +235 -0
- package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
- package/skills/blockchain-web3-expert/SKILL.md +115 -0
- package/skills/bootstrap-to-modern/SKILL.md +9 -6
- package/skills/brainstorming/SKILL.md +58 -50
- package/skills/browser-automation-expert/SKILL.md +197 -21
- package/skills/bun-runtime-expert/SKILL.md +7 -1
- package/skills/chatbot-messaging-expert/SKILL.md +114 -0
- package/skills/ci-cd-devops-architect/SKILL.md +45 -36
- package/skills/cloud-hosting-expert/SKILL.md +7 -1
- package/skills/coderabbit/SKILL.md +7 -1
- package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
- package/skills/cron-scheduler-expert/SKILL.md +303 -297
- package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
- package/skills/data-telemetry-expert/SKILL.md +7 -1
- package/skills/data-visualization-expert/SKILL.md +154 -0
- package/skills/database-migration-versioning-expert/SKILL.md +90 -0
- package/skills/database-orm-expert/SKILL.md +13 -3
- package/skills/dependency-upgrade-migrator/SKILL.md +300 -294
- package/skills/design-system-architect/SKILL.md +278 -259
- package/skills/desktop-electron-expert/SKILL.md +128 -0
- package/skills/documentation-site-expert/SKILL.md +59 -0
- package/skills/doku-mcp-server/SKILL.md +7 -1
- package/skills/doku-payment-gateway/SKILL.md +7 -1
- package/skills/domain-driven-design-expert/SKILL.md +82 -0
- package/skills/e2e-testing-expert/SKILL.md +7 -1
- package/skills/ecommerce-expert/SKILL.md +87 -0
- package/skills/edge-serverless-db-expert/SKILL.md +98 -42
- package/skills/email-notification-expert/SKILL.md +367 -361
- package/skills/error-resilience-expert/SKILL.md +485 -479
- package/skills/event-driven-architect/SKILL.md +7 -1
- package/skills/feature-flag-analytics-expert/SKILL.md +65 -45
- package/skills/file-upload-media-expert/SKILL.md +436 -430
- package/skills/firebase-security-expert/SKILL.md +7 -1
- package/skills/form-validation-expert/SKILL.md +406 -400
- package/skills/fullstack-expert/SKILL.md +60 -1
- package/skills/gemini-agent-booster/SKILL.md +173 -135
- package/skills/geospatial-maps-expert/SKILL.md +80 -0
- package/skills/global-a11y-i18n-expert/SKILL.md +7 -1
- package/skills/glsl-shader-expert/SKILL.md +106 -100
- package/skills/go-programming-expert/SKILL.md +21 -15
- package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
- package/skills/graphql-apollo-expert/SKILL.md +113 -107
- package/skills/headless-cms-expert/SKILL.md +181 -0
- package/skills/hig/SKILL.md +7 -1
- package/skills/js-backend-expert/SKILL.md +218 -216
- package/skills/legacy-code-translator/SKILL.md +70 -64
- package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
- package/skills/logging-error-tracking-expert/SKILL.md +343 -337
- package/skills/mcp-client-orchestrator/SKILL.md +75 -69
- package/skills/mcp-server-architect/SKILL.md +294 -194
- package/skills/micro-frontend-architect/SKILL.md +111 -105
- package/skills/mobile-expo-expert/SKILL.md +8 -2
- package/skills/mobile-push-notification-expert/SKILL.md +70 -50
- package/skills/modern-css-native-expert/SKILL.md +189 -0
- package/skills/monday-design-aesthetic/SKILL.md +7 -1
- package/skills/monorepo-architect/SKILL.md +7 -1
- package/skills/mpa-orchestrator/SKILL.md +20 -1
- package/skills/multi-agent-orchestration/SKILL.md +254 -234
- package/skills/multiple-entry-points/SKILL.md +37 -1
- package/skills/mvc-expert/SKILL.md +7 -1
- package/skills/n8n-automation-expert/SKILL.md +89 -0
- package/skills/nextjs-app-router-expert/SKILL.md +148 -0
- package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
- package/skills/payment-gateway-expert/SKILL.md +85 -1
- package/skills/pdf-document-generation-expert/SKILL.md +91 -0
- package/skills/performance-web-vitals/SKILL.md +7 -1
- package/skills/post-quantum-crypto-migrator/SKILL.md +57 -57
- package/skills/prd-architect/SKILL.md +7 -1
- package/skills/proactive-background-watcher/SKILL.md +67 -61
- package/skills/production-ready-hardener/SKILL.md +461 -455
- package/skills/project-context-mapper/SKILL.md +84 -78
- package/skills/pwa-offline-first-expert/SKILL.md +185 -0
- package/skills/python-programming-expert/SKILL.md +407 -401
- package/skills/rate-limit-abuse-prevention/SKILL.md +376 -370
- package/skills/realtime-collaboration-expert/SKILL.md +55 -1
- package/skills/rich-text-editor-expert/SKILL.md +177 -0
- package/skills/rust-programming-expert/SKILL.md +7 -1
- package/skills/saas-billing/SKILL.md +7 -1
- package/skills/saas-multi-tenant/SKILL.md +7 -1
- package/skills/saas-mvp-launcher/SKILL.md +20 -1
- package/skills/saas-transformer/SKILL.md +499 -488
- package/skills/scalability-clean-code/SKILL.md +7 -1
- package/skills/search-engine-expert/SKILL.md +89 -0
- package/skills/secure-fuzz-testing/SKILL.md +7 -1
- package/skills/self-evolving-memory-graph/SKILL.md +90 -74
- package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -57
- package/skills/senior-frontend/SKILL.md +141 -161
- package/skills/seo/SKILL.md +41 -17
- package/skills/session-context-loader/SKILL.md +82 -76
- package/skills/session-handoff-resume/SKILL.md +7 -1
- package/skills/{skill_baru → skill-baru}/SKILL.md +8 -2
- package/skills/solidjs-expert/SKILL.md +80 -0
- package/skills/spa-orchestrator/SKILL.md +20 -1
- package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
- package/skills/state-management-expert/SKILL.md +7 -1
- package/skills/supabase-migration/SKILL.md +47 -1
- package/skills/supabase-security-expert/SKILL.md +7 -1
- package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
- package/skills/svg-animation-motion-expert/SKILL.md +115 -0
- package/skills/tailwind-expert/SKILL.md +88 -136
- package/skills/tanstack-query-expert/SKILL.md +7 -1
- package/skills/tauri-expert/SKILL.md +7 -1
- package/skills/token-saver/SKILL.md +1 -1
- package/skills/typescript-expert/SKILL.md +12 -6
- package/skills/ui-components-expert/SKILL.md +165 -279
- package/skills/ui-ux-pro-max/SKILL.md +23 -3
- package/skills/vector-db-rag-expert/SKILL.md +175 -19
- package/skills/vibe-code-gardener/SKILL.md +1 -1
- package/skills/visual-qa-vision-agent/SKILL.md +70 -64
- package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
- package/skills/vue-frontend-expert/SKILL.md +131 -125
- package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
- package/skills/web-3d-graphics-expert/SKILL.md +136 -130
- package/skills/web-game-engine-expert/SKILL.md +101 -95
- package/skills/web-scraper/SKILL.md +157 -207
- package/skills/website-design-cloner/SKILL.md +179 -173
- package/skills/webxr-ar-vr-expert/SKILL.md +122 -116
- package/skills/wordpress-headless-expert/SKILL.md +144 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +52 -27
- package/skills/zero-trust-secret-vault/SKILL.md +87 -39
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/workflows/publish.yml +0 -20
- package/CONTRIBUTING.md +0 -199
- package/SECURITY.md +0 -21
- package/banner.png +0 -0
- package/skills/autonomous-swarm-director/SKILL.md +0 -69
- package/skills/hyper-context-synthesizer/SKILL.md +0 -55
- package/skills/llm-cost-arbitrage-router/SKILL.md +0 -59
- package/skills/senior-fullstack/SKILL.md +0 -167
- package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
- package/skills/senior-fullstack/references/development_workflows.md +0 -222
- package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
- package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
- package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
- package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
- package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
- package/skills/seo-geo/SKILL.md +0 -188
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/skills/ui_ux_expert/SKILL.md +0 -125
- package/vibes-swarm-demo.gif +0 -0
|
@@ -1,106 +1,112 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: micro-frontend-architect
|
|
3
|
-
description: "Expert guide for designing Micro-Frontend architectures using Webpack Module Federation, Vite Federation, and Single-SPA for large scale Vue and React applications."
|
|
1
|
+
---
|
|
2
|
+
name: micro-frontend-architect
|
|
3
|
+
description: "Expert guide for designing Micro-Frontend architectures using Webpack Module Federation, Vite Federation, and Single-SPA for large scale Vue and React applications."
|
|
4
4
|
author: "Roedy Rustam"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Micro-Frontend Architect
|
|
8
|
-
|
|
9
|
-
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<a name="english"></a>
|
|
14
|
-
## English
|
|
15
|
-
|
|
16
|
-
###
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
###
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
- **
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- `
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
###
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Micro-Frontend Architect
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Orchestration & Integration
|
|
17
|
+
Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
|
|
18
|
+
|
|
19
|
+
### Description
|
|
20
|
+
Production-grade guidance for breaking down monolithic frontend applications into scalable, independently deployable **Micro-Frontends (MFE)**. Covers integration via **Webpack Module Federation**, **Vite Federation**, and run-time container orchestration using patterns suitable for massive Enterprise applications in Vue or React.
|
|
21
|
+
|
|
22
|
+
### Trigger Conditions
|
|
23
|
+
Activate this skill when the user is:
|
|
24
|
+
- Splitting a large frontend codebase into multiple smaller apps (Host and Remotes).
|
|
25
|
+
- Configuring Webpack Module Federation (`ModuleFederationPlugin`).
|
|
26
|
+
- Setting up Vite with `@originjs/vite-plugin-federation`.
|
|
27
|
+
- Asking about sharing dependencies (e.g., sharing a single instance of Vue, React, or Pinia across apps).
|
|
28
|
+
- Designing a cross-team frontend deployment strategy.
|
|
29
|
+
|
|
30
|
+
### Core Concepts
|
|
31
|
+
|
|
32
|
+
#### 1. Module Federation Concept
|
|
33
|
+
Module federation allows a JavaScript application to dynamically load code from another application at runtime.
|
|
34
|
+
- **Host (Shell):** The main container application that loads remote modules.
|
|
35
|
+
- **Remote:** The micro-frontend application exposing components or logic.
|
|
36
|
+
|
|
37
|
+
#### 2. Vite Federation Example
|
|
38
|
+
```javascript
|
|
39
|
+
// vite.config.js (Remote App)
|
|
40
|
+
import federation from '@originjs/vite-plugin-federation'
|
|
41
|
+
|
|
42
|
+
export default {
|
|
43
|
+
plugins: [
|
|
44
|
+
federation({
|
|
45
|
+
name: 'remote_app',
|
|
46
|
+
filename: 'remoteEntry.js',
|
|
47
|
+
exposes: {
|
|
48
|
+
'./Button': './src/components/Button.vue',
|
|
49
|
+
},
|
|
50
|
+
shared: ['vue', 'pinia'] // Critical: Share core dependencies!
|
|
51
|
+
})
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// vite.config.js (Host App)
|
|
56
|
+
import federation from '@originjs/vite-plugin-federation'
|
|
57
|
+
|
|
58
|
+
export default {
|
|
59
|
+
plugins: [
|
|
60
|
+
federation({
|
|
61
|
+
name: 'host_app',
|
|
62
|
+
remotes: {
|
|
63
|
+
remote_app: 'http://localhost:5001/assets/remoteEntry.js',
|
|
64
|
+
},
|
|
65
|
+
shared: ['vue', 'pinia']
|
|
66
|
+
})
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### 3. State Management Across MFEs
|
|
72
|
+
- **Avoid Global State if Possible:** Micro-frontends should ideally not share business state. Communicate via custom DOM events, URL parameters, or a thin Event Bus.
|
|
73
|
+
- **Shared Store (Pinia/Zustand):** If state sharing is absolutely required, the Host app should instantiate the store and share the dependency instance via Federation.
|
|
74
|
+
|
|
75
|
+
### Best Practices
|
|
76
|
+
- **Strict Dependency Sharing:** Always mark core libraries (`react`, `react-dom`, `vue`, `vue-router`) as `singleton: true` and `shared` to prevent the browser from downloading and running multiple instances of the framework.
|
|
77
|
+
- **CSS Isolation:** Ensure CSS from one Micro-Frontend does not bleed into another. Use CSS Modules, scoped CSS, or Shadow DOM.
|
|
78
|
+
- **Independent Deployments:** The core value of MFE is that Team A can deploy the Remote App without requiring Team B to rebuild the Host App.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Integration with Other Skills (MANDATORY)
|
|
83
|
+
This skill works best when combined with:
|
|
84
|
+
- `vue-frontend-expert` / `senior-frontend` — For building the individual micro-apps.
|
|
85
|
+
- `design-system-architect` — For ensuring all MFEs consume a shared, versioned UI component library.
|
|
86
|
+
- `monorepo-architect` — For managing the codebases of multiple MFEs in a single Turborepo/pnpm workspace.
|
|
87
|
+
|
|
88
|
+
### Referenced By Orchestrators (MANDATORY)
|
|
89
|
+
- `brainstorming` — Add to "Architecture & Scale".
|
|
90
|
+
- `zero-to-prod-orchestrator` — Phase 2 (Architecture Strategy).
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
<a name="bahasa-indonesia"></a>
|
|
95
|
+
## Bahasa Indonesia
|
|
96
|
+
|
|
97
|
+
### Integrasi Orkestrasi
|
|
98
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
99
|
+
|
|
100
|
+
### Deskripsi
|
|
101
|
+
Panduan arsitektur untuk memecah aplikasi frontend raksasa menjadi **Micro-Frontends (MFE)** yang terukur dan dapat di-deploy secara independen. Mencakup **Webpack Module Federation** dan **Vite Federation**.
|
|
102
|
+
|
|
103
|
+
### Kondisi Pemicu
|
|
104
|
+
- Memecah aplikasi (monolith) Vue atau React menjadi beberapa sub-aplikasi.
|
|
105
|
+
- Mengkonfigurasi plugin *Module Federation*.
|
|
106
|
+
- Mencari cara untuk membagi *dependency* (seperti Vue atau React) agar tidak di-download dua kali oleh browser.
|
|
107
|
+
|
|
108
|
+
### Panduan Singkat
|
|
109
|
+
- **Host vs Remote:** *Host* adalah cangkang (shell) utama aplikasi Anda, *Remote* adalah aplikasi kecil (fitur) yang dimuat oleh Host secara dinamis di runtime.
|
|
110
|
+
- **Berbagi Dependensi (Shared):** Sangat krusial! Pastikan framework utama (`vue`, `react`, `pinia`, `vue-router`) ditandai sebagai `shared` (dan seringkali `singleton`). Jika tidak, aplikasi akan error karena ada 2 instance Vue/React yang berjalan bersamaan.
|
|
111
|
+
- **Isolasi CSS:** Pastikan gaya CSS dari MFE A tidak merusak MFE B. Gunakan *CSS Modules* atau kapsulasi *Scoped CSS*.
|
|
112
|
+
- **Komunikasi Data:** Hindari penggunaan Global State (Redux/Pinia) lintas MFE jika memungkinkan. Gunakan *Custom Event Listener* di `window` atau passing props/URL untuk menjaga tiap MFE tetap independen.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mobile-expo-expert
|
|
3
|
-
description: "Expert guide for React Native 0.
|
|
4
|
-
author: "Roedy Rustam"
|
|
3
|
+
description: "Expert guide for React Native 0.79+ and Expo SDK 53+ development. Covers cross-platform mobile architecture, Expo Router v4, New Architecture, OTA updates, and native modules / Panduan ahli pengembangan React Native 0.79+ dan Expo SDK 53+ untuk aplikasi mobile."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Mobile Expert — React Native & Expo (SDK 53 / RN 0.79 Edition)
|
|
@@ -13,6 +13,9 @@ author: "Roedy Rustam"
|
|
|
13
13
|
<a name="english"></a>
|
|
14
14
|
## English
|
|
15
15
|
|
|
16
|
+
### Orchestration & Integration
|
|
17
|
+
Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
|
|
18
|
+
|
|
16
19
|
### Description
|
|
17
20
|
Expert guide for building production-grade cross-platform mobile applications using **React Native 0.79+** and **Expo SDK 53+**. Covers the New Architecture (stable), Expo Router v4, OTA updates, native modules, and modern state management patterns for iOS and Android.
|
|
18
21
|
|
|
@@ -132,6 +135,9 @@ Use **channels** to target specific user groups (production, staging, beta).
|
|
|
132
135
|
<a name="bahasa-indonesia"></a>
|
|
133
136
|
## Bahasa Indonesia
|
|
134
137
|
|
|
138
|
+
### Integrasi Orkestrasi
|
|
139
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
140
|
+
|
|
135
141
|
### Deskripsi
|
|
136
142
|
Panduan ahli untuk membangun aplikasi mobile cross-platform tingkat produksi menggunakan **React Native 0.79+** dan **Expo SDK 53+**. Mencakup New Architecture (stabil), Expo Router v4, OTA updates, native modules, dan pola state management modern untuk iOS dan Android.
|
|
137
143
|
|
|
@@ -1,51 +1,71 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mobile-push-notification-expert
|
|
3
|
-
description: "Expert guide for Cross-Platform Push Notifications (Expo Push, FCM, APNs, Web Push), iOS Live Activities, and background payload handling / Panduan ahli notifikasi push mobile, FCM, APNs, dan Live Activities."
|
|
1
|
+
---
|
|
2
|
+
name: mobile-push-notification-expert
|
|
3
|
+
description: "Expert guide for Cross-Platform Push Notifications (Expo Push, FCM, APNs, Web Push), iOS Live Activities, and background payload handling / Panduan ahli notifikasi push mobile, FCM, APNs, dan Live Activities."
|
|
4
4
|
author: "Roedy Rustam"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Mobile Push Notification & Live Activities Expert
|
|
8
|
-
|
|
9
|
-
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<a name="english"></a>
|
|
14
|
-
## English
|
|
15
|
-
|
|
16
|
-
### Purpose & Overview
|
|
17
|
-
Comprehensive guide for configuring cross-platform push notifications (Expo Push API, Firebase Cloud Messaging FCM, Apple APNs, Web Push API), iOS Live Activities / ActivityKit, background payload handlers, deep-linking routing, and push token lifecycle management.
|
|
18
|
-
|
|
19
|
-
### Key Capabilities
|
|
20
|
-
- **Expo & FCM Push**: Sending batched push notifications with rich media, actions, and custom data payloads.
|
|
21
|
-
- **iOS Live Activities**: Real-time status updates on iOS Dynamic Island and Lock Screen.
|
|
22
|
-
- **Deep Linking**: Routing push notification taps directly to targeted screens within Expo Router / React Native.
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
import * as Notifications from 'expo-notifications';
|
|
26
|
-
|
|
27
|
-
export async function registerForPushNotificationsAsync() {
|
|
28
|
-
const { status: existingStatus } = await Notifications.getPermissionsAsync();
|
|
29
|
-
let finalStatus = existingStatus;
|
|
30
|
-
if (existingStatus !== 'granted') {
|
|
31
|
-
const { status } = await Notifications.requestPermissionsAsync();
|
|
32
|
-
finalStatus = status;
|
|
33
|
-
}
|
|
34
|
-
if (finalStatus !== 'granted') return null;
|
|
35
|
-
const token = (await Notifications.getExpoPushTokenAsync()).data;
|
|
36
|
-
return token;
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mobile Push Notification & Live Activities Expert
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Purpose & Overview
|
|
17
|
+
Comprehensive guide for configuring cross-platform push notifications (Expo Push API, Firebase Cloud Messaging FCM, Apple APNs, Web Push API), iOS Live Activities / ActivityKit, background payload handlers, deep-linking routing, and push token lifecycle management.
|
|
18
|
+
|
|
19
|
+
### Key Capabilities
|
|
20
|
+
- **Expo & FCM Push**: Sending batched push notifications with rich media, actions, and custom data payloads.
|
|
21
|
+
- **iOS Live Activities**: Real-time status updates on iOS Dynamic Island and Lock Screen.
|
|
22
|
+
- **Deep Linking**: Routing push notification taps directly to targeted screens within Expo Router / React Native.
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import * as Notifications from 'expo-notifications';
|
|
26
|
+
|
|
27
|
+
export async function registerForPushNotificationsAsync() {
|
|
28
|
+
const { status: existingStatus } = await Notifications.getPermissionsAsync();
|
|
29
|
+
let finalStatus = existingStatus;
|
|
30
|
+
if (existingStatus !== 'granted') {
|
|
31
|
+
const { status } = await Notifications.requestPermissionsAsync();
|
|
32
|
+
finalStatus = status;
|
|
33
|
+
}
|
|
34
|
+
if (finalStatus !== 'granted') return null;
|
|
35
|
+
const token = (await Notifications.getExpoPushTokenAsync()).data;
|
|
36
|
+
return token;
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Implementation Checklist
|
|
41
|
+
- [ ] Configure Apple Developer Account (APNs Key) and Google Firebase (FCM Service Account).
|
|
42
|
+
- [ ] Request push notification permissions explicitly from the user after they understand the value proposition.
|
|
43
|
+
- [ ] Save the device's Push Token to the database, associated with the user's ID.
|
|
44
|
+
- [ ] Handle token refresh events when the user uninstalls/reinstalls the app or changes devices.
|
|
45
|
+
- [ ] Set up background event handlers to process incoming messages when the app is killed.
|
|
46
|
+
|
|
47
|
+
## Orchestration & Integration
|
|
48
|
+
- Integrates with: `mobile-expo-expert`, `event-driven-architect`, `database-orm-expert`.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
<a name="bahasa-indonesia"></a>
|
|
53
|
+
## Bahasa Indonesia
|
|
54
|
+
|
|
55
|
+
### Deskripsi
|
|
56
|
+
Panduan komprehensif untuk konfigurasi push notification lintas platform (Expo Push, FCM, APNs, Web Push), iOS Live Activities / ActivityKit, penanganan payload background, routing deep-linking, dan manajemen siklus token push.
|
|
57
|
+
|
|
58
|
+
### Fitur Utama
|
|
59
|
+
- **Expo & FCM Push**: Pengiriman push notification masal dengan media kaya, tombol aksi, dan payload kustom.
|
|
60
|
+
- **iOS Live Activities**: Update status real-time di Dynamic Island dan Lock Screen iOS.
|
|
61
|
+
- **Deep Linking**: Mengarahkan ketukan notifikasi secara langsung ke layar target di Expo Router / React Native.
|
|
62
|
+
|
|
63
|
+
### Checklist Implementasi
|
|
64
|
+
- [ ] Konfigurasi Akun Developer Apple (Kunci APNs) dan Google Firebase (Service Account FCM).
|
|
65
|
+
- [ ] Minta izin notifikasi push secara eksplisit dari pengguna setelah mereka memahami nilai gunanya.
|
|
66
|
+
- [ ] Simpan Push Token perangkat ke database, yang terkait dengan ID pengguna.
|
|
67
|
+
- [ ] Tangani event penyegaran token saat pengguna menghapus/menginstal ulang aplikasi atau mengganti perangkat.
|
|
68
|
+
- [ ] Siapkan handler event background untuk memproses pesan masuk saat aplikasi ditutup (killed).
|
|
69
|
+
|
|
70
|
+
## Integrasi Orkestrasi
|
|
71
|
+
- Terintegrasi dengan: `mobile-expo-expert`, `event-driven-architect`, `database-orm-expert`.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: modern-css-native-expert
|
|
3
|
+
description: "Expert guide for cutting-edge Native CSS (2026 Standard) — CSS Anchor Positioning, @starting-style, View Transitions Level 2, Container Queries, and :has() / Panduan ahli fitur CSS native modern 2026."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modern Native CSS Expert (2026 Standard & Primitives)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Purpose & Overview
|
|
17
|
+
Production-grade engineering guide for modern **Native CSS features (2026 Edition)** that replace cumbersome JavaScript libraries with pure browser-native primitives. Covers the **CSS Anchor Positioning API** for tooltips/popovers, **`@starting-style`** for smooth entry/exit animations on top-layer elements (`<dialog>`, `popover`), **View Transitions API Level 2**, **Container Queries (`@container`)**, and the **`:has()`** relational selector.
|
|
18
|
+
|
|
19
|
+
### Key Capabilities
|
|
20
|
+
1. **CSS Anchor Positioning**: Eliminating Floating UI / Popper.js dependencies. Tether tooltips, menus, and popovers to trigger elements natively with auto-flip fallbacks (`position-try-fallbacks`).
|
|
21
|
+
2. **Smooth Top-Layer Transitions**: Animating `<dialog>` and `[popover]` elements from `display: none` to visible with `@starting-style` and `transition-behavior: allow-discrete`.
|
|
22
|
+
3. **Container Queries (`@container`)**: Component-level responsive design based on parent container dimensions rather than viewport width.
|
|
23
|
+
4. **Relational `:has()` Selector**: Styling parent containers or sibling trees based on nested child states without React/JS state overhead.
|
|
24
|
+
5. **Native CSS Nesting & `@layer`**: Structuring clean, zero-build styles with cascade priority layers.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### Production Implementation Recipes
|
|
29
|
+
|
|
30
|
+
#### Recipe 1: Pure Native Anchor Positioning for Tooltips & Dropdowns (No JS)
|
|
31
|
+
```css
|
|
32
|
+
/* Define the anchor trigger button */
|
|
33
|
+
.anchor-trigger {
|
|
34
|
+
anchor-name: --my-dropdown-anchor;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Tether the popover menu to the anchor trigger */
|
|
38
|
+
.dropdown-menu {
|
|
39
|
+
position: fixed;
|
|
40
|
+
position-anchor: --my-dropdown-anchor;
|
|
41
|
+
|
|
42
|
+
/* Place below the anchor by default */
|
|
43
|
+
top: anchor(bottom);
|
|
44
|
+
left: anchor(left);
|
|
45
|
+
margin-top: 8px;
|
|
46
|
+
|
|
47
|
+
/* Automatic flip to top if screen boundary is reached */
|
|
48
|
+
position-try-fallbacks: flip-block;
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### Recipe 2: Smooth `<dialog>` Entry/Exit Animation with `@starting-style`
|
|
53
|
+
```css
|
|
54
|
+
/* Dialog element with discrete transition support */
|
|
55
|
+
dialog {
|
|
56
|
+
opacity: 0;
|
|
57
|
+
transform: scale(0.95) translateY(10px);
|
|
58
|
+
transition: opacity 0.25s ease-out, transform 0.25s ease-out, display 0.25s allow-discrete;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Open state */
|
|
62
|
+
dialog[open] {
|
|
63
|
+
opacity: 1;
|
|
64
|
+
transform: scale(1) translateY(0);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Starting style when transitioning from display: none to open */
|
|
68
|
+
@starting-style {
|
|
69
|
+
dialog[open] {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
transform: scale(0.95) translateY(10px);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Backdrop smooth fade */
|
|
76
|
+
dialog::backdrop {
|
|
77
|
+
background-color: rgb(0 0 0 / 0%);
|
|
78
|
+
transition: background-color 0.25s ease-out, display 0.25s allow-discrete;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
dialog[open]::backdrop {
|
|
82
|
+
background-color: rgb(0 0 0 / 50%);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@starting-style {
|
|
86
|
+
dialog[open]::backdrop {
|
|
87
|
+
background-color: rgb(0 0 0 / 0%);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### Implementation Checklist
|
|
95
|
+
- [ ] Replace JS positioning libraries (Popper, Floating UI) with native `anchor-name` and `position-anchor`.
|
|
96
|
+
- [ ] Use `@starting-style` and `transition-behavior: allow-discrete` for animating modals and popovers without JavaScript timers.
|
|
97
|
+
- [ ] Use `@container` on modular components to allow seamless reuse across sidebars, grids, and modals.
|
|
98
|
+
- [ ] Organize design tokens and reset styles into `@layer` (e.g. `@layer base, components, utilities;`).
|
|
99
|
+
|
|
100
|
+
## Orchestration & Integration
|
|
101
|
+
- Integrates with: `design-system-architect`, `ui-components-expert`, `tailwind-expert`, `senior-frontend`.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
<a name="bahasa-indonesia"></a>
|
|
106
|
+
## Bahasa Indonesia
|
|
107
|
+
|
|
108
|
+
### Tujuan & Gambaran Umum
|
|
109
|
+
Panduan rekayasa tingkat produksi untuk memanfaatkan **Fitur CSS Native Modern (Standar 2026)** yang menggantikan pustaka JavaScript berukuran besar dengan fitur asli browser. Mencakup **CSS Anchor Positioning API** untuk tooltip dan popover, **`@starting-style`** untuk animasi masuk dan keluar yang mulus pada elemen *top-layer* (`<dialog>`, `popover`), **View Transitions API Level 2**, **Container Queries (`@container`)**, dan selektor relasional **`:has()`**.
|
|
110
|
+
|
|
111
|
+
### Kemampuan Utama
|
|
112
|
+
1. **CSS Anchor Positioning**: Menghapus ketergantungan pada pustaka seperti Floating UI atau Popper.js. Mengikat tooltip, menu, dan popover ke tombol pemicu secara native dengan pembalikan posisi otomatis (`position-try-fallbacks`).
|
|
113
|
+
2. **Animasi Mulus Top-Layer**: Menganimasikan dialog dari status `display: none` ke tampil menggunakan `@starting-style` dan `transition-behavior: allow-discrete`.
|
|
114
|
+
3. **Container Queries (`@container`)**: Desain responsif berbasis ukuran kontainer induk, bukan lebar layar viewport.
|
|
115
|
+
4. **Selektor Relasional `:has()`**: Menata gaya elemen induk berdasarkan status elemen anak di dalamnya tanpa membutuhkan *state* JavaScript.
|
|
116
|
+
5. **Nesting Native & `@layer`**: Mengatur hierarki gaya CSS tanpa alat build dan mengontrol urutan spesifisitas secara terstruktur.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Resep Implementasi Produksi
|
|
121
|
+
|
|
122
|
+
#### Resep 1: Anchor Positioning Murni untuk Menu Dropdown (Tanpa JavaScript)
|
|
123
|
+
```css
|
|
124
|
+
/* Definisikan tombol pemicu sebagai jangkar (anchor) */
|
|
125
|
+
.tombol-pemicu {
|
|
126
|
+
anchor-name: --jangkar-menu;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Hubungkan menu popover ke tombol pemicu */
|
|
130
|
+
.menu-dropdown {
|
|
131
|
+
position: fixed;
|
|
132
|
+
position-anchor: --jangkar-menu;
|
|
133
|
+
|
|
134
|
+
/* Posisikan di bawah tombol pemicu */
|
|
135
|
+
top: anchor(bottom);
|
|
136
|
+
left: anchor(left);
|
|
137
|
+
margin-top: 8px;
|
|
138
|
+
|
|
139
|
+
/* Balik posisi ke atas jika terpotong batas layar */
|
|
140
|
+
position-try-fallbacks: flip-block;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Resep 2: Animasi Modal `<dialog>` dengan `@starting-style`
|
|
145
|
+
```css
|
|
146
|
+
dialog {
|
|
147
|
+
opacity: 0;
|
|
148
|
+
transform: scale(0.95) translateY(10px);
|
|
149
|
+
transition: opacity 0.25s ease-out, transform 0.25s ease-out, display 0.25s allow-discrete;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
dialog[open] {
|
|
153
|
+
opacity: 1;
|
|
154
|
+
transform: scale(1) translateY(0);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@starting-style {
|
|
158
|
+
dialog[open] {
|
|
159
|
+
opacity: 0;
|
|
160
|
+
transform: scale(0.95) translateY(10px);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
dialog::backdrop {
|
|
165
|
+
background-color: rgb(0 0 0 / 0%);
|
|
166
|
+
transition: background-color 0.25s ease-out, display 0.25s allow-discrete;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
dialog[open]::backdrop {
|
|
170
|
+
background-color: rgb(0 0 0 / 50%);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@starting-style {
|
|
174
|
+
dialog[open]::backdrop {
|
|
175
|
+
background-color: rgb(0 0 0 / 0%);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### Checklist Implementasi
|
|
183
|
+
- [ ] Ganti library positioning pihak ketiga dengan CSS `anchor-name` dan `position-anchor`.
|
|
184
|
+
- [ ] Gunakan `@starting-style` dan `transition-behavior: allow-discrete` untuk animasi modal tanpa jeda JavaScript.
|
|
185
|
+
- [ ] Gunakan `@container` pada komponen reusable agar adaptif di semua layout.
|
|
186
|
+
- [ ] Tata arsitektur CSS menggunakan `@layer base, components, utilities;`.
|
|
187
|
+
|
|
188
|
+
## Integrasi Orkestrasi
|
|
189
|
+
- Terintegrasi dengan: `design-system-architect`, `ui-components-expert`, `tailwind-expert`, `senior-frontend`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: monday-design-aesthetic
|
|
3
3
|
description: "Expert guide for implementing the modern, spacious, and highly structured Monday.com design system / Panduan desain ala Monday.com."
|
|
4
|
-
author: "Roedy Rustam"
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Monday.com Design Aesthetic
|
|
@@ -13,6 +13,9 @@ author: "Roedy Rustam"
|
|
|
13
13
|
<a name="english"></a>
|
|
14
14
|
## English
|
|
15
15
|
|
|
16
|
+
### Orchestration & Integration
|
|
17
|
+
Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
|
|
18
|
+
|
|
16
19
|
### Description
|
|
17
20
|
This skill focuses on implementing the modern, spacious, and structured design aesthetic inspired by Monday.com. It is ideal for SaaS landing pages and dashboards.
|
|
18
21
|
|
|
@@ -42,6 +45,9 @@ Use this when the user asks for:
|
|
|
42
45
|
<a name="bahasa-indonesia"></a>
|
|
43
46
|
## Bahasa Indonesia
|
|
44
47
|
|
|
48
|
+
### Integrasi Orkestrasi
|
|
49
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
50
|
+
|
|
45
51
|
### Deskripsi
|
|
46
52
|
Skill ini berfokus pada implementasi desain yang modern, luas (spacious), dan terstruktur yang terinspirasi oleh Monday.com. Sangat cocok untuk landing page dan dashboard SaaS.
|
|
47
53
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: monorepo-architect
|
|
3
3
|
description: "Expert guide for designing and managing scalable monorepos using Turborepo, pnpm workspaces, and shared packages / Panduan ahli untuk merancang dan mengelola monorepo skalabel menggunakan Turborepo dan pnpm workspaces."
|
|
4
|
-
author: "Roedy Rustam"
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Monorepo Architect (Turborepo 2.x / Moon Edition)
|
|
@@ -13,6 +13,9 @@ author: "Roedy Rustam"
|
|
|
13
13
|
<a name="english"></a>
|
|
14
14
|
## English
|
|
15
15
|
|
|
16
|
+
### Orchestration & Integration
|
|
17
|
+
Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
|
|
18
|
+
|
|
16
19
|
### Description
|
|
17
20
|
Expert guide for designing and managing scalable monorepos. Covers **Turborepo 2.x** (the 2026 standard for JS/TS monorepos), **moon** (polyglot task runner for teams mixing JS + Rust + Go), **pnpm workspaces**, shared package design, incremental builds, remote caching, and CI/CD pipeline optimization.
|
|
18
21
|
|
|
@@ -190,6 +193,9 @@ tasks:
|
|
|
190
193
|
<a name="bahasa-indonesia"></a>
|
|
191
194
|
## Bahasa Indonesia
|
|
192
195
|
|
|
196
|
+
### Integrasi Orkestrasi
|
|
197
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
198
|
+
|
|
193
199
|
### Deskripsi
|
|
194
200
|
Panduan ahli untuk merancang dan mengelola monorepo yang skalabel. Mencakup **Turborepo 2.x** (standar 2026 untuk monorepo JS/TS), **moon** (task runner poliglot untuk tim yang memadukan JS + Rust + Go), **pnpm workspaces**, desain shared package, incremental build, remote caching, dan optimasi pipeline CI/CD.
|
|
195
201
|
|