vibes-plug 1.0.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.
Files changed (183) hide show
  1. package/.claude/rules/vibes-plug-core.md +32 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +51 -0
  3. package/.cursorrules +42 -0
  4. package/AGENTS.md +96 -0
  5. package/BLUEPRINT.md +309 -125
  6. package/CHANGELOG.md +183 -1
  7. package/CLAUDE.md +70 -0
  8. package/LICENSE +1 -1
  9. package/README.md +641 -263
  10. package/index.js +19 -0
  11. package/package.json +61 -25
  12. package/plugin.json +24 -7
  13. package/scripts/generate_swarm_gif.py +295 -0
  14. package/scripts/install.js +201 -0
  15. package/skills/accessibility-testing-expert/SKILL.md +116 -0
  16. package/skills/ai-cost-token-optimizer/SKILL.md +82 -0
  17. package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
  18. package/skills/ai-llm-integration-expert/SKILL.md +147 -122
  19. package/skills/ai-media-generation-expert/SKILL.md +172 -0
  20. package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
  21. package/skills/angular-expert/SKILL.md +148 -0
  22. package/skills/api-design-expert/SKILL.md +316 -309
  23. package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
  24. package/skills/app-analyzer-optimizer/SKILL.md +195 -188
  25. package/skills/apple-ecosystem-expert/SKILL.md +145 -0
  26. package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
  27. package/skills/astro-framework-expert/SKILL.md +200 -0
  28. package/skills/async-queue-temporal-expert/SKILL.md +240 -0
  29. package/skills/authentication-identity-expert/SKILL.md +279 -45
  30. package/skills/auto-doc-updater/SKILL.md +219 -203
  31. package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
  32. package/skills/autonomous-red-teamer/SKILL.md +203 -0
  33. package/skills/autonomous-tdd-debugger/SKILL.md +71 -0
  34. package/skills/background-jobs-queue-expert/SKILL.md +235 -0
  35. package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
  36. package/skills/blockchain-web3-expert/SKILL.md +115 -0
  37. package/skills/bootstrap-to-modern/SKILL.md +93 -86
  38. package/skills/brainstorming/SKILL.md +381 -353
  39. package/skills/browser-automation-expert/SKILL.md +222 -0
  40. package/skills/bun-runtime-expert/SKILL.md +7 -1
  41. package/skills/chatbot-messaging-expert/SKILL.md +114 -0
  42. package/skills/ci-cd-devops-architect/SKILL.md +81 -45
  43. package/skills/cloud-hosting-expert/SKILL.md +249 -243
  44. package/skills/coderabbit/SKILL.md +197 -191
  45. package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
  46. package/skills/cron-scheduler-expert/SKILL.md +304 -0
  47. package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
  48. package/skills/data-telemetry-expert/SKILL.md +218 -212
  49. package/skills/data-visualization-expert/SKILL.md +154 -0
  50. package/skills/database-migration-versioning-expert/SKILL.md +90 -0
  51. package/skills/database-orm-expert/SKILL.md +303 -293
  52. package/skills/dependency-upgrade-migrator/SKILL.md +301 -0
  53. package/skills/design-system-architect/SKILL.md +278 -242
  54. package/skills/desktop-electron-expert/SKILL.md +128 -0
  55. package/skills/documentation-site-expert/SKILL.md +59 -0
  56. package/skills/doku-mcp-server/SKILL.md +257 -0
  57. package/skills/doku-payment-gateway/SKILL.md +233 -0
  58. package/skills/domain-driven-design-expert/SKILL.md +82 -0
  59. package/skills/e2e-testing-expert/SKILL.md +320 -314
  60. package/skills/ecommerce-expert/SKILL.md +87 -0
  61. package/skills/edge-serverless-db-expert/SKILL.md +99 -0
  62. package/skills/email-notification-expert/SKILL.md +368 -0
  63. package/skills/error-resilience-expert/SKILL.md +486 -0
  64. package/skills/event-driven-architect/SKILL.md +86 -80
  65. package/skills/feature-flag-analytics-expert/SKILL.md +66 -0
  66. package/skills/file-upload-media-expert/SKILL.md +437 -0
  67. package/skills/firebase-security-expert/SKILL.md +7 -1
  68. package/skills/form-validation-expert/SKILL.md +407 -0
  69. package/skills/fullstack-expert/SKILL.md +260 -201
  70. package/skills/fullstack-expert/references/api_design_guide.md +466 -466
  71. package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
  72. package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
  73. package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
  74. package/skills/gemini-agent-booster/SKILL.md +142 -104
  75. package/skills/geospatial-maps-expert/SKILL.md +80 -0
  76. package/skills/global-a11y-i18n-expert/SKILL.md +86 -80
  77. package/skills/glsl-shader-expert/SKILL.md +107 -0
  78. package/skills/go-programming-expert/SKILL.md +300 -294
  79. package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
  80. package/skills/graphql-apollo-expert/SKILL.md +114 -0
  81. package/skills/headless-cms-expert/SKILL.md +181 -0
  82. package/skills/hig/SKILL.md +193 -187
  83. package/skills/js-backend-expert/SKILL.md +218 -191
  84. package/skills/legacy-code-translator/SKILL.md +71 -0
  85. package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
  86. package/skills/logging-error-tracking-expert/SKILL.md +344 -0
  87. package/skills/mcp-client-orchestrator/SKILL.md +76 -0
  88. package/skills/mcp-server-architect/SKILL.md +226 -126
  89. package/skills/micro-frontend-architect/SKILL.md +112 -0
  90. package/skills/mobile-expo-expert/SKILL.md +191 -185
  91. package/skills/mobile-push-notification-expert/SKILL.md +71 -0
  92. package/skills/modern-css-native-expert/SKILL.md +189 -0
  93. package/skills/monday-design-aesthetic/SKILL.md +72 -66
  94. package/skills/monorepo-architect/SKILL.md +232 -226
  95. package/skills/mpa-orchestrator/SKILL.md +120 -101
  96. package/skills/multi-agent-orchestration/SKILL.md +173 -153
  97. package/skills/multiple-entry-points/SKILL.md +91 -55
  98. package/skills/mvc-expert/SKILL.md +237 -231
  99. package/skills/n8n-automation-expert/SKILL.md +89 -0
  100. package/skills/nextjs-app-router-expert/SKILL.md +148 -0
  101. package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
  102. package/skills/payment-gateway-expert/SKILL.md +129 -45
  103. package/skills/pdf-document-generation-expert/SKILL.md +91 -0
  104. package/skills/performance-web-vitals/SKILL.md +337 -331
  105. package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
  106. package/skills/prd-architect/SKILL.md +206 -190
  107. package/skills/proactive-background-watcher/SKILL.md +68 -0
  108. package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
  109. package/skills/production-ready-hardener/SKILL.md +461 -468
  110. package/skills/production-ready-hardener/references/production_checklist.md +161 -161
  111. package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
  112. package/skills/project-context-mapper/SKILL.md +85 -0
  113. package/skills/pwa-offline-first-expert/SKILL.md +185 -0
  114. package/skills/python-programming-expert/SKILL.md +407 -270
  115. package/skills/rate-limit-abuse-prevention/SKILL.md +377 -0
  116. package/skills/realtime-collaboration-expert/SKILL.md +99 -45
  117. package/skills/rich-text-editor-expert/SKILL.md +177 -0
  118. package/skills/rust-programming-expert/SKILL.md +240 -234
  119. package/skills/saas-billing/SKILL.md +382 -376
  120. package/skills/saas-multi-tenant/SKILL.md +256 -236
  121. package/skills/saas-mvp-launcher/SKILL.md +30 -1
  122. package/skills/saas-transformer/SKILL.md +499 -445
  123. package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
  124. package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
  125. package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
  126. package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
  127. package/skills/scalability-clean-code/SKILL.md +234 -228
  128. package/skills/search-engine-expert/SKILL.md +89 -0
  129. package/skills/secure-fuzz-testing/SKILL.md +7 -1
  130. package/skills/self-evolving-memory-graph/SKILL.md +91 -0
  131. package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
  132. package/skills/senior-frontend/SKILL.md +85 -105
  133. package/skills/seo/SKILL.md +258 -224
  134. package/skills/session-context-loader/SKILL.md +83 -0
  135. package/skills/session-handoff-resume/SKILL.md +163 -157
  136. package/skills/{skill_baru → skill-baru}/SKILL.md +177 -146
  137. package/skills/solidjs-expert/SKILL.md +80 -0
  138. package/skills/spa-orchestrator/SKILL.md +306 -287
  139. package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
  140. package/skills/state-management-expert/SKILL.md +277 -271
  141. package/skills/supabase-migration/SKILL.md +47 -1
  142. package/skills/supabase-security-expert/SKILL.md +248 -242
  143. package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
  144. package/skills/svg-animation-motion-expert/SKILL.md +115 -0
  145. package/skills/tailwind-expert/SKILL.md +139 -187
  146. package/skills/tanstack-query-expert/SKILL.md +204 -198
  147. package/skills/tauri-expert/SKILL.md +7 -1
  148. package/skills/token-saver/SKILL.md +118 -110
  149. package/skills/typescript-expert/SKILL.md +329 -278
  150. package/skills/ui-components-expert/SKILL.md +166 -63
  151. package/skills/ui-ux-pro-max/SKILL.md +221 -200
  152. package/skills/vector-db-rag-expert/SKILL.md +208 -0
  153. package/skills/vibe-code-gardener/SKILL.md +180 -172
  154. package/skills/visual-qa-vision-agent/SKILL.md +71 -0
  155. package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
  156. package/skills/vue-frontend-expert/SKILL.md +132 -0
  157. package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
  158. package/skills/web-3d-graphics-expert/SKILL.md +137 -0
  159. package/skills/web-game-engine-expert/SKILL.md +102 -0
  160. package/skills/web-scraper/SKILL.md +98 -146
  161. package/skills/website-design-cloner/SKILL.md +180 -0
  162. package/skills/webxr-ar-vr-expert/SKILL.md +123 -0
  163. package/skills/wordpress-headless-expert/SKILL.md +144 -0
  164. package/skills/zero-to-prod-orchestrator/SKILL.md +231 -180
  165. package/skills/zero-trust-secret-vault/SKILL.md +88 -0
  166. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  167. package/CONTRIBUTING.md +0 -199
  168. package/SECURITY.md +0 -21
  169. package/banner.png +0 -0
  170. package/skills/senior-fullstack/SKILL.md +0 -167
  171. package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
  172. package/skills/senior-fullstack/references/development_workflows.md +0 -222
  173. package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
  174. package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
  175. package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
  176. package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
  177. package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
  178. package/skills/seo-geo/SKILL.md +0 -188
  179. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
  180. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  181. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
  182. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  183. package/skills/ui_ux_expert/SKILL.md +0 -114
