tribunal-kit 4.5.1 → 4.6.1
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/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/ARCHITECTURE.md +282 -277
- package/.agent/agents/accessibility-reviewer.md +187 -187
- package/.agent/agents/ai-code-reviewer.md +199 -199
- package/.agent/agents/api-architect.md +71 -66
- package/.agent/agents/backend-specialist.md +219 -215
- package/.agent/agents/cloud-engineer.md +98 -0
- package/.agent/agents/code-archaeologist.md +168 -161
- package/.agent/agents/database-architect.md +184 -184
- package/.agent/agents/db-latency-auditor.md +213 -216
- package/.agent/agents/debugger.md +198 -191
- package/.agent/agents/dependency-reviewer.md +106 -103
- package/.agent/agents/devops-engineer.md +218 -218
- package/.agent/agents/documentation-writer.md +209 -201
- package/.agent/agents/explorer-agent.md +167 -160
- package/.agent/agents/frontend-reviewer.md +162 -160
- package/.agent/agents/frontend-specialist.md +257 -248
- package/.agent/agents/game-developer.md +48 -48
- package/.agent/agents/logic-reviewer.md +118 -116
- package/.agent/agents/mobile-developer.md +197 -200
- package/.agent/agents/mobile-reviewer.md +159 -162
- package/.agent/agents/orchestrator.md +187 -181
- package/.agent/agents/penetration-tester.md +160 -157
- package/.agent/agents/performance-optimizer.md +183 -183
- package/.agent/agents/performance-reviewer.md +178 -178
- package/.agent/agents/precedence-reviewer.md +251 -250
- package/.agent/agents/product-manager.md +149 -142
- package/.agent/agents/product-owner.md +81 -80
- package/.agent/agents/project-planner.md +152 -142
- package/.agent/agents/qa-automation-engineer.md +216 -225
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/security-auditor.md +180 -174
- package/.agent/agents/seo-specialist.md +188 -193
- package/.agent/agents/sql-reviewer.md +159 -161
- package/.agent/agents/supervisor-agent.md +173 -184
- package/.agent/agents/swarm-worker-contracts.md +170 -166
- package/.agent/agents/swarm-worker-registry.md +92 -92
- package/.agent/agents/system-architect.md +85 -0
- package/.agent/agents/test-coverage-reviewer.md +158 -160
- package/.agent/agents/test-engineer.md +118 -118
- package/.agent/agents/throughput-optimizer.md +291 -299
- package/.agent/agents/type-safety-reviewer.md +182 -175
- package/.agent/agents/ui-ux-auditor.md +300 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/mcp_config.json +37 -40
- package/.agent/patterns/generator.md +11 -9
- package/.agent/patterns/inversion.md +14 -12
- package/.agent/patterns/pipeline.md +11 -9
- package/.agent/patterns/reviewer.md +15 -13
- package/.agent/patterns/tool-wrapper.md +11 -9
- package/.agent/routing_index.json +714 -0
- package/.agent/rules/GEMINI.md +359 -352
- package/.agent/scripts/compile_router.py +112 -0
- package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
- package/.agent/scripts/strengthen_skills.js +1 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
- package/.agent/skills/agent-organizer/SKILL.md +156 -150
- package/.agent/skills/agentic-patterns/SKILL.md +313 -315
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
- package/.agent/skills/api-patterns/SKILL.md +253 -247
- package/.agent/skills/api-security-auditor/SKILL.md +195 -193
- package/.agent/skills/app-builder/SKILL.md +573 -572
- package/.agent/skills/app-builder/templates/SKILL.md +108 -115
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
- package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
- package/.agent/skills/architecture/SKILL.md +226 -219
- package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
- package/.agent/skills/backend-security-expert/SKILL.md +16 -2
- package/.agent/skills/bash-linux/SKILL.md +179 -179
- package/.agent/skills/behavioral-modes/SKILL.md +239 -223
- package/.agent/skills/brainstorming/SKILL.md +498 -486
- package/.agent/skills/browser-native-ai/SKILL.md +57 -4
- package/.agent/skills/building-native-ui/SKILL.md +202 -202
- package/.agent/skills/cicd-pro/SKILL.md +442 -0
- package/.agent/skills/clean-code/SKILL.md +400 -381
- package/.agent/skills/cloud-architect/SKILL.md +439 -0
- package/.agent/skills/code-review-checklist/SKILL.md +203 -194
- package/.agent/skills/config-validator/SKILL.md +165 -165
- package/.agent/skills/containerization-pro/SKILL.md +452 -0
- package/.agent/skills/csharp-developer/SKILL.md +518 -518
- package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
- package/.agent/skills/database-design/SKILL.md +247 -240
- package/.agent/skills/deployment-procedures/SKILL.md +172 -169
- package/.agent/skills/devops-engineer/SKILL.md +345 -345
- package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
- package/.agent/skills/documentation-templates/SKILL.md +291 -279
- package/.agent/skills/edge-computing/SKILL.md +183 -181
- package/.agent/skills/emil-design-eng/SKILL.md +147 -0
- package/.agent/skills/error-resilience/SKILL.md +411 -428
- package/.agent/skills/extract-design-system/SKILL.md +160 -158
- package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
- package/.agent/skills/frontend-design/SKILL.md +208 -201
- package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
- package/.agent/skills/game-design-expert/SKILL.md +132 -129
- package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
- package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
- package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
- package/.agent/skills/git-pro/SKILL.md +435 -0
- package/.agent/skills/github-operations/SKILL.md +335 -329
- package/.agent/skills/gsap-core/SKILL.md +319 -308
- package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
- package/.agent/skills/gsap-performance/SKILL.md +139 -133
- package/.agent/skills/gsap-plugins/SKILL.md +486 -480
- package/.agent/skills/gsap-react/SKILL.md +202 -189
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
- package/.agent/skills/gsap-timeline/SKILL.md +165 -161
- package/.agent/skills/gsap-utils/SKILL.md +344 -338
- package/.agent/skills/harness-protocol/SKILL.md +48 -0
- package/.agent/skills/i18n-localization/SKILL.md +174 -163
- package/.agent/skills/intelligent-routing/SKILL.md +202 -246
- package/.agent/skills/knowledge-graph/SKILL.md +60 -52
- package/.agent/skills/lint-and-validate/SKILL.md +261 -261
- package/.agent/skills/llm-engineering/SKILL.md +400 -394
- package/.agent/skills/local-first/SKILL.md +178 -178
- package/.agent/skills/mcp-builder/SKILL.md +143 -142
- package/.agent/skills/mobile-design/SKILL.md +272 -263
- package/.agent/skills/monorepo-management/SKILL.md +335 -334
- package/.agent/skills/motion-engineering/SKILL.md +266 -234
- package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
- package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
- package/.agent/skills/observability/SKILL.md +343 -343
- package/.agent/skills/parallel-agents/SKILL.md +143 -146
- package/.agent/skills/performance-profiling/SKILL.md +259 -267
- package/.agent/skills/plan-writing/SKILL.md +150 -142
- package/.agent/skills/platform-engineer/SKILL.md +148 -147
- package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
- package/.agent/skills/powershell-windows/SKILL.md +162 -162
- package/.agent/skills/project-idioms/SKILL.md +137 -137
- package/.agent/skills/python-patterns/SKILL.md +260 -259
- package/.agent/skills/python-pro/SKILL.md +324 -323
- package/.agent/skills/react-specialist/SKILL.md +305 -277
- package/.agent/skills/readme-builder/SKILL.md +310 -300
- package/.agent/skills/realtime-patterns/SKILL.md +323 -319
- package/.agent/skills/red-team-tactics/SKILL.md +231 -218
- package/.agent/skills/review-animations/SKILL.md +72 -0
- package/.agent/skills/review-animations/STANDARDS.md +73 -0
- package/.agent/skills/rust-pro/SKILL.md +671 -673
- package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
- package/.agent/skills/server-management/SKILL.md +218 -214
- package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
- package/.agent/skills/skill-creator/SKILL.md +87 -86
- package/.agent/skills/sql-pro/SKILL.md +629 -629
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
- package/.agent/skills/swiftui-expert/SKILL.md +204 -201
- package/.agent/skills/system-design-pro/SKILL.md +345 -0
- package/.agent/skills/systematic-debugging/SKILL.md +153 -142
- package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
- package/.agent/skills/tdd-workflow/SKILL.md +169 -161
- package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
- package/.agent/skills/testing-patterns/SKILL.md +566 -579
- package/.agent/skills/trend-researcher/SKILL.md +243 -237
- package/.agent/skills/typescript-advanced/SKILL.md +336 -335
- package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
- package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
- package/.agent/skills/vue-expert/SKILL.md +294 -275
- package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
- package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
- package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
- package/.agent/skills/webapp-testing/SKILL.md +167 -169
- package/.agent/skills/webgpu-performance/SKILL.md +56 -2
- package/.agent/skills/whimsy-injector/SKILL.md +346 -325
- package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
- package/.agent/workflows/acf.md +141 -0
- package/.agent/workflows/api-tester.md +176 -151
- package/.agent/workflows/audit.md +150 -127
- package/.agent/workflows/brainstorm.md +134 -110
- package/.agent/workflows/changelog.md +140 -112
- package/.agent/workflows/create.md +168 -124
- package/.agent/workflows/debug.md +190 -165
- package/.agent/workflows/deploy.md +201 -180
- package/.agent/workflows/enhance.md +154 -128
- package/.agent/workflows/fix.md +136 -114
- package/.agent/workflows/generate.md +198 -183
- package/.agent/workflows/marathon.md +37 -11
- package/.agent/workflows/migrate.md +184 -160
- package/.agent/workflows/orchestrate.md +192 -168
- package/.agent/workflows/performance-benchmarker.md +135 -114
- package/.agent/workflows/plan.md +196 -173
- package/.agent/workflows/preview.md +103 -80
- package/.agent/workflows/refactor.md +192 -161
- package/.agent/workflows/review-ai.md +125 -101
- package/.agent/workflows/review.md +141 -116
- package/.agent/workflows/session.md +122 -94
- package/.agent/workflows/status.md +101 -79
- package/.agent/workflows/strengthen-skills.md +164 -138
- package/.agent/workflows/super-prompt.md +24 -0
- package/.agent/workflows/swarm.md +193 -179
- package/.agent/workflows/test.md +211 -189
- package/.agent/workflows/tribunal-backend.md +136 -105
- package/.agent/workflows/tribunal-database.md +129 -95
- package/.agent/workflows/tribunal-frontend.md +140 -96
- package/.agent/workflows/tribunal-full.md +131 -100
- package/.agent/workflows/tribunal-mobile.md +129 -95
- package/.agent/workflows/tribunal-performance.md +136 -110
- package/.agent/workflows/tribunal-speed.md +209 -183
- package/.agent/workflows/ui-ux-pro-max.md +155 -122
- package/README.md +107 -55
- package/mcp_config.json +1 -3
- package/package.json +94 -94
- package/.agent/GEMINI.md +0 -121
- package/.agent/skills/doc.md +0 -177
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: edge-computing
|
|
3
|
-
description: Edge computing mastery. Cloudflare Workers, Vercel Edge Functions, Durable Objects, edge-compatible data patterns, cold start elimination, caching policies (Stale-While-Revalidate), and global data locality. Use when designing globally distributed, extreme low-latency applications architectures.
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version: 2.0.0
|
|
6
|
-
last-updated: 2026-04-02
|
|
7
|
-
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
response = new Response(response.body, response);
|
|
64
|
-
response.headers.set('Cache-Control', 's-maxage=60, stale-while-revalidate=86400');
|
|
65
|
-
|
|
66
|
-
// 4. Store in Cache asynchronously (do not block the user response)
|
|
67
|
-
ctx.waitUntil(cache.put(request, response.clone()));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return response;
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## 3. Edge Data Locality (The Database Problem)
|
|
78
|
-
|
|
79
|
-
Running logic globally while querying a monolithic database in `us-east-1` is counter-productive. The latency of establishing a connection across the Atlantic will negate any Edge benefits.
|
|
80
|
-
|
|
81
|
-
### Solutions:
|
|
82
|
-
1. **Edge KV Stores**: (Cloudflare KV, Vercel KV) Eventually consistent, highly localized read-latency configs suitable for configuration routing, user sessions, or feature flags.
|
|
83
|
-
2. **Distributed SQLite**: (Cloudflare D1, Turso) Replicas distributed to edge nodes automatically.
|
|
84
|
-
3. **Connection Pooling**: Use an HTTP/Connection Pool proxy strictly (e.g., Prisma Accelerate, Supabase Edge Pooler). You cannot establish TCP `pg://` connections directly from millions of spinning V8 isolates, you will OOM crash the database.
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
// ✅ Turso / LibSQL (Distributed Edge DB) usage:
|
|
88
|
-
import { createClient } from "@libsql/client/web";
|
|
89
|
-
|
|
90
|
-
const client = createClient({
|
|
91
|
-
url: env.TURSO_DATABASE_URL,
|
|
92
|
-
authToken: env.TURSO_AUTH_TOKEN,
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
const result = await client.execute("SELECT * FROM users WHERE id = ?", [userId]);
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## 4. WebSockets at the Edge (Durable Objects)
|
|
101
|
-
|
|
102
|
-
Standard Edge functions are stateless. To hold persistent state (like a live multiplayer gaming room, or a chat room's WebSocket connections across multiple users), you must funnel those connections into a single point of state: a Durable Object.
|
|
103
|
-
|
|
104
|
-
```typescript
|
|
105
|
-
// A Durable Object serves as a single source of truth that users globally connect into
|
|
106
|
-
export class ChatRoom {
|
|
107
|
-
constructor(state, env) {
|
|
108
|
-
this.state = state;
|
|
109
|
-
this.sessions = [];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async fetch(request) {
|
|
113
|
-
// Upgrade standard HTTP to WebSocket
|
|
114
|
-
const pair = new WebSocketPair();
|
|
115
|
-
|
|
116
|
-
// Accept connection, store it globally
|
|
117
|
-
this.sessions.push(pair.server);
|
|
118
|
-
pair.server.accept();
|
|
119
|
-
|
|
120
|
-
// Handle incoming Chat messages
|
|
121
|
-
pair.server.addEventListener("message", msg => {
|
|
122
|
-
// Broadcast to all other connected edge users
|
|
123
|
-
this.sessions.forEach(session => session.send(msg.data));
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
return new Response(null, { status: 101, webSocket: pair.client });
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
139
|
-
|
|
140
|
-
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
141
|
-
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
142
|
-
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
143
|
-
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
144
|
-
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
**Slash command: `/review` or `/tribunal-full`**
|
|
151
|
-
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
152
|
-
|
|
153
|
-
### ❌ Forbidden AI Tropes
|
|
154
|
-
|
|
155
|
-
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
156
|
-
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
157
|
-
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Review these questions before confirming output:
|
|
162
|
-
```
|
|
163
|
-
✅ Did I rely ONLY on real, verified tools and methods?
|
|
164
|
-
✅ Is this solution appropriately scoped to the user's constraints?
|
|
165
|
-
✅ Did I handle potential failure modes and edge cases?
|
|
166
|
-
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
170
|
-
|
|
171
|
-
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
172
|
-
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
173
|
-
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
## Pre-Flight Checklist
|
|
177
|
-
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
178
|
-
- [ ] Have I checked the environment for relevant existing implementations?
|
|
179
|
-
|
|
180
|
-
## VBC Protocol (Verification-Before-Completion)
|
|
181
|
-
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
1
|
+
---
|
|
2
|
+
name: edge-computing
|
|
3
|
+
description: Edge computing mastery. Cloudflare Workers, Vercel Edge Functions, Durable Objects, edge-compatible data patterns, cold start elimination, caching policies (Stale-While-Revalidate), and global data locality. Use when designing globally distributed, extreme low-latency applications architectures.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-02
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
routing:
|
|
9
|
+
domain: general
|
|
10
|
+
tier: basic
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Hallucination Traps (Read First)
|
|
14
|
+
|
|
15
|
+
- ❌ Importing Node.js-only APIs (fs, net, child_process) in edge functions -> ✅ Edge runtime has NO Node.js APIs; use Web APIs only
|
|
16
|
+
- ❌ Using `global` or module-level mutable state in edge -> ✅ Edge functions are stateless across requests; use KV/Durable Objects for state
|
|
17
|
+
- ❌ Assuming edge functions have unlimited execution time -> ✅ Cloudflare Workers: 30s, Vercel Edge: 25s; design for millisecond responses
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Edge Computing — Global Latency Mastery
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. The Edge Model (V8 Isolates vs Node.js)
|
|
26
|
+
|
|
27
|
+
Edge functions (Cloudflare Workers, Vercel Edge) run on V8 Isolates, NOT standard Node.js environments.
|
|
28
|
+
|
|
29
|
+
**What This Means:**
|
|
30
|
+
|
|
31
|
+
1. Extremely fast cold starts (< 5ms) because there is no underlying OS process bootup.
|
|
32
|
+
2. Hard memory/time limits per request (e.g., 50ms CPU time max).
|
|
33
|
+
3. **NO NATIVE NODE MODULES.** You cannot use `fs`, `child_process`, or heavy native C++ binaries (e.g., standard `bcrypt`, `sharp`).
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// ❌ BAD: Attempting to use Node native core modules
|
|
37
|
+
import fs from "fs";
|
|
38
|
+
import bcrypt from "bcrypt"; // Has C++ bindings, will instantly crash on V8 edge
|
|
39
|
+
|
|
40
|
+
// ✅ GOOD: Utilizing standard Web APIs (Fetch, CryptoKey)
|
|
41
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(password));
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. Advanced Route Caching (Stale-While-Revalidate)
|
|
47
|
+
|
|
48
|
+
The highest value proposition of the edge is intercepting requests _before_ they cross the ocean.
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// Standard Edge Proxy request handling
|
|
52
|
+
export default {
|
|
53
|
+
async fetch(request, env, ctx) {
|
|
54
|
+
const url = new URL(request.url);
|
|
55
|
+
|
|
56
|
+
// 1. Cache API responses at the edge
|
|
57
|
+
const cache = caches.default;
|
|
58
|
+
let response = await cache.match(request);
|
|
59
|
+
|
|
60
|
+
if (!response) {
|
|
61
|
+
// 2. Fetch Origin (The real server in Virginia)
|
|
62
|
+
response = await fetch(request);
|
|
182
63
|
|
|
64
|
+
// 3. Mutate Headers for SWR (Stale-While-Revalidate)
|
|
65
|
+
// Instructs the Edge CDN: Serve the stale version instantly to the user,
|
|
66
|
+
// but fire an async request in the background to update the cache for the next user.
|
|
67
|
+
response = new Response(response.body, response);
|
|
68
|
+
response.headers.set("Cache-Control", "s-maxage=60, stale-while-revalidate=86400");
|
|
69
|
+
|
|
70
|
+
// 4. Store in Cache asynchronously (do not block the user response)
|
|
71
|
+
ctx.waitUntil(cache.put(request, response.clone()));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return response;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 3. Edge Data Locality (The Database Problem)
|
|
82
|
+
|
|
83
|
+
Running logic globally while querying a monolithic database in `us-east-1` is counter-productive. The latency of establishing a connection across the Atlantic will negate any Edge benefits.
|
|
84
|
+
|
|
85
|
+
### Solutions:
|
|
86
|
+
|
|
87
|
+
1. **Edge KV Stores**: (Cloudflare KV, Vercel KV) Eventually consistent, highly localized read-latency configs suitable for configuration routing, user sessions, or feature flags.
|
|
88
|
+
2. **Distributed SQLite**: (Cloudflare D1, Turso) Replicas distributed to edge nodes automatically.
|
|
89
|
+
3. **Connection Pooling**: Use an HTTP/Connection Pool proxy strictly (e.g., Prisma Accelerate, Supabase Edge Pooler). You cannot establish TCP `pg://` connections directly from millions of spinning V8 isolates, you will OOM crash the database.
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// ✅ Turso / LibSQL (Distributed Edge DB) usage:
|
|
93
|
+
import { createClient } from "@libsql/client/web";
|
|
94
|
+
|
|
95
|
+
const client = createClient({
|
|
96
|
+
url: env.TURSO_DATABASE_URL,
|
|
97
|
+
authToken: env.TURSO_AUTH_TOKEN,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const result = await client.execute("SELECT * FROM users WHERE id = ?", [userId]);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 4. WebSockets at the Edge (Durable Objects)
|
|
106
|
+
|
|
107
|
+
Standard Edge functions are stateless. To hold persistent state (like a live multiplayer gaming room, or a chat room's WebSocket connections across multiple users), you must funnel those connections into a single point of state: a Durable Object.
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// A Durable Object serves as a single source of truth that users globally connect into
|
|
111
|
+
export class ChatRoom {
|
|
112
|
+
constructor(state, env) {
|
|
113
|
+
this.state = state;
|
|
114
|
+
this.sessions = [];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async fetch(request) {
|
|
118
|
+
// Upgrade standard HTTP to WebSocket
|
|
119
|
+
const pair = new WebSocketPair();
|
|
120
|
+
|
|
121
|
+
// Accept connection, store it globally
|
|
122
|
+
this.sessions.push(pair.server);
|
|
123
|
+
pair.server.accept();
|
|
124
|
+
|
|
125
|
+
// Handle incoming Chat messages
|
|
126
|
+
pair.server.addEventListener("message", (msg) => {
|
|
127
|
+
// Broadcast to all other connected edge users
|
|
128
|
+
this.sessions.forEach((session) => session.send(msg.data));
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
return new Response(null, { status: 101, webSocket: pair.client });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
141
|
+
|
|
142
|
+
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
143
|
+
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
144
|
+
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
145
|
+
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
146
|
+
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
151
|
+
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
152
|
+
|
|
153
|
+
### ❌ Forbidden AI Tropes
|
|
154
|
+
|
|
155
|
+
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
156
|
+
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
157
|
+
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
158
|
+
|
|
159
|
+
Review these questions before confirming output:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
✅ Did I rely ONLY on real, verified tools and methods?
|
|
163
|
+
✅ Is this solution appropriately scoped to the user's constraints?
|
|
164
|
+
✅ Did I handle potential failure modes and edge cases?
|
|
165
|
+
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
169
|
+
|
|
170
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
171
|
+
|
|
172
|
+
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
173
|
+
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
174
|
+
|
|
175
|
+
## Pre-Flight Checklist
|
|
176
|
+
|
|
177
|
+
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
178
|
+
- [ ] Have I checked the environment for relevant existing implementations?
|
|
179
|
+
|
|
180
|
+
## VBC Protocol (Verification-Before-Completion)
|
|
181
|
+
|
|
182
|
+
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
183
183
|
|
|
184
184
|
---
|
|
185
185
|
|
|
@@ -209,6 +209,7 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
209
209
|
### ✅ Pre-Flight Self-Audit
|
|
210
210
|
|
|
211
211
|
Review these questions before confirming output:
|
|
212
|
+
|
|
212
213
|
```
|
|
213
214
|
✅ Did I rely ONLY on real, verified tools and methods?
|
|
214
215
|
✅ Is this solution appropriately scoped to the user's constraints?
|
|
@@ -219,5 +220,6 @@ Review these questions before confirming output:
|
|
|
219
220
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
220
221
|
|
|
221
222
|
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
223
|
+
|
|
222
224
|
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
223
225
|
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: emil-design-eng
|
|
3
|
+
description: Encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great. Helps agents shape interfaces that feel refined through spacing, typography, interaction, and animation choices, aiming for subtle details and high-quality polish that elevate the whole product.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
last-updated: 2026-06-26
|
|
6
|
+
applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
|
|
7
|
+
routing:
|
|
8
|
+
domain: frontend
|
|
9
|
+
tier: pro
|
|
10
|
+
co-requires: [frontend-design, motion-engineering]
|
|
11
|
+
trigger-signals:
|
|
12
|
+
strong: [emil, kowalski, design engineering, interface craft, ui polish, micro-interactions, animations.dev, craft sensibility]
|
|
13
|
+
weak: [animations, feel right, ui polish, subtle details]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Design Engineering
|
|
17
|
+
|
|
18
|
+
## Initial Response
|
|
19
|
+
|
|
20
|
+
When this skill is first invoked without a specific question, respond only with:
|
|
21
|
+
|
|
22
|
+
> I'm ready to help you build interfaces that feel right, my knowledge comes from Emil Kowalski's design engineering philosophy. If you want to dive even deeper, check out Emil’s course: [animations.dev](https://animations.dev/).
|
|
23
|
+
|
|
24
|
+
You are a design engineer with the craft sensibility. You build interfaces where every detail compounds into something that feels right. You understand that in a world where everyone's software is good enough, taste is the differentiator.
|
|
25
|
+
|
|
26
|
+
## Core Philosophy
|
|
27
|
+
|
|
28
|
+
### Taste is trained, not innate
|
|
29
|
+
Good taste is not personal preference. It is a trained instinct: the ability to see beyond the obvious and recognize what elevates. Develop it by surrounding yourself with great work, thinking deeply about why something feels good, and practicing relentlessly.
|
|
30
|
+
|
|
31
|
+
### Unseen details compound
|
|
32
|
+
Most details users never consciously notice. That is the point. When a feature functions exactly as someone assumes it should, they proceed without giving it a second thought. Every decision below exists because the aggregate of invisible correctness creates interfaces people love without knowing why.
|
|
33
|
+
|
|
34
|
+
### Beauty is leverage
|
|
35
|
+
People select tools based on the overall experience, not just functionality. Good defaults and good animations are real differentiators. Use beauty as leverage to stand out.
|
|
36
|
+
|
|
37
|
+
## Review Format (Required)
|
|
38
|
+
|
|
39
|
+
When reviewing UI code, you MUST use a markdown table with Before/After columns. Do NOT use a list with "Before:" and "After:" on separate lines. Always output an actual markdown table like this:
|
|
40
|
+
|
|
41
|
+
| Before | After | Why |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `transition: all 300ms` | `transition: transform 200ms ease-out` | Specify exact properties; avoid `all` |
|
|
44
|
+
| `transform: scale(0)` | `transform: scale(0.95); opacity: 0` | Nothing in the real world appears from nothing |
|
|
45
|
+
| `ease-in` on dropdown | `ease-out` with custom curve | `ease-in` feels sluggish; `ease-out` gives instant feedback |
|
|
46
|
+
| No `:active` state on button | `transform: scale(0.97)` on `:active` | Buttons must feel responsive to press |
|
|
47
|
+
| `transform-origin: center` | `transform-origin: var(--radix-popover-content-transform-origin)` | Popovers should scale from their trigger |
|
|
48
|
+
|
|
49
|
+
## The Animation Decision Framework
|
|
50
|
+
|
|
51
|
+
Before writing any animation code, answer these questions in order:
|
|
52
|
+
|
|
53
|
+
### 1. Should this animate at all?
|
|
54
|
+
**Ask:** How often will users see this animation?
|
|
55
|
+
|
|
56
|
+
| Frequency | Decision |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| 100+ times/day (keyboard shortcuts, command palette) | No animation. Ever. |
|
|
59
|
+
| Tens of times/day (hover effects, list navigation) | Remove or drastically reduce |
|
|
60
|
+
| Occasional (modals, drawers, toasts) | Standard animation |
|
|
61
|
+
| Rare/first-time (onboarding, feedback forms, celebrations) | Can add delight |
|
|
62
|
+
|
|
63
|
+
**Never animate keyboard-initiated actions.** These actions are repeated hundreds of times daily. Animation makes them feel slow and disconnected.
|
|
64
|
+
|
|
65
|
+
### 2. What is the purpose?
|
|
66
|
+
Valid purposes:
|
|
67
|
+
- **Spatial consistency**: toast enters/exits from the same direction.
|
|
68
|
+
- **State indication**: a morphing feedback button shows state change.
|
|
69
|
+
- **Explanation**: a marketing animation showing a feature.
|
|
70
|
+
- **Feedback**: a button scales down on press.
|
|
71
|
+
- **Preventing jarring changes**: elements appearing/disappearing smoothly.
|
|
72
|
+
|
|
73
|
+
If the purpose is just "it looks cool" and the user sees it often, don't animate.
|
|
74
|
+
|
|
75
|
+
### 3. What easing should it use?
|
|
76
|
+
Is the element entering or exiting?
|
|
77
|
+
Yes → ease-out (starts fast, feels responsive)
|
|
78
|
+
No →
|
|
79
|
+
Is it moving/morphing on screen?
|
|
80
|
+
Yes → ease-in-out (natural acceleration/deceleration)
|
|
81
|
+
Is it a hover/color change?
|
|
82
|
+
Yes → ease
|
|
83
|
+
Is it constant motion?
|
|
84
|
+
Yes → linear
|
|
85
|
+
Default → ease-out
|
|
86
|
+
|
|
87
|
+
**Critical: use custom easing curves.**
|
|
88
|
+
```css
|
|
89
|
+
/* Strong ease-out for UI interactions */
|
|
90
|
+
--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
|
|
91
|
+
/* Strong ease-in-out for on-screen movement */
|
|
92
|
+
--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
|
|
93
|
+
```
|
|
94
|
+
**Never use ease-in for UI animations.** It makes the interface feel sluggish.
|
|
95
|
+
|
|
96
|
+
### 4. How fast should it be?
|
|
97
|
+
| Element | Duration |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| Button press feedback | 100-160ms |
|
|
100
|
+
| Tooltips, small popovers | 125-200ms |
|
|
101
|
+
| Dropdowns, selects | 150-250ms |
|
|
102
|
+
| Modals, drawers | 200-500ms |
|
|
103
|
+
|
|
104
|
+
**Rule: UI animations should stay under 300ms.** Perception of speed matters as much as actual speed.
|
|
105
|
+
|
|
106
|
+
## Component Building Principles
|
|
107
|
+
|
|
108
|
+
### Buttons must feel responsive
|
|
109
|
+
Add `transform: scale(0.97)` on `:active` with subtle transition (160ms ease-out).
|
|
110
|
+
|
|
111
|
+
### Never animate from scale(0)
|
|
112
|
+
Start from `scale(0.95)` or higher combined with opacity.
|
|
113
|
+
|
|
114
|
+
### Make popovers origin-aware
|
|
115
|
+
Popovers should scale in from their trigger, not from center. Explicitly set `transform-origin` to the trigger coordinates (e.g., `var(--radix-popover-content-transform-origin)`). Modals are exempt as they are viewport-centered.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 🤖 LLM-Specific Traps
|
|
120
|
+
|
|
121
|
+
1. **Over-animating:** Applying animations to elements users interact with 100+ times a day.
|
|
122
|
+
2. **Default Easings:** Using built-in CSS `ease` or `ease-in` for entering UI elements.
|
|
123
|
+
3. **Sluggishness:** Proposing UI animations longer than 300ms.
|
|
124
|
+
4. **Unnatural Entrances:** Animating elements from `scale(0)` or `opacity: 0` without a physical origin.
|
|
125
|
+
5. **Ignoring Accessibility:** Failing to wrap animations in `prefers-reduced-motion` media queries.
|
|
126
|
+
|
|
127
|
+
## 🏛️ Tribunal Integration (Anti-Hallucination)
|
|
128
|
+
|
|
129
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
130
|
+
**Active reviewers: `frontend-reviewer` · `accessibility-reviewer`**
|
|
131
|
+
|
|
132
|
+
### ✅ Pre-Flight Self-Audit
|
|
133
|
+
|
|
134
|
+
Review these questions before confirming output:
|
|
135
|
+
```
|
|
136
|
+
✅ Did I justify the animation's existence based on frequency?
|
|
137
|
+
✅ Are all UI animations under 300ms?
|
|
138
|
+
✅ Did I use `ease-out` (custom cubic-bezier) for entering elements?
|
|
139
|
+
✅ Are popovers origin-aware and avoiding `scale(0)`?
|
|
140
|
+
✅ Is `prefers-reduced-motion` respected?
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
144
|
+
|
|
145
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
146
|
+
- ❌ **Forbidden:** Declaring animation work complete because the code compiles.
|
|
147
|
+
- ✅ **Required:** Provide evidence that the animation executes flawlessly at 60fps in the browser, adhering to the 300ms budget and easing rules.
|