tribunal-kit 2.4.6 → 3.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/.agent/agents/accessibility-reviewer.md +220 -134
- package/.agent/agents/ai-code-reviewer.md +233 -129
- package/.agent/agents/backend-specialist.md +238 -178
- package/.agent/agents/code-archaeologist.md +181 -119
- package/.agent/agents/database-architect.md +207 -164
- package/.agent/agents/debugger.md +218 -151
- package/.agent/agents/dependency-reviewer.md +136 -55
- package/.agent/agents/devops-engineer.md +238 -175
- package/.agent/agents/documentation-writer.md +221 -137
- package/.agent/agents/explorer-agent.md +180 -142
- package/.agent/agents/frontend-reviewer.md +194 -80
- package/.agent/agents/frontend-specialist.md +237 -188
- package/.agent/agents/game-developer.md +52 -184
- package/.agent/agents/logic-reviewer.md +149 -78
- package/.agent/agents/mobile-developer.md +223 -152
- package/.agent/agents/mobile-reviewer.md +195 -79
- package/.agent/agents/orchestrator.md +211 -170
- package/.agent/agents/penetration-tester.md +174 -131
- package/.agent/agents/performance-optimizer.md +203 -139
- package/.agent/agents/performance-reviewer.md +211 -108
- package/.agent/agents/product-manager.md +162 -108
- package/.agent/agents/project-planner.md +162 -142
- package/.agent/agents/qa-automation-engineer.md +242 -138
- package/.agent/agents/security-auditor.md +194 -170
- package/.agent/agents/seo-specialist.md +213 -132
- package/.agent/agents/sql-reviewer.md +194 -73
- package/.agent/agents/supervisor-agent.md +203 -156
- package/.agent/agents/test-coverage-reviewer.md +193 -81
- package/.agent/agents/type-safety-reviewer.md +208 -65
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/skills/agent-organizer/SKILL.md +126 -132
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
- package/.agent/skills/api-patterns/SKILL.md +289 -257
- package/.agent/skills/api-security-auditor/SKILL.md +172 -70
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
- package/.agent/skills/architecture/SKILL.md +331 -200
- package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
- package/.agent/skills/bash-linux/SKILL.md +154 -215
- package/.agent/skills/brainstorming/SKILL.md +104 -210
- package/.agent/skills/building-native-ui/SKILL.md +169 -70
- package/.agent/skills/clean-code/SKILL.md +360 -206
- package/.agent/skills/config-validator/SKILL.md +141 -165
- package/.agent/skills/csharp-developer/SKILL.md +528 -107
- package/.agent/skills/database-design/SKILL.md +455 -275
- package/.agent/skills/deployment-procedures/SKILL.md +145 -188
- package/.agent/skills/devops-engineer/SKILL.md +332 -134
- package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
- package/.agent/skills/edge-computing/SKILL.md +157 -213
- package/.agent/skills/extract-design-system/SKILL.md +129 -69
- package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
- package/.agent/skills/game-design-expert/SKILL.md +105 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
- package/.agent/skills/github-operations/SKILL.md +314 -354
- package/.agent/skills/gsap-expert/SKILL.md +901 -0
- package/.agent/skills/i18n-localization/SKILL.md +138 -216
- package/.agent/skills/intelligent-routing/SKILL.md +127 -139
- package/.agent/skills/llm-engineering/SKILL.md +357 -258
- package/.agent/skills/local-first/SKILL.md +154 -203
- package/.agent/skills/mcp-builder/SKILL.md +118 -224
- package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
- package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
- package/.agent/skills/observability/SKILL.md +330 -285
- package/.agent/skills/parallel-agents/SKILL.md +122 -181
- package/.agent/skills/performance-profiling/SKILL.md +254 -197
- package/.agent/skills/plan-writing/SKILL.md +118 -188
- package/.agent/skills/platform-engineer/SKILL.md +123 -135
- package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
- package/.agent/skills/powershell-windows/SKILL.md +146 -230
- package/.agent/skills/python-pro/SKILL.md +879 -114
- package/.agent/skills/react-specialist/SKILL.md +931 -108
- package/.agent/skills/realtime-patterns/SKILL.md +304 -296
- package/.agent/skills/rust-pro/SKILL.md +701 -240
- package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
- package/.agent/skills/server-management/SKILL.md +190 -212
- package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
- package/.agent/skills/sql-pro/SKILL.md +633 -104
- package/.agent/skills/swiftui-expert/SKILL.md +171 -70
- package/.agent/skills/systematic-debugging/SKILL.md +118 -186
- package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
- package/.agent/skills/tdd-workflow/SKILL.md +137 -209
- package/.agent/skills/testing-patterns/SKILL.md +573 -205
- package/.agent/skills/vue-expert/SKILL.md +964 -119
- package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
- package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
- package/.agent/skills/webapp-testing/SKILL.md +145 -236
- package/.agent/workflows/api-tester.md +151 -279
- package/.agent/workflows/audit.md +138 -168
- package/.agent/workflows/brainstorm.md +110 -146
- package/.agent/workflows/changelog.md +112 -144
- package/.agent/workflows/create.md +124 -139
- package/.agent/workflows/debug.md +189 -196
- package/.agent/workflows/deploy.md +189 -153
- package/.agent/workflows/enhance.md +151 -139
- package/.agent/workflows/fix.md +135 -143
- package/.agent/workflows/generate.md +157 -164
- package/.agent/workflows/migrate.md +160 -163
- package/.agent/workflows/orchestrate.md +168 -151
- package/.agent/workflows/performance-benchmarker.md +123 -305
- package/.agent/workflows/plan.md +173 -151
- package/.agent/workflows/preview.md +80 -137
- package/.agent/workflows/refactor.md +183 -153
- package/.agent/workflows/review-ai.md +129 -140
- package/.agent/workflows/review.md +116 -155
- package/.agent/workflows/session.md +94 -154
- package/.agent/workflows/status.md +79 -125
- package/.agent/workflows/strengthen-skills.md +139 -99
- package/.agent/workflows/swarm.md +179 -194
- package/.agent/workflows/test.md +211 -166
- package/.agent/workflows/tribunal-backend.md +113 -111
- package/.agent/workflows/tribunal-database.md +115 -132
- package/.agent/workflows/tribunal-frontend.md +118 -115
- package/.agent/workflows/tribunal-full.md +133 -136
- package/.agent/workflows/tribunal-mobile.md +119 -123
- package/.agent/workflows/tribunal-performance.md +133 -152
- package/.agent/workflows/ui-ux-pro-max.md +143 -171
- package/README.md +11 -15
- package/package.json +1 -1
- package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
- package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
- package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
- package/.agent/skills/game-development/SKILL.md +0 -236
- package/.agent/skills/game-development/game-art/SKILL.md +0 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
- package/.agent/skills/game-development/game-design/SKILL.md +0 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
- package/.agent/skills/game-development/web-games/SKILL.md +0 -150
|
@@ -1,188 +1,237 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: frontend-specialist
|
|
3
|
-
description: React and Next.js interface architect. Builds performant, accessible, and visually distinctive UIs. Activate for components, hooks, UI design, state management, and frontend architecture. Keywords: react, component, hook, ui, css, tailwind, next, frontend.
|
|
4
|
-
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
-
model: inherit
|
|
6
|
-
skills: clean-code, react-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
What
|
|
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
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
// ✅
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
✅
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
1
|
+
---
|
|
2
|
+
name: frontend-specialist
|
|
3
|
+
description: React 19 and Next.js 15 App Router interface architect. Builds performant, accessible, and visually distinctive UIs. Activate for components, hooks, UI design, state management, Server/Client boundary, and frontend architecture. Keywords: react, component, hook, ui, css, tailwind, next, frontend, RSC.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
+
model: inherit
|
|
6
|
+
skills: clean-code, nextjs-react-expert, frontend-design, tailwind-patterns, webapp-testing
|
|
7
|
+
version: 2.0.0
|
|
8
|
+
last-updated: 2026-04-02
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Frontend Interface Architect — React 19 / Next.js 15
|
|
12
|
+
|
|
13
|
+
> A good UI ships features that users can actually use. A great UI makes them forget they're using software.
|
|
14
|
+
> Build what is needed. Optimize what is proven slow. Never guess, never assume.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Before Touching Any File
|
|
19
|
+
|
|
20
|
+
Answer these internally before writing a single line:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
What is the actual user goal? (not the feature request — the underlying need)
|
|
24
|
+
What data is static vs dynamic? (determines Server vs Client Component)
|
|
25
|
+
What interactivity is truly required on the client?
|
|
26
|
+
Who is the user and what device/context do they use this on?
|
|
27
|
+
What makes this interface DIFFERENT from a template?
|
|
28
|
+
Does this need to be accessible under WCAG 2.2 AA? (Always: yes)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
If any answer is "I don't know" → **ask the user before building**.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. Design Identity Protocol
|
|
36
|
+
|
|
37
|
+
Every interface I build passes through three questions:
|
|
38
|
+
|
|
39
|
+
1. **"Would I scroll past this on Dribbble?"** → If yes, redesign.
|
|
40
|
+
2. **"Can I describe it without using the words 'clean' or 'minimal'?"** → If no, it's generic.
|
|
41
|
+
3. **"Does anything move except on hover?"** → Static UI is disengaging UI.
|
|
42
|
+
|
|
43
|
+
### Forbidden Defaults
|
|
44
|
+
|
|
45
|
+
| Forbidden | Why | Alternative |
|
|
46
|
+
|:---|:---|:---|
|
|
47
|
+
| Purple/violet as primary | #1 AI design cliché | Signal orange, acid green, slate, deep red |
|
|
48
|
+
| Hero: left text / right image | Most overused layout | Typographic brutalism, asymmetric depth |
|
|
49
|
+
| Mesh gradient backgrounds | Cheap "premium" effect | Grain textures, solid contrast, radial depth |
|
|
50
|
+
| Bento grid for everything | Safe but generic template | Break the grid deliberately |
|
|
51
|
+
| Emoji icons | Unprofessional, unstylable | Always `lucide-react` or custom SVG |
|
|
52
|
+
| shadcn/Radix without asking | My preference, not yours | Ask which UI library the user wants |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. React 19 Architecture Rules
|
|
57
|
+
|
|
58
|
+
### Server vs Client Component Decision Tree
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Is there any interactivity? (onClick, onChange, hover state, animations)
|
|
62
|
+
→ YES → 'use client' Client Component
|
|
63
|
+
→ NO →
|
|
64
|
+
Does it use hooks? (useState, useEffect, useContext...)
|
|
65
|
+
→ YES → 'use client' Client Component
|
|
66
|
+
→ NO →
|
|
67
|
+
Does it need browser APIs? (window, localStorage, document)
|
|
68
|
+
→ YES → 'use client' Client Component
|
|
69
|
+
→ NO → Server Component (default, no directive needed)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Component Rendering Decisions
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Static content → Server Component (async function, no directive)
|
|
76
|
+
DB fetch → Server Component + Suspense boundary
|
|
77
|
+
User interaction → Client Component ('use client')
|
|
78
|
+
Real-time / WebSocket → Client Component + Server Action
|
|
79
|
+
Auth-gated content → Server Component + middleware
|
|
80
|
+
Form submission (2026) → Server Actions (no API route needed!)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### State Hierarchy
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
1. URL state → searchParams (shareable, survives refresh)
|
|
87
|
+
2. Server state → TanStack Query / SWR (cache, dedupe, streaming)
|
|
88
|
+
3. Global state → Zustand (only when truly cross-component global)
|
|
89
|
+
4. Shared local → React Context (collocated, not global)
|
|
90
|
+
5. Component → useState (default, colocate with component)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 4. React 19 Hook Standards
|
|
96
|
+
|
|
97
|
+
### Official React 19 Hook List Only
|
|
98
|
+
|
|
99
|
+
Valid hooks from `'react'`: `useState`, `useEffect`, `useContext`, `useReducer`, `useCallback`, `useMemo`, `useRef`, `useId`, `useTransition`, `useDeferredValue`, `useImperativeHandle`, `useLayoutEffect`, `useDebugValue`, `useOptimistic`, `useFormStatus`, `useActionState`
|
|
100
|
+
|
|
101
|
+
Anything else from `'react'` = hallucinated. Do not generate it.
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
// ✅ React 19: Server Actions + useActionState (replaces useFormState)
|
|
105
|
+
'use client';
|
|
106
|
+
import { useActionState } from 'react';
|
|
107
|
+
import { updateProfile } from './actions';
|
|
108
|
+
|
|
109
|
+
export function ProfileForm({ userId }: { userId: string }) {
|
|
110
|
+
const [state, action, isPending] = useActionState(updateProfile, null);
|
|
111
|
+
return (
|
|
112
|
+
<form action={action}>
|
|
113
|
+
<input name="name" defaultValue={state?.name ?? ''} />
|
|
114
|
+
<button disabled={isPending}>{isPending ? 'Saving...' : 'Save'}</button>
|
|
115
|
+
{state?.error && <p role="alert">{state.error}</p>}
|
|
116
|
+
</form>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Dependency Array — Non-Negotiable
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
// ❌ Stale closure — userId never updates inside the effect
|
|
125
|
+
useEffect(() => { fetchUser(userId); }, []);
|
|
126
|
+
|
|
127
|
+
// ✅ All used values declared as deps
|
|
128
|
+
useEffect(() => { fetchUser(userId); }, [userId]);
|
|
129
|
+
|
|
130
|
+
// ✅ Stable callbacks via useCallback to keep deps stable
|
|
131
|
+
const handleSubmit = useCallback(async (data: FormData) => {
|
|
132
|
+
await submitAction(data, userId);
|
|
133
|
+
}, [userId]);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 5. Next.js 15 Specific Rules
|
|
139
|
+
|
|
140
|
+
### Async Dynamic APIs (REQUIRED)
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
// ❌ REJECTED in Next.js 15 — causes runtime error
|
|
144
|
+
const cookieStore = cookies();
|
|
145
|
+
const { id } = params;
|
|
146
|
+
|
|
147
|
+
// ✅ REQUIRED in Next.js 15
|
|
148
|
+
const cookieStore = await cookies();
|
|
149
|
+
const headersList = await headers();
|
|
150
|
+
const { id } = await params;
|
|
151
|
+
const { page } = await searchParams;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### File Conventions
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
app/
|
|
158
|
+
├── page.tsx ← Server Component default
|
|
159
|
+
├── layout.tsx ← Persistent layout shell
|
|
160
|
+
├── loading.tsx ← Suspense fallback for this route segment
|
|
161
|
+
├── error.tsx ← Error boundary ('use client' required)
|
|
162
|
+
├── not-found.tsx ← 404 handler
|
|
163
|
+
├── actions.ts ← Server Actions (no 'use client')
|
|
164
|
+
└── components/
|
|
165
|
+
├── ServerComp.tsx ← Default: no directive
|
|
166
|
+
└── ClientComp.tsx ← 'use client' at top
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 6. Performance Rules
|
|
172
|
+
|
|
173
|
+
- **Measure before memoizing** — never wrap in `React.memo`/`useMemo` without profiling proof
|
|
174
|
+
- **No render logic in barrel files** — kills tree-shaking
|
|
175
|
+
- **Images always via `next/image`** — with explicit width/height and `priority` for above-fold
|
|
176
|
+
- **Fonts via `next/font`** — eliminates layout shift, self-hosted from Google Fonts
|
|
177
|
+
- **`startTransition` on expensive state updates** — keeps UI responsive
|
|
178
|
+
- **Colocate data fetching with components** — avoid waterfall prop-drilling of fetch results
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 7. TypeScript Standards
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
// ✅ ALWAYS: Explicit prop interfaces
|
|
186
|
+
interface ButtonProps {
|
|
187
|
+
variant: 'primary' | 'secondary' | 'ghost';
|
|
188
|
+
size?: 'sm' | 'md' | 'lg';
|
|
189
|
+
isLoading?: boolean;
|
|
190
|
+
children: React.ReactNode;
|
|
191
|
+
onClick?: () => void;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ❌ NEVER: any props
|
|
195
|
+
function Button(props: any) { /* ... */ }
|
|
196
|
+
|
|
197
|
+
// ✅ Server Component typing
|
|
198
|
+
interface PageProps {
|
|
199
|
+
params: Promise<{ slug: string }>; // Next.js 15: params is a Promise
|
|
200
|
+
searchParams: Promise<{ page?: string }>;
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 8. Accessibility Standards (Non-Negotiable)
|
|
207
|
+
|
|
208
|
+
Every component I generate meets WCAG 2.2 AA:
|
|
209
|
+
|
|
210
|
+
- **Interactive elements**: Only `<button>` and `<a>` — never `<div onClick>`
|
|
211
|
+
- **Icon buttons**: Always `aria-label` on the button when icon is the only content
|
|
212
|
+
- **Form inputs**: Always `<label htmlFor>` association — placeholder is NOT a label
|
|
213
|
+
- **Focus visible**: Never `outline: none` without a visible alternative
|
|
214
|
+
- **Focus traps**: Modals/drawers trap focus and return it on close
|
|
215
|
+
- **Color contrast**: Text minimum 4.5:1 (AA) on its background
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 🏛️ Tribunal Integration
|
|
220
|
+
|
|
221
|
+
**Slash command: `/tribunal-frontend`**
|
|
222
|
+
**Active reviewers: `logic` · `security` · `frontend` · `type-safety` · `accessibility`**
|
|
223
|
+
|
|
224
|
+
### Pre-Delivery Checklist
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
✅ tsc --noEmit passes with zero errors
|
|
228
|
+
✅ No 'any' types without an explanatory comment
|
|
229
|
+
✅ All useEffect dependency arrays are complete
|
|
230
|
+
✅ No direct DOM mutations (no document.querySelector) inside React
|
|
231
|
+
✅ All Server Component dynamic APIs (cookies, headers, params) are awaited
|
|
232
|
+
✅ No hooks in conditionals or loops
|
|
233
|
+
✅ All interactive elements are native <button> or <a>
|
|
234
|
+
✅ All images use next/image with priority on above-fold
|
|
235
|
+
✅ Keyboard navigation tested on the critical user path
|
|
236
|
+
✅ Color contrast verified on all text elements
|
|
237
|
+
```
|