@@ -1,229 +1,235 @@
1
- ---
2
- name: scalability-clean-code
3
- description: "Software architecture guidelines to maintain code readability (Clean Code, SOLID, DRY) and application scalability / Panduan arsitektur perangkat lunak untuk menjaga keterbacaan kode (Clean Code, SOLID, DRY) dan kemampuan skalabilitas aplikasi."
1
+ ---
2
+ name: scalability-clean-code
3
+ description: "Software architecture guidelines to maintain code readability (Clean Code, SOLID, DRY) and application scalability / Panduan arsitektur perangkat lunak untuk menjaga keterbacaan kode (Clean Code, SOLID, DRY) dan kemampuan skalabilitas aplikasi."
4
4
  author: "Roedy Rustam"
5
- ---
6
-
7
- # Scalability & Clean Code (2026 Edition)
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Description
17
- Software architecture guidelines for writing clean, scalable, and maintainable code. Covers SOLID principles, DRY/YAGNI/KISS, Clean Architecture layers, **Vertical Slice Architecture** (the modern alternative to layered architecture), Domain-Driven Design (DDD) patterns, and practical refactoring techniques.
18
-
19
- ### Trigger Conditions
20
- - Refactoring a codebase that has become hard to understand or modify.
21
- - Designing the architecture for a new feature or service.
22
- - Identifying and eliminating code smells (God Classes, Feature Envy, Long Methods).
23
- - Deciding between Layered Architecture vs Vertical Slice Architecture.
24
- - Applying SOLID principles to a specific code problem.
25
-
26
- ### The SOLID Principles (With Modern Context)
27
-
28
- #### Single Responsibility Principle (SRP)
29
- A module/class/function should have one reason to change. In 2026 React/Node.js context:
30
- - **Bad**: A React component that fetches data, transforms it, and renders UI.
31
- - **Good**: Separate `useUserQuery()` hook (fetch), `transformUser()` util (transform), `UserCard` component (render).
32
-
33
- #### Open/Closed Principle (OCP)
34
- Open for extension, closed for modification. Use composition and strategy pattern:
35
- ```typescript
36
- // Bad: modify existing code every time a new payment provider is added
37
- function processPayment(type: 'stripe' | 'polar' | 'paypal', amount: number) {
38
- if (type === 'stripe') { /* ... */ }
39
- else if (type === 'polar') { /* ... */ }
40
- }
41
-
42
- // Good: extend by adding new providers, not modifying existing code
43
- interface PaymentProvider {
44
- charge(amount: number): Promise<Receipt>;
45
- }
46
-
47
- class StripeProvider implements PaymentProvider { ... }
48
- class PolarProvider implements PaymentProvider { ... }
49
-
50
- function processPayment(provider: PaymentProvider, amount: number) {
51
- return provider.charge(amount);
52
- }
53
- ```
54
-
55
- #### Dependency Inversion Principle (DIP)
56
- High-level modules should not depend on low-level modules — both should depend on abstractions:
57
- ```typescript
58
- // Bad: handler directly imports concrete DB client
59
- import { db } from './postgres-client';
60
-
61
- // Good: inject the repository interface
62
- interface UserRepository {
63
- findById(id: string): Promise<User | null>;
64
- save(user: User): Promise<void>;
65
- }
66
-
67
- async function getUser(repo: UserRepository, id: string) {
68
- return repo.findById(id);
69
- }
70
- ```
71
-
72
- ### Vertical Slice Architecture (VSA)
73
- The modern alternative to traditional layered architecture (Controller → Service → Repository). Organize code by **feature** (vertical slice) rather than by **technical layer** (horizontal slice):
74
-
75
- ```
76
- Traditional (Layered):
77
- src/
78
- controllers/ ← all controllers together
79
- services/ ← all services together
80
- repositories/ ← all repositories together
81
-
82
- Vertical Slice:
83
- src/
84
- features/
85
- users/
86
- create-user.handler.ts ← all logic for "create user" in one place
87
- create-user.schema.ts
88
- create-user.test.ts
89
- products/
90
- list-products.handler.ts
91
- list-products.schema.ts
92
- ```
93
-
94
- **Benefits of VSA**:
95
- - Features are self-contained — easy to add, modify, delete, or move.
96
- - No need to navigate 3-4 layers just to trace one user story.
97
- - Natural boundary for microservice extraction.
98
-
99
- ```typescript
100
- // features/users/create-user.handler.ts
101
- // One file contains the complete "create user" vertical slice
102
- import { z } from 'zod';
103
- import { db } from '@/lib/db';
104
- import { sendWelcomeEmail } from '@/lib/email';
105
-
106
- export const CreateUserSchema = z.object({
107
- name: z.string().min(2),
108
- email: z.string().email(),
109
- });
110
-
111
- export type CreateUserInput = z.infer<typeof CreateUserSchema>;
112
-
113
- export async function handleCreateUser(input: CreateUserInput) {
114
- const validated = CreateUserSchema.parse(input);
115
-
116
- const user = await db.user.create({ data: validated });
117
- await sendWelcomeEmail(user.email, user.name);
118
-
119
- return user;
120
- }
121
- ```
122
-
123
- ### Clean Code Principles
124
-
125
- #### Functions
126
- - **Do one thing**: Functions should do one thing and do it well.
127
- - **Small**: Aim for < 20 lines. If longer, extract sub-functions.
128
- - **Descriptive names**: `getUsersByWorkspace()` not `getData()`.
129
- - **No side effects**: Pure functions are predictable and testable.
130
-
131
- #### Naming
132
- - Variables: noun phrases (`userCount`, `activeWorkspaces`).
133
- - Functions: verb phrases (`fetchUser`, `validateInput`, `sendEmail`).
134
- - Boolean: question form (`isActive`, `hasPermission`, `canEdit`).
135
- - Avoid abbreviations: `workspace` not `ws`, `configuration` not `cfg`.
136
-
137
- #### Comments
138
- - **Don't comment bad code rewrite it.**
139
- - Write self-documenting code: well-named variables and functions eliminate the need for most comments.
140
- - **Do** comment: why (intent), not what (obvious from code).
141
-
142
- #### DRY, YAGNI, KISS
143
- - **DRY**: Don't Repeat Yourself extract shared logic. But: avoid premature abstraction.
144
- - **YAGNI**: You Aren't Gonna Need It — don't build features "just in case".
145
- - **KISS**: Keep It Simple, Stupid — the simplest solution that works is usually best.
146
-
147
- ### Code Smells & Refactoring
148
-
149
- | Smell | Symptom | Refactoring |
150
- |---|---|---|
151
- | **God Class** | Class does everything | Extract Class, Move Method |
152
- | **Long Method** | Method > 30 lines | Extract Method |
153
- | **Feature Envy** | Method uses another class's data excessively | Move Method |
154
- | **Data Clumps** | Same 3+ params appear together repeatedly | Introduce Parameter Object |
155
- | **Magic Numbers** | `if (status === 3)` | Extract Constant |
156
- | **Shotgun Surgery** | One change requires edits in many places | Move Method, Inline Class |
157
- | **Primitive Obsession** | Using string/int for domain concepts | Replace with Value Object |
158
-
159
- ### Architecture Decision Framework
160
- When choosing an architecture, ask:
161
- 1. **What changes together?** Organize code that changes together.
162
- 2. **What is independently deployable?** Separate services by deployment boundary.
163
- 3. **What has different scaling needs?** Scale independently only what needs it.
164
- 4. **What is the team size?** Microservices add overhead start monolith, extract when needed.
165
-
166
- ---
167
-
168
- <a name="bahasa-indonesia"></a>
169
- ## Bahasa Indonesia
170
-
171
- ### Deskripsi
172
- Panduan arsitektur perangkat lunak untuk menulis kode yang bersih, skalabel, dan mudah dirawat. Mencakup prinsip SOLID, DRY/YAGNI/KISS, lapisan Clean Architecture, **Vertical Slice Architecture** (alternatif modern dari layered architecture), pola Domain-Driven Design (DDD), dan teknik refactoring praktis.
173
-
174
- ### Kondisi Pemicu
175
- - Merefaktor codebase yang sulit dipahami atau dimodifikasi.
176
- - Merancang arsitektur untuk fitur atau layanan baru.
177
- - Mengidentifikasi dan menghilangkan code smell (God Class, Feature Envy, Long Method).
178
- - Memutuskan antara Layered Architecture vs Vertical Slice Architecture.
179
- - Menerapkan prinsip SOLID pada masalah kode tertentu.
180
-
181
- ### Prinsip SOLID
182
-
183
- #### SRP Single Responsibility Principle
184
- Setiap modul/kelas/fungsi harus memiliki satu alasan untuk berubah. Pisahkan pengambilan data, transformasi data, dan rendering UI.
185
-
186
- #### OCP — Open/Closed Principle
187
- Terbuka untuk ekstensi, tertutup untuk modifikasi. Gunakan komposisi dan pola strategi — tambah provider baru tanpa mengubah kode yang ada.
188
-
189
- #### DIPDependency Inversion Principle
190
- Modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah keduanya harus bergantung pada abstraksi (interface).
191
-
192
- ### Vertical Slice Architecture (VSA)
193
- Alternatif modern dari layered architecture tradisional. Organisasikan kode berdasarkan **fitur** (irisan vertikal), bukan lapisan teknis (irisan horizontal).
194
-
195
- **Keuntungan VSA:**
196
- - Fitur bersifat self-containedmudah ditambah, dimodifikasi, dihapus, atau dipindah.
197
- - Tidak perlu menavigasi 3-4 layer hanya untuk melacak satu user story.
198
- - Batas natural untuk ekstraksi microservice.
199
-
200
- ### Prinsip Clean Code
201
-
202
- #### Fungsi
203
- - Lakukan satu hal dan lakukan dengan baik.
204
- - Nama deskriptif: `getUsersByWorkspace()` bukan `getData()`.
205
- - Tanpa efek samping: fungsi murni dapat diprediksi dan diuji.
206
-
207
- #### Penamaan
208
- - Variabel: frasa kata benda (`jumlahPengguna`, `workspaceAktif`).
209
- - Fungsi: frasa kata kerja (`ambilPengguna`, `validasiInput`).
210
- - Boolean: bentuk pertanyaan (`aktif`, `punyaIzin`, `bisaEdit`).
211
-
212
- #### Komentar
213
- - Jangan komen kode buruk — tulis ulang.
214
- - Tulis kode yang mendokumentasikan dirinya sendiri.
215
- - Komentar: **mengapa** (niat), bukan apa (jelas dari kode).
216
-
217
- #### DRY, YAGNI, KISS
218
- - **DRY**: Jangan ulangi diri sendiri — ekstrak logika bersama.
219
- - **YAGNI**: Anda tidak akan membutuhkannya jangan bangun fitur "untuk jaga-jaga".
220
- - **KISS**: Tetap sederhana — solusi paling sederhana yang berfungsi biasanya terbaik.
221
-
222
- ### Code Smell & Refactoring
223
- Identifikasi dan perbaiki: God Class, Long Method, Feature Envy, Data Clumps, Magic Numbers, Shotgun Surgery, Primitive Obsession.
224
-
225
- ### Framework Keputusan Arsitektur
226
- 1. **Apa yang berubah bersama?** Organisasikan kode yang berubah bersama.
227
- 2. **Apa yang dapat di-deploy secara independen?** Pisahkan layanan berdasarkan batas deployment.
228
- 3. **Apa yang memiliki kebutuhan scaling berbeda?** Scale secara independen hanya yang membutuhkannya.
229
- 4. **Berapa besar tim?** Microservices menambah overhead mulai monolith, ekstrak saat diperlukan.
5
+ ---
6
+
7
+ # Scalability & Clean Code (2026 Edition)
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
+ Software architecture guidelines for writing clean, scalable, and maintainable code. Covers SOLID principles, DRY/YAGNI/KISS, Clean Architecture layers, **Vertical Slice Architecture** (the modern alternative to layered architecture), Domain-Driven Design (DDD) patterns, and practical refactoring techniques.
21
+
22
+ ### Trigger Conditions
23
+ - Refactoring a codebase that has become hard to understand or modify.
24
+ - Designing the architecture for a new feature or service.
25
+ - Identifying and eliminating code smells (God Classes, Feature Envy, Long Methods).
26
+ - Deciding between Layered Architecture vs Vertical Slice Architecture.
27
+ - Applying SOLID principles to a specific code problem.
28
+
29
+ ### The SOLID Principles (With Modern Context)
30
+
31
+ #### Single Responsibility Principle (SRP)
32
+ A module/class/function should have one reason to change. In 2026 React/Node.js context:
33
+ - **Bad**: A React component that fetches data, transforms it, and renders UI.
34
+ - **Good**: Separate `useUserQuery()` hook (fetch), `transformUser()` util (transform), `UserCard` component (render).
35
+
36
+ #### Open/Closed Principle (OCP)
37
+ Open for extension, closed for modification. Use composition and strategy pattern:
38
+ ```typescript
39
+ // Bad: modify existing code every time a new payment provider is added
40
+ function processPayment(type: 'stripe' | 'polar' | 'paypal', amount: number) {
41
+ if (type === 'stripe') { /* ... */ }
42
+ else if (type === 'polar') { /* ... */ }
43
+ }
44
+
45
+ // Good: extend by adding new providers, not modifying existing code
46
+ interface PaymentProvider {
47
+ charge(amount: number): Promise<Receipt>;
48
+ }
49
+
50
+ class StripeProvider implements PaymentProvider { ... }
51
+ class PolarProvider implements PaymentProvider { ... }
52
+
53
+ function processPayment(provider: PaymentProvider, amount: number) {
54
+ return provider.charge(amount);
55
+ }
56
+ ```
57
+
58
+ #### Dependency Inversion Principle (DIP)
59
+ High-level modules should not depend on low-level modules — both should depend on abstractions:
60
+ ```typescript
61
+ // Bad: handler directly imports concrete DB client
62
+ import { db } from './postgres-client';
63
+
64
+ // Good: inject the repository interface
65
+ interface UserRepository {
66
+ findById(id: string): Promise<User | null>;
67
+ save(user: User): Promise<void>;
68
+ }
69
+
70
+ async function getUser(repo: UserRepository, id: string) {
71
+ return repo.findById(id);
72
+ }
73
+ ```
74
+
75
+ ### Vertical Slice Architecture (VSA)
76
+ The modern alternative to traditional layered architecture (Controller → Service → Repository). Organize code by **feature** (vertical slice) rather than by **technical layer** (horizontal slice):
77
+
78
+ ```
79
+ Traditional (Layered):
80
+ src/
81
+ controllers/ ← all controllers together
82
+ services/ ← all services together
83
+ repositories/ ← all repositories together
84
+
85
+ Vertical Slice:
86
+ src/
87
+ features/
88
+ users/
89
+ create-user.handler.ts ← all logic for "create user" in one place
90
+ create-user.schema.ts
91
+ create-user.test.ts
92
+ products/
93
+ list-products.handler.ts
94
+ list-products.schema.ts
95
+ ```
96
+
97
+ **Benefits of VSA**:
98
+ - Features are self-contained — easy to add, modify, delete, or move.
99
+ - No need to navigate 3-4 layers just to trace one user story.
100
+ - Natural boundary for microservice extraction.
101
+
102
+ ```typescript
103
+ // features/users/create-user.handler.ts
104
+ // One file contains the complete "create user" vertical slice
105
+ import { z } from 'zod';
106
+ import { db } from '@/lib/db';
107
+ import { sendWelcomeEmail } from '@/lib/email';
108
+
109
+ export const CreateUserSchema = z.object({
110
+ name: z.string().min(2),
111
+ email: z.string().email(),
112
+ });
113
+
114
+ export type CreateUserInput = z.infer<typeof CreateUserSchema>;
115
+
116
+ export async function handleCreateUser(input: CreateUserInput) {
117
+ const validated = CreateUserSchema.parse(input);
118
+
119
+ const user = await db.user.create({ data: validated });
120
+ await sendWelcomeEmail(user.email, user.name);
121
+
122
+ return user;
123
+ }
124
+ ```
125
+
126
+ ### Clean Code Principles
127
+
128
+ #### Functions
129
+ - **Do one thing**: Functions should do one thing and do it well.
130
+ - **Small**: Aim for < 20 lines. If longer, extract sub-functions.
131
+ - **Descriptive names**: `getUsersByWorkspace()` not `getData()`.
132
+ - **No side effects**: Pure functions are predictable and testable.
133
+
134
+ #### Naming
135
+ - Variables: noun phrases (`userCount`, `activeWorkspaces`).
136
+ - Functions: verb phrases (`fetchUser`, `validateInput`, `sendEmail`).
137
+ - Boolean: question form (`isActive`, `hasPermission`, `canEdit`).
138
+ - Avoid abbreviations: `workspace` not `ws`, `configuration` not `cfg`.
139
+
140
+ #### Comments
141
+ - **Don't comment bad code — rewrite it.**
142
+ - Write self-documenting code: well-named variables and functions eliminate the need for most comments.
143
+ - **Do** comment: why (intent), not what (obvious from code).
144
+
145
+ #### DRY, YAGNI, KISS
146
+ - **DRY**: Don't Repeat Yourself — extract shared logic. But: avoid premature abstraction.
147
+ - **YAGNI**: You Aren't Gonna Need It — don't build features "just in case".
148
+ - **KISS**: Keep It Simple, Stupid — the simplest solution that works is usually best.
149
+
150
+ ### Code Smells & Refactoring
151
+
152
+ | Smell | Symptom | Refactoring |
153
+ |---|---|---|
154
+ | **God Class** | Class does everything | Extract Class, Move Method |
155
+ | **Long Method** | Method > 30 lines | Extract Method |
156
+ | **Feature Envy** | Method uses another class's data excessively | Move Method |
157
+ | **Data Clumps** | Same 3+ params appear together repeatedly | Introduce Parameter Object |
158
+ | **Magic Numbers** | `if (status === 3)` | Extract Constant |
159
+ | **Shotgun Surgery** | One change requires edits in many places | Move Method, Inline Class |
160
+ | **Primitive Obsession** | Using string/int for domain concepts | Replace with Value Object |
161
+
162
+ ### Architecture Decision Framework
163
+ When choosing an architecture, ask:
164
+ 1. **What changes together?** Organize code that changes together.
165
+ 2. **What is independently deployable?** Separate services by deployment boundary.
166
+ 3. **What has different scaling needs?** Scale independently only what needs it.
167
+ 4. **What is the team size?** Microservices add overhead — start monolith, extract when needed.
168
+
169
+ ---
170
+
171
+ <a name="bahasa-indonesia"></a>
172
+ ## Bahasa Indonesia
173
+
174
+ ### Integrasi Orkestrasi
175
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
176
+
177
+ ### Deskripsi
178
+ Panduan arsitektur perangkat lunak untuk menulis kode yang bersih, skalabel, dan mudah dirawat. Mencakup prinsip SOLID, DRY/YAGNI/KISS, lapisan Clean Architecture, **Vertical Slice Architecture** (alternatif modern dari layered architecture), pola Domain-Driven Design (DDD), dan teknik refactoring praktis.
179
+
180
+ ### Kondisi Pemicu
181
+ - Merefaktor codebase yang sulit dipahami atau dimodifikasi.
182
+ - Merancang arsitektur untuk fitur atau layanan baru.
183
+ - Mengidentifikasi dan menghilangkan code smell (God Class, Feature Envy, Long Method).
184
+ - Memutuskan antara Layered Architecture vs Vertical Slice Architecture.
185
+ - Menerapkan prinsip SOLID pada masalah kode tertentu.
186
+
187
+ ### Prinsip SOLID
188
+
189
+ #### SRPSingle Responsibility Principle
190
+ Setiap modul/kelas/fungsi harus memiliki satu alasan untuk berubah. Pisahkan pengambilan data, transformasi data, dan rendering UI.
191
+
192
+ #### OCP Open/Closed Principle
193
+ Terbuka untuk ekstensi, tertutup untuk modifikasi. Gunakan komposisi dan pola strategi tambah provider baru tanpa mengubah kode yang ada.
194
+
195
+ #### DIP — Dependency Inversion Principle
196
+ Modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah keduanya harus bergantung pada abstraksi (interface).
197
+
198
+ ### Vertical Slice Architecture (VSA)
199
+ Alternatif modern dari layered architecture tradisional. Organisasikan kode berdasarkan **fitur** (irisan vertikal), bukan lapisan teknis (irisan horizontal).
200
+
201
+ **Keuntungan VSA:**
202
+ - Fitur bersifat self-contained — mudah ditambah, dimodifikasi, dihapus, atau dipindah.
203
+ - Tidak perlu menavigasi 3-4 layer hanya untuk melacak satu user story.
204
+ - Batas natural untuk ekstraksi microservice.
205
+
206
+ ### Prinsip Clean Code
207
+
208
+ #### Fungsi
209
+ - Lakukan satu hal dan lakukan dengan baik.
210
+ - Nama deskriptif: `getUsersByWorkspace()` bukan `getData()`.
211
+ - Tanpa efek samping: fungsi murni dapat diprediksi dan diuji.
212
+
213
+ #### Penamaan
214
+ - Variabel: frasa kata benda (`jumlahPengguna`, `workspaceAktif`).
215
+ - Fungsi: frasa kata kerja (`ambilPengguna`, `validasiInput`).
216
+ - Boolean: bentuk pertanyaan (`aktif`, `punyaIzin`, `bisaEdit`).
217
+
218
+ #### Komentar
219
+ - Jangan komen kode buruktulis ulang.
220
+ - Tulis kode yang mendokumentasikan dirinya sendiri.
221
+ - Komentar: **mengapa** (niat), bukan apa (jelas dari kode).
222
+
223
+ #### DRY, YAGNI, KISS
224
+ - **DRY**: Jangan ulangi diri sendiri — ekstrak logika bersama.
225
+ - **YAGNI**: Anda tidak akan membutuhkannya — jangan bangun fitur "untuk jaga-jaga".
226
+ - **KISS**: Tetap sederhana solusi paling sederhana yang berfungsi biasanya terbaik.
227
+
228
+ ### Code Smell & Refactoring
229
+ Identifikasi dan perbaiki: God Class, Long Method, Feature Envy, Data Clumps, Magic Numbers, Shotgun Surgery, Primitive Obsession.
230
+
231
+ ### Framework Keputusan Arsitektur
232
+ 1. **Apa yang berubah bersama?** Organisasikan kode yang berubah bersama.
233
+ 2. **Apa yang dapat di-deploy secara independen?** Pisahkan layanan berdasarkan batas deployment.
234
+ 3. **Apa yang memiliki kebutuhan scaling berbeda?** Scale secara independen hanya yang membutuhkannya.
235
+ 4. **Berapa besar tim?** Microservices menambah overhead — mulai monolith, ekstrak saat diperlukan.
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: search-engine-expert
3
+ description: "Expert guide for full-text search engines (Typesense, Meilisearch, Elasticsearch), faceted search, and autocomplete / Panduan ahli mesin pencarian full-text (Typesense, Meilisearch, Elasticsearch), pencarian berfaset, dan autocomplete."
4
+ author: "Roedy Rustam"
5
+ ---
6
+
7
+ # Search Engine Expert (2026 Edition)
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Orchestration & Integration
17
+ - **`database-orm-expert`**: Database indexing strategies alongside search.
18
+ - **`vector-db-rag-expert`**: Hybrid search (semantic + full-text).
19
+ - **`performance-web-vitals`**: Search latency optimization.
20
+ - **`ecommerce-expert`**: Product search and faceted navigation.
21
+
22
+ ### Description
23
+ Expert guide for implementing full-text search in web applications. Covers Typesense (typo-tolerant, easy setup), Meilisearch (Rust-based, instant search), Elasticsearch/OpenSearch (enterprise-grade), faceted search, autocomplete, search-as-you-type, relevance tuning, index optimization, and geo-search.
24
+
25
+ ### Trigger Conditions
26
+ - Implementing search functionality beyond basic SQL LIKE queries.
27
+ - Building autocomplete or search-as-you-type features.
28
+ - Choosing a search engine for an application.
29
+ - Implementing faceted search for e-commerce product filtering.
30
+
31
+ ---
32
+
33
+ ### Search Engine Selection
34
+
35
+ | Engine | Speed | Setup | Typo Tolerance | Facets | Best For |
36
+ |--------|-------|-------|----------------|--------|----------|
37
+ | Typesense | ★★★★★ | Easy | ✅ Built-in | ✅ | Small-medium apps |
38
+ | Meilisearch | ★★★★★ | Easy | ✅ Built-in | ✅ | Developer experience |
39
+ | Elasticsearch | ★★★★ | Complex | Plugin | ✅ | Enterprise, analytics |
40
+ | Algolia | ★★★★★ | SaaS | ✅ Built-in | ✅ | Quick integration |
41
+
42
+ ```typescript
43
+ // Typesense — Setup and search
44
+ import Typesense from 'typesense';
45
+
46
+ const client = new Typesense.Client({
47
+ nodes: [{ host: 'localhost', port: 8108, protocol: 'http' }],
48
+ apiKey: process.env.TYPESENSE_API_KEY!,
49
+ });
50
+
51
+ // Create collection
52
+ await client.collections().create({
53
+ name: 'products',
54
+ fields: [
55
+ { name: 'name', type: 'string' },
56
+ { name: 'description', type: 'string' },
57
+ { name: 'price', type: 'float', facet: true },
58
+ { name: 'category', type: 'string', facet: true },
59
+ { name: 'rating', type: 'float', sort: true },
60
+ ],
61
+ default_sorting_field: 'rating',
62
+ });
63
+
64
+ // Search with facets
65
+ const results = await client.collections('products').documents().search({
66
+ q: 'wireless headphones',
67
+ query_by: 'name,description',
68
+ filter_by: 'price:<100 && category:=Electronics',
69
+ facet_by: 'category,price',
70
+ sort_by: 'rating:desc',
71
+ per_page: 20,
72
+ });
73
+ ```
74
+
75
+ ## Orchestration & Integration
76
+ - `database-orm-expert`, `vector-db-rag-expert`, `ecommerce-expert`
77
+
78
+ ---
79
+
80
+ <a name="bahasa-indonesia"></a>
81
+ ## Bahasa Indonesia
82
+
83
+ ### Deskripsi
84
+ Panduan ahli untuk mengimplementasikan pencarian full-text di aplikasi web. Mencakup Typesense, Meilisearch, Elasticsearch, pencarian berfaset, autocomplete, dan optimasi relevansi.
85
+
86
+ ### Kondisi Pemicu
87
+ - Mengimplementasikan fungsionalitas pencarian di luar query SQL LIKE.
88
+ - Membangun fitur autocomplete atau search-as-you-type.
89
+ - Memilih mesin pencarian untuk aplikasi.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: secure-fuzz-testing
3
3
  description: "Expert-level skill for writing and integrating coverage-guided fuzz tests in Python, Rust, and Go for secure code validation in English and Indonesian."
