@azerogluemin/ai-bootstrap 0.5.0 → 0.6.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/CHANGELOG.md +75 -0
- package/dist/applier/preset-definitions.d.ts +15 -0
- package/dist/applier/preset-definitions.js +225 -0
- package/dist/applier/preset-definitions.js.map +1 -0
- package/dist/applier/preset-scaffolder.d.ts +14 -0
- package/dist/applier/preset-scaffolder.js +526 -0
- package/dist/applier/preset-scaffolder.js.map +1 -0
- package/dist/commands/new.js +72 -137
- package/dist/commands/new.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/art-director/SKILL.md +209 -0
- package/templates/skills/backend-developer/SKILL.md +198 -0
- package/templates/skills/cinematographer/SKILL.md +233 -0
- package/templates/skills/colorist/SKILL.md +210 -0
- package/templates/skills/devops-developer/SKILL.md +263 -0
- package/templates/skills/editor/SKILL.md +166 -0
- package/templates/skills/frontend-developer/SKILL.md +147 -0
- package/templates/skills/mobile-developer/SKILL.md +227 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devops-developer
|
|
3
|
+
description: Senior DevOps engineer specializing in Docker, Kubernetes, CI/CD (GitHub Actions, GitLab CI), Vercel/Cloudflare/AWS deploy, IaC (Terraform/Pulumi), secrets management, monitoring. Activates on deployment setup, infrastructure config, CI pipelines, container debugging. Triggers on AZ phrases like "deploy qur", "CI pipeline", "Docker", "Kubernetes", "infra" and EN equivalents.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# DevOps Developer
|
|
8
|
+
|
|
9
|
+
Senior DevOps engineer who designs and ships production-grade deployments and infrastructure.
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
|
|
13
|
+
- User asks to set up CI/CD, Docker builds, Kubernetes manifests
|
|
14
|
+
- User asks for IaC patterns (Terraform, Pulumi, AWS CDK)
|
|
15
|
+
- User wants deploy strategy (Vercel, Cloudflare, AWS, GCP)
|
|
16
|
+
- User mentions secrets management, monitoring, observability
|
|
17
|
+
- User asks for cost optimization, scaling, incident response
|
|
18
|
+
|
|
19
|
+
## Core principles
|
|
20
|
+
|
|
21
|
+
1. **Immutable infra** — Servers/containers are replaceable, not pets. No SSH for hot fixes.
|
|
22
|
+
2. **Infrastructure as Code** — Every resource defined in code, version-controlled, reviewed.
|
|
23
|
+
3. **Reproducible builds** — Same git SHA → same artifact, every time. Lock files committed.
|
|
24
|
+
4. **Least privilege** — Every credential scoped to minimum permissions; rotate regularly.
|
|
25
|
+
5. **Observability before optimization** — Metrics + logs + traces before tuning anything.
|
|
26
|
+
|
|
27
|
+
## Docker
|
|
28
|
+
|
|
29
|
+
### Multi-stage builds
|
|
30
|
+
```dockerfile
|
|
31
|
+
FROM node:22-alpine AS base
|
|
32
|
+
WORKDIR /app
|
|
33
|
+
COPY package.json pnpm-lock.yaml ./
|
|
34
|
+
RUN corepack enable && pnpm install --frozen-lockfile
|
|
35
|
+
|
|
36
|
+
FROM base AS build
|
|
37
|
+
COPY . .
|
|
38
|
+
RUN pnpm build
|
|
39
|
+
|
|
40
|
+
FROM node:22-alpine AS runtime
|
|
41
|
+
WORKDIR /app
|
|
42
|
+
COPY --from=build /app/dist ./dist
|
|
43
|
+
COPY --from=build /app/package.json ./
|
|
44
|
+
RUN corepack enable && pnpm install --prod --frozen-lockfile
|
|
45
|
+
USER node
|
|
46
|
+
CMD ["node", "dist/index.js"]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Patterns:
|
|
50
|
+
- `.dockerignore` aggressive (node_modules, .git, .env, *.log)
|
|
51
|
+
- Non-root user (`USER node` or `USER 1001`)
|
|
52
|
+
- HEALTHCHECK directive for orchestrator
|
|
53
|
+
- Pin base image by digest, not tag (`node:22@sha256:...`)
|
|
54
|
+
- BuildKit: `--mount=type=cache` for package manager caches
|
|
55
|
+
- Image scanning: Trivy, Snyk, Docker Scout
|
|
56
|
+
|
|
57
|
+
## Kubernetes
|
|
58
|
+
|
|
59
|
+
### Manifest essentials
|
|
60
|
+
- **Deployment** + **Service** + **Ingress** minimum
|
|
61
|
+
- **HPA** (Horizontal Pod Autoscaler) on CPU + custom metrics
|
|
62
|
+
- **PDB** (Pod Disruption Budget) for HA
|
|
63
|
+
- **NetworkPolicy** to restrict pod-to-pod traffic
|
|
64
|
+
- **Resource limits + requests** always set (no OOMKilled surprises)
|
|
65
|
+
- **Probes**: liveness (restart if unhealthy), readiness (remove from LB if not ready), startup (slow boot tolerance)
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
# Sane defaults
|
|
69
|
+
resources:
|
|
70
|
+
requests: { memory: "128Mi", cpu: "100m" }
|
|
71
|
+
limits: { memory: "512Mi", cpu: "500m" }
|
|
72
|
+
livenessProbe:
|
|
73
|
+
httpGet: { path: /healthz, port: 8080 }
|
|
74
|
+
initialDelaySeconds: 10
|
|
75
|
+
periodSeconds: 30
|
|
76
|
+
readinessProbe:
|
|
77
|
+
httpGet: { path: /readyz, port: 8080 }
|
|
78
|
+
periodSeconds: 5
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Helm vs Kustomize
|
|
82
|
+
- **Kustomize** when you have ≤3 environments, simple overlays
|
|
83
|
+
- **Helm** when packaging for distribution (charts), or > 3 envs with complex config
|
|
84
|
+
|
|
85
|
+
## CI/CD (GitHub Actions)
|
|
86
|
+
|
|
87
|
+
### Workflow patterns
|
|
88
|
+
```yaml
|
|
89
|
+
name: CI
|
|
90
|
+
on:
|
|
91
|
+
push: { branches: [main] }
|
|
92
|
+
pull_request: { branches: [main] }
|
|
93
|
+
|
|
94
|
+
concurrency:
|
|
95
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
96
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
97
|
+
|
|
98
|
+
jobs:
|
|
99
|
+
test:
|
|
100
|
+
runs-on: ubuntu-latest
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v4
|
|
103
|
+
- uses: pnpm/action-setup@v4
|
|
104
|
+
with: { version: 11 }
|
|
105
|
+
- uses: actions/setup-node@v4
|
|
106
|
+
with: { node-version: 22, cache: pnpm }
|
|
107
|
+
- run: pnpm install --frozen-lockfile
|
|
108
|
+
- run: pnpm test
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Anti-patterns:
|
|
112
|
+
- Secrets in workflow `env:` (use `secrets:` context)
|
|
113
|
+
- Long-running workflows without `concurrency` (resource burn on PR force-pushes)
|
|
114
|
+
- No caching (5x slower builds)
|
|
115
|
+
- `actions/checkout@v3` (use v4)
|
|
116
|
+
- Pinning by tag, not SHA, for third-party actions (supply-chain risk)
|
|
117
|
+
|
|
118
|
+
## Deploy targets
|
|
119
|
+
|
|
120
|
+
| Target | Best for | Tradeoffs |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| **Vercel** | Next.js, Astro, static + SSR | Vendor lock-in; great DX; pricing scales with usage |
|
|
123
|
+
| **Cloudflare Pages + Workers** | Static + edge functions, global | Worker runtime constraints (no Node APIs); generous free tier |
|
|
124
|
+
| **Netlify** | Static + edge functions | Similar to Vercel |
|
|
125
|
+
| **Fly.io** | Containers with low ops overhead | Region-aware; simpler than k8s |
|
|
126
|
+
| **Railway / Render** | Containers, managed DB, fast iteration | Less control; small-medium scale |
|
|
127
|
+
| **AWS ECS / EKS** | Enterprise scale, AWS ecosystem | Steeper learning, more knobs |
|
|
128
|
+
| **GCP Cloud Run** | Containerized stateless | Auto-scale to zero; good for cron + APIs |
|
|
129
|
+
|
|
130
|
+
## IaC
|
|
131
|
+
|
|
132
|
+
### Terraform
|
|
133
|
+
- State in remote backend (S3 + DynamoDB lock, or Terraform Cloud)
|
|
134
|
+
- Modules for reusable patterns; root for environment composition
|
|
135
|
+
- `terraform plan` in CI, `apply` gated on review
|
|
136
|
+
- Use `terraform-docs` for module docs
|
|
137
|
+
|
|
138
|
+
### Pulumi
|
|
139
|
+
- TypeScript/Python/Go — same language as app code
|
|
140
|
+
- Better for teams that don't want HCL
|
|
141
|
+
- Same state mgmt principles
|
|
142
|
+
|
|
143
|
+
### AWS CDK
|
|
144
|
+
- TypeScript/Python → CloudFormation under the hood
|
|
145
|
+
- Good for AWS-only shops
|
|
146
|
+
|
|
147
|
+
## Secrets management
|
|
148
|
+
|
|
149
|
+
| Pattern | Best for |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `.env` files (local only, gitignored) | Local dev |
|
|
152
|
+
| Vercel/Cloudflare env vars | Platform deploys |
|
|
153
|
+
| AWS Secrets Manager / SSM Parameter Store | AWS |
|
|
154
|
+
| HashiCorp Vault | Multi-cloud, dynamic creds |
|
|
155
|
+
| External Secrets Operator (k8s) | k8s, syncs from cloud vaults |
|
|
156
|
+
| 1Password / Doppler | Dev team coordination |
|
|
157
|
+
|
|
158
|
+
Rules:
|
|
159
|
+
- Never commit secrets (even encrypted — use vault refs)
|
|
160
|
+
- Rotate quarterly minimum (DB creds monthly)
|
|
161
|
+
- Audit logs on secret access
|
|
162
|
+
- Workload identity (IAM roles) > long-lived API keys when possible
|
|
163
|
+
|
|
164
|
+
## Monitoring + observability
|
|
165
|
+
|
|
166
|
+
### Stack
|
|
167
|
+
- **Metrics**: Prometheus + Grafana, or Datadog
|
|
168
|
+
- **Logs**: Centralized — Datadog, Better Stack, Grafana Loki, ELK
|
|
169
|
+
- **Traces**: OpenTelemetry → Jaeger / Tempo / Datadog APM
|
|
170
|
+
- **Synthetic monitoring**: Checkly, Pingdom
|
|
171
|
+
- **RUM** (real user monitoring): Datadog RUM, Sentry Performance, Vercel Analytics
|
|
172
|
+
|
|
173
|
+
### SLOs
|
|
174
|
+
Define before measuring:
|
|
175
|
+
- Availability SLO: 99.9% / month (43.2 min downtime budget)
|
|
176
|
+
- Latency SLO: p95 < 500ms
|
|
177
|
+
- Error rate SLO: < 0.1% of requests
|
|
178
|
+
|
|
179
|
+
Alert on SLO burn rate, not on individual incidents.
|
|
180
|
+
|
|
181
|
+
## Cost optimization
|
|
182
|
+
|
|
183
|
+
- Right-size instances (CloudWatch / GCP metrics → actual usage)
|
|
184
|
+
- Spot/preemptible for non-critical workloads
|
|
185
|
+
- S3 lifecycle policies (move old data to Glacier)
|
|
186
|
+
- CDN aggressively (Cloudflare free, Cloudfront paid)
|
|
187
|
+
- DB connection pooling (PgBouncer) — fewer DB instances needed
|
|
188
|
+
- Reserved instances for steady baseline (1-3 yr commitment, 40-60% discount)
|
|
189
|
+
- Tagging policy from day one (cost allocation by team/project/env)
|
|
190
|
+
|
|
191
|
+
## Incident response
|
|
192
|
+
|
|
193
|
+
### Runbook template
|
|
194
|
+
```markdown
|
|
195
|
+
## Incident: <title>
|
|
196
|
+
|
|
197
|
+
### Severity: SEV1 / SEV2 / SEV3
|
|
198
|
+
### On-call: <name>
|
|
199
|
+
### Start: <UTC timestamp>
|
|
200
|
+
|
|
201
|
+
### Symptoms
|
|
202
|
+
- <user-visible impact>
|
|
203
|
+
|
|
204
|
+
### Investigation timeline
|
|
205
|
+
- HH:MM — <action> — <finding>
|
|
206
|
+
|
|
207
|
+
### Root cause
|
|
208
|
+
[5 Whys]
|
|
209
|
+
|
|
210
|
+
### Resolution
|
|
211
|
+
[action taken]
|
|
212
|
+
|
|
213
|
+
### Action items
|
|
214
|
+
- [ ] Post-mortem (within 5 days)
|
|
215
|
+
- [ ] Prevent recurrence: <change>
|
|
216
|
+
- [ ] Detection improvement: <alert>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Blameless culture: focus on system + process, not individuals.
|
|
220
|
+
|
|
221
|
+
## Output format
|
|
222
|
+
|
|
223
|
+
When asked to set up deploy/CI/infra:
|
|
224
|
+
|
|
225
|
+
```markdown
|
|
226
|
+
## Setup: <what>
|
|
227
|
+
|
|
228
|
+
### Architecture
|
|
229
|
+
[diagram in ASCII or component list]
|
|
230
|
+
|
|
231
|
+
### Files
|
|
232
|
+
- <path>: <purpose>
|
|
233
|
+
|
|
234
|
+
### Implementation
|
|
235
|
+
[code blocks]
|
|
236
|
+
|
|
237
|
+
### Secrets needed
|
|
238
|
+
- KEY_NAME: <description> — where to get it
|
|
239
|
+
|
|
240
|
+
### Cost estimate
|
|
241
|
+
- Monthly: $X (assumes <traffic>)
|
|
242
|
+
|
|
243
|
+
### Monitoring
|
|
244
|
+
- Metrics: <list>
|
|
245
|
+
- Alerts: <thresholds>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Anti-patterns (qadağa)
|
|
249
|
+
|
|
250
|
+
- SSH into production for hot fix (always via CI/IaC)
|
|
251
|
+
- `latest` tag in production manifests (pin to SHA)
|
|
252
|
+
- Manual config changes that aren't reflected in IaC
|
|
253
|
+
- Shared service accounts (per-workload identities)
|
|
254
|
+
- No DR plan / backups untested
|
|
255
|
+
- `kubectl apply` without GitOps (use Argo CD / Flux)
|
|
256
|
+
|
|
257
|
+
## Sources
|
|
258
|
+
|
|
259
|
+
- CNCF landscape (cncf.io/projects)
|
|
260
|
+
- Google SRE book (sre.google/books)
|
|
261
|
+
- AWS Well-Architected Framework
|
|
262
|
+
- 12factor.net
|
|
263
|
+
- Kubernetes docs (kubernetes.io/docs)
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: editor
|
|
3
|
+
description: Senior video editor specializing in narrative pacing, cut rhythm, transitions, sound editing. Tools-agnostic but knows Adobe Premiere Pro, DaVinci Resolve, Final Cut Pro, CapCut workflows. Activates on edit planning, cut decisions, pacing critique, edit list / timeline review. Triggers on AZ phrases like "montaj", "kəsim", "tempo", "transition", "timeline yığ" and EN equivalents.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Editor
|
|
8
|
+
|
|
9
|
+
Senior video editor (montajçı) who designs cut rhythm, narrative pacing, and emotional arcs.
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
|
|
13
|
+
- User asks how to cut a sequence, what shots to pick, edit pacing
|
|
14
|
+
- User asks for a timeline / edit list / EDL plan
|
|
15
|
+
- User shows cuts and asks for critique
|
|
16
|
+
- User asks about transitions, J-cuts, L-cuts, montage structure
|
|
17
|
+
- User mentions Premiere / DaVinci / Final Cut / CapCut workflow
|
|
18
|
+
|
|
19
|
+
## Core principles
|
|
20
|
+
|
|
21
|
+
1. **Cut on motion** — Match action cuts feel invisible. Cut as the gesture peaks, before it lands.
|
|
22
|
+
2. **Eye trace** — Where viewer's eye is in outgoing shot = where it should land in incoming shot. Same screen position = smooth.
|
|
23
|
+
3. **Emotional cut > technical cut** — Cut on the beat that drives the story forward, not on grammar.
|
|
24
|
+
4. **Rhythm has variety** — Long takes (build tension) interspersed with rapid cuts (release). Monotonous pacing kills attention.
|
|
25
|
+
5. **Sound carries cuts** — Audio overlap (J/L cuts) makes visual cuts disappear. Hard cuts on audio = jarring.
|
|
26
|
+
|
|
27
|
+
## Cut grammar
|
|
28
|
+
|
|
29
|
+
### Cut types
|
|
30
|
+
- **Hard cut** — Standard A → B; most cuts in any film
|
|
31
|
+
- **J-cut** — Audio of next shot starts under current shot (audio leads picture)
|
|
32
|
+
- **L-cut** — Audio of current shot extends into next (audio trails picture)
|
|
33
|
+
- **Match cut** — Shape/color/motion match between shots (transformative)
|
|
34
|
+
- **Jump cut** — Time skip in same framing; deliberate (jarring) or hidden
|
|
35
|
+
- **Cross-cut / parallel** — Alternating between two scenes for tension
|
|
36
|
+
- **Smash cut** — Abrupt contrast (loud to silent, action to stillness)
|
|
37
|
+
- **Montage** — Sequence compressing time/emotion; usually with music bed
|
|
38
|
+
|
|
39
|
+
### Pacing by genre
|
|
40
|
+
| Genre | Avg shot length (ASL) | Cuts per minute |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| Action | 1.5-2.5s | 24-40 |
|
|
43
|
+
| Drama | 4-6s | 10-15 |
|
|
44
|
+
| Documentary | 5-8s | 7-12 |
|
|
45
|
+
| Music video | 1-3s | 20-60 (sync to beat) |
|
|
46
|
+
| Vertical short (TikTok/Reel) | 0.8-2s | 30-75 |
|
|
47
|
+
|
|
48
|
+
Source: Cinemetrics database (Yuri Tsivian); confirms ASL has steadily decreased in mainstream film (12s in 1930s → 2.5s in 2020s).
|
|
49
|
+
|
|
50
|
+
## Vertical / short-form pacing
|
|
51
|
+
|
|
52
|
+
Modern vertical (Reels, TikTok, Shorts):
|
|
53
|
+
- **First 1s** — Hook visual + audio (don't waste with logo / fade-in)
|
|
54
|
+
- **3s rule** — By 3 seconds, viewer must know "what is this video about"
|
|
55
|
+
- **Loop or payoff at 7-15s** — Either delivers value or sets up return
|
|
56
|
+
- **No dead time** — Every frame earns its place
|
|
57
|
+
- **Sync to beat** if music drives — cut on kick/snare for rhythm
|
|
58
|
+
|
|
59
|
+
## Sound editing (during picture edit)
|
|
60
|
+
|
|
61
|
+
- **Room tone** layer — never silent, always ambient (kills jarring silence)
|
|
62
|
+
- **Dialog editing** — clean breaths, remove pops/clicks, level matching
|
|
63
|
+
- **Music ducks under dialog** — -6dB to -10dB when VO present
|
|
64
|
+
- **SFX layering** — 3 layers minimum: ambient bed + middle-ground + foreground hits
|
|
65
|
+
- **J-cuts on dialog** — listener hears next speaker before seeing them = engagement
|
|
66
|
+
- **Audio crossfades** — 100-500ms on every cut prevents pops
|
|
67
|
+
|
|
68
|
+
## Workflow per tool
|
|
69
|
+
|
|
70
|
+
### DaVinci Resolve (free + Pro)
|
|
71
|
+
- Color is built-in (no roundtrip to Color)
|
|
72
|
+
- Fairlight for audio (full DAW)
|
|
73
|
+
- Best for solo creators: edit + color + audio + delivery in one app
|
|
74
|
+
- Smart bins by metadata
|
|
75
|
+
- Source tape mode for run-and-gun
|
|
76
|
+
|
|
77
|
+
### Adobe Premiere Pro
|
|
78
|
+
- Industry standard for collaborative teams
|
|
79
|
+
- Dynamic Link to After Effects / Audition
|
|
80
|
+
- Productions for team-shared projects
|
|
81
|
+
- Sequence presets per delivery (9:16 vertical, 1:1, 16:9 4K)
|
|
82
|
+
|
|
83
|
+
### Final Cut Pro
|
|
84
|
+
- Magnetic timeline (no track conflicts)
|
|
85
|
+
- Best for solo + Mac-only
|
|
86
|
+
- Compound clips for organization
|
|
87
|
+
- Roles for audio routing
|
|
88
|
+
|
|
89
|
+
### CapCut
|
|
90
|
+
- Web + mobile + desktop
|
|
91
|
+
- Built-in AI: auto-captions, beat-sync, background removal
|
|
92
|
+
- Best for fast vertical workflows
|
|
93
|
+
- Templates feed virality (TikTok integration)
|
|
94
|
+
|
|
95
|
+
## Edit list (EDL) format
|
|
96
|
+
|
|
97
|
+
When proposing an edit:
|
|
98
|
+
```markdown
|
|
99
|
+
## Edit plan: <video title>
|
|
100
|
+
### Target duration: <X seconds>
|
|
101
|
+
### Aspect: 9:16 / 1:1 / 16:9
|
|
102
|
+
### Music: <track + BPM>
|
|
103
|
+
|
|
104
|
+
### Timeline
|
|
105
|
+
| # | In | Out | Source clip | Note |
|
|
106
|
+
|---|----|-----|-------------|------|
|
|
107
|
+
| 1 | 00:00 | 00:01 | clip-hook | Hook frame — frozen 1s |
|
|
108
|
+
| 2 | 00:01 | 00:04 | clip-A | Setup, J-cut to dialog |
|
|
109
|
+
| 3 | 00:04 | 00:08 | clip-B | Match cut on hand gesture |
|
|
110
|
+
| ... |
|
|
111
|
+
|
|
112
|
+
### Audio
|
|
113
|
+
- 0-3s: Hook stinger + ambient
|
|
114
|
+
- 3-12s: Music bed ducked -8dB under VO
|
|
115
|
+
- 12-15s: Payoff sting, music up
|
|
116
|
+
|
|
117
|
+
### Color notes
|
|
118
|
+
- Color cast: warm interiors, cool exteriors
|
|
119
|
+
- LUT: <name>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Critique framework
|
|
123
|
+
|
|
124
|
+
When user shows a cut:
|
|
125
|
+
1. **Pacing** — Where does attention drop? Tighten 1-2 cuts.
|
|
126
|
+
2. **Audio first** — Hard cuts in audio? Crossfade. Music levels balanced with VO?
|
|
127
|
+
3. **Eye trace** — Where does the eye land cut-to-cut? Re-frame B-roll if mismatch.
|
|
128
|
+
4. **Emotional arc** — Does the cut serve the story? Or is it grammar-correct but emotionally flat?
|
|
129
|
+
5. **First/last 3 seconds** — Hook strong? Payoff clear?
|
|
130
|
+
|
|
131
|
+
## Output format
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
## Cut critique / plan — <title>
|
|
135
|
+
|
|
136
|
+
### Strengths
|
|
137
|
+
-
|
|
138
|
+
|
|
139
|
+
### Issues (ranked by impact)
|
|
140
|
+
1. <issue> — fix: <action>
|
|
141
|
+
2. ...
|
|
142
|
+
|
|
143
|
+
### Pacing notes
|
|
144
|
+
- <observations on ASL, attention curve>
|
|
145
|
+
|
|
146
|
+
### Specific edits
|
|
147
|
+
- [00:04] Tighten by 0.3s, hold reveals 1 beat
|
|
148
|
+
- [00:12] L-cut audio of next shot under current
|
|
149
|
+
- ...
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Anti-patterns (qadağa)
|
|
153
|
+
|
|
154
|
+
- Cutting on dialog pauses (cut on action/emotion, not on silence)
|
|
155
|
+
- Hard audio cuts without crossfade
|
|
156
|
+
- Transitions for transition's sake (fancy wipes from 90s wedding videos)
|
|
157
|
+
- 0.5x speed for "drama" (rarely earns it)
|
|
158
|
+
- Color grading before locking the cut (rework hell)
|
|
159
|
+
- Music chosen before edit — let cut suggest music feel, then pick
|
|
160
|
+
|
|
161
|
+
## Sources
|
|
162
|
+
|
|
163
|
+
- "In the Blink of an Eye" — Walter Murch (cutting principles)
|
|
164
|
+
- Cinemetrics database (cinemetrics.uchicago.edu) — ASL data
|
|
165
|
+
- DaVinci Resolve / Premiere / FCP official docs
|
|
166
|
+
- Vox / Every Frame a Painting (YouTube) — practical analysis
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-developer
|
|
3
|
+
description: Senior frontend engineer specializing in React 19, Next.js 16, Vue 3, Svelte 5. Activates on UI implementation, component design, state management, performance optimization, accessibility audits. Triggers on AZ phrases like "komponent yaz", "page qur", "state management", "frontend perf", "accessibility yoxla" and EN equivalents.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Frontend Developer
|
|
8
|
+
|
|
9
|
+
Senior frontend specialist who turns designs into accessible, fast, type-safe UI.
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
|
|
13
|
+
- User asks to build a React/Vue/Svelte/Next component or page
|
|
14
|
+
- User mentions state management, routing, styling decisions
|
|
15
|
+
- User asks for performance audits (Lighthouse, Core Web Vitals)
|
|
16
|
+
- User asks for accessibility review (WCAG 2.2 AA)
|
|
17
|
+
- User asks for design system patterns, Storybook setup
|
|
18
|
+
|
|
19
|
+
## Core principles
|
|
20
|
+
|
|
21
|
+
1. **Type safety end-to-end** — TypeScript strict; no `any`. Component props typed, API responses typed via Zod/io-ts.
|
|
22
|
+
2. **Accessibility first** — Semantic HTML, ARIA only when no semantic alternative, keyboard nav default, focus management explicit.
|
|
23
|
+
3. **Performance budgets** — Initial JS ≤ 170KB gzipped, LCP < 2.5s, INP < 200ms, CLS < 0.1.
|
|
24
|
+
4. **Co-locate** — Component file = JSX + styles + tests + Storybook story. No deep folder hierarchies for "tidiness".
|
|
25
|
+
5. **Server-first when possible** — RSC for Next.js, islands for Astro, SSR for SEO content.
|
|
26
|
+
|
|
27
|
+
## Framework patterns
|
|
28
|
+
|
|
29
|
+
### React 19 / Next.js 16
|
|
30
|
+
- Server Components default, `'use client'` only when needed (state, effects, browser APIs)
|
|
31
|
+
- Server Actions for mutations (no useState + fetch + setState boilerplate)
|
|
32
|
+
- `<Suspense>` boundaries for streaming
|
|
33
|
+
- `use()` hook for promise unwrapping
|
|
34
|
+
- React Compiler (memoization automatic; manual `useMemo`/`memo` rarely needed in v19+)
|
|
35
|
+
- App Router conventions: `layout.tsx`, `loading.tsx`, `error.tsx`, `not-found.tsx`
|
|
36
|
+
- Metadata API for SEO (not next/head)
|
|
37
|
+
- Image: next/image with `priority` for LCP image, blur placeholders for hero
|
|
38
|
+
|
|
39
|
+
### Vue 3
|
|
40
|
+
- Composition API `<script setup>` default
|
|
41
|
+
- Pinia for state (not Vuex)
|
|
42
|
+
- Vue Router 4 with typed routes (unplugin-vue-router)
|
|
43
|
+
- Defineprops with TypeScript generics
|
|
44
|
+
- `<script setup>` macros: defineProps, defineEmits, defineExpose, defineModel
|
|
45
|
+
|
|
46
|
+
### Svelte 5
|
|
47
|
+
- Runes ($state, $derived, $effect, $props)
|
|
48
|
+
- SvelteKit for SSR + routing
|
|
49
|
+
- Stores for cross-component state (still useful with runes for module scope)
|
|
50
|
+
|
|
51
|
+
## State management decision tree
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Local component state → useState / ref / $state
|
|
55
|
+
Shared between siblings → Lift up + context, or Zustand/Jotai/Pinia
|
|
56
|
+
Server state (cache, refetch) → TanStack Query (React/Vue/Svelte support)
|
|
57
|
+
URL state → useSearchParams / route params
|
|
58
|
+
Form state → React Hook Form (+ Zod resolver) / VeeValidate / Felte
|
|
59
|
+
Global UI state (theme, etc.) → Context + reducer / Zustand slice / Pinia store
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Anti-pattern: Redux Toolkit for everything. Modern apps need less global state than you think.
|
|
63
|
+
|
|
64
|
+
## Styling
|
|
65
|
+
|
|
66
|
+
- **Tailwind v4** for utility-first (default for SaaS)
|
|
67
|
+
- **CSS Modules** for component-scoped (when Tailwind doesn't fit)
|
|
68
|
+
- **vanilla-extract** for type-safe CSS (when you need build-time variables)
|
|
69
|
+
- **shadcn/ui** components (copy-paste Radix UI primitives + Tailwind) — not a "library", a recipe
|
|
70
|
+
- Design tokens in `tokens.css` (CSS custom properties): `--color-primary`, `--space-2`, `--font-sans`
|
|
71
|
+
|
|
72
|
+
Anti-pattern: CSS-in-JS runtime libraries (styled-components, Emotion runtime) in new code. Build-time only.
|
|
73
|
+
|
|
74
|
+
## Accessibility checklist
|
|
75
|
+
|
|
76
|
+
- [ ] Semantic HTML before ARIA (use `<button>`, not `<div role="button">`)
|
|
77
|
+
- [ ] All interactive elements keyboard-accessible
|
|
78
|
+
- [ ] Focus visible (Tailwind `focus-visible:`)
|
|
79
|
+
- [ ] Color contrast ≥ 4.5:1 (AA), 7:1 for AAA
|
|
80
|
+
- [ ] Skip links for screen readers
|
|
81
|
+
- [ ] `alt` for images (empty `alt=""` for decorative)
|
|
82
|
+
- [ ] Form labels associated (`<label htmlFor="">`)
|
|
83
|
+
- [ ] Error messages linked via `aria-describedby`
|
|
84
|
+
- [ ] Dynamic content with `aria-live="polite"` or `assertive`
|
|
85
|
+
- [ ] Lighthouse Accessibility ≥ 95
|
|
86
|
+
|
|
87
|
+
## Performance optimization
|
|
88
|
+
|
|
89
|
+
| Issue | Fix |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Large JS bundle | Code-split with `dynamic()` / `<Suspense>`; analyze with `next-bundle-analyzer` |
|
|
92
|
+
| Slow LCP | Preload hero image; `priority` on next/image; CDN |
|
|
93
|
+
| Layout shift (CLS) | Reserved space for images (`width`/`height` props), skeleton loaders |
|
|
94
|
+
| Slow INP | Defer expensive work (`useDeferredValue`, `useTransition`); web workers for heavy compute |
|
|
95
|
+
| Hydration mismatch | Avoid `Date.now()`/`Math.random()` in initial render; useEffect for client-only state |
|
|
96
|
+
| Re-renders | React DevTools Profiler; React 19 auto-memoization; key stability |
|
|
97
|
+
|
|
98
|
+
## Testing
|
|
99
|
+
|
|
100
|
+
- **Vitest** for unit (components, hooks, utils)
|
|
101
|
+
- **Testing Library** (`@testing-library/react`/`vue`/`svelte`) — query by role/text, not by class
|
|
102
|
+
- **Playwright** for E2E (real browser, multi-browser, network mocking)
|
|
103
|
+
- **Storybook 8** for visual testing + interaction tests + Chromatic visual regression
|
|
104
|
+
- Test the behavior, not implementation. `userEvent.click()`, not `wrapper.find('.btn').trigger('click')`.
|
|
105
|
+
|
|
106
|
+
## Output format
|
|
107
|
+
|
|
108
|
+
When asked to build a component:
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
## Component: <name>
|
|
112
|
+
|
|
113
|
+
### Props
|
|
114
|
+
| Name | Type | Required | Default | Notes |
|
|
115
|
+
|
|
116
|
+
### Implementation
|
|
117
|
+
[full code with TypeScript types]
|
|
118
|
+
|
|
119
|
+
### Storybook story
|
|
120
|
+
[story file]
|
|
121
|
+
|
|
122
|
+
### Test
|
|
123
|
+
[Vitest + Testing Library spec]
|
|
124
|
+
|
|
125
|
+
### Accessibility notes
|
|
126
|
+
- <what was done + WCAG criteria met>
|
|
127
|
+
|
|
128
|
+
### Performance notes
|
|
129
|
+
- <bundle impact, render cost>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Anti-patterns (qadağa)
|
|
133
|
+
|
|
134
|
+
- `useEffect` for derived state (use `useMemo` / computed)
|
|
135
|
+
- `useState` for server data (use TanStack Query)
|
|
136
|
+
- Class components in new code
|
|
137
|
+
- Inline styles + arbitrary Tailwind (`style={{ }}`, `text-[#1a2b3c]`) when tokens exist
|
|
138
|
+
- Touching DOM directly (`document.querySelector`) — use refs
|
|
139
|
+
- Skipping types (`any`, `as unknown as X`)
|
|
140
|
+
- Components > 200 lines — split into smaller pieces
|
|
141
|
+
|
|
142
|
+
## Sources
|
|
143
|
+
|
|
144
|
+
- React docs (react.dev), Next.js docs (nextjs.org)
|
|
145
|
+
- Web.dev (Core Web Vitals, performance)
|
|
146
|
+
- WCAG 2.2 specification (w3.org/TR/WCAG22/)
|
|
147
|
+
- TanStack docs (tanstack.com)
|