vibes-plug 1.0.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/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/BLUEPRINT.md +125 -0
- package/CHANGELOG.md +195 -0
- package/CONTRIBUTING.md +199 -0
- package/LICENSE +21 -0
- package/README.md +263 -0
- package/SECURITY.md +21 -0
- package/banner.png +0 -0
- package/package.json +25 -0
- package/plugin.json +8 -0
- package/scripts/update_skills.js +75 -0
- package/skills/ai-llm-integration-expert/SKILL.md +162 -0
- package/skills/api-design-expert/SKILL.md +310 -0
- package/skills/app-analyzer-optimizer/SKILL.md +189 -0
- package/skills/asisten_ramah/SKILL.md +41 -0
- package/skills/authentication-identity-expert/SKILL.md +45 -0
- package/skills/auto-doc-updater/SKILL.md +204 -0
- package/skills/bootstrap-to-modern/SKILL.md +87 -0
- package/skills/brainstorming/SKILL.md +353 -0
- package/skills/bun-runtime-expert/SKILL.md +211 -0
- package/skills/ci-cd-devops-architect/SKILL.md +45 -0
- package/skills/cloud-hosting-expert/SKILL.md +244 -0
- package/skills/coderabbit/SKILL.md +192 -0
- package/skills/data-telemetry-expert/SKILL.md +213 -0
- package/skills/database-orm-expert/SKILL.md +294 -0
- package/skills/design-system-architect/SKILL.md +243 -0
- package/skills/e2e-testing-expert/SKILL.md +315 -0
- package/skills/event-driven-architect/SKILL.md +81 -0
- package/skills/firebase-security-expert/SKILL.md +195 -0
- package/skills/fullstack-expert/SKILL.md +202 -0
- package/skills/fullstack-expert/references/api_design_guide.md +466 -0
- package/skills/fullstack-expert/references/devops_infrastructure.md +477 -0
- package/skills/fullstack-expert/references/multi_language_backend.md +528 -0
- package/skills/fullstack-expert/references/system_design_patterns.md +358 -0
- package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -0
- package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -0
- package/skills/gemini-agent-booster/SKILL.md +135 -0
- package/skills/global-a11y-i18n-expert/SKILL.md +81 -0
- package/skills/go-programming-expert/SKILL.md +295 -0
- package/skills/hig/SKILL.md +188 -0
- package/skills/js-backend-expert/SKILL.md +192 -0
- package/skills/mcp-server-architect/SKILL.md +194 -0
- package/skills/mobile-expo-expert/SKILL.md +186 -0
- package/skills/monday-design-aesthetic/SKILL.md +67 -0
- package/skills/monorepo-architect/SKILL.md +227 -0
- package/skills/mpa-orchestrator/SKILL.md +101 -0
- package/skills/multi-agent-orchestration/SKILL.md +234 -0
- package/skills/multiple-entry-points/SKILL.md +55 -0
- package/skills/mvc-expert/SKILL.md +231 -0
- package/skills/payment-gateway-expert/SKILL.md +45 -0
- package/skills/performance-web-vitals/SKILL.md +332 -0
- package/skills/prd-architect/SKILL.md +191 -0
- package/skills/production-ready-hardener/SKILL.md +469 -0
- package/skills/production-ready-hardener/references/performance_optimization.md +441 -0
- package/skills/production-ready-hardener/references/production_checklist.md +161 -0
- package/skills/production-ready-hardener/references/security_hardening_guide.md +379 -0
- package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +875 -0
- package/skills/python-programming-expert/SKILL.md +271 -0
- package/skills/realtime-collaboration-expert/SKILL.md +45 -0
- package/skills/rust-programming-expert/SKILL.md +235 -0
- package/skills/saas-billing/SKILL.md +377 -0
- package/skills/saas-multi-tenant/SKILL.md +237 -0
- package/skills/saas-mvp-launcher/SKILL.md +231 -0
- package/skills/saas-transformer/SKILL.md +446 -0
- package/skills/saas-transformer/references/billing_integration_guide.md +401 -0
- package/skills/saas-transformer/references/feature_gating_patterns.md +137 -0
- package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -0
- package/skills/saas-transformer/scripts/saas_transformation_scanner.py +254 -0
- package/skills/scalability-clean-code/SKILL.md +229 -0
- package/skills/secure-fuzz-testing/SKILL.md +201 -0
- package/skills/senior-frontend/SKILL.md +161 -0
- package/skills/senior-frontend/references/frontend_best_practices.md +806 -0
- package/skills/senior-frontend/references/nextjs_optimization_guide.md +724 -0
- package/skills/senior-frontend/references/react_patterns.md +746 -0
- package/skills/senior-frontend/scripts/bundle_analyzer.py +407 -0
- package/skills/senior-frontend/scripts/component_generator.py +329 -0
- package/skills/senior-frontend/scripts/frontend_scaffolder.py +1005 -0
- package/skills/senior-fullstack/SKILL.md +167 -0
- package/skills/senior-fullstack/references/architecture_patterns.md +160 -0
- package/skills/senior-fullstack/references/development_workflows.md +222 -0
- package/skills/senior-fullstack/references/tech_stack_guide.md +190 -0
- package/skills/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
- package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
- package/skills/senior-fullstack/scripts/project_scaffolder.py +114 -0
- package/skills/seo/SKILL.md +225 -0
- package/skills/seo/references/cwv-thresholds.md +108 -0
- package/skills/seo/references/eeat-framework.md +214 -0
- package/skills/seo/references/quality-gates.md +155 -0
- package/skills/seo/references/schema-types.md +118 -0
- package/skills/seo-aeo-landing-page-writer/SKILL.md +97 -0
- package/skills/seo-geo/SKILL.md +188 -0
- package/skills/session-handoff-resume/SKILL.md +158 -0
- package/skills/skill_baru/SKILL.md +147 -0
- package/skills/spa-orchestrator/SKILL.md +288 -0
- package/skills/state-management-expert/SKILL.md +272 -0
- package/skills/supabase-migration/SKILL.md +45 -0
- package/skills/supabase-security-expert/SKILL.md +243 -0
- package/skills/tailwind-expert/SKILL.md +188 -0
- package/skills/tanstack-query-expert/SKILL.md +199 -0
- package/skills/tauri-expert/SKILL.md +97 -0
- package/skills/token-saver/SKILL.md +111 -0
- package/skills/typescript-expert/SKILL.md +279 -0
- package/skills/ui-components-expert/SKILL.md +63 -0
- package/skills/ui-ux-pro-max/SKILL.md +201 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- 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-pro-max/scripts/core.py +257 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +493 -0
- package/skills/ui-ux-pro-max/scripts/search.py +81 -0
- package/skills/ui_ux_expert/SKILL.md +114 -0
- package/skills/vibe-code-gardener/SKILL.md +173 -0
- package/skills/web-scraper/SKILL.md +205 -0
- package/skills/web-scraper/references/data-transforms.md +397 -0
- package/skills/web-scraper/references/extraction-patterns.md +475 -0
- package/skills/web-scraper/references/output-templates.md +481 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +180 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mcp-server-architect
|
|
3
|
+
description: "Expert guide for designing, building, and security-hardening Model Context Protocol (MCP) servers and tool integrations in TypeScript, Python, and Go / Panduan ahli merancang, membangun, dan mengamankan server Model Context Protocol (MCP) dan integrasi tool dalam TypeScript, Python, dan Go."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# MCP Server Architect (v1.9+ Edition)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Expert guide for designing, building, and security-hardening **Model Context Protocol (MCP)** servers and client integrations. Covers MCP v1.9+ specification (including the new Streamable HTTP transport), tool/resource/prompt design, Zod validation, OAuth 2.1 authorization, and multi-server orchestration patterns for production AI applications.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
- Building an MCP server to expose tools, resources, or prompt templates to AI agents.
|
|
21
|
+
- Integrating third-party APIs or databases as MCP tools for LLM consumption.
|
|
22
|
+
- Implementing MCP client logic in an AI agent or chatbot.
|
|
23
|
+
- Securing MCP servers with OAuth 2.1 and permission scoping.
|
|
24
|
+
- Deploying MCP servers to edge/serverless environments.
|
|
25
|
+
|
|
26
|
+
### MCP v1.9+ Specification Overview
|
|
27
|
+
|
|
28
|
+
MCP standardizes how AI models interact with external tools and data. The 2026 specification (v1.9) introduces:
|
|
29
|
+
|
|
30
|
+
| Feature | Description |
|
|
31
|
+
|---|---|
|
|
32
|
+
| **Streamable HTTP** | New bidirectional transport via HTTP streaming — replaces SSE for cloud deployments |
|
|
33
|
+
| **stdio** | Original transport for local/CLI tools — still recommended for local MCP |
|
|
34
|
+
| **OAuth 2.1** | Standard authorization flow for MCP servers requiring user consent |
|
|
35
|
+
| **Tool Annotations** | `readOnlyHint`, `destructiveHint`, `idempotentHint` for safer agent decisions |
|
|
36
|
+
| **Audio Content** | Support for audio data in tool responses |
|
|
37
|
+
| **Resource Links** | Resources can now link to external URIs |
|
|
38
|
+
|
|
39
|
+
### Core MCP Concepts
|
|
40
|
+
|
|
41
|
+
| Primitive | What It Is | Example |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| **Tool** | Executable function the LLM can call | `search_database`, `send_email` |
|
|
44
|
+
| **Resource** | Read-only data the LLM can read | File contents, DB records |
|
|
45
|
+
| **Prompt** | Reusable prompt templates | `code_review_prompt` |
|
|
46
|
+
| **Sampling** | Server requests LLM completion | Agent asks LLM to classify |
|
|
47
|
+
|
|
48
|
+
### Building an MCP Server (TypeScript)
|
|
49
|
+
|
|
50
|
+
#### 1. Setup with `@modelcontextprotocol/sdk`
|
|
51
|
+
```typescript
|
|
52
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
53
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
54
|
+
import { z } from 'zod';
|
|
55
|
+
|
|
56
|
+
const server = new McpServer({
|
|
57
|
+
name: 'my-api-server',
|
|
58
|
+
version: '1.0.0',
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### 2. Define Tools with Zod Validation
|
|
63
|
+
```typescript
|
|
64
|
+
server.tool(
|
|
65
|
+
'search_products',
|
|
66
|
+
'Search the product catalog by query and category',
|
|
67
|
+
{
|
|
68
|
+
query: z.string().min(1).describe('Search query string'),
|
|
69
|
+
category: z.enum(['electronics', 'clothing', 'books']).optional(),
|
|
70
|
+
limit: z.number().int().min(1).max(50).default(10),
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
readOnlyHint: true, // v1.9 annotation: this tool does not modify state
|
|
74
|
+
idempotentHint: true, // safe to call multiple times
|
|
75
|
+
},
|
|
76
|
+
async ({ query, category, limit }) => {
|
|
77
|
+
const results = await productDB.search({ query, category, limit });
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### 3. Expose Resources
|
|
86
|
+
```typescript
|
|
87
|
+
server.resource(
|
|
88
|
+
'company-docs',
|
|
89
|
+
'docs://{path}',
|
|
90
|
+
{ mimeType: 'text/markdown' },
|
|
91
|
+
async (uri) => {
|
|
92
|
+
const path = uri.pathname;
|
|
93
|
+
const content = await fs.readFile(`./docs${path}`, 'utf-8');
|
|
94
|
+
return { contents: [{ uri: uri.href, mimeType: 'text/markdown', text: content }] };
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### 4. Streamable HTTP Transport (v1.9 — Production Deployment)
|
|
100
|
+
```typescript
|
|
101
|
+
import express from 'express';
|
|
102
|
+
|
|
103
|
+
const app = express();
|
|
104
|
+
app.use(express.json());
|
|
105
|
+
|
|
106
|
+
app.all('/mcp', async (req, res) => {
|
|
107
|
+
const transport = new StreamableHTTPServerTransport({
|
|
108
|
+
sessionIdGenerator: () => crypto.randomUUID(),
|
|
109
|
+
});
|
|
110
|
+
await server.connect(transport);
|
|
111
|
+
await transport.handleRequest(req, res, req.body);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
app.listen(3000, () => console.log('MCP Server running on :3000'));
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### 5. OAuth 2.1 Authorization (Secure MCP)
|
|
118
|
+
For MCP servers requiring user consent (e.g., accessing user's GitHub repos):
|
|
119
|
+
```typescript
|
|
120
|
+
import { ProxyOAuthServerProvider } from '@modelcontextprotocol/sdk/server/auth/providers/proxyOAuth.js';
|
|
121
|
+
|
|
122
|
+
const authProvider = new ProxyOAuthServerProvider({
|
|
123
|
+
endpoints: {
|
|
124
|
+
authorizationUrl: 'https://github.com/login/oauth/authorize',
|
|
125
|
+
tokenUrl: 'https://github.com/login/oauth/access_token',
|
|
126
|
+
},
|
|
127
|
+
clientId: process.env.GITHUB_CLIENT_ID!,
|
|
128
|
+
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
129
|
+
scopes: ['repo', 'read:user'],
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
server.setAuthProvider(authProvider);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Security Hardening
|
|
136
|
+
|
|
137
|
+
- **Validate ALL inputs**: Every tool parameter must be validated with Zod before execution. Never trust LLM-generated inputs directly.
|
|
138
|
+
- **Principle of Least Privilege**: Each tool should only request the minimum permissions needed.
|
|
139
|
+
- **Rate Limiting**: Implement per-session rate limits to prevent prompt injection loops.
|
|
140
|
+
- **Sanitize Outputs**: Never return raw database records with sensitive fields (passwords, API keys). Always filter/select only what's needed.
|
|
141
|
+
- **Audit Logging**: Log every tool call with session ID, tool name, parameters, and result status.
|
|
142
|
+
- **Tool Annotations**: Use `destructiveHint: true` for tools that modify or delete data — agents should ask for human confirmation before calling these.
|
|
143
|
+
|
|
144
|
+
### Multi-Server Orchestration
|
|
145
|
+
When building AI apps with multiple MCP servers:
|
|
146
|
+
```typescript
|
|
147
|
+
// Client connecting to multiple MCP servers
|
|
148
|
+
const client = new McpClient({ name: 'my-agent', version: '1.0.0' });
|
|
149
|
+
|
|
150
|
+
// Connect to multiple specialized servers
|
|
151
|
+
await client.connect(new StdioTransport({ command: 'node', args: ['file-server.js'] }));
|
|
152
|
+
await client.connect(new StreamableHTTPTransport({ url: 'https://api.mydb.com/mcp' }));
|
|
153
|
+
|
|
154
|
+
// List all available tools across servers
|
|
155
|
+
const { tools } = await client.listTools();
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
<a name="bahasa-indonesia"></a>
|
|
161
|
+
## Bahasa Indonesia
|
|
162
|
+
|
|
163
|
+
### Deskripsi
|
|
164
|
+
Panduan ahli untuk merancang, membangun, dan mengamankan server **Model Context Protocol (MCP)** dan integrasi klien. Mencakup spesifikasi MCP v1.9+ (termasuk transport Streamable HTTP baru), desain tool/resource/prompt, validasi Zod, otorisasi OAuth 2.1, dan pola orkestrasi multi-server untuk aplikasi AI produksi.
|
|
165
|
+
|
|
166
|
+
### Kondisi Pemicu
|
|
167
|
+
- Membangun MCP server untuk mengekspos tool, resource, atau prompt template ke agen AI.
|
|
168
|
+
- Mengintegrasikan API pihak ketiga atau database sebagai MCP tool untuk konsumsi LLM.
|
|
169
|
+
- Mengimplementasikan logika klien MCP dalam agen AI atau chatbot.
|
|
170
|
+
- Mengamankan MCP server dengan OAuth 2.1 dan pembatasan izin.
|
|
171
|
+
- Men-deploy MCP server ke lingkungan edge/serverless.
|
|
172
|
+
|
|
173
|
+
### Ringkasan Spesifikasi MCP v1.9+
|
|
174
|
+
|
|
175
|
+
MCP menstandarisasi cara model AI berinteraksi dengan tool dan data eksternal. Spesifikasi 2026 (v1.9) memperkenalkan:
|
|
176
|
+
- **Streamable HTTP**: Transport dua arah baru via HTTP streaming — menggantikan SSE untuk deployment cloud.
|
|
177
|
+
- **Tool Annotations**: `readOnlyHint`, `destructiveHint`, `idempotentHint` untuk keputusan agen yang lebih aman.
|
|
178
|
+
- **OAuth 2.1**: Alur otorisasi standar untuk MCP server yang memerlukan izin pengguna.
|
|
179
|
+
|
|
180
|
+
### Membangun MCP Server (TypeScript)
|
|
181
|
+
|
|
182
|
+
Gunakan `@modelcontextprotocol/sdk` untuk TypeScript. Definisikan tool dengan validasi Zod yang ketat, tambahkan anotasi v1.9 (`readOnlyHint`, `destructiveHint`), dan gunakan Streamable HTTP transport untuk deployment cloud produksi.
|
|
183
|
+
|
|
184
|
+
### Keamanan MCP
|
|
185
|
+
|
|
186
|
+
- **Validasi SEMUA input**: Setiap parameter tool harus divalidasi dengan Zod sebelum eksekusi.
|
|
187
|
+
- **Prinsip Least Privilege**: Setiap tool hanya boleh meminta izin minimum yang diperlukan.
|
|
188
|
+
- **Rate Limiting**: Batasi panggilan per sesi untuk mencegah loop prompt injection.
|
|
189
|
+
- **Sanitasi Output**: Jangan pernah mengembalikan field sensitif (password, API key).
|
|
190
|
+
- **Audit Logging**: Catat setiap panggilan tool dengan session ID, nama tool, parameter, dan status hasil.
|
|
191
|
+
- **Anotasi Tool**: Gunakan `destructiveHint: true` untuk tool yang memodifikasi/menghapus data — agen harus meminta konfirmasi manusia sebelum memanggilnya.
|
|
192
|
+
|
|
193
|
+
### Orkestrasi Multi-Server
|
|
194
|
+
Klien MCP dapat terhubung ke beberapa server sekaligus, menyatukan semua tool dari server yang berbeda menjadi satu daftar yang tersedia untuk agen.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-expo-expert
|
|
3
|
+
description: "Expert guide for React Native 0.76+ and Expo SDK 52+ development. Covers cross-platform mobile architecture, Expo Router v4, New Architecture, OTA updates, and native modules / Panduan ahli pengembangan React Native 0.76+ dan Expo SDK 52+ untuk aplikasi mobile."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mobile Expert — React Native & Expo (SDK 53 / RN 0.79 Edition)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Expert guide for building production-grade cross-platform mobile applications using **React Native 0.79+** and **Expo SDK 53+**. Covers the New Architecture (stable), Expo Router v4, OTA updates, native modules, and modern state management patterns for iOS and Android.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
- Building a new iOS/Android cross-platform mobile app.
|
|
21
|
+
- Using Expo SDK 53+ or React Native 0.79+ with the New Architecture.
|
|
22
|
+
- Implementing file-based routing with **Expo Router v4**.
|
|
23
|
+
- Setting up OTA (Over-the-Air) updates with EAS Update.
|
|
24
|
+
- Writing native modules using **JSI** (JavaScript Interface) or **Expo Modules API**.
|
|
25
|
+
- Integrating device features: camera, biometrics, notifications, location.
|
|
26
|
+
|
|
27
|
+
### What's New in 2026
|
|
28
|
+
|
|
29
|
+
#### React Native 0.79 — New Architecture Stable
|
|
30
|
+
The **New Architecture** (Fabric + JSI + TurboModules) is now **fully stable** and the default for all new Expo SDK 53 projects:
|
|
31
|
+
- **Fabric**: New rendering engine — synchronous rendering, better animations.
|
|
32
|
+
- **JSI (JavaScript Interface)**: Direct C++ bridge — no more async serialization for native calls.
|
|
33
|
+
- **TurboModules**: Lazy-loaded native modules — significantly faster startup time.
|
|
34
|
+
- **Concurrent React**: Full support for `useTransition`, `useDeferredValue`, and Suspense on mobile.
|
|
35
|
+
|
|
36
|
+
#### Expo SDK 53 — Key Updates
|
|
37
|
+
- **Expo Router v4**: File-based routing with typed routes, API routes (Expo functions), and universal links.
|
|
38
|
+
- **Expo Camera v15**: Unified camera API for iOS and Android.
|
|
39
|
+
- **Expo SQLite v15**: Full SQLite with WAL mode and `useSQLiteContext` hook.
|
|
40
|
+
- **Expo Modules API v2**: Easier native module authoring with Swift/Kotlin.
|
|
41
|
+
- **EAS Build**: Faster builds with M-series Mac runners.
|
|
42
|
+
|
|
43
|
+
### Core Architecture Patterns
|
|
44
|
+
|
|
45
|
+
#### 1. Project Setup (Expo SDK 53 + New Arch)
|
|
46
|
+
```bash
|
|
47
|
+
npx create-expo-app@latest MyApp --template tabs
|
|
48
|
+
cd MyApp
|
|
49
|
+
# New Architecture is enabled by default in SDK 53
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### 2. Expo Router v4 — File-Based Routing
|
|
53
|
+
```
|
|
54
|
+
app/
|
|
55
|
+
_layout.tsx # Root layout (navigation + providers)
|
|
56
|
+
(tabs)/
|
|
57
|
+
_layout.tsx # Tab navigator
|
|
58
|
+
index.tsx # Home tab
|
|
59
|
+
profile.tsx # Profile tab
|
|
60
|
+
(auth)/
|
|
61
|
+
login.tsx # Login screen
|
|
62
|
+
register.tsx
|
|
63
|
+
modal.tsx # Modal screen
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Use **typed routes** for compile-time safety:
|
|
67
|
+
```typescript
|
|
68
|
+
import { Link, useRouter } from 'expo-router';
|
|
69
|
+
|
|
70
|
+
// Typed navigation — TypeScript errors on invalid paths
|
|
71
|
+
<Link href="/profile">Profile</Link>
|
|
72
|
+
|
|
73
|
+
const router = useRouter();
|
|
74
|
+
router.push('/modal');
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 3. API Routes (Expo Functions)
|
|
78
|
+
Expo Router v4 supports API routes for serverless backend logic:
|
|
79
|
+
```typescript
|
|
80
|
+
// app/api/user+api.ts
|
|
81
|
+
export async function GET(request: Request) {
|
|
82
|
+
const user = await db.user.findFirst();
|
|
83
|
+
return Response.json(user);
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### 4. State Management
|
|
88
|
+
- **TanStack Query v5**: Primary choice for server state (`useQuery`, `useMutation`).
|
|
89
|
+
- **Zustand**: Lightweight client state management (replace Context for complex state).
|
|
90
|
+
- **MMKV**: Ultra-fast synchronous storage (replace AsyncStorage).
|
|
91
|
+
- **Expo SQLite + Drizzle**: Local-first database with full SQL support.
|
|
92
|
+
|
|
93
|
+
#### 5. Navigation Patterns
|
|
94
|
+
```typescript
|
|
95
|
+
// Deep linking & Universal Links configuration
|
|
96
|
+
// app.json
|
|
97
|
+
{
|
|
98
|
+
"expo": {
|
|
99
|
+
"scheme": "myapp",
|
|
100
|
+
"ios": { "associatedDomains": ["applinks:myapp.com"] },
|
|
101
|
+
"android": { "intentFilters": [{ "action": "VIEW", "data": [{ "scheme": "https", "host": "myapp.com" }] }] }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### 6. Native Modules — Expo Modules API v2
|
|
107
|
+
```typescript
|
|
108
|
+
// modules/my-sensor/src/MyModule.ts
|
|
109
|
+
import { requireNativeModule } from 'expo-modules-core';
|
|
110
|
+
const MyModule = requireNativeModule('MyModule');
|
|
111
|
+
|
|
112
|
+
export function readSensor(): Promise<number> {
|
|
113
|
+
return MyModule.readSensor();
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### 7. OTA Updates with EAS Update
|
|
118
|
+
```bash
|
|
119
|
+
# Push an instant OTA update (no App Store review)
|
|
120
|
+
eas update --branch production --message "Fix critical bug"
|
|
121
|
+
```
|
|
122
|
+
Use **channels** to target specific user groups (production, staging, beta).
|
|
123
|
+
|
|
124
|
+
#### 8. Performance Best Practices
|
|
125
|
+
- Use **FlashList** (Shopify) instead of `FlatList` for large lists.
|
|
126
|
+
- Use **react-native-reanimated v3** for 60/120fps animations that run on the UI thread.
|
|
127
|
+
- Use **react-native-gesture-handler** for gesture recognition on the native thread.
|
|
128
|
+
- Enable **Hermes** engine (default in SDK 53) for faster startup and reduced memory.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
<a name="bahasa-indonesia"></a>
|
|
133
|
+
## Bahasa Indonesia
|
|
134
|
+
|
|
135
|
+
### Deskripsi
|
|
136
|
+
Panduan ahli untuk membangun aplikasi mobile cross-platform tingkat produksi menggunakan **React Native 0.79+** dan **Expo SDK 53+**. Mencakup New Architecture (stabil), Expo Router v4, OTA updates, native modules, dan pola state management modern untuk iOS dan Android.
|
|
137
|
+
|
|
138
|
+
### Kondisi Pemicu
|
|
139
|
+
- Membangun aplikasi mobile iOS/Android cross-platform baru.
|
|
140
|
+
- Menggunakan Expo SDK 53+ atau React Native 0.79+ dengan New Architecture.
|
|
141
|
+
- Mengimplementasikan routing berbasis file dengan **Expo Router v4**.
|
|
142
|
+
- Menyiapkan OTA (Over-the-Air) updates dengan EAS Update.
|
|
143
|
+
- Menulis native modules menggunakan JSI atau Expo Modules API v2.
|
|
144
|
+
- Mengintegrasikan fitur perangkat: kamera, biometrik, notifikasi, lokasi.
|
|
145
|
+
|
|
146
|
+
### Yang Baru di 2026
|
|
147
|
+
|
|
148
|
+
#### React Native 0.79 — New Architecture Stabil
|
|
149
|
+
**New Architecture** (Fabric + JSI + TurboModules) kini **sepenuhnya stabil** dan menjadi default untuk semua proyek baru Expo SDK 53:
|
|
150
|
+
- **Fabric**: Engine rendering baru — rendering sinkron, animasi lebih baik.
|
|
151
|
+
- **JSI**: Bridge C++ langsung — tidak ada lagi serialisasi async untuk panggilan native.
|
|
152
|
+
- **TurboModules**: Modul native lazy-loaded — startup jauh lebih cepat.
|
|
153
|
+
- **Concurrent React**: Dukungan penuh untuk `useTransition`, `useDeferredValue`, dan Suspense di mobile.
|
|
154
|
+
|
|
155
|
+
#### Expo SDK 53 — Pembaruan Utama
|
|
156
|
+
- **Expo Router v4**: Routing berbasis file dengan typed routes, API routes, dan universal links.
|
|
157
|
+
- **Expo Camera v15**: API kamera terpadu untuk iOS dan Android.
|
|
158
|
+
- **Expo SQLite v15**: SQLite lengkap dengan mode WAL dan hook `useSQLiteContext`.
|
|
159
|
+
- **Expo Modules API v2**: Pembuatan modul native yang lebih mudah dengan Swift/Kotlin.
|
|
160
|
+
- **EAS Build**: Build lebih cepat dengan runner Mac M-series.
|
|
161
|
+
|
|
162
|
+
### Pola Arsitektur Inti
|
|
163
|
+
|
|
164
|
+
#### 1. Routing Berbasis File (Expo Router v4)
|
|
165
|
+
Expo Router menggunakan konvensi direktori `app/` untuk mendefinisikan semua layar dan navigasi. Gunakan **typed routes** untuk keamanan type-safe di waktu kompilasi.
|
|
166
|
+
|
|
167
|
+
#### 2. API Routes (Expo Functions)
|
|
168
|
+
Expo Router v4 mendukung API routes untuk logika backend serverless langsung di dalam proyek.
|
|
169
|
+
|
|
170
|
+
#### 3. State Management
|
|
171
|
+
- **TanStack Query v5**: Pilihan utama untuk server state.
|
|
172
|
+
- **Zustand**: State klien yang ringan.
|
|
173
|
+
- **MMKV**: Penyimpanan sinkron ultra-cepat (pengganti AsyncStorage).
|
|
174
|
+
- **Expo SQLite + Drizzle**: Database lokal-first dengan dukungan SQL penuh.
|
|
175
|
+
|
|
176
|
+
#### 4. Native Modules — Expo Modules API v2
|
|
177
|
+
Gunakan Expo Modules API untuk membuat modul native kustom dengan Swift (iOS) dan Kotlin (Android) dengan boilerplate minimal.
|
|
178
|
+
|
|
179
|
+
#### 5. OTA Updates dengan EAS Update
|
|
180
|
+
Dorong pembaruan instan ke pengguna tanpa melalui review App Store. Gunakan channel (`production`, `staging`, `beta`) untuk menargetkan kelompok pengguna tertentu.
|
|
181
|
+
|
|
182
|
+
#### 6. Praktik Terbaik Performa
|
|
183
|
+
- **FlashList**: Pengganti FlatList yang jauh lebih cepat untuk daftar panjang.
|
|
184
|
+
- **react-native-reanimated v3**: Animasi 60/120fps yang berjalan di UI thread.
|
|
185
|
+
- **react-native-gesture-handler**: Pengenalan gesture di native thread.
|
|
186
|
+
- **Hermes Engine**: Default di SDK 53 — startup lebih cepat, memori lebih sedikit.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monday-design-aesthetic
|
|
3
|
+
description: "Expert guide for implementing the modern, spacious, and highly structured Monday.com design system / Panduan desain ala Monday.com."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Monday.com Design Aesthetic
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
This skill focuses on implementing the modern, spacious, and structured design aesthetic inspired by Monday.com. It is ideal for SaaS landing pages and dashboards.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
Use this when the user asks for:
|
|
21
|
+
- A "Monday.com style" design.
|
|
22
|
+
- A modern SaaS landing page with clean structure.
|
|
23
|
+
- High-quality, spacious UI with vibrant accents.
|
|
24
|
+
|
|
25
|
+
### Core Design Tokens
|
|
26
|
+
- **Primary Brand Color**: Vibrant Blue (`#0073ea`) for active states and primary buttons.
|
|
27
|
+
- **Backgrounds**: Clean White (`#FFFFFF`) for main content, Light Grays (`#F9F9F9`, `#F5F6F8`) for section alternations, Dark Gray/Black (`#111111`) for footers.
|
|
28
|
+
- **Typography**: Clean geometric sans-serif (e.g., Figtree, Circular, Inter).
|
|
29
|
+
- Hero text is extra-bold (48-60px).
|
|
30
|
+
- Section headers are bold (32-40px) in dark slate (`#333333`).
|
|
31
|
+
- Body text is medium (16-18px) in muted gray (`#676879`).
|
|
32
|
+
|
|
33
|
+
### UI Components & Layout
|
|
34
|
+
- **Buttons**: Fully rounded corners (~8px). Primary buttons use vibrant blue with white text and generous padding (e.g., `px-6 py-3`).
|
|
35
|
+
- **Cards**: Large border radius (12-16px) with flat borders or extremely subtle drop shadows (`shadow-sm`).
|
|
36
|
+
- **Layout**: Centered max-width containers (1200-1400px).
|
|
37
|
+
- **Spacing**: Generous vertical padding between sections (80-120px) to let content breathe.
|
|
38
|
+
- **Interactions**: Smooth hover states, interactive tab systems, and collapsible accordions.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
<a name="bahasa-indonesia"></a>
|
|
43
|
+
## Bahasa Indonesia
|
|
44
|
+
|
|
45
|
+
### Deskripsi
|
|
46
|
+
Skill ini berfokus pada implementasi desain yang modern, luas (spacious), dan terstruktur yang terinspirasi oleh Monday.com. Sangat cocok untuk landing page dan dashboard SaaS.
|
|
47
|
+
|
|
48
|
+
### Kondisi Pemicu
|
|
49
|
+
Gunakan saat pengguna meminta:
|
|
50
|
+
- Desain ala "Monday.com".
|
|
51
|
+
- Landing page SaaS modern dengan struktur bersih.
|
|
52
|
+
- UI berkualitas tinggi dengan ruang bernapas luas dan aksen cerah.
|
|
53
|
+
|
|
54
|
+
### Token Desain Utama
|
|
55
|
+
- **Warna Utama (Brand Color)**: Biru Cerah (`#0073ea`) untuk elemen aktif dan tombol utama.
|
|
56
|
+
- **Background**: Putih Bersih (`#FFFFFF`) untuk konten utama, Abu-abu Terang (`#F9F9F9`, `#F5F6F8`) untuk variasi bagian, Abu-abu Gelap/Hitam (`#111111`) untuk footer.
|
|
57
|
+
- **Tipografi**: Sans-serif geometris bersih (mis. Figtree, Circular, Inter).
|
|
58
|
+
- Teks Hero sangat tebal (48-60px).
|
|
59
|
+
- Header bagian tebal (32-40px) dengan warna dark slate (`#333333`).
|
|
60
|
+
- Teks isi sedang (16-18px) berwarna abu-abu redup (`#676879`).
|
|
61
|
+
|
|
62
|
+
### Komponen UI & Layout
|
|
63
|
+
- **Tombol (Buttons)**: Sudut melengkung (~8px). Tombol utama berwarna biru dengan padding luas (`px-6 py-3`).
|
|
64
|
+
- **Kartu (Cards)**: Radius sudut besar (12-16px) dengan border datar atau bayangan sangat halus (`shadow-sm`).
|
|
65
|
+
- **Tata Letak (Layout)**: Kontainer dengan lebar maksimal (1200-1400px) terpusat.
|
|
66
|
+
- **Jarak (Spacing)**: Jarak vertikal yang sangat lega antar bagian (80-120px).
|
|
67
|
+
- **Interaksi**: Efek hover halus, sistem tab interaktif, dan akordion lipat.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monorepo-architect
|
|
3
|
+
description: "Expert guide for designing and managing scalable monorepos using Turborepo, pnpm workspaces, and shared packages / Panduan ahli untuk merancang dan mengelola monorepo skalabel menggunakan Turborepo dan pnpm workspaces."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Monorepo Architect (Turborepo 2.x / Moon Edition)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Expert guide for designing and managing scalable monorepos. Covers **Turborepo 2.x** (the 2026 standard for JS/TS monorepos), **moon** (polyglot task runner for teams mixing JS + Rust + Go), **pnpm workspaces**, shared package design, incremental builds, remote caching, and CI/CD pipeline optimization.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
- Managing a codebase with multiple apps and shared packages.
|
|
21
|
+
- Setting up a monorepo for a SaaS with separate `web`, `admin`, `api`, and `packages`.
|
|
22
|
+
- Optimizing build and test times with remote caching.
|
|
23
|
+
- Sharing TypeScript types, UI components, or utility functions across apps.
|
|
24
|
+
- Migrating from a multi-repo setup to a monorepo.
|
|
25
|
+
|
|
26
|
+
### Tool Selection Guide (2026)
|
|
27
|
+
|
|
28
|
+
| Tool | Best For | Language Agnostic |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **Turborepo 2.x** | JS/TS monorepos (Next.js, Vite, Node) | ❌ (JS focused) |
|
|
31
|
+
| **moon** | Polyglot teams (JS + Go + Rust + Python) | ✅ |
|
|
32
|
+
| **Nx** | Enterprise, Angular/React, plugin ecosystem | ❌ (JS focused) |
|
|
33
|
+
| **Bazel** | Very large orgs, hermetic builds | ✅ |
|
|
34
|
+
|
|
35
|
+
### Turborepo 2.x — Standard JS Monorepo
|
|
36
|
+
|
|
37
|
+
#### Repository Structure
|
|
38
|
+
```
|
|
39
|
+
my-saas/
|
|
40
|
+
├── apps/
|
|
41
|
+
│ ├── web/ # Next.js 15 main app
|
|
42
|
+
│ ├── admin/ # Next.js 15 super admin (subdomain)
|
|
43
|
+
│ └── api/ # Hono/Fastify backend
|
|
44
|
+
├── packages/
|
|
45
|
+
│ ├── ui/ # Shared Tailwind v4 components
|
|
46
|
+
│ ├── db/ # Drizzle ORM schema + queries
|
|
47
|
+
│ ├── auth/ # Auth utilities (session, JWT)
|
|
48
|
+
│ ├── email/ # Email templates (React Email)
|
|
49
|
+
│ └── tsconfig/ # Shared TypeScript configs
|
|
50
|
+
├── turbo.json
|
|
51
|
+
├── pnpm-workspace.yaml
|
|
52
|
+
└── package.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
#### turbo.json (v2 Syntax)
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"$schema": "https://turbo.build/schema.json",
|
|
59
|
+
"ui": "tui",
|
|
60
|
+
"tasks": {
|
|
61
|
+
"build": {
|
|
62
|
+
"dependsOn": ["^build"],
|
|
63
|
+
"inputs": ["$TURBO_DEFAULT$", ".env*"],
|
|
64
|
+
"outputs": [".next/**", "!.next/cache/**", "dist/**"]
|
|
65
|
+
},
|
|
66
|
+
"dev": {
|
|
67
|
+
"cache": false,
|
|
68
|
+
"persistent": true
|
|
69
|
+
},
|
|
70
|
+
"test": {
|
|
71
|
+
"dependsOn": ["^build"],
|
|
72
|
+
"inputs": ["src/**", "test/**", "vitest.config.*"]
|
|
73
|
+
},
|
|
74
|
+
"lint": {
|
|
75
|
+
"inputs": ["src/**", "*.config.*", ".eslintrc*"]
|
|
76
|
+
},
|
|
77
|
+
"typecheck": {
|
|
78
|
+
"dependsOn": ["^build"]
|
|
79
|
+
},
|
|
80
|
+
"db:generate": {
|
|
81
|
+
"cache": false
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### pnpm-workspace.yaml
|
|
88
|
+
```yaml
|
|
89
|
+
packages:
|
|
90
|
+
- "apps/*"
|
|
91
|
+
- "packages/*"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Remote Caching (Vercel Remote Cache)
|
|
95
|
+
```bash
|
|
96
|
+
# Authenticate with Vercel Remote Cache
|
|
97
|
+
npx turbo login
|
|
98
|
+
npx turbo link
|
|
99
|
+
|
|
100
|
+
# Or self-hosted with Turborepo Remote Cache
|
|
101
|
+
TURBO_TEAM=my-team TURBO_TOKEN=xxx turbo build
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### Shared UI Package (`packages/ui`)
|
|
105
|
+
```json
|
|
106
|
+
// packages/ui/package.json
|
|
107
|
+
{
|
|
108
|
+
"name": "@myapp/ui",
|
|
109
|
+
"version": "0.0.0",
|
|
110
|
+
"private": true,
|
|
111
|
+
"exports": {
|
|
112
|
+
"./button": {
|
|
113
|
+
"import": "./src/button.tsx",
|
|
114
|
+
"types": "./src/button.tsx"
|
|
115
|
+
},
|
|
116
|
+
"./card": {
|
|
117
|
+
"import": "./src/card.tsx",
|
|
118
|
+
"types": "./src/card.tsx"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"peerDependencies": {
|
|
122
|
+
"react": "^19.0.0",
|
|
123
|
+
"react-dom": "^19.0.0"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Internal Package Pattern (No Build Step)
|
|
129
|
+
Use `"exports"` pointing to source files directly — Turborepo compiles them as part of the consuming app:
|
|
130
|
+
```json
|
|
131
|
+
// packages/db/package.json
|
|
132
|
+
{
|
|
133
|
+
"name": "@myapp/db",
|
|
134
|
+
"exports": {
|
|
135
|
+
".": {
|
|
136
|
+
"import": "./src/index.ts",
|
|
137
|
+
"types": "./src/index.ts"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"devDependencies": {
|
|
141
|
+
"drizzle-orm": "latest",
|
|
142
|
+
"drizzle-kit": "latest"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### moon — Polyglot Task Runner
|
|
148
|
+
For teams mixing JavaScript, Go, Rust, and Python in one repo:
|
|
149
|
+
```yaml
|
|
150
|
+
# .moon/workspace.yml
|
|
151
|
+
projects:
|
|
152
|
+
- "apps/*"
|
|
153
|
+
- "packages/*"
|
|
154
|
+
- "services/*" # Go/Rust microservices
|
|
155
|
+
|
|
156
|
+
vcs:
|
|
157
|
+
manager: "git"
|
|
158
|
+
defaultBranch: "main"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
# apps/api/moon.yml (Go service)
|
|
163
|
+
language: "go"
|
|
164
|
+
type: "application"
|
|
165
|
+
|
|
166
|
+
tasks:
|
|
167
|
+
build:
|
|
168
|
+
command: "go build -o ./bin/api ./cmd/api"
|
|
169
|
+
inputs: ["src/**/*.go", "go.mod"]
|
|
170
|
+
outputs: ["bin/api"]
|
|
171
|
+
test:
|
|
172
|
+
command: "go test ./..."
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### CI/CD Optimization
|
|
176
|
+
```yaml
|
|
177
|
+
# .github/workflows/ci.yml
|
|
178
|
+
- name: Build & Test (Turborepo)
|
|
179
|
+
run: |
|
|
180
|
+
npx turbo run build test lint typecheck \
|
|
181
|
+
--filter="...[origin/main]" \ # Only changed packages
|
|
182
|
+
--cache-dir=".turbo"
|
|
183
|
+
env:
|
|
184
|
+
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
185
|
+
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
<a name="bahasa-indonesia"></a>
|
|
191
|
+
## Bahasa Indonesia
|
|
192
|
+
|
|
193
|
+
### Deskripsi
|
|
194
|
+
Panduan ahli untuk merancang dan mengelola monorepo yang skalabel. Mencakup **Turborepo 2.x** (standar 2026 untuk monorepo JS/TS), **moon** (task runner poliglot untuk tim yang memadukan JS + Rust + Go), **pnpm workspaces**, desain shared package, incremental build, remote caching, dan optimasi pipeline CI/CD.
|
|
195
|
+
|
|
196
|
+
### Kondisi Pemicu
|
|
197
|
+
- Mengelola codebase dengan banyak aplikasi dan shared package.
|
|
198
|
+
- Menyiapkan monorepo untuk SaaS dengan `web`, `admin`, `api`, dan `packages` terpisah.
|
|
199
|
+
- Mengoptimalkan waktu build dan test dengan remote caching.
|
|
200
|
+
- Berbagi TypeScript types, komponen UI, atau utilitas antar aplikasi.
|
|
201
|
+
- Migrasi dari multi-repo ke monorepo.
|
|
202
|
+
|
|
203
|
+
### Panduan Pemilihan Tool (2026)
|
|
204
|
+
- **Turborepo 2.x**: Standar untuk monorepo JS/TS — cepat, zero-config, remote cache bawaan.
|
|
205
|
+
- **moon**: Untuk tim poliglot yang memadukan JS, Go, Rust, Python dalam satu repo.
|
|
206
|
+
- **Nx**: Untuk enterprise dengan ekosistem plugin yang kaya.
|
|
207
|
+
|
|
208
|
+
### Struktur Repositori
|
|
209
|
+
Pisahkan `apps/` (aplikasi yang dapat di-deploy) dari `packages/` (shared library internal):
|
|
210
|
+
- `apps/web` — Next.js utama
|
|
211
|
+
- `apps/admin` — Dashboard Super Admin (subdomain terpisah)
|
|
212
|
+
- `apps/api` — Backend API
|
|
213
|
+
- `packages/ui` — Komponen UI bersama (Tailwind v4)
|
|
214
|
+
- `packages/db` — Skema Drizzle ORM + query
|
|
215
|
+
- `packages/auth` — Utilitas auth
|
|
216
|
+
|
|
217
|
+
### Turborepo 2.x — Sintaksis Baru
|
|
218
|
+
Turborepo 2.x memperkenalkan TUI interaktif (`"ui": "tui"`), sintaksis `tasks` yang lebih ekspresif, dan caching yang lebih granular dengan `inputs`/`outputs`.
|
|
219
|
+
|
|
220
|
+
### Pola Internal Package (Tanpa Build Step)
|
|
221
|
+
Arahkan `exports` langsung ke file sumber TypeScript — Turborepo mengkompilasi sebagai bagian dari aplikasi yang mengonsumsinya. Ini menghilangkan kebutuhan langkah build terpisah untuk setiap package.
|
|
222
|
+
|
|
223
|
+
### moon — Task Runner Poliglot
|
|
224
|
+
Moon mendukung proyek dalam bahasa yang berbeda (Go, Rust, JS) dalam satu workspace, masing-masing dengan konfigurasi `moon.yml`-nya sendiri.
|
|
225
|
+
|
|
226
|
+
### Optimasi CI/CD
|
|
227
|
+
Gunakan flag `--filter="...[origin/main]"` Turborepo untuk hanya membangun dan menguji package yang berubah sejak commit terakhir. Gunakan remote cache Vercel atau self-hosted untuk berbagi cache antar runner CI.
|