vibes-plug 1.0.0 → 2.5.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/.github/workflows/publish.yml +20 -0
- package/AGENTS.md +66 -0
- package/BLUEPRINT.md +152 -60
- package/CHANGELOG.md +50 -0
- package/README.md +346 -194
- package/package.json +25 -25
- package/plugin.json +1 -1
- package/skills/ai-cost-token-optimizer/SKILL.md +52 -0
- package/skills/ai-llm-integration-expert/SKILL.md +180 -162
- package/skills/api-design-expert/SKILL.md +314 -310
- package/skills/app-analyzer-optimizer/SKILL.md +193 -189
- package/skills/apple-ecosystem-expert/SKILL.md +142 -0
- package/skills/async-queue-temporal-expert/SKILL.md +54 -0
- package/skills/authentication-identity-expert/SKILL.md +251 -20
- package/skills/auto-doc-updater/SKILL.md +214 -204
- package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
- package/skills/autonomous-red-teamer/SKILL.md +59 -0
- package/skills/autonomous-swarm-director/SKILL.md +69 -0
- package/skills/autonomous-tdd-debugger/SKILL.md +65 -0
- package/skills/bootstrap-to-modern/SKILL.md +90 -86
- package/skills/brainstorming/SKILL.md +373 -353
- package/skills/browser-automation-expert/SKILL.md +46 -0
- package/skills/ci-cd-devops-architect/SKILL.md +72 -45
- package/skills/cloud-hosting-expert/SKILL.md +244 -244
- package/skills/coderabbit/SKILL.md +192 -192
- package/skills/cron-scheduler-expert/SKILL.md +298 -0
- package/skills/data-telemetry-expert/SKILL.md +213 -213
- package/skills/database-orm-expert/SKILL.md +294 -294
- package/skills/dependency-upgrade-migrator/SKILL.md +295 -0
- package/skills/design-system-architect/SKILL.md +27 -10
- package/skills/doku-mcp-server/SKILL.md +251 -0
- package/skills/doku-payment-gateway/SKILL.md +227 -0
- package/skills/e2e-testing-expert/SKILL.md +315 -315
- package/skills/edge-serverless-db-expert/SKILL.md +43 -0
- package/skills/email-notification-expert/SKILL.md +362 -0
- package/skills/error-resilience-expert/SKILL.md +480 -0
- package/skills/event-driven-architect/SKILL.md +81 -81
- package/skills/feature-flag-analytics-expert/SKILL.md +46 -0
- package/skills/file-upload-media-expert/SKILL.md +431 -0
- package/skills/form-validation-expert/SKILL.md +401 -0
- package/skills/fullstack-expert/SKILL.md +202 -202
- 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 +135 -135
- package/skills/global-a11y-i18n-expert/SKILL.md +81 -81
- package/skills/glsl-shader-expert/SKILL.md +101 -0
- package/skills/go-programming-expert/SKILL.md +295 -295
- package/skills/graphql-apollo-expert/SKILL.md +108 -0
- package/skills/hig/SKILL.md +188 -188
- package/skills/hyper-context-synthesizer/SKILL.md +55 -0
- package/skills/js-backend-expert/SKILL.md +34 -9
- package/skills/legacy-code-translator/SKILL.md +65 -0
- package/skills/llm-cost-arbitrage-router/SKILL.md +59 -0
- package/skills/logging-error-tracking-expert/SKILL.md +338 -0
- package/skills/mcp-client-orchestrator/SKILL.md +70 -0
- package/skills/mcp-server-architect/SKILL.md +194 -194
- package/skills/micro-frontend-architect/SKILL.md +106 -0
- package/skills/mobile-expo-expert/SKILL.md +186 -186
- package/skills/mobile-push-notification-expert/SKILL.md +51 -0
- package/skills/monday-design-aesthetic/SKILL.md +67 -67
- package/skills/monorepo-architect/SKILL.md +227 -227
- package/skills/mpa-orchestrator/SKILL.md +101 -101
- package/skills/multi-agent-orchestration/SKILL.md +234 -234
- package/skills/multiple-entry-points/SKILL.md +55 -55
- package/skills/mvc-expert/SKILL.md +231 -231
- package/skills/payment-gateway-expert/SKILL.md +45 -45
- package/skills/performance-web-vitals/SKILL.md +332 -332
- package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
- package/skills/prd-architect/SKILL.md +201 -191
- package/skills/proactive-background-watcher/SKILL.md +62 -0
- package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
- package/skills/production-ready-hardener/SKILL.md +173 -186
- 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 +79 -0
- package/skills/python-programming-expert/SKILL.md +263 -132
- package/skills/rate-limit-abuse-prevention/SKILL.md +371 -0
- package/skills/realtime-collaboration-expert/SKILL.md +45 -45
- package/skills/rust-programming-expert/SKILL.md +235 -235
- package/skills/saas-billing/SKILL.md +377 -377
- package/skills/saas-multi-tenant/SKILL.md +251 -237
- package/skills/saas-mvp-launcher/SKILL.md +10 -0
- package/skills/saas-transformer/SKILL.md +187 -144
- 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 +229 -229
- package/skills/self-evolving-memory-graph/SKILL.md +75 -0
- package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
- package/skills/senior-frontend/SKILL.md +161 -161
- package/skills/senior-fullstack/SKILL.md +167 -167
- package/skills/seo/SKILL.md +235 -225
- package/skills/seo-geo/SKILL.md +188 -188
- package/skills/session-context-loader/SKILL.md +77 -0
- package/skills/session-handoff-resume/SKILL.md +158 -158
- package/skills/skill_baru/SKILL.md +172 -147
- package/skills/spa-orchestrator/SKILL.md +288 -288
- package/skills/state-management-expert/SKILL.md +272 -272
- package/skills/supabase-security-expert/SKILL.md +243 -243
- package/skills/tailwind-expert/SKILL.md +188 -188
- package/skills/tanstack-query-expert/SKILL.md +199 -199
- package/skills/token-saver/SKILL.md +119 -111
- package/skills/typescript-expert/SKILL.md +324 -279
- package/skills/ui-components-expert/SKILL.md +263 -46
- package/skills/ui-ux-pro-max/SKILL.md +202 -201
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
- package/skills/ui_ux_expert/SKILL.md +17 -6
- package/skills/vector-db-rag-expert/SKILL.md +52 -0
- package/skills/vibe-code-gardener/SKILL.md +181 -173
- package/skills/visual-qa-vision-agent/SKILL.md +65 -0
- package/skills/vue-frontend-expert/SKILL.md +126 -0
- package/skills/web-3d-graphics-expert/SKILL.md +131 -0
- package/skills/web-game-engine-expert/SKILL.md +96 -0
- package/skills/web-scraper/SKILL.md +207 -205
- package/skills/website-design-cloner/SKILL.md +174 -0
- package/skills/webxr-ar-vr-expert/SKILL.md +117 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +206 -180
- package/skills/zero-trust-secret-vault/SKILL.md +40 -0
- package/vibes-swarm-demo.gif +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-3d-graphics-expert
|
|
3
|
+
description: "Expert guide for WebGL and 3D graphics in the browser using Three.js, Babylon.js, React Three Fiber (R3F), and TresJS. Covers scene optimization, shaders, lighting, 3D model loading (GLTF/GLB), and performance tuning."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web 3D Graphics Expert (Three.js & Babylon.js)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Production-level guidance for developing high-performance 3D graphics in the browser. Covers the raw APIs of **Three.js** and **Babylon.js**, as well as framework-specific wrappers like **React Three Fiber (R3F)** for React and **TresJS** for Vue. Focuses on rendering performance, efficient memory management, and realistic lighting/material setups.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
Activate this skill when the user is:
|
|
21
|
+
- Initializing a WebGL/WebGPU 3D scene.
|
|
22
|
+
- Using `three`, `@react-three/fiber`, `@babylonjs/core`, or `@tresjs/core`.
|
|
23
|
+
- Loading 3D models (`.glb`, `.gltf`, `.obj`).
|
|
24
|
+
- Adding advanced lighting, shadows, or Post-Processing effects (Bloom, Depth of Field).
|
|
25
|
+
- Asking about framerate drops, memory leaks, or rendering performance in 3D apps.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
### Core Concepts & Framework Selection
|
|
30
|
+
|
|
31
|
+
#### 1. React Three Fiber (R3F) vs Vanilla Three.js
|
|
32
|
+
When building with React, always use **React Three Fiber**. It manages the scene graph, object lifecycles, and `requestAnimationFrame` natively within the React component tree.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Canvas } from '@react-three/fiber'
|
|
36
|
+
import { OrbitControls, Environment, useGLTF } from '@react-three/drei'
|
|
37
|
+
|
|
38
|
+
export default function App() {
|
|
39
|
+
const { scene } = useGLTF('/model.glb')
|
|
40
|
+
return (
|
|
41
|
+
<Canvas camera={{ position: [0, 2, 5] }}>
|
|
42
|
+
<ambientLight intensity={0.5} />
|
|
43
|
+
<directionalLight position={[10, 10, 5]} castShadow />
|
|
44
|
+
<primitive object={scene} />
|
|
45
|
+
<Environment preset="city" />
|
|
46
|
+
<OrbitControls />
|
|
47
|
+
</Canvas>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
*Note: Always use `@react-three/drei` for common helpers (OrbitControls, Text, Environment).*
|
|
52
|
+
|
|
53
|
+
#### 2. Babylon.js vs Three.js
|
|
54
|
+
- **Three.js**: Lighter, more flexible, vast community, excellent for creative coding, landing page animations, and React/Vue integrations.
|
|
55
|
+
- **Babylon.js**: Robust, game-engine-like architecture, built-in physics, excellent for web-based games, AR/VR (WebXR), and complex interactive simulations. Fully written in TypeScript.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// Basic Babylon.js Setup
|
|
59
|
+
import { Engine, Scene, FreeCamera, Vector3, MeshBuilder, HemisphericLight } from '@babylonjs/core'
|
|
60
|
+
|
|
61
|
+
const canvas = document.getElementById('renderCanvas') as HTMLCanvasElement
|
|
62
|
+
const engine = new Engine(canvas, true)
|
|
63
|
+
const scene = new Scene(engine)
|
|
64
|
+
|
|
65
|
+
const camera = new FreeCamera('camera1', new Vector3(0, 5, -10), scene)
|
|
66
|
+
camera.setTarget(Vector3.Zero())
|
|
67
|
+
camera.attachControl(canvas, true)
|
|
68
|
+
|
|
69
|
+
const light = new HemisphericLight('light', new Vector3(0, 1, 0), scene)
|
|
70
|
+
const sphere = MeshBuilder.CreateSphere('sphere', { diameter: 2 }, scene)
|
|
71
|
+
|
|
72
|
+
engine.runRenderLoop(() => {
|
|
73
|
+
scene.render()
|
|
74
|
+
})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 3. Asset Loading & Optimization
|
|
78
|
+
- **Format:** ALWAYS use `.glb` or `.gltf`. Avoid `.obj` or `.fbx` in the browser as they are unoptimized.
|
|
79
|
+
- **Compression:** Use Draco compression (`glTF-Transform` or `gltf-pipeline`) to dramatically reduce file sizes.
|
|
80
|
+
- **Loading:** Preload models if they are critical to the first paint.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### Best Practices for Performance
|
|
85
|
+
|
|
86
|
+
1. **Geometry and Material Reuse:**
|
|
87
|
+
Never create new Geometries or Materials inside the render loop. Instantiate them once and reuse them. Use `InstancedMesh` (Three.js) or `Thin Instances` (Babylon.js) when rendering hundreds of identical objects.
|
|
88
|
+
2. **Memory Management (Disposing):**
|
|
89
|
+
WebGL does not automatically garbage collect textures and geometries. When an object is removed from the scene, you MUST call `.dispose()` on its geometry and material.
|
|
90
|
+
*(Note: R3F handles this automatically when components unmount).*
|
|
91
|
+
3. **Shadows & Lighting:**
|
|
92
|
+
Limit the number of shadow-casting lights to 1 or 2. Use baked shadows (lightmaps) for static scenes. Use `Environment` maps (HDRI) instead of multiple lights for realistic reflections.
|
|
93
|
+
4. **Post-Processing:**
|
|
94
|
+
Post-processing requires rendering the scene multiple times. Use it sparingly. Group passes together when possible.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### Integration with Other Skills (MANDATORY)
|
|
99
|
+
|
|
100
|
+
This skill works best when combined with:
|
|
101
|
+
- `senior-frontend` — When integrating React Three Fiber into Next.js/React applications.
|
|
102
|
+
- `vue-frontend-expert` — When integrating TresJS into Vue 3/Nuxt 3 applications.
|
|
103
|
+
- `performance-web-vitals` — To optimize the bundle size of 3D libraries and reduce Total Blocking Time (TBT).
|
|
104
|
+
|
|
105
|
+
### Referenced By Orchestrators (MANDATORY)
|
|
106
|
+
|
|
107
|
+
This skill should be referenced by the following orchestrators:
|
|
108
|
+
- `brainstorming` — Add to "UI/UX & Design Systems" or create a "3D & Graphics" category.
|
|
109
|
+
- `zero-to-prod-orchestrator` — Phase 5 (Frontend Implementation).
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
<a name="bahasa-indonesia"></a>
|
|
114
|
+
## Bahasa Indonesia
|
|
115
|
+
|
|
116
|
+
### Deskripsi
|
|
117
|
+
Panduan produksi untuk pengembangan grafis 3D performa tinggi di browser. Mencakup **Three.js** dan **Babylon.js**, serta integrasi framework seperti **React Three Fiber (R3F)** untuk React dan **TresJS** untuk Vue. Fokus pada performa render, manajemen memori, dan pencahayaan realistis.
|
|
118
|
+
|
|
119
|
+
### Kondisi Pemicu
|
|
120
|
+
Aktifkan skill ini ketika pengguna sedang:
|
|
121
|
+
- Menginisialisasi *scene* WebGL 3D.
|
|
122
|
+
- Menggunakan library `three`, `@react-three/fiber`, atau `@babylonjs/core`.
|
|
123
|
+
- Memuat model 3D (terutama format `.glb`/`.gltf`).
|
|
124
|
+
- Mengoptimalkan FPS (frame-rate) atau menangani masalah *memory leak* pada aplikasi 3D.
|
|
125
|
+
|
|
126
|
+
### Panduan Singkat
|
|
127
|
+
- **Pemilihan Alat:** Gunakan **React Three Fiber** jika menggunakan React. Gunakan **TresJS** jika menggunakan Vue. Gunakan **Babylon.js** jika membuat game berbasis web yang membutuhkan mesin fisika kuat (physics engine).
|
|
128
|
+
- **Format Aset:** Selalu gunakan format `.glb` dengan kompresi Draco.
|
|
129
|
+
- **Performa:** Jangan membuat *Geometry* atau *Material* baru di dalam *render loop* (`requestAnimationFrame`).
|
|
130
|
+
- **Manajemen Memori:** Panggil method `.dispose()` pada geometry, material, dan texture yang sudah tidak digunakan di vanilla Three.js/Babylon.js untuk mencegah kebocoran memori.
|
|
131
|
+
- **Pencahayaan:** Gunakan *Environment map* (HDRI) untuk pencahayaan realistis yang lebih ringan diproses daripada banyak lampu *directional/point*. Batasi lampu yang memancarkan bayangan maksimal 1-2 saja.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-game-engine-expert
|
|
3
|
+
description: "Expert guide for web-based game development. Covers Entity Component System (ECS) architectures, physics engines (Rapier, Havok, Cannon-es), collision detection, and game loop optimization."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web Game Engine Expert (Physics & ECS)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Production-grade guidance for building highly interactive 3D simulations and web games. Focuses on integrating modern WebAssembly-based **Physics Engines** (Havok, Rapier, Cannon-es) and structuring application state using the **Entity Component System (ECS)** pattern (e.g., bitECS, Miniplex).
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
Activate this skill when the user is:
|
|
21
|
+
- Adding physics (gravity, collisions, rigid bodies) to a 3D scene (Three.js/Babylon.js).
|
|
22
|
+
- Dealing with performance issues in web games with thousands of objects.
|
|
23
|
+
- Structuring a complex game or simulation architecture.
|
|
24
|
+
- Using `@dimforge/rapier3d`, `havok`, or `cannon-es`.
|
|
25
|
+
|
|
26
|
+
### Core Concepts
|
|
27
|
+
|
|
28
|
+
#### 1. Physics Engine Integration
|
|
29
|
+
Avoid calculating collisions manually in JavaScript. Use a dedicated physics engine.
|
|
30
|
+
- **Babylon.js + Havok:** Babylon.js natively supports Havok Physics (the same engine used in AAA titles like Zelda BotW).
|
|
31
|
+
- **Three.js / React Three Fiber + Rapier:** Use `@react-three/rapier` for seamless integration in R3F. It is written in Rust and compiled to WebAssembly.
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// React Three Fiber + Rapier Example
|
|
35
|
+
import { Physics, RigidBody } from '@react-three/rapier';
|
|
36
|
+
|
|
37
|
+
function GameScene() {
|
|
38
|
+
return (
|
|
39
|
+
<Physics gravity={[0, -9.81, 0]}>
|
|
40
|
+
{/* Falling Object */}
|
|
41
|
+
<RigidBody colliders="box" position={[0, 10, 0]}>
|
|
42
|
+
<mesh>
|
|
43
|
+
<boxGeometry />
|
|
44
|
+
<meshStandardMaterial color="hotpink" />
|
|
45
|
+
</mesh>
|
|
46
|
+
</RigidBody>
|
|
47
|
+
|
|
48
|
+
{/* Static Floor */}
|
|
49
|
+
<RigidBody type="fixed" colliders="cuboid">
|
|
50
|
+
<mesh position={[0, -1, 0]}>
|
|
51
|
+
<boxGeometry args={[10, 1, 10]} />
|
|
52
|
+
<meshStandardMaterial color="gray" />
|
|
53
|
+
</mesh>
|
|
54
|
+
</RigidBody>
|
|
55
|
+
</Physics>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### 2. Entity Component System (ECS)
|
|
61
|
+
Traditional Object-Oriented Programming (OOP) can cause performance bottlenecks in games due to poor cache locality. ECS stores data in contiguous memory arrays (Components) and processes them in tight loops (Systems).
|
|
62
|
+
- Use **bitECS** for extreme performance (uses TypedArrays).
|
|
63
|
+
- Use **Miniplex** for an easier, developer-friendly React integration.
|
|
64
|
+
|
|
65
|
+
### Best Practices
|
|
66
|
+
- **Decouple Logic from Rendering:** The physics engine should update at a fixed timestep (e.g., 60Hz), while rendering should happen at the screen's refresh rate (e.g., 144Hz) using interpolation to prevent stuttering.
|
|
67
|
+
- **Use Simple Colliders:** Never use complex mesh colliders (Convex/Trimesh) for moving objects unless absolutely necessary. Use primitives (Spheres, Boxes, Capsules).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### Integration with Other Skills (MANDATORY)
|
|
72
|
+
This skill works best when combined with:
|
|
73
|
+
- `web-3d-graphics-expert` — For the visual rendering of the physics world.
|
|
74
|
+
- `webxr-ar-vr-expert` — For adding grabbable physics objects in VR space.
|
|
75
|
+
- `realtime-collaboration-expert` — For synchronizing physics state across multiple players using WebRTC.
|
|
76
|
+
|
|
77
|
+
### Referenced By Orchestrators (MANDATORY)
|
|
78
|
+
- `brainstorming` — Add to "3D & Graphics" or "Game Development".
|
|
79
|
+
- `zero-to-prod-orchestrator` — Phase 5 (Frontend / Simulation).
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
<a name="bahasa-indonesia"></a>
|
|
84
|
+
## Bahasa Indonesia
|
|
85
|
+
|
|
86
|
+
### Deskripsi
|
|
87
|
+
Panduan pengembangan *game* dan simulasi 3D di web. Mencakup integrasi *Physics Engine* berbasis WebAssembly (Rapier, Havok, Cannon) dan arsitektur *Entity Component System* (ECS).
|
|
88
|
+
|
|
89
|
+
### Kondisi Pemicu
|
|
90
|
+
- Saat menambahkan gravitasi, tabrakan (collision), atau benda padat (rigid body) ke dalam aplikasi 3D.
|
|
91
|
+
- Saat membuat game web yang membutuhkan performa tinggi dengan ribuan entitas.
|
|
92
|
+
|
|
93
|
+
### Panduan Singkat
|
|
94
|
+
- **Pilih Mesin Fisika:** Gunakan **Havok** jika menggunakan Babylon.js. Gunakan **Rapier** (`@react-three/rapier`) jika menggunakan Three.js/R3F.
|
|
95
|
+
- **Gunakan Collider Sederhana:** Untuk objek bergerak, selalu gunakan *primitive colliders* (Kotak, Bola, Kapsul) alih-alih *mesh collider* agar perhitungan CPU/WASM tetap ringan.
|
|
96
|
+
- **Pola ECS (Entity Component System):** Untuk game kompleks, pisahkan logika dan data menggunakan arsitektur ECS (seperti `miniplex` atau `bitECS`) untuk memaksimalkan performa *cache* memori.
|
|
@@ -1,205 +1,207 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: web-scraper
|
|
3
|
-
description: "Smart web data extraction capability with multi-strategy scraping (Crawl4AI, Playwright, BeautifulSoup), LLM extraction, pagination support, and structured export / Kemampuan ekstraksi data web cerdas dengan strategi scraping modern (Crawl4AI, Playwright, BeautifulSoup), ekstraksi LLM, paginasi, dan ekspor terstruktur."
|
|
4
|
-
author: "Roedy Rustam"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Web Scraper Expert (2026 Edition)
|
|
8
|
-
|
|
9
|
-
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<a name="english"></a>
|
|
14
|
-
## English
|
|
15
|
-
|
|
16
|
-
### Description
|
|
17
|
-
Smart web data extraction using modern scraping strategies — **Firecrawl** (LLM-ready structured extraction), **Jina Reader API** (clean markdown from any URL), **Crawl4AI** (async Python scraping), **Playwright** (browser automation), and **BeautifulSoup** (lightweight HTML parsing). Supports pagination, dynamic content, structured export (JSON, CSV, Markdown), and AI-powered data extraction.
|
|
18
|
-
|
|
19
|
-
### Trigger Conditions
|
|
20
|
-
- Extracting structured data from websites for analysis, training data, or content pipelines.
|
|
21
|
-
- Scraping dynamic JavaScript-rendered pages (SPAs, React apps).
|
|
22
|
-
- Converting web pages to clean Markdown for LLM context or RAG pipelines.
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
| **
|
|
32
|
-
| **
|
|
33
|
-
| **
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Firecrawl
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
print(result.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
import
|
|
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
|
-
-
|
|
176
|
-
-
|
|
177
|
-
|
|
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
|
-
- [ ]
|
|
1
|
+
---
|
|
2
|
+
name: web-scraper
|
|
3
|
+
description: "Smart web data extraction capability with multi-strategy scraping (Crawl4AI, Playwright, BeautifulSoup), LLM extraction, pagination support, and structured export / Kemampuan ekstraksi data web cerdas dengan strategi scraping modern (Crawl4AI, Playwright, BeautifulSoup), ekstraksi LLM, paginasi, dan ekspor terstruktur."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Web Scraper Expert (2026 Edition)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Smart web data extraction using modern scraping strategies — **Firecrawl** (LLM-ready structured extraction), **Jina Reader API** (clean markdown from any URL), **Crawl4AI** (async Python scraping), **Playwright** (browser automation), and **BeautifulSoup** (lightweight HTML parsing). Supports pagination, dynamic content, structured export (JSON, CSV, Markdown), and AI-powered data extraction.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
- Extracting structured data from websites for analysis, training data, or content pipelines.
|
|
21
|
+
- Scraping dynamic JavaScript-rendered pages (SPAs, React apps).
|
|
22
|
+
- Converting web pages to clean Markdown for LLM context or RAG pipelines.
|
|
23
|
+
- Analyzing or cloning website UI design, templates, and components directly from a URL (Handoff to `website-design-cloner`).
|
|
24
|
+
- Building an automated data pipeline that scrapes, transforms, and stores data.
|
|
25
|
+
- Extracting data at scale with rate limiting and proxy rotation.
|
|
26
|
+
|
|
27
|
+
### Strategy Selection Guide
|
|
28
|
+
|
|
29
|
+
| Strategy | Tool | Best For | JS Required |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| **Managed API** | Firecrawl / Jina Reader | LLM-ready content, clean Markdown | Handled |
|
|
32
|
+
| **Async Python** | Crawl4AI | High-volume, AI-powered extraction | Optional |
|
|
33
|
+
| **Browser Automation** | Playwright | Complex SPAs, auth-required pages | ✅ |
|
|
34
|
+
| **Lightweight HTML** | BeautifulSoup + httpx | Static HTML, fast extraction | ❌ |
|
|
35
|
+
|
|
36
|
+
### Firecrawl — LLM-Ready Web Scraping (2026 Standard)
|
|
37
|
+
Firecrawl converts any URL to clean, LLM-ready Markdown with a single API call:
|
|
38
|
+
```python
|
|
39
|
+
from firecrawl import FirecrawlApp
|
|
40
|
+
|
|
41
|
+
app = FirecrawlApp(api_key="fc-xxxx")
|
|
42
|
+
|
|
43
|
+
# Single page — clean Markdown
|
|
44
|
+
result = app.scrape_url(
|
|
45
|
+
"https://example.com/article",
|
|
46
|
+
formats=["markdown", "html"],
|
|
47
|
+
only_main_content=True, # removes nav, footer, ads
|
|
48
|
+
)
|
|
49
|
+
print(result.markdown)
|
|
50
|
+
|
|
51
|
+
# Full site crawl
|
|
52
|
+
crawl_result = app.crawl_url(
|
|
53
|
+
"https://docs.example.com",
|
|
54
|
+
limit=50,
|
|
55
|
+
scrape_options={"formats": ["markdown"]},
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# LLM-powered structured extraction with JSON schema
|
|
59
|
+
from pydantic import BaseModel
|
|
60
|
+
|
|
61
|
+
class ProductInfo(BaseModel):
|
|
62
|
+
name: str
|
|
63
|
+
price: float
|
|
64
|
+
description: str
|
|
65
|
+
in_stock: bool
|
|
66
|
+
|
|
67
|
+
result = app.scrape_url(
|
|
68
|
+
"https://shop.example.com/product/123",
|
|
69
|
+
formats=["extract"],
|
|
70
|
+
extract={"schema": ProductInfo.model_json_schema()},
|
|
71
|
+
)
|
|
72
|
+
product = ProductInfo(**result.extract)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Jina Reader API — Clean Markdown from Any URL
|
|
76
|
+
```python
|
|
77
|
+
import httpx
|
|
78
|
+
|
|
79
|
+
async def url_to_markdown(url: str) -> str:
|
|
80
|
+
"""Convert any URL to clean Markdown via Jina Reader API."""
|
|
81
|
+
async with httpx.AsyncClient() as client:
|
|
82
|
+
response = await client.get(
|
|
83
|
+
f"https://r.jina.ai/{url}",
|
|
84
|
+
headers={
|
|
85
|
+
"Accept": "application/json",
|
|
86
|
+
"X-Return-Format": "markdown",
|
|
87
|
+
"Authorization": f"Bearer {JINA_API_KEY}",
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
data = response.json()
|
|
91
|
+
return data["data"]["content"]
|
|
92
|
+
|
|
93
|
+
# Search and get results as Markdown
|
|
94
|
+
async def search_to_markdown(query: str) -> str:
|
|
95
|
+
async with httpx.AsyncClient() as client:
|
|
96
|
+
response = await client.get(
|
|
97
|
+
f"https://s.jina.ai/{query}",
|
|
98
|
+
headers={"Accept": "application/json"}
|
|
99
|
+
)
|
|
100
|
+
return response.json()["data"]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Crawl4AI — Async Python Web Scraper
|
|
104
|
+
```python
|
|
105
|
+
import asyncio
|
|
106
|
+
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
|
|
107
|
+
|
|
108
|
+
async def scrape_with_ai_extraction():
|
|
109
|
+
browser_config = BrowserConfig(headless=True, verbose=False)
|
|
110
|
+
|
|
111
|
+
async with AsyncWebCrawler(config=browser_config) as crawler:
|
|
112
|
+
result = await crawler.arun(
|
|
113
|
+
url="https://news.example.com",
|
|
114
|
+
config=CrawlerRunConfig(
|
|
115
|
+
cache_mode=CacheMode.ENABLED, # cache results
|
|
116
|
+
word_count_threshold=50, # skip short content
|
|
117
|
+
exclude_external_links=True,
|
|
118
|
+
remove_overlay_elements=True, # remove popups/modals
|
|
119
|
+
),
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
print(result.markdown.fit_markdown) # cleaned, AI-optimized Markdown
|
|
123
|
+
print(result.links) # extracted links
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Playwright — Complex Dynamic Pages
|
|
127
|
+
```python
|
|
128
|
+
from playwright.async_api import async_playwright
|
|
129
|
+
import asyncio
|
|
130
|
+
|
|
131
|
+
async def scrape_spa(url: str) -> dict:
|
|
132
|
+
async with async_playwright() as pw:
|
|
133
|
+
browser = await pw.chromium.launch(headless=True)
|
|
134
|
+
page = await browser.new_page()
|
|
135
|
+
|
|
136
|
+
# Block images/CSS to speed up
|
|
137
|
+
await page.route("**/*.{png,jpg,jpeg,gif,css,woff2}", lambda r: r.abort())
|
|
138
|
+
|
|
139
|
+
await page.goto(url, wait_until="networkidle")
|
|
140
|
+
|
|
141
|
+
# Wait for dynamic content
|
|
142
|
+
await page.wait_for_selector("[data-testid='product-list']")
|
|
143
|
+
|
|
144
|
+
# Extract structured data via JavaScript
|
|
145
|
+
products = await page.evaluate("""() => {
|
|
146
|
+
return Array.from(document.querySelectorAll('.product-card')).map(card => ({
|
|
147
|
+
name: card.querySelector('.product-name')?.textContent?.trim(),
|
|
148
|
+
price: card.querySelector('.price')?.textContent?.trim(),
|
|
149
|
+
}));
|
|
150
|
+
}""")
|
|
151
|
+
|
|
152
|
+
await browser.close()
|
|
153
|
+
return {"products": products, "url": url}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Ethical Scraping Checklist
|
|
157
|
+
- [ ] Check `robots.txt` and respect `Disallow` rules.
|
|
158
|
+
- [ ] Implement rate limiting — minimum 1-2 seconds between requests.
|
|
159
|
+
- [ ] Use descriptive `User-Agent` header with contact email.
|
|
160
|
+
- [ ] Cache results to avoid repeated requests.
|
|
161
|
+
- [ ] Prefer public APIs or official data feeds when available.
|
|
162
|
+
- [ ] Do not scrape personal/private data without consent.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
<a name="bahasa-indonesia"></a>
|
|
167
|
+
## Bahasa Indonesia
|
|
168
|
+
|
|
169
|
+
### Deskripsi
|
|
170
|
+
Ekstraksi data web yang cerdas menggunakan strategi scraping modern — **Firecrawl** (ekstraksi terstruktur siap-LLM), **Jina Reader API** (Markdown bersih dari URL manapun), **Crawl4AI** (scraping Python async), **Playwright** (otomasi browser), dan **BeautifulSoup** (parsing HTML ringan). Mendukung paginasi, konten dinamis, ekspor terstruktur, dan ekstraksi data bertenaga AI.
|
|
171
|
+
|
|
172
|
+
### Kondisi Pemicu
|
|
173
|
+
- Mengekstrak data terstruktur dari website untuk analisis, data pelatihan, atau pipeline konten.
|
|
174
|
+
- Scraping halaman yang dirender JavaScript secara dinamis (SPA, aplikasi React).
|
|
175
|
+
- Mengonversi halaman web menjadi Markdown bersih untuk konteks LLM atau pipeline RAG.
|
|
176
|
+
- Mempelajari atau menduplikasi desain UI, template, dan komponen situs web langsung dari URL (Delegasikan ke `website-design-cloner`).
|
|
177
|
+
- Membangun pipeline data otomatis yang melakukan scraping, transformasi, dan penyimpanan.
|
|
178
|
+
- Mengekstrak data dalam skala besar dengan rate limiting dan rotasi proxy.
|
|
179
|
+
|
|
180
|
+
### Panduan Pemilihan Strategi
|
|
181
|
+
|
|
182
|
+
| Strategi | Tool | Terbaik Untuk | Perlu JS |
|
|
183
|
+
|---|---|---|---|
|
|
184
|
+
| **API Terkelola** | Firecrawl / Jina Reader | Konten siap LLM, Markdown bersih | Ditangani |
|
|
185
|
+
| **Python Async** | Crawl4AI | Volume tinggi, ekstraksi AI | Opsional |
|
|
186
|
+
| **Otomasi Browser** | Playwright | SPA kompleks, halaman butuh auth | ✅ |
|
|
187
|
+
| **HTML Ringan** | BeautifulSoup + httpx | HTML statis, ekstraksi cepat | ❌ |
|
|
188
|
+
|
|
189
|
+
### Firecrawl — Scraping Web Siap LLM
|
|
190
|
+
Firecrawl mengonversi URL apapun menjadi Markdown bersih siap LLM dengan satu panggilan API. Mendukung crawling seluruh situs, ekstraksi terstruktur berbasis skema JSON, dan penghapusan konten yang tidak relevan (navigasi, footer, iklan).
|
|
191
|
+
|
|
192
|
+
### Jina Reader API — Markdown Bersih dari URL Manapun
|
|
193
|
+
Jina Reader (`r.jina.ai/{url}`) mengonversi halaman web manapun menjadi Markdown yang dioptimalkan untuk LLM. Jina Search (`s.jina.ai/{query}`) melakukan pencarian web dan mengembalikan hasilnya sebagai Markdown.
|
|
194
|
+
|
|
195
|
+
### Crawl4AI — Web Scraper Python Async
|
|
196
|
+
Crawl4AI mendukung caching hasil, ekstraksi Markdown yang dioptimalkan AI, dan konfigurasi browser yang fleksibel untuk scraping konten dinamis.
|
|
197
|
+
|
|
198
|
+
### Playwright — Halaman Dinamis Kompleks
|
|
199
|
+
Gunakan Playwright untuk scraping SPA yang memerlukan eksekusi JavaScript, menunggu elemen dinamis, atau interaksi dengan halaman (klik, scroll, isi form).
|
|
200
|
+
|
|
201
|
+
### Checklist Scraping Etis
|
|
202
|
+
- [ ] Periksa `robots.txt` dan hormati aturan `Disallow`.
|
|
203
|
+
- [ ] Implementasikan rate limiting — minimal 1-2 detik antar permintaan.
|
|
204
|
+
- [ ] Gunakan header `User-Agent` deskriptif dengan email kontak.
|
|
205
|
+
- [ ] Cache hasil untuk menghindari permintaan berulang.
|
|
206
|
+
- [ ] Utamakan API publik atau feed data resmi jika tersedia.
|
|
207
|
+
- [ ] Jangan scraping data pribadi/privat tanpa izin.
|