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,199 +1,205 @@
1
- ---
2
- name: tanstack-query-expert
3
- description: "Advanced TanStack Query (v5) expert. Covers useSuspenseQuery, infinite scrolling, optimistic mutations, SSR/React Server Components hydration, and advanced cache invalidation / Pakar manajemen state asinkron menggunakan TanStack Query (React Query) v5 dan Next.js App Router (SSR)."
1
+ ---
2
+ name: tanstack-query-expert
3
+ description: "Advanced TanStack Query (v5) expert. Covers useSuspenseQuery, infinite scrolling, optimistic mutations, SSR/React Server Components hydration, and advanced cache invalidation / Pakar manajemen state asinkron menggunakan TanStack Query (React Query) v5 dan Next.js App Router (SSR)."
4
4
  author: "Roedy Rustam"
5
- ---
6
-
7
- # TanStack Query Expert (v5 + TanStack Router/Start Edition)
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Description
17
- Production-grade TanStack Query (v5) mastery for modern React (v18/19) and Next.js (App Router) applications. Covers declarative data fetching, advanced cache invalidation, optimistic UI updates, Suspense boundaries, SSR hydration, and the new **TanStack Router** + **TanStack Start** ecosystem for full-stack type-safe applications.
18
-
19
- ### Trigger Conditions
20
- - Refactoring data fetching logic (replacing `useEffect` + `useState` patterns).
21
- - Designing query key factories (Array-based, strictly typed).
22
- - Writing `useMutation` hooks with immediate Optimistic Updates.
23
- - Implementing Infinite Scrolling (`useInfiniteQuery`).
24
- - Using React Suspense with `useSuspenseQuery`.
25
- - Integrating TanStack Query with Next.js App Router (Server Components prefetching + Client Boundary hydration).
26
- - Building type-safe SPAs with **TanStack Router** (typed routes, route-level loaders).
27
- - Building full-stack apps with **TanStack Start** (server functions, RSC-like patterns).
28
-
29
- ### Core Concepts & Rules of Thumb
30
- - **Never** use `useEffect` to fetch data if TanStack Query is available.
31
- - **Never** sync query data into local React state (e.g., `useEffect(() => setLocalState(data), [data])`). Derive state during render instead.
32
- - **Stale != Garbage Collected**: `staleTime` dictates when background refetch triggers. `gcTime` dictates how long inactive data stays in memory.
33
- - **Always** use `queryOptions()` helper to co-locate query definition and reuse it across components and loaders.
34
-
35
- ### Advanced Query Patterns
36
-
37
- #### 1. `queryOptions()` Helper — The 2026 Best Practice
38
- Co-locate your query definition using `queryOptions()` to share it between components and route loaders:
39
- ```typescript
40
- import { queryOptions } from '@tanstack/react-query';
41
-
42
- export const userQueryOptions = (userId: string) =>
43
- queryOptions({
44
- queryKey: ['users', userId],
45
- queryFn: () => fetchUser(userId),
46
- staleTime: 5 * 60 * 1000, // 5 minutes
47
- });
48
-
49
- // In component:
50
- const { data } = useQuery(userQueryOptions(userId));
51
-
52
- // In TanStack Router loader:
53
- export const Route = createFileRoute('/users/$userId')({
54
- loader: ({ context: { queryClient }, params }) =>
55
- queryClient.ensureQueryData(userQueryOptions(params.userId)),
56
- component: UserPage,
57
- });
58
- ```
59
-
60
- #### 2. Custom Hook & Suspense Pattern
61
- Abstract `useQuery` into custom hooks. Use `useSuspenseQuery` for modern React architectures:
62
- ```typescript
63
- export function useUser(userId: string) {
64
- return useSuspenseQuery(userQueryOptions(userId));
65
- }
66
- ```
67
-
68
- #### 3. Query Key Factories (Mandatory for Scale)
69
- Use factories to prevent typos and ensure invalidation targets the correct subsets:
70
- ```typescript
71
- export const userKeys = {
72
- all: ['users'] as const,
73
- lists: () => [...userKeys.all, 'list'] as const,
74
- list: (filters: string) => [...userKeys.lists(), { filters }] as const,
75
- details: () => [...userKeys.all, 'detail'] as const,
76
- detail: (id: string) => [...userKeys.details(), id] as const,
77
- };
78
- ```
79
-
80
- #### 4. Optimistic Updates (v5 Best Practice)
81
- Give users instant feedback by updating the cache before the server responds:
82
- ```typescript
83
- const mutation = useMutation({
84
- mutationFn: updateTodo,
85
- onMutate: async (newTodo) => {
86
- await queryClient.cancelQueries({ queryKey: todoKeys.lists() });
87
- const previous = queryClient.getQueryData(todoKeys.lists());
88
- queryClient.setQueryData(todoKeys.lists(), (old) =>
89
- old?.map(t => t.id === newTodo.id ? newTodo : t)
90
- );
91
- return { previous };
92
- },
93
- onError: (err, _, context) => {
94
- queryClient.setQueryData(todoKeys.lists(), context?.previous);
95
- },
96
- onSettled: () => queryClient.invalidateQueries({ queryKey: todoKeys.lists() }),
97
- });
98
- ```
99
-
100
- #### 5. TanStack Router — Type-Safe Client-Side Routing
101
- TanStack Router is the recommended router for SPAs in 2026 — fully type-safe routes, search params, and loaders:
102
- ```typescript
103
- import { createRootRoute, createRoute, createRouter } from '@tanstack/react-router';
104
-
105
- const rootRoute = createRootRoute({ component: RootLayout });
106
-
107
- const usersRoute = createRoute({
108
- getParentRoute: () => rootRoute,
109
- path: '/users',
110
- loader: ({ context: { queryClient } }) =>
111
- queryClient.ensureQueryData(usersQueryOptions()),
112
- component: UsersPage,
113
- });
114
- ```
115
-
116
- #### 6. TanStack Start — Full-Stack Framework
117
- TanStack Start brings server functions and SSR to TanStack Router apps — a Vite-powered alternative to Next.js for SPAs that need SSR:
118
- ```typescript
119
- import { createServerFn } from '@tanstack/start';
120
-
121
- // Type-safe server function (runs on server)
122
- const getUser = createServerFn({ method: 'GET' })
123
- .validator(z.object({ userId: z.string() }))
124
- .handler(async ({ data }) => {
125
- return db.user.findUnique({ where: { id: data.userId } });
126
- });
127
- ```
128
-
129
- #### 7. Next.js App Router SSR Hydration
130
- Prefetch on the server and hydrate on the client seamlessly:
131
- ```typescript
132
- // Server Component (app/users/page.tsx)
133
- export default async function UsersPage() {
134
- const queryClient = new QueryClient();
135
- await queryClient.prefetchQuery(usersQueryOptions());
136
- return (
137
- <HydrationBoundary state={dehydrate(queryClient)}>
138
- <UsersList />
139
- </HydrationBoundary>
140
- );
141
- }
142
- ```
143
-
144
- ### Troubleshooting
145
- - **Infinite Fetching Loops**: Check your `queryFn`. Unhandled exceptions trigger 3 auto-retries. Ensure stable query keys (no object literals in render).
146
- - **`staleTime` vs `gcTime`**: If `gcTime` < `staleTime`, data is deleted from memory before it becomes stale — this defeats the cache. Always set `gcTime >= staleTime`.
147
- - **Hydration Mismatch**: Ensure server and client produce identical initial query data — check for timezone or locale differences.
148
-
149
- ---
150
-
151
- <a name="bahasa-indonesia"></a>
152
- ## Bahasa Indonesia
153
-
154
- ### Deskripsi
155
- Penguasaan TanStack Query (v5) tingkat produksi untuk aplikasi React modern (v18/19) dan Next.js (App Router). Mencakup data fetching deklaratif, invalidasi cache lanjutan, optimistic UI, Suspense boundaries, hidrasi SSR, serta ekosistem **TanStack Router** + **TanStack Start** untuk aplikasi full-stack yang type-safe.
156
-
157
- ### Kondisi Pemicu
158
- - Refactoring logika data fetching (menggantikan `useEffect` + `useState`).
159
- - Merancang query key factories berbasis Array yang type-safe.
160
- - Menulis hook `useMutation` dengan Optimistic Updates instan.
161
- - Mengimplementasikan Infinite Scrolling (`useInfiniteQuery`).
162
- - Memanfaatkan React Suspense dengan `useSuspenseQuery`.
163
- - Mengintegrasikan TanStack Query dengan Next.js App Router (prefetching RSC + hidrasi client boundary).
164
- - Membangun SPA type-safe dengan **TanStack Router** (rute bertipe, route-level loaders).
165
- - Membangun aplikasi full-stack dengan **TanStack Start** (server functions, pola mirip RSC).
166
-
167
- ### Aturan Utama & Prinsip
168
- - **Jangan pernah** gunakan `useEffect` untuk fetch data jika TanStack Query tersedia.
169
- - **Jangan pernah** sinkronkan data query ke state lokal React.
170
- - `staleTime`: kapan refetch latar belakang dipicu. `gcTime`: berapa lama data tidak aktif di memori.
171
- - **Selalu** gunakan helper `queryOptions()` untuk mendefinisikan dan berbagi query definition.
172
-
173
- ### Pola Tingkat Lanjut
174
-
175
- #### 1. Helper `queryOptions()` Best Practice 2026
176
- Co-locate definisi query menggunakan `queryOptions()` untuk berbagi antara komponen dan route loader. Lihat contoh kode di bagian English.
177
-
178
- #### 2. Custom Hook & Suspense Pattern
179
- Abstraksikan `useQuery` ke dalam custom hook. Gunakan `useSuspenseQuery` untuk loading state yang ditangani oleh `<Suspense>`.
180
-
181
- #### 3. Query Key Factories
182
- Gunakan factory untuk mencegah typo dan memastikan invalidation menargetkan subset data yang tepat.
183
-
184
- #### 4. Optimistic Updates
185
- Perbarui cache sebelum server merespons untuk umpan balik instan kepada pengguna.
186
-
187
- #### 5. TanStack Router
188
- Router client-side yang fully type-safe untuk SPA rute, search params, dan loader semuanya bertipe. Direkomendasikan untuk proyek SPA baru di 2026 (menggantikan React Router).
189
-
190
- #### 6. TanStack Start
191
- Framework full-stack berbasis Vite dengan server functions type-safe alternatif Next.js untuk SPA yang membutuhkan SSR.
192
-
193
- #### 7. Hidrasi SSR Next.js App Router
194
- Prefetch di Server Component, lalu wrap dengan `<HydrationBoundary>` agar data langsung tersedia di Client Component tanpa request tambahan.
195
-
196
- ### Pemecahan Masalah
197
- - **Loop Fetching**: Query key tidak stabil atau `queryFn` yang melempar error tak tertangani.
198
- - **`staleTime` vs `gcTime`**: Jangan set `gcTime` lebih kecil dari `staleTime`.
199
- - **Hydration Mismatch**: Pastikan server dan client menghasilkan data awal yang identik.
5
+ ---
6
+
7
+ # TanStack Query Expert (v5 + TanStack Router/Start 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
+ Production-grade TanStack Query (v5) mastery for modern React (v18/19) and Next.js (App Router) applications. Covers declarative data fetching, advanced cache invalidation, optimistic UI updates, Suspense boundaries, SSR hydration, and the new **TanStack Router** + **TanStack Start** ecosystem for full-stack type-safe applications.
21
+
22
+ ### Trigger Conditions
23
+ - Refactoring data fetching logic (replacing `useEffect` + `useState` patterns).
24
+ - Designing query key factories (Array-based, strictly typed).
25
+ - Writing `useMutation` hooks with immediate Optimistic Updates.
26
+ - Implementing Infinite Scrolling (`useInfiniteQuery`).
27
+ - Using React Suspense with `useSuspenseQuery`.
28
+ - Integrating TanStack Query with Next.js App Router (Server Components prefetching + Client Boundary hydration).
29
+ - Building type-safe SPAs with **TanStack Router** (typed routes, route-level loaders).
30
+ - Building full-stack apps with **TanStack Start** (server functions, RSC-like patterns).
31
+
32
+ ### Core Concepts & Rules of Thumb
33
+ - **Never** use `useEffect` to fetch data if TanStack Query is available.
34
+ - **Never** sync query data into local React state (e.g., `useEffect(() => setLocalState(data), [data])`). Derive state during render instead.
35
+ - **Stale != Garbage Collected**: `staleTime` dictates when background refetch triggers. `gcTime` dictates how long inactive data stays in memory.
36
+ - **Always** use `queryOptions()` helper to co-locate query definition and reuse it across components and loaders.
37
+
38
+ ### Advanced Query Patterns
39
+
40
+ #### 1. `queryOptions()` Helper The 2026 Best Practice
41
+ Co-locate your query definition using `queryOptions()` to share it between components and route loaders:
42
+ ```typescript
43
+ import { queryOptions } from '@tanstack/react-query';
44
+
45
+ export const userQueryOptions = (userId: string) =>
46
+ queryOptions({
47
+ queryKey: ['users', userId],
48
+ queryFn: () => fetchUser(userId),
49
+ staleTime: 5 * 60 * 1000, // 5 minutes
50
+ });
51
+
52
+ // In component:
53
+ const { data } = useQuery(userQueryOptions(userId));
54
+
55
+ // In TanStack Router loader:
56
+ export const Route = createFileRoute('/users/$userId')({
57
+ loader: ({ context: { queryClient }, params }) =>
58
+ queryClient.ensureQueryData(userQueryOptions(params.userId)),
59
+ component: UserPage,
60
+ });
61
+ ```
62
+
63
+ #### 2. Custom Hook & Suspense Pattern
64
+ Abstract `useQuery` into custom hooks. Use `useSuspenseQuery` for modern React architectures:
65
+ ```typescript
66
+ export function useUser(userId: string) {
67
+ return useSuspenseQuery(userQueryOptions(userId));
68
+ }
69
+ ```
70
+
71
+ #### 3. Query Key Factories (Mandatory for Scale)
72
+ Use factories to prevent typos and ensure invalidation targets the correct subsets:
73
+ ```typescript
74
+ export const userKeys = {
75
+ all: ['users'] as const,
76
+ lists: () => [...userKeys.all, 'list'] as const,
77
+ list: (filters: string) => [...userKeys.lists(), { filters }] as const,
78
+ details: () => [...userKeys.all, 'detail'] as const,
79
+ detail: (id: string) => [...userKeys.details(), id] as const,
80
+ };
81
+ ```
82
+
83
+ #### 4. Optimistic Updates (v5 Best Practice)
84
+ Give users instant feedback by updating the cache before the server responds:
85
+ ```typescript
86
+ const mutation = useMutation({
87
+ mutationFn: updateTodo,
88
+ onMutate: async (newTodo) => {
89
+ await queryClient.cancelQueries({ queryKey: todoKeys.lists() });
90
+ const previous = queryClient.getQueryData(todoKeys.lists());
91
+ queryClient.setQueryData(todoKeys.lists(), (old) =>
92
+ old?.map(t => t.id === newTodo.id ? newTodo : t)
93
+ );
94
+ return { previous };
95
+ },
96
+ onError: (err, _, context) => {
97
+ queryClient.setQueryData(todoKeys.lists(), context?.previous);
98
+ },
99
+ onSettled: () => queryClient.invalidateQueries({ queryKey: todoKeys.lists() }),
100
+ });
101
+ ```
102
+
103
+ #### 5. TanStack Router Type-Safe Client-Side Routing
104
+ TanStack Router is the recommended router for SPAs in 2026 — fully type-safe routes, search params, and loaders:
105
+ ```typescript
106
+ import { createRootRoute, createRoute, createRouter } from '@tanstack/react-router';
107
+
108
+ const rootRoute = createRootRoute({ component: RootLayout });
109
+
110
+ const usersRoute = createRoute({
111
+ getParentRoute: () => rootRoute,
112
+ path: '/users',
113
+ loader: ({ context: { queryClient } }) =>
114
+ queryClient.ensureQueryData(usersQueryOptions()),
115
+ component: UsersPage,
116
+ });
117
+ ```
118
+
119
+ #### 6. TanStack Start Full-Stack Framework
120
+ TanStack Start brings server functions and SSR to TanStack Router apps — a Vite-powered alternative to Next.js for SPAs that need SSR:
121
+ ```typescript
122
+ import { createServerFn } from '@tanstack/start';
123
+
124
+ // Type-safe server function (runs on server)
125
+ const getUser = createServerFn({ method: 'GET' })
126
+ .validator(z.object({ userId: z.string() }))
127
+ .handler(async ({ data }) => {
128
+ return db.user.findUnique({ where: { id: data.userId } });
129
+ });
130
+ ```
131
+
132
+ #### 7. Next.js App Router SSR Hydration
133
+ Prefetch on the server and hydrate on the client seamlessly:
134
+ ```typescript
135
+ // Server Component (app/users/page.tsx)
136
+ export default async function UsersPage() {
137
+ const queryClient = new QueryClient();
138
+ await queryClient.prefetchQuery(usersQueryOptions());
139
+ return (
140
+ <HydrationBoundary state={dehydrate(queryClient)}>
141
+ <UsersList />
142
+ </HydrationBoundary>
143
+ );
144
+ }
145
+ ```
146
+
147
+ ### Troubleshooting
148
+ - **Infinite Fetching Loops**: Check your `queryFn`. Unhandled exceptions trigger 3 auto-retries. Ensure stable query keys (no object literals in render).
149
+ - **`staleTime` vs `gcTime`**: If `gcTime` < `staleTime`, data is deleted from memory before it becomes stale — this defeats the cache. Always set `gcTime >= staleTime`.
150
+ - **Hydration Mismatch**: Ensure server and client produce identical initial query data — check for timezone or locale differences.
151
+
152
+ ---
153
+
154
+ <a name="bahasa-indonesia"></a>
155
+ ## Bahasa Indonesia
156
+
157
+ ### Integrasi Orkestrasi
158
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
159
+
160
+ ### Deskripsi
161
+ Penguasaan TanStack Query (v5) tingkat produksi untuk aplikasi React modern (v18/19) dan Next.js (App Router). Mencakup data fetching deklaratif, invalidasi cache lanjutan, optimistic UI, Suspense boundaries, hidrasi SSR, serta ekosistem **TanStack Router** + **TanStack Start** untuk aplikasi full-stack yang type-safe.
162
+
163
+ ### Kondisi Pemicu
164
+ - Refactoring logika data fetching (menggantikan `useEffect` + `useState`).
165
+ - Merancang query key factories berbasis Array yang type-safe.
166
+ - Menulis hook `useMutation` dengan Optimistic Updates instan.
167
+ - Mengimplementasikan Infinite Scrolling (`useInfiniteQuery`).
168
+ - Memanfaatkan React Suspense dengan `useSuspenseQuery`.
169
+ - Mengintegrasikan TanStack Query dengan Next.js App Router (prefetching RSC + hidrasi client boundary).
170
+ - Membangun SPA type-safe dengan **TanStack Router** (rute bertipe, route-level loaders).
171
+ - Membangun aplikasi full-stack dengan **TanStack Start** (server functions, pola mirip RSC).
172
+
173
+ ### Aturan Utama & Prinsip
174
+ - **Jangan pernah** gunakan `useEffect` untuk fetch data jika TanStack Query tersedia.
175
+ - **Jangan pernah** sinkronkan data query ke state lokal React.
176
+ - `staleTime`: kapan refetch latar belakang dipicu. `gcTime`: berapa lama data tidak aktif di memori.
177
+ - **Selalu** gunakan helper `queryOptions()` untuk mendefinisikan dan berbagi query definition.
178
+
179
+ ### Pola Tingkat Lanjut
180
+
181
+ #### 1. Helper `queryOptions()` — Best Practice 2026
182
+ Co-locate definisi query menggunakan `queryOptions()` untuk berbagi antara komponen dan route loader. Lihat contoh kode di bagian English.
183
+
184
+ #### 2. Custom Hook & Suspense Pattern
185
+ Abstraksikan `useQuery` ke dalam custom hook. Gunakan `useSuspenseQuery` untuk loading state yang ditangani oleh `<Suspense>`.
186
+
187
+ #### 3. Query Key Factories
188
+ Gunakan factory untuk mencegah typo dan memastikan invalidation menargetkan subset data yang tepat.
189
+
190
+ #### 4. Optimistic Updates
191
+ Perbarui cache sebelum server merespons untuk umpan balik instan kepada pengguna.
192
+
193
+ #### 5. TanStack Router
194
+ Router client-side yang fully type-safe untuk SPA — rute, search params, dan loader semuanya bertipe. Direkomendasikan untuk proyek SPA baru di 2026 (menggantikan React Router).
195
+
196
+ #### 6. TanStack Start
197
+ Framework full-stack berbasis Vite dengan server functions type-safe alternatif Next.js untuk SPA yang membutuhkan SSR.
198
+
199
+ #### 7. Hidrasi SSR Next.js App Router
200
+ Prefetch di Server Component, lalu wrap dengan `<HydrationBoundary>` agar data langsung tersedia di Client Component tanpa request tambahan.
201
+
202
+ ### Pemecahan Masalah
203
+ - **Loop Fetching**: Query key tidak stabil atau `queryFn` yang melempar error tak tertangani.
204
+ - **`staleTime` vs `gcTime`**: Jangan set `gcTime` lebih kecil dari `staleTime`.
205
+ - **Hydration Mismatch**: Pastikan server dan client menghasilkan data awal yang identik.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: tauri-expert
3
3
  description: "Expert skill for Tauri (v2) development, Rust backend, IPC, and security / Panduan ahli untuk pengembangan Tauri v2, Rust backend, IPC, dan keamanan."
4
- author: "Roedy Rustam"
4
+ author: "Roedy Rustam"
5
5
  ---
6
6
 
7
7
  # Tauri Expert
@@ -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 provides best practice guidance for building cross-platform desktop and mobile applications using Tauri (specifically Tauri v2). It covers frontend integration with the Rust backend, Inter-Process Communication (IPC), state management, and security.
18
21
 
@@ -57,6 +60,9 @@ Active when:
57
60
  <a name="bahasa-indonesia"></a>
58
61
  ## Bahasa Indonesia
59
62
 
63
+ ### Integrasi Orkestrasi
64
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
65
+
60
66
  ### Deskripsi
61
67
  Skill ini memberikan panduan praktik terbaik (best practices) untuk membangun aplikasi desktop dan mobile lintas platform menggunakan Tauri (terutama Tauri v2). Skill ini mencakup integrasi frontend dengan backend Rust, Inter-Process Communication (IPC), manajemen state, serta keamanan.
62
68