4
- author: "Roedy Rustam"
4
+ author: "Roedy Rustam"
5
5
  ---
6
6
 
7
7
  # Secure Fuzz Testing
@@ -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-level guidance for writing, running, and integrating coverage-guided fuzz tests (fuzzing) to identify security vulnerabilities, memory leaks, and input-validation issues in software applications. This skill covers writing fuzz targets in **Python**, **Rust**, and **Go**, configuring compilers with sanitizers (ASan, MSan, UBSan), and setting up automated CI/CD security pipelines.
18
21
 
@@ -109,6 +112,9 @@ Use compiler instrumentation flags to expose hidden bugs:
109
112
  <a name="bahasa-indonesia"></a>
110
113
  ## Bahasa Indonesia
111
114
 
115
+ ### Integrasi Orkestrasi
116
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
117
+
112
118
  ### Deskripsi
113
119
  Panduan tingkat ahli untuk menulis, menjalankan, dan mengintegrasikan pengujian berbasis cakupan (*coverage-guided fuzzing*) untuk mengidentifikasi celah keamanan, kebocoran memori, dan kesalahan validasi input dalam aplikasi perangkat lunak. Skill ini mencakup penulisan target fuzzing dalam bahasa **Python**, **Rust**, dan **Go**, konfigurasi compiler dengan sanitizer (ASan, MSan, UBSan), serta penyiapan pipa otomatisasi keamanan CI/CD.
114
120