@appsforgood/next-supabase-kit 0.4.3 → 0.4.5
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 +12 -0
- package/USER_GUIDE.html +65 -12
- package/USER_GUIDE.md +47 -11
- package/agents/app-engineer/agent.md +1 -1
- package/agents/design/agent.md +14 -6
- package/agents/optional/deploy/agent.md +1 -1
- package/agents/qa/agent.md +5 -2
- package/agents/security/agent.md +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/examples/next-supabase-installed/.agent-kit/manifest.json +45 -45
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/browser-qa.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/frontend.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/ship.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/test.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/runtime-skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/.antigravity/runtime-skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/.antigravity/runtime-skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/.antigravity/runtime-skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/.antigravity/runtime-skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/.antigravity/runtime-skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/.claude/agents/app-engineer.md +1 -1
- package/examples/next-supabase-installed/.claude/agents/design.md +14 -6
- package/examples/next-supabase-installed/.claude/agents/qa.md +5 -2
- package/examples/next-supabase-installed/.claude/agents/security.md +1 -1
- package/examples/next-supabase-installed/.codex/agents/app-engineer.toml +1 -1
- package/examples/next-supabase-installed/.codex/agents/design.toml +15 -7
- package/examples/next-supabase-installed/.codex/agents/qa.toml +5 -2
- package/examples/next-supabase-installed/.codex/agents/security.toml +1 -1
- package/examples/next-supabase-installed/.cursor/agents/app-engineer.md +1 -1
- package/examples/next-supabase-installed/.cursor/agents/design.md +14 -6
- package/examples/next-supabase-installed/.cursor/agents/qa.md +5 -2
- package/examples/next-supabase-installed/.cursor/agents/security.md +1 -1
- package/examples/next-supabase-installed/.cursor/skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/.cursor/skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/.cursor/skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/.cursor/skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/.cursor/skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/.cursor/skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/AGENTS.md +2 -1
- package/examples/next-supabase-installed/USER_GUIDE.html +65 -12
- package/examples/next-supabase-installed/USER_GUIDE.md +47 -11
- package/examples/next-supabase-installed/skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/tree.txt +12 -0
- package/package.json +1 -1
- package/research/agent-skill-gap-report.md +4 -0
- package/skills/accessibility-wcag/SKILL.md +66 -9
- package/skills/browser-qa/SKILL.md +1 -0
- package/skills/frontend-design/SKILL.md +146 -14
- package/skills/optional/ui-polish/SKILL.md +2 -2
- package/skills/planning/SKILL.md +6 -5
- package/skills/ship/SKILL.md +53 -8
- package/skills/testing-qa/SKILL.md +52 -13
- package/templates/next-supabase/AGENTS.md +2 -1
|
@@ -1,21 +1,121 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-design
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Use when setting up design on a new repo, or building, reviewing, or auditing UI. Name the mode (setup, build, review, or detect). Setup asks what the user needs, then recommends principles before CSS.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Frontend Design
|
|
7
7
|
|
|
8
8
|
Build or review a screen as if a stranger must name the product from the first viewport. Simple and specific beats decorated.
|
|
9
9
|
|
|
10
|
-
Scan 2026-09-
|
|
10
|
+
Scan 2026-09-12 (structure only, no bodies copied): Anthropic `frontend-design` (2026-06), addyosmani `frontend-ui-engineering`, `educlopez/ui-craft`, `funboy322/avoid-ai-design`, `superdesigndev/superdesign-skill`, `google-labs-code/design.md`. Do not install their CLIs, canvases, MCP servers, or slash-command catalogs.
|
|
11
11
|
|
|
12
12
|
## Use when
|
|
13
13
|
|
|
14
|
-
Any user-facing layout, component, HTML page, or “it looks generic.” Required for `USER_GUIDE.html` and for app screens.
|
|
14
|
+
Any user-facing layout, component, HTML page, or “it looks generic.” Required for `USER_GUIDE.html` and for app screens. Also required on a **new repo** or first UI job when `DESIGN.md` is missing or TBD — run `setup` before CSS.
|
|
15
|
+
|
|
16
|
+
## Mode
|
|
17
|
+
|
|
18
|
+
Name the mode before CSS. Default is `setup` when `DESIGN.md` is missing or TBD, `review` when the UI already exists, `build` when it does not.
|
|
19
|
+
|
|
20
|
+
| Mode | Do |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `setup` | New repo or missing/TBD `DESIGN.md`. Scan, then ask what they need. Recommend from the answers. Record principles and style-guide rules only after that. No CSS unless they then ask to build. |
|
|
23
|
+
| `build` | Write tokens and one layout idea, then CSS. Screenshot after. |
|
|
24
|
+
| `review` | Screenshot first. Findings table, then fix P0s. |
|
|
25
|
+
| `detect` | Audit only. No edits. Use when asked to scan, flag, or not change code. |
|
|
26
|
+
|
|
27
|
+
## Surface
|
|
28
|
+
|
|
29
|
+
Pick one profile and stay at that depth. Setup names a likely surface after the scan; it does not require one before questions.
|
|
30
|
+
|
|
31
|
+
| Profile | Depth |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| `landing` / standalone artifact | Full direction. Spend boldness once. |
|
|
34
|
+
| `app-chrome` | Quiet and dense. Loading, empty, error, and success before decoration. |
|
|
35
|
+
| `inside-design-system` | Surgical. Keep tokens and primitives. Swap tells; do not invent a second brand. |
|
|
36
|
+
| `kit-html` | This pack’s charcoal assignment desk. Not a SaaS landing page. |
|
|
37
|
+
|
|
38
|
+
## Setup (new repo)
|
|
39
|
+
|
|
40
|
+
Run this when any of these is true: `DESIGN.md` is missing; it is still TBD / `[product]` / “your product”; the user asked to set up design, a style guide, or principles; this is first UI work after `init`.
|
|
41
|
+
|
|
42
|
+
The job is **asking good questions so you know what they need**. Docs and tokens are the record of that conversation. Do **not** dump a 17-doc council template. Do **not** paste this kit’s charcoal desk onto the product. `init` does not install `DESIGN.md`.
|
|
43
|
+
|
|
44
|
+
### 1. Scan first — do not re-ask what you can read
|
|
45
|
+
|
|
46
|
+
Read enough to name:
|
|
47
|
+
|
|
48
|
+
- Product name and one-line job from README / `package.json`
|
|
49
|
+
- Router: App Router (`app/`) vs Pages (`pages/`)
|
|
50
|
+
- Styling: Tailwind, CSS modules, CSS variables, shadcn/ui, Radix, other component library
|
|
51
|
+
- Fonts: `next/font`, self-hosted, or unset
|
|
52
|
+
- Auth or first useful screens (login, invite, empty app)
|
|
53
|
+
- Existing tokens in `globals.css`, Tailwind theme, or a mature `STYLE_GUIDE.md`
|
|
54
|
+
|
|
55
|
+
Report the architecture in a short list, then ask. If a real visual system already exists, stay surgical (`inside-design-system`) and offer to record it rather than invent a second brand.
|
|
56
|
+
|
|
57
|
+
### 2. Ask what they need
|
|
58
|
+
|
|
59
|
+
Setup is an interview. Use the scan as context, not as a quiz.
|
|
60
|
+
|
|
61
|
+
**How to ask**
|
|
62
|
+
|
|
63
|
+
- One message, in their language (the work, the person), not ours (hex, motion budget, “three personality traits”).
|
|
64
|
+
- Skip anything they already answered or the scan already settled.
|
|
65
|
+
- If an answer is vague (“make it modern,” “make it pop”), ask one follow-up: *what should a stranger see, and what would be the wrong product?*
|
|
66
|
+
- Do not ask them to pick a hex, a font, or a motion budget until you know the need.
|
|
67
|
+
- Public words still belong to Copy.
|
|
68
|
+
|
|
69
|
+
**Need questions** (ask these; drop any they already covered)
|
|
70
|
+
|
|
71
|
+
1. What are we setting up, and what do you need from this pass — principles, a style guide, a first-screen direction, or all of it?
|
|
72
|
+
2. Who has to succeed, and what are they trying to finish?
|
|
73
|
+
3. On the first useful screen, what must they be able to do?
|
|
74
|
+
4. What is already decided — brand, components, legal, accessibility — and what must it *not* look like?
|
|
75
|
+
5. When this works, what is in front of them? When it fails, what did we get wrong?
|
|
76
|
+
|
|
77
|
+
Listen. Follow up once if needed. Then recommend.
|
|
78
|
+
|
|
79
|
+
### 3. Recommend from the answers, then pause
|
|
80
|
+
|
|
81
|
+
Best practices are tailored, not a canned list. Always include:
|
|
82
|
+
|
|
83
|
+
- The **need** you heard, in one sentence.
|
|
84
|
+
- **Principles (4–6)** that serve that need. Default bar unless they overrode it: first screen = the work; one field, one ink, one accent, one line; states before decoration; WCAG 2.1 AA contrast (4.5:1 text); match the existing stack; no left-edge selection rails.
|
|
85
|
+
- **Visual direction** only if they asked for one: a token recipe from Color below that fits *this* domain, or a surgical pass if shadcn/existing tokens already exist. Downstream apps never copy kit charcoal `#10100e`. Two one-sentence options and a pick.
|
|
86
|
+
- **Anti-references** in their words, plus any 2026 defaults that would make this the wrong product.
|
|
87
|
+
- What you will write vs what can wait.
|
|
88
|
+
|
|
89
|
+
Pause for confirm. If the session is non-interactive, or the user said to proceed, **state assumptions** and continue.
|
|
90
|
+
|
|
91
|
+
### 4. Record what they need — no CSS yet
|
|
92
|
+
|
|
93
|
+
Write only the files this pass called for. Default, when they want a style guide and principles, is a **short** product `DESIGN.md` (not the 160-line kit template):
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
# DESIGN.md
|
|
97
|
+
|
|
98
|
+
## Need
|
|
99
|
+
## Product
|
|
100
|
+
## Who it is for
|
|
101
|
+
## First-screen job
|
|
102
|
+
## Architecture found
|
|
103
|
+
## Principles
|
|
104
|
+
## Tokens
|
|
105
|
+
| Token | Value | Use |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
## Anti-references
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`STYLE_GUIDE.md`: if missing, write a short **Frontend (product)** section (tokens live in `DESIGN.md`, states, stack, anti-slop). If a mature guide already exists, **append** that section — do not overwrite.
|
|
111
|
+
|
|
112
|
+
Then stop. If they asked to build a screen, switch to `build`. Setup does **not** require screenshots when nothing can render yet. Do not drop `requiredTools` on the Design agent.
|
|
15
113
|
|
|
16
114
|
## Ground in the subject
|
|
17
115
|
|
|
18
|
-
Name the product, the user, and this screen’s job before CSS. Tokens come from the domain (materials, time of day, one real object) — not from a theme pack. A toy store and a ledger cannot share a palette.
|
|
116
|
+
Name the product, the user, and this screen’s job before CSS. Read `DESIGN.md` when it exists — tokens there are normative; prose is how to apply them. Tokens come from the domain (materials, time of day, one real object) — not from a theme pack. A toy store and a ledger cannot share a palette.
|
|
117
|
+
|
|
118
|
+
Match the project’s stack (CSS variables, Tailwind, existing component library). Do not mix a second styling approach.
|
|
19
119
|
|
|
20
120
|
**This kit’s HTML** (`USER_GUIDE.html`): charcoal assignment desk.
|
|
21
121
|
|
|
@@ -40,7 +140,7 @@ One field, one ink, one accent, one line. That is enough.
|
|
|
40
140
|
|
|
41
141
|
1. **Dominant field** (~80%): the page. Flat. Not a gradient, not a mesh.
|
|
42
142
|
2. **Ink** (~15%): body text. Contrast ≥ 4.5:1 (3:1 for large type).
|
|
43
|
-
3. **Accent** (~5%): one action or one required state. Recolor-as-decoration fails.
|
|
143
|
+
3. **Accent** (~5%): one action or one required state. A few placements in the first viewport (primary CTA, one required/fail). Recolor-as-decoration fails.
|
|
44
144
|
4. **Line / well**: borders and code wells, one step off the field.
|
|
45
145
|
|
|
46
146
|
Recipes (pick one that fits the product, then stop):
|
|
@@ -87,23 +187,55 @@ None, or one moment that answers a click. Fade-and-slide on every section is gen
|
|
|
87
187
|
|
|
88
188
|
## Process
|
|
89
189
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
190
|
+
If mode is `setup`, follow **Setup** instead of this list.
|
|
191
|
+
|
|
192
|
+
1. Name the mode, the surface profile, the product, the user, and the job of this screen.
|
|
193
|
+
2. Read `DESIGN.md` and existing tokens if they exist. If the brief names a look, follow it — including when it asks for a 2026 default.
|
|
194
|
+
3. Write the 4–6 tokens and one-sentence layout idea (build), or skip to screenshots (review/detect).
|
|
195
|
+
4. Check the plan is not a 2026 default (cream editorial, neon-on-black decoration, SaaS card kit, newsprint desk, last week’s “tasteful” swap). If it is and the brief did not ask, change one axis: field, accent, or structure.
|
|
196
|
+
5. Build or rewrite at the profile’s depth. Spend boldness once. Remove one accessory.
|
|
197
|
+
6. Screenshot desktop (~1280) and mobile (~390). Fix from pixels. Ask: would a stranger believe a person chose this?
|
|
198
|
+
7. If you cannot render, mark visual findings **inferred** and say so. Code-level tells (literal `from-indigo-500`, Inter, untouched shadcn zinc) stay **code-certain**.
|
|
95
199
|
|
|
96
200
|
## Checks
|
|
97
201
|
|
|
98
202
|
- A stranger can name the product from the first screen.
|
|
99
|
-
- Loading, empty, error, disabled, success exist where the flow has them.
|
|
100
|
-
- Focus visible, tap targets usable.
|
|
203
|
+
- Loading, empty, error, disabled, success exist where the flow has them. Color is not the only state signal.
|
|
204
|
+
- Focus visible, tap targets usable. Keyboard order matches visual order. Keyboard, labels, and contrast fail-closed live in `accessibility-wcag` — a pretty screenshot is not a keyboard pass.
|
|
101
205
|
- Copy on the screen is real. If words are public-facing, Copy runs `deslop` last.
|
|
102
206
|
|
|
207
|
+
## Review output
|
|
208
|
+
|
|
209
|
+
For `review` and `detect`, use a table. Do not approve from a vibe.
|
|
210
|
+
|
|
211
|
+
| Severity | Finding | Where | Confidence |
|
|
212
|
+
| --- | --- | --- | --- |
|
|
213
|
+
| P0 | Layperson would call it AI-made, or it blocks use | screenshot or file | code-certain / inferred |
|
|
214
|
+
| P1 | A designer would notice | screenshot or file | code-certain / inferred |
|
|
215
|
+
| P2 | Craft gap | screenshot or file | code-certain / inferred |
|
|
216
|
+
|
|
217
|
+
P0 list lives in `deslop`. A clean catalog pass is necessary but not enough: the result must still look chosen for this product.
|
|
218
|
+
|
|
219
|
+
## Reject
|
|
220
|
+
|
|
221
|
+
- Approving UI from TSX or HTML alone.
|
|
222
|
+
- Starting CSS on a new product before `setup` when `DESIGN.md` is missing or TBD.
|
|
223
|
+
- Quizzing them on hex, fonts, or motion before you know what they need.
|
|
224
|
+
- Writing `DESIGN.md` from a template without asking what this setup is for.
|
|
225
|
+
- Overwriting a mature `STYLE_GUIDE.md`.
|
|
226
|
+
- Pasting this kit’s charcoal desk onto a downstream product.
|
|
227
|
+
- Installing a design MCP, canvas CLI, or slash-command pack to “do design.”
|
|
228
|
+
- Detect-mode edits.
|
|
229
|
+
- A full rebuild inside an existing design system when a surgical pass would do.
|
|
230
|
+
- Mesh gradients, noise overlays, and decorative atmosphere as the default “bold” move (older `frontend-design` forks). The brief can ask; the model must not invent it.
|
|
231
|
+
- “We’ll make it distinctive later.” Use the product’s tokens now.
|
|
232
|
+
|
|
103
233
|
## Tools
|
|
104
234
|
|
|
105
|
-
`browser` + `screenshot` + `image-review` first
|
|
235
|
+
`browser` + `screenshot` + `image-review` first for `build`, `review`, and `detect`. Do not approve UI from TSX or HTML alone. Setup may skip capture when nothing can render yet.
|
|
106
236
|
|
|
107
237
|
## Done when
|
|
108
238
|
|
|
109
|
-
|
|
239
|
+
**Setup:** architecture was reported, need questions were asked (and followed up if vague) or assumptions stated, recommendations match what they need, and the files this pass called for were written. No unsolicited CSS. Screenshots are not required if nothing can render.
|
|
240
|
+
|
|
241
|
+
**Build / review / detect:** Mode and surface were named. Desktop and mobile images were read (or detect listed what could not be rendered). Token list is in the change or in `DESIGN.md`. No P0 slop from `deslop` remains unless Design names it as an accepted exception. Detect ends with the table and no file edits.
|
|
@@ -16,11 +16,12 @@ Planning, roadmaps, “what should we do,” or any request that needs an owner.
|
|
|
16
16
|
3. Name the skill that owner must run first:
|
|
17
17
|
- App engineer: `nextjs-app-router` and, if data/auth, `supabase-auth-rls` / `postgres-migrations`
|
|
18
18
|
- Security: `owasp-security-review` + `supabase-auth-rls`
|
|
19
|
-
- Design: `frontend-design`
|
|
20
|
-
- QA: `browser-qa` (screens)
|
|
19
|
+
- Design: `frontend-design` (name setup, build, review, or detect) and, for screens, `accessibility-wcag`
|
|
20
|
+
- QA: `browser-qa` (screens), `testing-qa` (commands), `accessibility-wcag` for user-facing screens, and `ship` for a release go/no-go
|
|
21
21
|
- Copy: `product-copy` then `deslop` last
|
|
22
|
-
4.
|
|
23
|
-
5.
|
|
22
|
+
4. If the work is user-visible and `DESIGN.md` is missing, TBD, or the user asked for a style guide / principles: owner is Design in `setup` first. Design must ask what they need before inventing tokens. Do not let App engineer invent tokens.
|
|
23
|
+
5. Add extra reviewers: Security for auth/data/secrets, Design for UI, QA for behavior/UI, Copy for public words.
|
|
24
|
+
6. If the change is user-visible, list the desktop and mobile screenshots QA must capture. Setup may skip screenshots when nothing can render yet.
|
|
24
25
|
|
|
25
26
|
## Done when
|
|
26
27
|
|
|
@@ -28,4 +29,4 @@ Owner, extra reviewers, required skills, preserved behavior, and required screen
|
|
|
28
29
|
|
|
29
30
|
## Reject
|
|
30
31
|
|
|
31
|
-
Implementing in the planning pass. Asking one chat to play every role. Skipping `supabase-auth-rls` because “it’s just a table.” Skipping `nextjs-app-router` because the route is small.
|
|
32
|
+
Implementing in the planning pass. Asking one chat to play every role. Skipping `supabase-auth-rls` because “it’s just a table.” Skipping `nextjs-app-router` because the route is small. Skipping Design `setup` on a new product UI because “we’ll pick colors in CSS.” Skipping `accessibility-wcag` because “contrast looks fine in the screenshot.” Skipping `testing-qa` because “we’ll add tests later” on auth/RLS. Skipping `ship` because “LGTM, ship it.”
|
|
@@ -1,22 +1,67 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ship
|
|
3
|
-
description: Use before
|
|
3
|
+
description: Use before deploy, promote, rollback, or when someone says LGTM, ship it. Go or no-go. Name env, migration order, rollback, commands run. User-visible still needs browser-qa screenshot paths.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Ship
|
|
7
7
|
|
|
8
|
+
This skill is **go / no-go**. Commands live in `testing-qa`. Screenshots live in `browser-qa`. Keyboard pass lives in `accessibility-wcag`. Policies live in `supabase-auth-rls`. Schema order lives in `postgres-migrations`. Secrets and OWASP live in `owasp-security-review`. This skill does not replace those.
|
|
9
|
+
|
|
8
10
|
## Use when
|
|
9
11
|
|
|
10
|
-
Preparing to deploy, promote, or
|
|
12
|
+
Preparing to deploy, promote, roll back, or cut a production release. Also when someone says “ship it”, “LGTM”, “is this ready?”, “promote preview”, or “rollback”.
|
|
13
|
+
|
|
14
|
+
Not a substitute for writing the feature. Run this **after** the owning specialists finish. QA names the verdict; App engineer names env and the app rollback; Security names secrets and RLS.
|
|
15
|
+
|
|
16
|
+
## Do
|
|
17
|
+
|
|
18
|
+
1. Name the target (`preview` / `production` / named env) and what commit or deployment is going out.
|
|
19
|
+
2. List production-critical **env var names** (not values). Confirm they exist on that target. Flag any `NEXT_PUBLIC_` secret or service role on the client.
|
|
20
|
+
3. Name migration order. If schema changed, say whether the migration already ran and how to reverse it (`postgres-migrations`). Do not drop a column the live app still reads.
|
|
21
|
+
4. Run `testing-qa`: list commands actually run. Smoke of the primary path is required for a go.
|
|
22
|
+
5. If anything user-visible changed: attach `browser-qa` desktop + mobile paths. For screens, `accessibility-wcag` already ran. Missing paths are a no-go.
|
|
23
|
+
6. Return **go** or **no-go** with gaps. Do not imply go by omitting the word.
|
|
11
24
|
|
|
12
25
|
## Checks
|
|
13
26
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
| Area | Pass |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| Target | Preview vs production (or named env) is explicit. |
|
|
30
|
+
| Env | Critical names listed. Values are not pasted into the verdict. |
|
|
31
|
+
| Secrets | No secrets in git, `NEXT_PUBLIC_*`, client bundle, or logs. Service role stays server-only. |
|
|
32
|
+
| Migrations | Order named. Rollback named, or expand/contract reverse named. Empty “N/A” only if schema did not change. |
|
|
33
|
+
| Commands | `testing-qa` list with results. Smoke of the primary path (login or the workflow being released). |
|
|
34
|
+
| UI | User-visible changes have `qa-evidence/<date>-<slug>/desktop.png` and `mobile.png`. |
|
|
35
|
+
| Host | If this app is on Vercel (or similar), name preview vs production and how to restore the previous deployment. Do not require a Vercel CLI install from this kit. |
|
|
36
|
+
|
|
37
|
+
## Evidence
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
verdict: go | no-go
|
|
41
|
+
target: preview | production
|
|
42
|
+
commands:
|
|
43
|
+
- npx vitest run # pass
|
|
44
|
+
- npm run smoke # pass
|
|
45
|
+
env: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY set; SERVICE_ROLE not in client
|
|
46
|
+
migrations: 0012_widgets applied; rollback = reverse 0012 / expand-contract reverse
|
|
47
|
+
rollback:
|
|
48
|
+
app: previous production deployment / git revert <sha>
|
|
49
|
+
db: do not drop 0012 in this release if the app still reads it
|
|
50
|
+
browser-qa: qa-evidence/2026-09-13-settings/desktop.png, mobile.png
|
|
51
|
+
gaps: none | named
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Reject
|
|
55
|
+
|
|
56
|
+
- “LGTM, ship it” (or “looks good, deploy”) with no env list, no rollback, and no commands.
|
|
57
|
+
- User-visible release without `browser-qa` screenshot **paths**.
|
|
58
|
+
- “We’ll set env in the dashboard later” or shipping with placeholder secrets.
|
|
59
|
+
- `SUPABASE_SERVICE_ROLE_KEY` (or any secret) in `NEXT_PUBLIC_*`, the repo, or a client bundle.
|
|
60
|
+
- Skipping rollback because “it’s a small change” or “we can just migrate forward.”
|
|
61
|
+
- Treating `toBeVisible` or “tests pass” as the ship gate. Use `testing-qa` and, for UI, `browser-qa`.
|
|
62
|
+
- Replacing `testing-qa`, `browser-qa`, `postgres-migrations`, `supabase-auth-rls`, or `owasp-security-review` with this skill.
|
|
63
|
+
- Pasting secret **values** into the go/no-go note.
|
|
19
64
|
|
|
20
65
|
## Done when
|
|
21
66
|
|
|
22
|
-
Go
|
|
67
|
+
Go or no-go is explicit. Commands run, env names, migration order, and rollback are named. User-visible work has `browser-qa` screenshot paths. Secrets were not written into the verdict.
|
|
@@ -1,29 +1,68 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testing-qa
|
|
3
|
-
description: Use when adding unit, regression, or smoke tests. Visual proof of a screen always also uses browser-qa.
|
|
3
|
+
description: Use when adding unit, regression, or smoke tests, or when someone says tests pass without listing commands. Visual proof of a screen always also uses browser-qa. RLS tests must fail when another user can read the row.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Testing QA
|
|
7
7
|
|
|
8
|
+
This skill is **commands**. Screenshots live in `browser-qa`. Keyboard pass lives in `accessibility-wcag`. Policies live in `supabase-auth-rls`. Do not replace those.
|
|
9
|
+
|
|
8
10
|
## Use when
|
|
9
11
|
|
|
10
|
-
Adding or reviewing tests, smoke
|
|
12
|
+
Adding or reviewing tests, smoke, regression, “is this tested?”, or “tests pass.”
|
|
13
|
+
|
|
14
|
+
## Do
|
|
15
|
+
|
|
16
|
+
1. Name the kinds this change needs: unit, regression, smoke. Skip kinds that do not apply; do not skip RLS/auth when data is involved.
|
|
17
|
+
2. Run the commands that already exist in this repo (`package.json` scripts). Do not invent a second test runner.
|
|
18
|
+
3. For auth, RLS, or mutations: include a **negative** that fails when another user or anon can read or write the row.
|
|
19
|
+
4. List what ran, the result, and gaps. If the harness is missing, name it; do not skip silently.
|
|
20
|
+
5. User-visible work still goes to `browser-qa` (and `accessibility-wcag` for screens). Playwright `toBeVisible` is not that handoff.
|
|
21
|
+
|
|
22
|
+
## Kinds
|
|
23
|
+
|
|
24
|
+
| Kind | What | Not |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| Unit | Core logic, schema validation, helpers | A screenshot |
|
|
27
|
+
| Regression | Preserved behavior still holds | Rewriting the old test to match a bug |
|
|
28
|
+
| Smoke | Critical path against a running app (login, primary workflow) | `browser-qa` image review |
|
|
29
|
+
|
|
30
|
+
Smoke may use Playwright if the repo already has it. `toBeVisible` proves a node is in the DOM, not that the screen is correct.
|
|
31
|
+
|
|
32
|
+
## Auth / RLS
|
|
33
|
+
|
|
34
|
+
`supabase-auth-rls` owns the policy. This skill requires a test that would **fail** if another signed-in user can `select` / `update` / `delete` the row, or if anon can read a private row. A hidden button is not a test of access.
|
|
35
|
+
|
|
36
|
+
Shape (adapt to the repo’s harness):
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// Must fail the job if RLS is missing or too open
|
|
40
|
+
const { data } = await asOtherUser().from("widgets").select().eq("id", ownerRowId);
|
|
41
|
+
expect(data ?? []).toHaveLength(0);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`ENABLE ROW LEVEL SECURITY` without that negative is not coverage.
|
|
11
45
|
|
|
12
|
-
|
|
46
|
+
If the change is App Router, Auth/RLS, or a migration, tests must cover those contracts. This skill does not replace `nextjs-app-router`, `supabase-auth-rls`, `postgres-migrations`, or `owasp-security-review`.
|
|
13
47
|
|
|
14
|
-
|
|
15
|
-
- Preserved behavior has regression tests.
|
|
16
|
-
- Critical flows have Playwright or equivalent smoke tests.
|
|
17
|
-
- Auth, RLS, and mutation paths are prioritized (other-user / anon cannot pass).
|
|
18
|
-
- Network failure, empty, and error behavior is covered.
|
|
19
|
-
- Gaps are named when infrastructure is missing.
|
|
48
|
+
## Evidence
|
|
20
49
|
|
|
21
|
-
|
|
50
|
+
```text
|
|
51
|
+
commands:
|
|
52
|
+
- npx vitest run tests/rls.test.ts # pass
|
|
53
|
+
- npm run smoke:install # pass
|
|
54
|
+
gaps: no Playwright harness yet; named
|
|
55
|
+
```
|
|
22
56
|
|
|
23
|
-
##
|
|
57
|
+
## Reject
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
- `toBeVisible` (or “the test found the button”) as visual proof. Use `browser-qa`.
|
|
60
|
+
- “Tests pass” with no command list and no results.
|
|
61
|
+
- Skipping RLS/auth tests because “it’s just a table” or “we’ll add tests later.”
|
|
62
|
+
- Replacing `browser-qa` or `accessibility-wcag` with this skill.
|
|
63
|
+
- A green suite that would still pass if another user could read the row.
|
|
64
|
+
- Adding Playwright as a required install of this kit. Use it when the repo already has it.
|
|
26
65
|
|
|
27
66
|
## Done when
|
|
28
67
|
|
|
29
|
-
Commands run, results, and residual gaps are listed. RLS/auth tests fail closed when another user can read the row.
|
|
68
|
+
Commands run, results, and residual gaps are listed. RLS/auth tests fail closed when another user or anon can read the row. User-visible work still has `browser-qa` evidence.
|
|
@@ -16,6 +16,7 @@ A user-visible change is not done until someone opened the running UI, captured
|
|
|
16
16
|
| Implement Next.js or Supabase | `@app-engineer` |
|
|
17
17
|
| Auth, RLS, secrets, OWASP | `@security` |
|
|
18
18
|
| UI looks wrong / generic | `@design` |
|
|
19
|
+
| Style guide / first UI / no DESIGN.md | `@design` (setup) |
|
|
19
20
|
| Is this done? | `@qa` |
|
|
20
21
|
| Headlines, CTAs, empty states | `@copy` |
|
|
21
22
|
|
|
@@ -23,7 +24,7 @@ Do not ask one chat to be all six.
|
|
|
23
24
|
|
|
24
25
|
## Handoff
|
|
25
26
|
|
|
26
|
-
Planner names the owner. Security joins auth/data/secret work. Design joins user-facing screens. QA joins any behavior or UI change and **must use the browser**. Copy joins public/conversion copy. Stop there.
|
|
27
|
+
Planner names the owner. Security joins auth/data/secret work. Design joins user-facing screens and first-run style-guide setup. QA joins any behavior or UI change and **must use the browser**. Copy joins public/conversion copy. Stop there.
|
|
27
28
|
|
|
28
29
|
## Skills
|
|
29
30
|
|
|
@@ -509,6 +509,14 @@
|
|
|
509
509
|
<button class="copy" type="button" data-copy-from="plan-prompt">Copy Planner prompt</button>
|
|
510
510
|
</div>
|
|
511
511
|
</article>
|
|
512
|
+
<article class="ticket">
|
|
513
|
+
<header><span>New repo — paste this to Design so it asks what you need</span></header>
|
|
514
|
+
<pre id="design-setup-prompt">
|
|
515
|
+
Act as design. This is a new repo. Scan what is already here, then ask me what we need to set up: who it is for, what they must get done, and what you should produce. Recommend from my answers. Write the style guide and principles with me before any CSS.</pre>
|
|
516
|
+
<div class="copy-row">
|
|
517
|
+
<button class="copy" type="button" data-copy-from="design-setup-prompt">Copy Design setup prompt</button>
|
|
518
|
+
</div>
|
|
519
|
+
</article>
|
|
512
520
|
</div>
|
|
513
521
|
<p>
|
|
514
522
|
You should get a named owner (<code>app-engineer</code>, <code>security</code>, <code>design</code>, <code>qa</code>, or <code>copy</code>) and, if
|
|
@@ -544,6 +552,10 @@
|
|
|
544
552
|
<td>It looks wrong</td>
|
|
545
553
|
<td>Design</td>
|
|
546
554
|
</tr>
|
|
555
|
+
<tr>
|
|
556
|
+
<td>Style guide / first UI / no DESIGN.md</td>
|
|
557
|
+
<td>Design (<code>setup</code>)</td>
|
|
558
|
+
</tr>
|
|
547
559
|
<tr>
|
|
548
560
|
<td>Is this done?</td>
|
|
549
561
|
<td>QA</td>
|
|
@@ -586,11 +598,11 @@
|
|
|
586
598
|
</tr>
|
|
587
599
|
<tr>
|
|
588
600
|
<td><code>frontend-design</code></td>
|
|
589
|
-
<td>
|
|
601
|
+
<td>Setup, build, review, or detect UI. Tokens first. Anti-generic</td>
|
|
590
602
|
</tr>
|
|
591
603
|
<tr>
|
|
592
604
|
<td><code>accessibility-wcag</code></td>
|
|
593
|
-
<td>Keyboard
|
|
605
|
+
<td>Keyboard pass in the running browser. Contrast, labels. Not a screenshot guess</td>
|
|
594
606
|
</tr>
|
|
595
607
|
<tr>
|
|
596
608
|
<td><code>browser-qa</code></td>
|
|
@@ -598,7 +610,7 @@
|
|
|
598
610
|
</tr>
|
|
599
611
|
<tr>
|
|
600
612
|
<td><code>testing-qa</code></td>
|
|
601
|
-
<td>Unit / regression / smoke
|
|
613
|
+
<td>Unit / regression / smoke. List commands run. Not screenshots</td>
|
|
602
614
|
</tr>
|
|
603
615
|
<tr>
|
|
604
616
|
<td><code>product-copy</code></td>
|
|
@@ -610,13 +622,14 @@
|
|
|
610
622
|
</tr>
|
|
611
623
|
<tr>
|
|
612
624
|
<td><code>ship</code></td>
|
|
613
|
-
<td>
|
|
625
|
+
<td>Go / no-go. Env, rollback, commands. UI needs screenshot paths</td>
|
|
614
626
|
</tr>
|
|
615
627
|
</tbody>
|
|
616
628
|
</table>
|
|
617
629
|
<p>
|
|
618
|
-
QA of a screen always uses <code>browser-qa</code>, not <code>testing-qa</code> alone.
|
|
619
|
-
<code>
|
|
630
|
+
QA of a screen always uses <code>browser-qa</code>, not <code>testing-qa</code> alone. User-facing screens also run
|
|
631
|
+
<code>accessibility-wcag</code> (keyboard in the browser, not a contrast guess from the screenshot). Each agent file names the skills it must run,
|
|
632
|
+
then points at <code>catalog.json</code> for the rest.
|
|
620
633
|
</p>
|
|
621
634
|
</section>
|
|
622
635
|
|
|
@@ -680,19 +693,58 @@ Act as the QA agent. Use the browser-qa skill. Do not review code alone. Open th
|
|
|
680
693
|
<li>Planner — paste the prompt on ticket 03.</li>
|
|
681
694
|
<li>App engineer — <code>Implement the plan. Smoke the changed route in the browser before you hand off.</code></li>
|
|
682
695
|
<li>Security if data, auth, or secrets changed.</li>
|
|
683
|
-
<li>
|
|
684
|
-
|
|
696
|
+
<li>
|
|
697
|
+
Design if the UI changed —
|
|
698
|
+
<code
|
|
699
|
+
>Act as design. Name the mode (setup, build, review, or detect). Review the running UI from screenshots first. Desktop and mobile. Reject generic
|
|
700
|
+
AI-looking layout.</code
|
|
701
|
+
>
|
|
702
|
+
If <code>DESIGN.md</code> is missing, run setup first.
|
|
703
|
+
</li>
|
|
704
|
+
<li>QA — paste the good prompt below. For screens, also run <code>accessibility-wcag</code>.</li>
|
|
685
705
|
</ol>
|
|
686
|
-
<p>Done when QA attaches both frames plus a verdict.</p>
|
|
706
|
+
<p>Done when QA attaches both frames plus a verdict, and the changed flow passed a keyboard-only check.</p>
|
|
687
707
|
<h3>Auth / RLS</h3>
|
|
688
708
|
<p>
|
|
689
709
|
Planner → App engineer → Security → QA. QA must open login, logout, and denied in the browser. Screenshots still required when the finding is
|
|
690
710
|
user-visible.
|
|
691
711
|
</p>
|
|
712
|
+
<h3>New repo design setup</h3>
|
|
713
|
+
<p>After <code>init</code>, before the first product CSS, paste to Design:</p>
|
|
714
|
+
<pre id="design-setup-flow">
|
|
715
|
+
Act as design. This is a new repo. Scan what is already here, then ask me what we need to set up: who it is for, what they must get done, and what you should produce. Recommend from my answers. Write the style guide and principles with me before any CSS.</pre>
|
|
716
|
+
<div class="copy-row">
|
|
717
|
+
<button class="copy" type="button" data-copy-from="design-setup-flow">Copy Design setup prompt</button>
|
|
718
|
+
</div>
|
|
719
|
+
<p>
|
|
720
|
+
Design scans the stack, then asks what you need. Recommendations come from those answers. It writes a short product <code>DESIGN.md</code> and
|
|
721
|
+
frontend <code>STYLE_GUIDE.md</code> rules only after that. It does not paste this kit’s charcoal desk onto the app. Screenshots wait until there is a
|
|
722
|
+
screen to capture.
|
|
723
|
+
</p>
|
|
692
724
|
<h3>UI polish</h3>
|
|
693
|
-
<p>
|
|
725
|
+
<p>
|
|
726
|
+
Design + <code>frontend-design</code> + <code>accessibility-wcag</code> + <code>browser-qa</code>. Name setup, build, review, or detect. Desktop and
|
|
727
|
+
mobile once a screen exists. One happy-path shot is a fail. A contrast guess from the screenshot is a fail.
|
|
728
|
+
</p>
|
|
729
|
+
<h3>Accessibility pass</h3>
|
|
730
|
+
<p>On any user-facing screen, paste to Design or QA:</p>
|
|
731
|
+
<pre id="a11y-prompt">Run accessibility-wcag. Open the changed flow. Keyboard-only pass. Do not accept contrast from the screenshot alone.</pre>
|
|
732
|
+
<div class="copy-row">
|
|
733
|
+
<button class="copy" type="button" data-copy-from="a11y-prompt">Copy accessibility prompt</button>
|
|
734
|
+
</div>
|
|
694
735
|
<h3>Copy pass</h3>
|
|
695
736
|
<p>Copy reviews the <em>rendered</em> words in screenshots, not strings in TSX. Run <code>product-copy</code>, then <code>deslop</code> last.</p>
|
|
737
|
+
<h3>Release / ship</h3>
|
|
738
|
+
<p>Before you promote or deploy, paste to QA:</p>
|
|
739
|
+
<pre id="ship-prompt">
|
|
740
|
+
Run ship. Go or no-go. Name env, migration order, rollback, commands run. User-visible needs browser-qa screenshot paths. Reject LGTM, ship it.</pre>
|
|
741
|
+
<div class="copy-row">
|
|
742
|
+
<button class="copy" type="button" data-copy-from="ship-prompt">Copy ship prompt</button>
|
|
743
|
+
</div>
|
|
744
|
+
<p>
|
|
745
|
+
QA names the verdict. App engineer names env and the app rollback. Security names secrets and RLS. Missing screenshot paths on a user-visible release
|
|
746
|
+
is a no-go.
|
|
747
|
+
</p>
|
|
696
748
|
</section>
|
|
697
749
|
|
|
698
750
|
<section id="qa">
|
|
@@ -716,8 +768,9 @@ Do not review code alone. Open the app, capture desktop and mobile screenshots,
|
|
|
716
768
|
<li>Open the changed route with the real auth, role, and data.</li>
|
|
717
769
|
<li>Capture desktop (~1280) and mobile (~390) into <code>qa-evidence/<yyyy-mm-dd>-<slug>/</code>.</li>
|
|
718
770
|
<li><strong>Read the images.</strong> List blockers from what is on screen.</li>
|
|
719
|
-
<li>
|
|
720
|
-
<li>
|
|
771
|
+
<li>Keyboard-only the changed flow (<code>accessibility-wcag</code>). Do not accept contrast from the screenshot alone.</li>
|
|
772
|
+
<li>Run applicable tests (<code>testing-qa</code>). List the commands. <code>toBeVisible</code> is not a screenshot.</li>
|
|
773
|
+
<li>Write <code>notes.md</code> with route, viewports, auth state, keyboard result, commands run, verdict.</li>
|
|
721
774
|
</ol>
|
|
722
775
|
<p>Cursor: built-in browser first. Claude, Codex, Copilot, Antigravity: host browser if present, otherwise:</p>
|
|
723
776
|
<pre id="pw-cmd">
|