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.
- 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 +96 -0
- package/BLUEPRINT.md +309 -125
- package/CHANGELOG.md +183 -1
- package/CLAUDE.md +70 -0
- package/LICENSE +1 -1
- package/README.md +641 -263
- package/index.js +19 -0
- package/package.json +61 -25
- 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 -0
- package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
- package/skills/ai-llm-integration-expert/SKILL.md +147 -122
- 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 +316 -309
- package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
- package/skills/app-analyzer-optimizer/SKILL.md +195 -188
- package/skills/apple-ecosystem-expert/SKILL.md +145 -0
- 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 +240 -0
- package/skills/authentication-identity-expert/SKILL.md +279 -45
- package/skills/auto-doc-updater/SKILL.md +219 -203
- package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
- package/skills/autonomous-red-teamer/SKILL.md +203 -0
- package/skills/autonomous-tdd-debugger/SKILL.md +71 -0
- 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 +93 -86
- package/skills/brainstorming/SKILL.md +381 -353
- package/skills/browser-automation-expert/SKILL.md +222 -0
- 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 +81 -45
- package/skills/cloud-hosting-expert/SKILL.md +249 -243
- package/skills/coderabbit/SKILL.md +197 -191
- package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
- package/skills/cron-scheduler-expert/SKILL.md +304 -0
- package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
- package/skills/data-telemetry-expert/SKILL.md +218 -212
- 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 +303 -293
- package/skills/dependency-upgrade-migrator/SKILL.md +301 -0
- package/skills/design-system-architect/SKILL.md +278 -242
- 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 +257 -0
- package/skills/doku-payment-gateway/SKILL.md +233 -0
- package/skills/domain-driven-design-expert/SKILL.md +82 -0
- package/skills/e2e-testing-expert/SKILL.md +320 -314
- package/skills/ecommerce-expert/SKILL.md +87 -0
- package/skills/edge-serverless-db-expert/SKILL.md +99 -0
- package/skills/email-notification-expert/SKILL.md +368 -0
- package/skills/error-resilience-expert/SKILL.md +486 -0
- package/skills/event-driven-architect/SKILL.md +86 -80
- package/skills/feature-flag-analytics-expert/SKILL.md +66 -0
- package/skills/file-upload-media-expert/SKILL.md +437 -0
- package/skills/firebase-security-expert/SKILL.md +7 -1
- package/skills/form-validation-expert/SKILL.md +407 -0
- package/skills/fullstack-expert/SKILL.md +260 -201
- package/skills/fullstack-expert/references/api_design_guide.md +466 -466
- package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
- package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
- package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
- package/skills/gemini-agent-booster/SKILL.md +142 -104
- package/skills/geospatial-maps-expert/SKILL.md +80 -0
- package/skills/global-a11y-i18n-expert/SKILL.md +86 -80
- package/skills/glsl-shader-expert/SKILL.md +107 -0
- package/skills/go-programming-expert/SKILL.md +300 -294
- package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
- package/skills/graphql-apollo-expert/SKILL.md +114 -0
- package/skills/headless-cms-expert/SKILL.md +181 -0
- package/skills/hig/SKILL.md +193 -187
- package/skills/js-backend-expert/SKILL.md +218 -191
- package/skills/legacy-code-translator/SKILL.md +71 -0
- package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
- package/skills/logging-error-tracking-expert/SKILL.md +344 -0
- package/skills/mcp-client-orchestrator/SKILL.md +76 -0
- package/skills/mcp-server-architect/SKILL.md +226 -126
- package/skills/micro-frontend-architect/SKILL.md +112 -0
- package/skills/mobile-expo-expert/SKILL.md +191 -185
- package/skills/mobile-push-notification-expert/SKILL.md +71 -0
- package/skills/modern-css-native-expert/SKILL.md +189 -0
- package/skills/monday-design-aesthetic/SKILL.md +72 -66
- package/skills/monorepo-architect/SKILL.md +232 -226
- package/skills/mpa-orchestrator/SKILL.md +120 -101
- package/skills/multi-agent-orchestration/SKILL.md +173 -153
- package/skills/multiple-entry-points/SKILL.md +91 -55
- package/skills/mvc-expert/SKILL.md +237 -231
- 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 +129 -45
- package/skills/pdf-document-generation-expert/SKILL.md +91 -0
- package/skills/performance-web-vitals/SKILL.md +337 -331
- package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
- package/skills/prd-architect/SKILL.md +206 -190
- package/skills/proactive-background-watcher/SKILL.md +68 -0
- package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
- package/skills/production-ready-hardener/SKILL.md +461 -468
- package/skills/production-ready-hardener/references/production_checklist.md +161 -161
- package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
- package/skills/project-context-mapper/SKILL.md +85 -0
- package/skills/pwa-offline-first-expert/SKILL.md +185 -0
- package/skills/python-programming-expert/SKILL.md +407 -270
- package/skills/rate-limit-abuse-prevention/SKILL.md +377 -0
- package/skills/realtime-collaboration-expert/SKILL.md +99 -45
- package/skills/rich-text-editor-expert/SKILL.md +177 -0
- package/skills/rust-programming-expert/SKILL.md +240 -234
- package/skills/saas-billing/SKILL.md +382 -376
- package/skills/saas-multi-tenant/SKILL.md +256 -236
- package/skills/saas-mvp-launcher/SKILL.md +30 -1
- package/skills/saas-transformer/SKILL.md +499 -445
- package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
- package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
- package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
- package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
- package/skills/scalability-clean-code/SKILL.md +234 -228
- 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 +91 -0
- package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
- package/skills/senior-frontend/SKILL.md +85 -105
- package/skills/seo/SKILL.md +258 -224
- package/skills/session-context-loader/SKILL.md +83 -0
- package/skills/session-handoff-resume/SKILL.md +163 -157
- package/skills/{skill_baru → skill-baru}/SKILL.md +177 -146
- package/skills/solidjs-expert/SKILL.md +80 -0
- package/skills/spa-orchestrator/SKILL.md +306 -287
- package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
- package/skills/state-management-expert/SKILL.md +277 -271
- package/skills/supabase-migration/SKILL.md +47 -1
- package/skills/supabase-security-expert/SKILL.md +248 -242
- 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 +139 -187
- package/skills/tanstack-query-expert/SKILL.md +204 -198
- package/skills/tauri-expert/SKILL.md +7 -1
- package/skills/token-saver/SKILL.md +118 -110
- package/skills/typescript-expert/SKILL.md +329 -278
- package/skills/ui-components-expert/SKILL.md +166 -63
- package/skills/ui-ux-pro-max/SKILL.md +221 -200
- package/skills/vector-db-rag-expert/SKILL.md +208 -0
- package/skills/vibe-code-gardener/SKILL.md +180 -172
- package/skills/visual-qa-vision-agent/SKILL.md +71 -0
- package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
- package/skills/vue-frontend-expert/SKILL.md +132 -0
- package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
- package/skills/web-3d-graphics-expert/SKILL.md +137 -0
- package/skills/web-game-engine-expert/SKILL.md +102 -0
- package/skills/web-scraper/SKILL.md +98 -146
- package/skills/website-design-cloner/SKILL.md +180 -0
- package/skills/webxr-ar-vr-expert/SKILL.md +123 -0
- package/skills/wordpress-headless-expert/SKILL.md +144 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +231 -180
- package/skills/zero-trust-secret-vault/SKILL.md +88 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/CONTRIBUTING.md +0 -199
- package/SECURITY.md +0 -21
- package/banner.png +0 -0
- 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 -114
|
@@ -1,213 +1,219 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: data-telemetry-expert
|
|
3
|
-
description: "Expert guide for observability, analytics, telemetry, and data pipelines (OpenTelemetry, PostHog, Mixpanel) / Panduan ahli untuk observabilitas, telemetri, dan analitik."
|
|
1
|
+
---
|
|
2
|
+
name: data-telemetry-expert
|
|
3
|
+
description: "Expert guide for observability, analytics, telemetry, and data pipelines (OpenTelemetry, PostHog, Mixpanel) / Panduan ahli untuk observabilitas, telemetri, dan analitik."
|
|
4
4
|
author: "Roedy Rustam"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Data & Telemetry Expert (OpenTelemetry 1.x / ClickHouse Edition)
|
|
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
|
-
const {
|
|
47
|
-
const {
|
|
48
|
-
const {
|
|
49
|
-
|
|
50
|
-
const
|
|
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
|
-
const
|
|
84
|
-
span.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
span.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
span.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
//
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
span.setAttribute('llm.
|
|
176
|
-
span.setAttribute('llm.
|
|
177
|
-
span.setAttribute('llm.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
###
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
-
|
|
201
|
-
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
###
|
|
213
|
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Data & Telemetry Expert (OpenTelemetry 1.x / ClickHouse 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
|
+
Expert guide for production observability, product analytics, and data pipelines. Covers **OpenTelemetry 1.x** (stable, vendor-neutral traces/metrics/logs), **PostHog** (open-source product analytics), **ClickHouse** (OLAP analytics database), Grafana stack, and AI agent observability patterns.
|
|
21
|
+
|
|
22
|
+
### Trigger Conditions
|
|
23
|
+
- Adding distributed tracing to a microservice or Next.js application.
|
|
24
|
+
- Setting up structured logging and metrics collection.
|
|
25
|
+
- Implementing product analytics (funnel analysis, feature flags, session replay).
|
|
26
|
+
- Building a high-performance analytics pipeline with ClickHouse.
|
|
27
|
+
- Monitoring AI agent runs, LLM token costs, and response quality.
|
|
28
|
+
|
|
29
|
+
### OpenTelemetry 1.x — Vendor-Neutral Observability
|
|
30
|
+
|
|
31
|
+
OpenTelemetry (OTel) is the CNCF standard for generating traces, metrics, and logs from any application.
|
|
32
|
+
|
|
33
|
+
#### Three Pillars of OTel
|
|
34
|
+
|
|
35
|
+
| Signal | What It Captures | Example |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| **Traces** | Request flow across services | `GET /api/users` → DB query → cache |
|
|
38
|
+
| **Metrics** | Numeric measurements over time | `http_requests_total`, `db_query_duration` |
|
|
39
|
+
| **Logs** | Structured event records | `{"level":"error","msg":"DB timeout"}` |
|
|
40
|
+
|
|
41
|
+
#### Next.js 15 + OTel Instrumentation
|
|
42
|
+
```typescript
|
|
43
|
+
// instrumentation.ts (Next.js built-in OTel support)
|
|
44
|
+
export async function register() {
|
|
45
|
+
if (process.env.NEXT_RUNTIME === 'nodejs') {
|
|
46
|
+
const { NodeSDK } = await import('@opentelemetry/sdk-node');
|
|
47
|
+
const { OTLPTraceExporter } = await import('@opentelemetry/exporter-trace-otlp-http');
|
|
48
|
+
const { OTLPMetricExporter } = await import('@opentelemetry/exporter-metrics-otlp-http');
|
|
49
|
+
const { PeriodicExportingMetricReader } = await import('@opentelemetry/sdk-metrics');
|
|
50
|
+
const { Resource } = await import('@opentelemetry/resources');
|
|
51
|
+
const { SEMRESATTRS_SERVICE_NAME } = await import('@opentelemetry/semantic-conventions');
|
|
52
|
+
|
|
53
|
+
const sdk = new NodeSDK({
|
|
54
|
+
resource: new Resource({
|
|
55
|
+
[SEMRESATTRS_SERVICE_NAME]: 'my-saas-app',
|
|
56
|
+
}),
|
|
57
|
+
traceExporter: new OTLPTraceExporter({
|
|
58
|
+
url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
|
|
59
|
+
}),
|
|
60
|
+
metricReader: new PeriodicExportingMetricReader({
|
|
61
|
+
exporter: new OTLPMetricExporter(),
|
|
62
|
+
exportIntervalMillis: 30_000,
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
sdk.start();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Custom Spans for Business Logic
|
|
72
|
+
```typescript
|
|
73
|
+
import { trace, SpanStatusCode } from '@opentelemetry/api';
|
|
74
|
+
|
|
75
|
+
const tracer = trace.getTracer('my-service', '1.0.0');
|
|
76
|
+
|
|
77
|
+
async function processOrder(orderId: string) {
|
|
78
|
+
return tracer.startActiveSpan('processOrder', async (span) => {
|
|
79
|
+
span.setAttribute('order.id', orderId);
|
|
80
|
+
span.setAttribute('order.source', 'api');
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
const order = await db.order.findUnique({ where: { id: orderId } });
|
|
84
|
+
span.setAttribute('order.amount', order.amount);
|
|
85
|
+
|
|
86
|
+
const result = await chargeCustomer(order);
|
|
87
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
88
|
+
return result;
|
|
89
|
+
} catch (error) {
|
|
90
|
+
span.recordException(error as Error);
|
|
91
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) });
|
|
92
|
+
throw error;
|
|
93
|
+
} finally {
|
|
94
|
+
span.end();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### ClickHouse — High-Performance Analytics Database
|
|
101
|
+
ClickHouse is the 2026 standard for analytical workloads — ingests billions of events and queries them in milliseconds:
|
|
102
|
+
|
|
103
|
+
```sql
|
|
104
|
+
-- Create an events table optimized for time-series analytics
|
|
105
|
+
CREATE TABLE events (
|
|
106
|
+
event_id UUID DEFAULT generateUUIDv4(),
|
|
107
|
+
workspace_id String,
|
|
108
|
+
user_id String,
|
|
109
|
+
event_name LowCardinality(String),
|
|
110
|
+
properties JSON,
|
|
111
|
+
timestamp DateTime64(3, 'UTC'),
|
|
112
|
+
date Date DEFAULT toDate(timestamp)
|
|
113
|
+
)
|
|
114
|
+
ENGINE = MergeTree()
|
|
115
|
+
PARTITION BY toYYYYMM(date)
|
|
116
|
+
ORDER BY (workspace_id, event_name, timestamp)
|
|
117
|
+
TTL date + INTERVAL 1 YEAR;
|
|
118
|
+
|
|
119
|
+
-- Query: Funnel analysis — users who signed up then upgraded
|
|
120
|
+
SELECT
|
|
121
|
+
countIf(event_name = 'signup') AS signups,
|
|
122
|
+
countIf(event_name = 'plan_upgraded') AS upgrades,
|
|
123
|
+
round(countIf(event_name = 'plan_upgraded') / countIf(event_name = 'signup') * 100, 2) AS conversion_rate
|
|
124
|
+
FROM events
|
|
125
|
+
WHERE workspace_id = 'ws_abc'
|
|
126
|
+
AND timestamp >= now() - INTERVAL 30 DAY;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// Node.js ClickHouse client
|
|
131
|
+
import { createClient } from '@clickhouse/client';
|
|
132
|
+
|
|
133
|
+
const client = createClient({ url: process.env.CLICKHOUSE_URL });
|
|
134
|
+
|
|
135
|
+
await client.insert({
|
|
136
|
+
table: 'events',
|
|
137
|
+
values: [{
|
|
138
|
+
workspace_id: 'ws_abc',
|
|
139
|
+
user_id: 'user_123',
|
|
140
|
+
event_name: 'page_view',
|
|
141
|
+
properties: { path: '/dashboard', referrer: 'google.com' },
|
|
142
|
+
timestamp: new Date().toISOString(),
|
|
143
|
+
}],
|
|
144
|
+
format: 'JSONEachRow',
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### PostHog — Open-Source Product Analytics
|
|
149
|
+
```typescript
|
|
150
|
+
// Next.js + PostHog (client-side)
|
|
151
|
+
import posthog from 'posthog-js';
|
|
152
|
+
|
|
153
|
+
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
|
|
154
|
+
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST ?? 'https://app.posthog.com',
|
|
155
|
+
capture_pageview: false, // Manual with App Router
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Track custom events
|
|
159
|
+
posthog.capture('feature_used', {
|
|
160
|
+
feature: 'ai_assistant',
|
|
161
|
+
plan: user.plan,
|
|
162
|
+
workspace_id: workspace.id,
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// Feature flags
|
|
166
|
+
if (posthog.isFeatureEnabled('new-dashboard')) {
|
|
167
|
+
return <NewDashboard />;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### AI Agent Observability
|
|
172
|
+
Track LLM costs, latency, and quality for production AI applications:
|
|
173
|
+
```typescript
|
|
174
|
+
// Custom OTel attributes for LLM calls
|
|
175
|
+
span.setAttribute('llm.model', 'claude-4-sonnet');
|
|
176
|
+
span.setAttribute('llm.input_tokens', response.usage.input_tokens);
|
|
177
|
+
span.setAttribute('llm.output_tokens', response.usage.output_tokens);
|
|
178
|
+
span.setAttribute('llm.cost_usd', calculateCost(response.usage));
|
|
179
|
+
span.setAttribute('llm.latency_ms', Date.now() - startTime);
|
|
180
|
+
span.setAttribute('llm.cached', response.usage.cache_read_input_tokens > 0);
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Backend tracing tools for LLM: **LangSmith** (LangChain/LangGraph), **OpenAI Tracing** (Agents SDK), **Langfuse** (open-source, any LLM).
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
<a name="bahasa-indonesia"></a>
|
|
188
|
+
## Bahasa Indonesia
|
|
189
|
+
|
|
190
|
+
### Integrasi Orkestrasi
|
|
191
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
192
|
+
|
|
193
|
+
### Deskripsi
|
|
194
|
+
Panduan ahli untuk observabilitas produksi, analitik produk, dan pipeline data. Mencakup **OpenTelemetry 1.x** (stabil, vendor-neutral traces/metrics/logs), **PostHog** (analitik produk open-source), **ClickHouse** (database analitik OLAP), dan pola observabilitas agen AI.
|
|
195
|
+
|
|
196
|
+
### Kondisi Pemicu
|
|
197
|
+
- Menambahkan distributed tracing ke microservice atau aplikasi Next.js.
|
|
198
|
+
- Menyiapkan structured logging dan pengumpulan metrik.
|
|
199
|
+
- Mengimplementasikan analitik produk (analisis funnel, feature flags, session replay).
|
|
200
|
+
- Membangun pipeline analitik berkinerja tinggi dengan ClickHouse.
|
|
201
|
+
- Memantau run agen AI, biaya token LLM, dan kualitas respons.
|
|
202
|
+
|
|
203
|
+
### OpenTelemetry 1.x — Observabilitas Vendor-Neutral
|
|
204
|
+
|
|
205
|
+
Tiga pilar OTel:
|
|
206
|
+
- **Traces**: Aliran permintaan antar layanan.
|
|
207
|
+
- **Metrics**: Pengukuran numerik dari waktu ke waktu.
|
|
208
|
+
- **Logs**: Catatan peristiwa terstruktur.
|
|
209
|
+
|
|
210
|
+
Integrasikan dengan Next.js 15 melalui file `instrumentation.ts` bawaan — OTel SDK otomatis mendistribusikan trace ke backend pilihan (Grafana Tempo, Jaeger, Honeycomb, Datadog, dll.).
|
|
211
|
+
|
|
212
|
+
### ClickHouse — Database Analitik Berkinerja Tinggi
|
|
213
|
+
ClickHouse adalah standar 2026 untuk workload analitik — menyerap miliaran event dan melakukan query dalam milidetik. Gunakan engine `MergeTree` dengan partisi per bulan dan pengurutan berdasarkan kolom yang sering di-filter.
|
|
214
|
+
|
|
215
|
+
### PostHog — Analitik Produk Open-Source
|
|
216
|
+
PostHog menyediakan analisis funnel, feature flags, session replay, dan A/B testing dalam satu platform yang dapat di-self-host. Integrasikan dengan Next.js App Router menggunakan `posthog-js`.
|
|
217
|
+
|
|
218
|
+
### Observabilitas Agen AI
|
|
219
|
+
Lacak biaya LLM, latensi, dan kualitas untuk aplikasi AI produksi menggunakan custom OTel attributes. Gunakan LangSmith, OpenAI Tracing, atau Langfuse (open-source) sebagai backend tracing LLM.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-visualization-expert
|
|
3
|
+
description: "Expert guide for data visualization, charts, and dashboards using D3.js, Recharts, Chart.js, Nivo, and Tremor / Panduan ahli visualisasi data, chart, dan dashboard menggunakan D3.js, Recharts, Chart.js, Nivo, dan Tremor."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Data Visualization 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
|
+
- **`senior-frontend`**: React component architecture for chart components.
|
|
18
|
+
- **`data-telemetry-expert`**: Analytics data pipelines feeding visualizations.
|
|
19
|
+
- **`state-management-expert`**: Managing chart state, filters, and drill-down navigation.
|
|
20
|
+
- **`performance-web-vitals`**: Optimizing chart rendering performance with large datasets.
|
|
21
|
+
- **`sse-websocket-streaming-expert`**: Real-time data feeds for live dashboards.
|
|
22
|
+
|
|
23
|
+
### Description
|
|
24
|
+
Expert guide for building production-quality data visualizations and analytics dashboards. Covers D3.js v7 (low-level SVG/Canvas), Recharts (React-native charts), Chart.js 4 (lightweight canvas), Nivo (D3-powered React components), Tremor (dashboard components), and Apache ECharts. Includes responsive charts, real-time updates, accessibility, large dataset optimization, and dashboard layout patterns.
|
|
25
|
+
|
|
26
|
+
### Trigger Conditions
|
|
27
|
+
- Building analytics dashboards or admin panels with charts.
|
|
28
|
+
- Creating data visualizations (line, bar, pie, scatter, heatmap, treemap).
|
|
29
|
+
- Implementing real-time updating charts or live data feeds.
|
|
30
|
+
- Choosing a charting library for React, Vue, or vanilla JS.
|
|
31
|
+
- Optimizing chart performance with large datasets (10K+ data points).
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### Library Selection Guide
|
|
36
|
+
|
|
37
|
+
| Library | Framework | Rendering | Customization | Learning Curve | Best For |
|
|
38
|
+
|---------|-----------|-----------|---------------|----------------|----------|
|
|
39
|
+
| D3.js v7 | Agnostic | SVG/Canvas | ★★★★★ | High | Custom visualizations |
|
|
40
|
+
| Recharts | React | SVG | ★★★★ | Low | Standard React charts |
|
|
41
|
+
| Nivo | React | SVG/Canvas | ★★★★★ | Medium | Beautiful, animated charts |
|
|
42
|
+
| Tremor | React | SVG (Recharts) | ★★★ | Very Low | Dashboards, KPI cards |
|
|
43
|
+
| Chart.js 4 | Agnostic | Canvas | ★★★ | Low | Lightweight, simple charts |
|
|
44
|
+
| ECharts | Agnostic | Canvas/SVG | ★★★★★ | Medium | Complex, interactive, large data |
|
|
45
|
+
|
|
46
|
+
**Recommendation:** Use **Tremor** for rapid dashboard prototyping. Use **Recharts** for standard React charts. Use **D3.js** only for highly custom visualizations.
|
|
47
|
+
|
|
48
|
+
### Core Patterns
|
|
49
|
+
|
|
50
|
+
#### 1. Recharts (React Standard)
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
|
|
54
|
+
|
|
55
|
+
function RevenueChart({ data }: { data: { date: string; revenue: number }[] }) {
|
|
56
|
+
return (
|
|
57
|
+
<ResponsiveContainer width="100%" height={400}>
|
|
58
|
+
<LineChart data={data}>
|
|
59
|
+
<CartesianGrid strokeDasharray="3 3" stroke="#374151" />
|
|
60
|
+
<XAxis dataKey="date" stroke="#9CA3AF" />
|
|
61
|
+
<YAxis stroke="#9CA3AF" tickFormatter={(v) => `$${(v / 1000).toFixed(0)}K`} />
|
|
62
|
+
<Tooltip
|
|
63
|
+
contentStyle={{ backgroundColor: '#1F2937', border: 'none', borderRadius: 8 }}
|
|
64
|
+
formatter={(value: number) => [`$${value.toLocaleString()}`, 'Revenue']}
|
|
65
|
+
/>
|
|
66
|
+
<Line type="monotone" dataKey="revenue" stroke="#8B5CF6" strokeWidth={2} dot={false} />
|
|
67
|
+
</LineChart>
|
|
68
|
+
</ResponsiveContainer>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### 2. Tremor Dashboard Components
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
import { Card, Metric, Text, AreaChart, BarList, Grid } from '@tremor/react';
|
|
77
|
+
|
|
78
|
+
function AnalyticsDashboard({ metrics, chartData, topPages }) {
|
|
79
|
+
return (
|
|
80
|
+
<Grid numItemsMd={2} numItemsLg={3} className="gap-6">
|
|
81
|
+
<Card>
|
|
82
|
+
<Text>Total Revenue</Text>
|
|
83
|
+
<Metric>$845,230</Metric>
|
|
84
|
+
</Card>
|
|
85
|
+
<Card>
|
|
86
|
+
<Text>Revenue Over Time</Text>
|
|
87
|
+
<AreaChart
|
|
88
|
+
data={chartData}
|
|
89
|
+
index="month"
|
|
90
|
+
categories={['Revenue', 'Expenses']}
|
|
91
|
+
colors={['violet', 'rose']}
|
|
92
|
+
valueFormatter={(v) => `$${(v / 1000).toFixed(0)}K`}
|
|
93
|
+
/>
|
|
94
|
+
</Card>
|
|
95
|
+
<Card>
|
|
96
|
+
<Text>Top Pages</Text>
|
|
97
|
+
<BarList data={topPages} className="mt-4" />
|
|
98
|
+
</Card>
|
|
99
|
+
</Grid>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### 3. Real-Time Chart Updates
|
|
105
|
+
|
|
106
|
+
```tsx
|
|
107
|
+
import { useEffect, useState } from 'react';
|
|
108
|
+
|
|
109
|
+
function LiveMetricsChart() {
|
|
110
|
+
const [data, setData] = useState<{ time: string; value: number }[]>([]);
|
|
111
|
+
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
const es = new EventSource('/api/metrics/stream');
|
|
114
|
+
es.onmessage = (event) => {
|
|
115
|
+
const point = JSON.parse(event.data);
|
|
116
|
+
setData((prev) => [...prev.slice(-60), point]); // Keep last 60 points
|
|
117
|
+
};
|
|
118
|
+
return () => es.close();
|
|
119
|
+
}, []);
|
|
120
|
+
|
|
121
|
+
return <LineChart data={data} /* ... */ />;
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### 4. Large Dataset Optimization
|
|
126
|
+
- Use **Canvas** rendering (ECharts, Chart.js) for >5K data points.
|
|
127
|
+
- Implement **data aggregation** on the server (downsample to 500-1000 points for display).
|
|
128
|
+
- Use **windowed rendering** — only render visible data points.
|
|
129
|
+
- Apply **debounced zoom/pan** to prevent excessive re-renders.
|
|
130
|
+
|
|
131
|
+
### Dashboard Layout Patterns
|
|
132
|
+
- **KPI Row → Charts → Tables**: Top metrics cards, then charts, then detail tables.
|
|
133
|
+
- **Filter Sidebar**: Global date range, category, and dimension filters.
|
|
134
|
+
- **Drill-down**: Click chart segment → navigate to detail view.
|
|
135
|
+
- **Export**: CSV/PNG/PDF export for all charts.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
<a name="bahasa-indonesia"></a>
|
|
140
|
+
## Bahasa Indonesia
|
|
141
|
+
|
|
142
|
+
### Integrasi Orkestrasi
|
|
143
|
+
- **`senior-frontend`**: Arsitektur komponen React untuk komponen chart.
|
|
144
|
+
- **`data-telemetry-expert`**: Pipeline data analitik yang mengisi visualisasi.
|
|
145
|
+
- **`state-management-expert`**: Mengelola state chart, filter, dan navigasi drill-down.
|
|
146
|
+
|
|
147
|
+
### Deskripsi
|
|
148
|
+
Panduan ahli untuk membangun visualisasi data dan dashboard analitik berkualitas produksi. Mencakup D3.js v7, Recharts, Chart.js 4, Nivo, Tremor, dan Apache ECharts. Termasuk chart responsif, update real-time, aksesibilitas, optimasi dataset besar, dan pola layout dashboard.
|
|
149
|
+
|
|
150
|
+
### Kondisi Pemicu
|
|
151
|
+
- Membangun dashboard analitik atau panel admin dengan chart.
|
|
152
|
+
- Membuat visualisasi data (line, bar, pie, scatter, heatmap, treemap).
|
|
153
|
+
- Mengimplementasikan chart yang update real-time atau feed data langsung.
|
|
154
|
+
- Memilih library charting untuk React, Vue, atau vanilla JS.
|