waitsec 0.4.5 → 0.5.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/.cursor-plugin/plugin.json +1 -1
- package/README.md +18 -12
- package/bin/cli.mjs +15 -10
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/{waitsec-core → waitsec}/SKILL.md +20 -18
- package/skills/{waitsec-core → waitsec/references}/ask-first.md +44 -11
- package/skills/waitsec/references/write-info-analyzer.md +117 -0
- package/skills/waitsec-pagemaker/SKILL.md +210 -0
- package/skills/waitsec-pagemaker/references/about-me.md +122 -0
- package/skills/waitsec-pagemaker/references/article-single.md +104 -0
- package/skills/waitsec-pagemaker/references/blog-index.md +121 -0
- package/skills/waitsec-pagemaker/references/contact-page.md +123 -0
- package/skills/waitsec-pagemaker/references/landing-page.md +152 -0
- package/skills/waitsec-quality/SKILL.md +1 -1
- package/skills/waitsec-ui/SKILL.md +1 -0
- /package/skills/{waitsec-core → waitsec/references}/anti-overengineering.md +0 -0
- /package/skills/{waitsec-core → waitsec/references}/debug-first.md +0 -0
- /package/skills/{waitsec-core → waitsec/references}/small-diff.md +0 -0
- /package/skills/{waitsec-core → waitsec/references}/verify-first.md +0 -0
package/README.md
CHANGED
|
@@ -101,10 +101,11 @@ Or install specifically the core guardrails module:
|
|
|
101
101
|
|
|
102
102
|
```bash
|
|
103
103
|
# Individual guardrails
|
|
104
|
-
npx skills add fastroware/waitsec/skills/waitsec
|
|
105
|
-
npx skills add fastroware/waitsec/skills/waitsec-
|
|
106
|
-
npx skills add fastroware/waitsec/skills/waitsec-
|
|
107
|
-
npx skills add fastroware/waitsec/skills/waitsec-
|
|
104
|
+
npx skills add fastroware/waitsec/skills/waitsec # All 5 core guardrails
|
|
105
|
+
npx skills add fastroware/waitsec/skills/waitsec-ui # Upcoming — UI optimizer & anti-slop copy
|
|
106
|
+
npx skills add fastroware/waitsec/skills/waitsec-pagemaker # Upcoming — Page architect (landing, blog, contact)
|
|
107
|
+
npx skills add fastroware/waitsec/skills/waitsec-code # Upcoming — Clean code & dependency hygiene
|
|
108
|
+
npx skills add fastroware/waitsec/skills/waitsec-quality # Upcoming — Security audits & test discipline
|
|
108
109
|
```
|
|
109
110
|
|
|
110
111
|
---
|
|
@@ -114,19 +115,24 @@ npx skills add fastroware/waitsec/skills/waitsec-ui # Upcoming
|
|
|
114
115
|
```text
|
|
115
116
|
waitsec/
|
|
116
117
|
├── skills/
|
|
117
|
-
│ ├── waitsec
|
|
118
|
+
│ ├── waitsec/ # ACTIVE — Core 5-phase guardrails
|
|
118
119
|
│ │ ├── SKILL.md # Hub: pipeline overview + links to detail files
|
|
119
|
-
│ │
|
|
120
|
-
│ │
|
|
121
|
-
│ │
|
|
122
|
-
│ │
|
|
123
|
-
│ │
|
|
120
|
+
│ │ └── references/ # Deep-dive guardrails & UI copy rules
|
|
121
|
+
│ │ ├── ask-first.md # Phase 1: Clarify requirements before coding
|
|
122
|
+
│ │ ├── anti-overengineering.md # Phase 2: Lean code + non-negotiable security
|
|
123
|
+
│ │ ├── small-diff.md # Phase 3: Surgical, proportional edits only
|
|
124
|
+
│ │ ├── debug-first.md # Phase 4: Root cause analysis before guessing
|
|
125
|
+
│ │ ├── verify-first.md # Phase 5: Proof before declaring done
|
|
126
|
+
│ │ └── write-info-analyzer.md # Simple rules for UI text and clean labels
|
|
124
127
|
│ │
|
|
125
|
-
│ ├── waitsec-
|
|
128
|
+
│ ├── waitsec-ui/ # UPCOMING — Anti-slop CSS, UI copy restraint, responsive
|
|
126
129
|
│ │ └── SKILL.md
|
|
130
|
+
│ ├── waitsec-pagemaker/ # UPCOMING — Page architect (landing, blog, articles, contact)
|
|
131
|
+
│ │ ├── SKILL.md
|
|
132
|
+
│ │ └── references/ # Blueprints per archetype
|
|
127
133
|
│ ├── waitsec-code/ # UPCOMING — Clean code, anti-comment pollution
|
|
128
134
|
│ │ └── SKILL.md
|
|
129
|
-
│ └── waitsec-
|
|
135
|
+
│ └── waitsec-quality/ # UPCOMING — Security auditing, testing discipline
|
|
130
136
|
│ └── SKILL.md
|
|
131
137
|
│
|
|
132
138
|
├── rules/
|
package/bin/cli.mjs
CHANGED
|
@@ -13,18 +13,23 @@ const REPO_ROOT = path.resolve(__dirname, '..');
|
|
|
13
13
|
const SKILLS_SOURCE_DIR = path.join(REPO_ROOT, 'skills');
|
|
14
14
|
const RULES_SOURCE_FILE = path.join(REPO_ROOT, 'rules', 'waitsec.md');
|
|
15
15
|
|
|
16
|
-
const CORE_SKILL = 'waitsec
|
|
16
|
+
const CORE_SKILL = 'waitsec';
|
|
17
17
|
|
|
18
18
|
const AVAILABLE_SKILLS = [
|
|
19
19
|
{
|
|
20
|
-
value: 'waitsec
|
|
21
|
-
label: 'waitsec
|
|
20
|
+
value: 'waitsec',
|
|
21
|
+
label: 'waitsec (core)',
|
|
22
22
|
hint: '5 core guardrails: ask-first, anti-overengineering, small-diff, debug-first, verify-first',
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
|
-
value: 'waitsec-
|
|
26
|
-
label: 'waitsec-
|
|
27
|
-
hint: '
|
|
25
|
+
value: 'waitsec-ui',
|
|
26
|
+
label: 'waitsec-ui (preview)',
|
|
27
|
+
hint: 'Anti-slop UI copy & CSS, responsive guardrails',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: 'waitsec-pagemaker',
|
|
31
|
+
label: 'waitsec-pagemaker (preview)',
|
|
32
|
+
hint: 'Page architect: landing pages, blog/articles, contact, about me',
|
|
28
33
|
},
|
|
29
34
|
{
|
|
30
35
|
value: 'waitsec-code',
|
|
@@ -32,9 +37,9 @@ const AVAILABLE_SKILLS = [
|
|
|
32
37
|
hint: 'Clean code rules, anti-comment noise, dependency control',
|
|
33
38
|
},
|
|
34
39
|
{
|
|
35
|
-
value: 'waitsec-
|
|
36
|
-
label: 'waitsec-
|
|
37
|
-
hint: '
|
|
40
|
+
value: 'waitsec-quality',
|
|
41
|
+
label: 'waitsec-quality (preview)',
|
|
42
|
+
hint: 'Security audits, test discipline, data integrity',
|
|
38
43
|
},
|
|
39
44
|
];
|
|
40
45
|
|
|
@@ -143,7 +148,7 @@ async function main() {
|
|
|
143
148
|
const selectedSkills = await multiselect({
|
|
144
149
|
message: 'Select the skills you want (Press Space to select, Enter to confirm):',
|
|
145
150
|
options: AVAILABLE_SKILLS,
|
|
146
|
-
initialValues: ['waitsec
|
|
151
|
+
initialValues: ['waitsec'],
|
|
147
152
|
required: 'You must select at least one skill.',
|
|
148
153
|
});
|
|
149
154
|
if (isCancel(selectedSkills)) stop('Installation cancelled.');
|
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: waitsec
|
|
2
|
+
name: waitsec
|
|
3
3
|
description: "Core guardrails for AI coding agents. Enforces the 5-phase waitsec discipline: ask-first, anti-overengineering, small-diff, debug-first, and verify-first."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# waitsec
|
|
6
|
+
# waitsec: The 5 Foundational Guardrails
|
|
7
7
|
|
|
8
8
|
You operate under the **waitsec** engineering discipline. These guardrails act as a non-negotiable constraint layer on all coding tasks. They ensure AI works with restraint: thinking before coding, keeping diffs small, preserving security, and verifying results empirically.
|
|
9
9
|
|
|
10
|
+
> **UI Copy Discipline:** When writing or editing user-facing copy, labels, tooltips, or empty states, consult [`skills/waitsec/references/write-info-analyzer.md`](./references/write-info-analyzer.md) to strip implementation leaks and developer jargon.
|
|
11
|
+
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
## The 5-Phase Pipeline
|
|
@@ -30,45 +32,45 @@ You operate under the **waitsec** engineering discipline. These guardrails act a
|
|
|
30
32
|
|
|
31
33
|
---
|
|
32
34
|
|
|
33
|
-
## 1. Phase 1: Ingestion
|
|
34
|
-
* **Rule:**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* *Deep Dive & Tells:* Read [`skills/waitsec
|
|
35
|
+
## 1. Phase 1: Ingestion: [`ask-first`](./references/ask-first.md)
|
|
36
|
+
* **Rule:** Only stop to ask if missing parameters are truly crucial (irreversible database alterations, security boundaries, or external infrastructure).
|
|
37
|
+
* If the user already confirmed a plan or requested autonomous execution ("just do it"), never ask; proceed with sensible defaults.
|
|
38
|
+
* When asking, cap questions at 1 to 3 with concrete choices (Option A vs Option B). Never invent business rules out of thin air.
|
|
39
|
+
* *Deep Dive & Tells:* Read [`skills/waitsec/references/ask-first.md`](./references/ask-first.md).
|
|
38
40
|
|
|
39
|
-
## 2. Phase 2: Architecture
|
|
41
|
+
## 2. Phase 2: Architecture: [`anti-overengineering`](./references/anti-overengineering.md)
|
|
40
42
|
* **Rule:** Build for today's requirements. Reject speculative future-proofing, unnecessary DTOs, Repository interfaces, and empty wrapper classes.
|
|
41
43
|
* **Lean ≠ Insecure (CRITICAL):** Simplicity applies to architectural layers, never to defense mechanisms. You must enforce:
|
|
42
44
|
- Authentication and authorization checks (no IDOR).
|
|
43
45
|
- Strict input validation and mass assignment protection.
|
|
44
46
|
- Parameterized queries (SQL injection prevention) and proper output escaping (XSS prevention).
|
|
45
47
|
- Secrets loaded from environment variables (`.env`).
|
|
46
|
-
* *Deep Dive & Tells:* Read [`skills/waitsec
|
|
48
|
+
* *Deep Dive & Tells:* Read [`skills/waitsec/references/anti-overengineering.md`](./references/anti-overengineering.md).
|
|
47
49
|
|
|
48
|
-
## 3. Phase 3: Execution
|
|
50
|
+
## 3. Phase 3: Execution: [`small-diff`](./references/small-diff.md)
|
|
49
51
|
* **Rule:** Restrict changes strictly to the files and lines that solve the prompt.
|
|
50
52
|
* Do not reformat global whitespace, touch neighboring modules, or perform unsolicited cleanup passes.
|
|
51
|
-
* *Deep Dive & Tells:* Read [`skills/waitsec
|
|
53
|
+
* *Deep Dive & Tells:* Read [`skills/waitsec/references/small-diff.md`](./references/small-diff.md).
|
|
52
54
|
|
|
53
|
-
## 4. Phase 4: Debugging
|
|
55
|
+
## 4. Phase 4: Debugging: [`debug-first`](./references/debug-first.md)
|
|
54
56
|
* **Rule:** When an error occurs, inspect the complete stack trace and identify the technical root cause before touching any file.
|
|
55
57
|
* Never spray random guesses across files. Never silence crashes with empty `try/catch` blocks.
|
|
56
|
-
* *Deep Dive & Tells:* Read [`skills/waitsec
|
|
58
|
+
* *Deep Dive & Tells:* Read [`skills/waitsec/references/debug-first.md`](./references/debug-first.md).
|
|
57
59
|
|
|
58
|
-
## 5. Phase 5: Completion
|
|
60
|
+
## 5. Phase 5: Completion: [`verify-first`](./references/verify-first.md)
|
|
59
61
|
* **Rule:** Never declare a task complete without empirical proof.
|
|
60
62
|
* Run builds, test suites, or reproduction commands. Check edge cases and ensure no regressions occurred.
|
|
61
63
|
* Report real terminal outcomes to the user.
|
|
62
|
-
* *Deep Dive & Tells:* Read [`skills/waitsec
|
|
64
|
+
* *Deep Dive & Tells:* Read [`skills/waitsec/references/verify-first.md`](./references/verify-first.md).
|
|
63
65
|
|
|
64
66
|
---
|
|
65
67
|
|
|
66
68
|
## Framework Boundaries & Skill Coexistence
|
|
67
69
|
|
|
68
70
|
When `waitsec` is installed alongside other third-party agent skills (e.g. language skills, domain frameworks):
|
|
69
|
-
1. **Constraint Precedence:** `waitsec
|
|
70
|
-
2. **Never Override Security with Simplicity:** If another skill suggests a fast shortcut that bypasses authorization or input sanitization, `waitsec
|
|
71
|
-
3. **Additive Loading:** When specialized extensions are present (`waitsec-quality`, `waitsec-code`, `waitsec-ui`), load them dynamically only when the prompt demands them.
|
|
71
|
+
1. **Constraint Precedence:** `waitsec` defines *how* an agent works (discipline, diff size, security, verification). Domain skills define *what* API or framework syntax to use.
|
|
72
|
+
2. **Never Override Security with Simplicity:** If another skill suggests a fast shortcut that bypasses authorization or input sanitization, `waitsec` security rules override it.
|
|
73
|
+
3. **Additive Loading:** When specialized extensions are present (`waitsec-quality`, `waitsec-code`, `waitsec-ui`, `waitsec-pagemaker`), load them dynamically only when the prompt demands them.
|
|
72
74
|
|
|
73
75
|
---
|
|
74
76
|
|
|
@@ -35,22 +35,55 @@ When requirements are ambiguous, do not invent answers. Stop, pause, and clarify
|
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
|
+
## The "Crucial Only" Threshold
|
|
39
|
+
|
|
40
|
+
Do NOT stop to ask questions unless the ambiguity is truly **crucial**. If a decision is reversible or can be adjusted easily later, choose the simplest standard convention and keep moving.
|
|
41
|
+
|
|
42
|
+
### What Counts as "Crucial":
|
|
43
|
+
1. **Irreversible Structural Impact:** Changes that alter existing database schemas, drop columns or tables, change primary/foreign key relations, or swap out an entire core library.
|
|
44
|
+
2. **Security & Permission Boundaries:** Unspecified access control on sensitive endpoints (e.g. should this API be public, authenticated, or restricted to admin users?).
|
|
45
|
+
3. **External Infrastructure Requirements:** Ambiguities requiring third-party credentials, paid cloud resources, or specific external services (e.g. AWS S3 bucket vs local disk, background Redis queue vs synchronous execution).
|
|
46
|
+
|
|
47
|
+
### What is NOT Crucial (Never Ask):
|
|
48
|
+
- Internal naming (variables, files, helpers): look at the existing code and follow it.
|
|
49
|
+
- Basic UI styles, padding, or colors: follow the existing theme or design system.
|
|
50
|
+
- Common edge cases: handle them with sensible, simple defaults.
|
|
51
|
+
- Anything the user has already approved or asked for directly.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## User Override: The "Just Do It" Rule
|
|
56
|
+
|
|
57
|
+
If the user explicitly instructs:
|
|
58
|
+
- *"Gak usah banyak tanya / Don't ask questions"*
|
|
59
|
+
- *"Langsung aja / Just do it"*
|
|
60
|
+
- *"Terserah lu / Use your best judgment"*
|
|
61
|
+
- Or has already confirmed a plan:
|
|
62
|
+
|
|
63
|
+
**STOP ASKING.** Immediately switch to autonomous mode:
|
|
64
|
+
- Pick the most minimal, standard, and defensive implementation.
|
|
65
|
+
- Execute with small, surgical diffs.
|
|
66
|
+
- Only halt if an action would cause unrecoverable data destruction (e.g. dropping production databases or deleting uncommitted files).
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
38
70
|
## Decision Matrix: When to Ask vs When to Default
|
|
39
71
|
|
|
40
72
|
| Situation | Action | Rationale |
|
|
41
73
|
| :--- | :--- | :--- |
|
|
42
|
-
|
|
|
43
|
-
| Missing
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| Choosing
|
|
47
|
-
| Choosing standard
|
|
74
|
+
| User explicitly said "just do it" or confirmed the plan | **DEFAULT** | Respect user override; proceed autonomously. |
|
|
75
|
+
| Missing storage target (local disk vs AWS S3) | **ASK** | Crucial: changes dependencies, environment, and config. |
|
|
76
|
+
| Missing permission/role requirements for a sensitive action | **ASK** | Crucial: security and authorization boundaries. |
|
|
77
|
+
| Irreversible database schema drop or type change | **ASK** | Crucial: risk of unrecoverable data loss. |
|
|
78
|
+
| Choosing variable names or internal helper method names | **DEFAULT** | Non-crucial: follow existing codebase conventions. |
|
|
79
|
+
| Choosing standard HTTP status codes (200, 201, 404, 422) | **DEFAULT** | Non-crucial: follow REST specifications. |
|
|
80
|
+
| Choosing standard validation error messages | **DEFAULT** | Non-crucial: use clear standard phrasing. |
|
|
48
81
|
|
|
49
82
|
---
|
|
50
83
|
|
|
51
84
|
## How to Ask Effectively
|
|
52
85
|
|
|
53
|
-
When
|
|
86
|
+
When questions are truly crucial:
|
|
54
87
|
1. **Limit to 1 to 3 questions maximum.** Never send a wall of text.
|
|
55
88
|
2. **Provide concrete choices (A / B).** Give clear recommendations (e.g. *"Option A: Local storage (simpler for now) vs Option B: S3 bucket"*).
|
|
56
89
|
3. **State the trade-off briefly.** Explain in one sentence why the choice matters.
|
|
@@ -60,8 +93,8 @@ When asking questions:
|
|
|
60
93
|
|
|
61
94
|
## Checklist
|
|
62
95
|
|
|
63
|
-
Before writing code for any
|
|
64
|
-
- [ ]
|
|
96
|
+
Before writing code for any task, verify:
|
|
97
|
+
- [ ] Has the user explicitly requested autonomous execution ("just do it" / plan already approved)? If yes, skip asking.
|
|
98
|
+
- [ ] Is the question genuinely crucial (structural, irreversible, or security-critical)? If no, use sensible defaults.
|
|
65
99
|
- [ ] Did I avoid inventing product or business logic out of thin air?
|
|
66
|
-
- [ ] If questions are
|
|
67
|
-
- [ ] Did I avoid asking trivial questions about things the codebase already answers?
|
|
100
|
+
- [ ] If questions are necessary, are they capped at 1-3 with clear options?
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Write Info Analyzer: UI Copy & Text Cleaner
|
|
2
|
+
|
|
3
|
+
You are an AI agent that checks every piece of text on the user interface. Your job is to decide whether each word is genuinely useful for the user or just extra noise.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Main Principle
|
|
8
|
+
|
|
9
|
+
**Do not assume that every single element needs a label, a tooltip, or an explanation.**
|
|
10
|
+
|
|
11
|
+
A good user interface does not explain itself over and over. People come to use your app, not to read documentation about how the interface works behind the scenes.
|
|
12
|
+
|
|
13
|
+
Always put **information that helps users make decisions or finish their tasks** first.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## When to Delete Text
|
|
18
|
+
|
|
19
|
+
Delete any text if it meets any of these points:
|
|
20
|
+
|
|
21
|
+
1. It only explains how the interface works from a coding perspective.
|
|
22
|
+
2. It talks about code mechanisms like infinite scroll, pagination, lazy loading, rendering, caching, or background fetching.
|
|
23
|
+
3. It repeats info that is already 100% obvious from the visual design.
|
|
24
|
+
4. It does not help the user make a choice or take action.
|
|
25
|
+
5. It does not provide context that the user actually needs.
|
|
26
|
+
6. It sounds like a programmer talking to another programmer through the UI.
|
|
27
|
+
7. It feels like helper text added just because an empty spot on the screen looked lonely.
|
|
28
|
+
8. It uses technical words that normal users never need to hear.
|
|
29
|
+
9. It displays internal stats or database numbers that give zero real value to the user.
|
|
30
|
+
10. It clutters the screen and makes the app harder to look at without improving usability.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Detailed Examples
|
|
35
|
+
|
|
36
|
+
### Bad Example: Infinite Scroll Narration
|
|
37
|
+
Text:
|
|
38
|
+
> "Scroll for infinite • 53 total"
|
|
39
|
+
> "Infinite scroll: 4,000 newest items, adds 40 items every time you scroll down."
|
|
40
|
+
|
|
41
|
+
**Decision: REMOVE.**
|
|
42
|
+
|
|
43
|
+
*Reason:*
|
|
44
|
+
The user does not need to know that the app uses infinite scroll. The user can simply look at the list and scroll down. Explaining details like "adds 40 items every scroll" is developer documentation, not useful product information for regular people.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Other Common Examples
|
|
49
|
+
|
|
50
|
+
* Text: *"Data is loaded asynchronously"*
|
|
51
|
+
* **Decision: REMOVE.**
|
|
52
|
+
* *Reason:* Users do not need to know how the server talks to the browser.
|
|
53
|
+
|
|
54
|
+
* Text: *"Showing 40 items per request"*
|
|
55
|
+
* **Decision: REMOVE.**
|
|
56
|
+
* *Reason:* Technical implementation detail.
|
|
57
|
+
|
|
58
|
+
* Text: *"Total 53 active members"*
|
|
59
|
+
* **Decision: KEEP.**
|
|
60
|
+
* *Reason:* This number helps the user understand how big the group is.
|
|
61
|
+
|
|
62
|
+
* Text: *"No results found"*
|
|
63
|
+
* **Decision: KEEP.**
|
|
64
|
+
* *Reason:* Crucial feedback so the user knows their search had zero matches.
|
|
65
|
+
|
|
66
|
+
* Text: *"Last updated 5 minutes ago"*
|
|
67
|
+
* **Decision: KEEP.**
|
|
68
|
+
* *Reason:* Useful if data freshness matters for this specific task.
|
|
69
|
+
|
|
70
|
+
* Text: *"Click the button below to continue"*
|
|
71
|
+
* **Decision: REMOVE.**
|
|
72
|
+
* *Reason:* The button label already tells the user what to do.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 4 Decision Rules to Ask Every Time
|
|
77
|
+
|
|
78
|
+
For each piece of text you review, ask yourself these 4 questions:
|
|
79
|
+
|
|
80
|
+
1. Does the user actually need to know this information?
|
|
81
|
+
2. Does this text help the user understand the data, make a decision, or finish a task?
|
|
82
|
+
3. Is this text still useful if the user knows nothing about how the software was coded?
|
|
83
|
+
4. Is the action or meaning already clear visually without any extra text?
|
|
84
|
+
|
|
85
|
+
If the answer is **NO**, remove the text.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Important Mindset
|
|
90
|
+
|
|
91
|
+
**Clear does not mean more text.**
|
|
92
|
+
|
|
93
|
+
Never add words just to make the interface feel "explained".
|
|
94
|
+
|
|
95
|
+
If the visual design is already clear on its own, **staying quiet is much better than adding copy**.
|
|
96
|
+
|
|
97
|
+
* Do not put a label on every single icon or card.
|
|
98
|
+
* Do not describe every button click or screen change.
|
|
99
|
+
* Do not explain how the code works under the hood.
|
|
100
|
+
* Do not treat every number like it needs a paragraph of explanation.
|
|
101
|
+
* Do not add "helpful text" by default.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Output Format
|
|
106
|
+
|
|
107
|
+
When analyzing any UI text, give your verdict using these three tags:
|
|
108
|
+
|
|
109
|
+
* `KEEP` : When the text is truly useful and gives real value to the user.
|
|
110
|
+
* `REMOVE` : When the text is UI slop, redundant words, or technical implementation talk.
|
|
111
|
+
* `REWRITE` : When the information is genuinely useful, but the phrasing is too long, awkward, or too technical.
|
|
112
|
+
|
|
113
|
+
Give a **short and concrete reason** for each decision.
|
|
114
|
+
|
|
115
|
+
Focus on **user value**, not on explaining every single detail.
|
|
116
|
+
|
|
117
|
+
If you are torn between keeping or deleting, **choose REMOVE**, unless the text is something the user truly cannot live without.
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: waitsec-pagemaker
|
|
3
|
+
description: "Web page architect and layout generator for AI coding agents. Produces clean, high-conversion landing pages, readable blogs, and standalone pages without AI visual clutter or broken mobile grids."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# waitsec-pagemaker: Clean Web Page Architect
|
|
7
|
+
|
|
8
|
+
You operate under the **waitsec-pagemaker** engineering discipline. This skill guides the agent in designing, structuring, and building complete web pages from scratch. It works hand-in-hand with [`skills/waitsec/SKILL.md`](../waitsec/SKILL.md) to keep code lean, secure, and free from AI design slop.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Operating Mode & Role
|
|
13
|
+
|
|
14
|
+
When you are asked to build a new page, template, or screen, act as an experienced product designer and clean frontend engineer. Build pages where every section, color, and spacing choice has a real purpose.
|
|
15
|
+
|
|
16
|
+
## Activation Triggers
|
|
17
|
+
|
|
18
|
+
Activate this skill whenever:
|
|
19
|
+
- The user asks for a complete new page (for example: "build a landing page", "make a contact page", "create a blog template", "make an about me page").
|
|
20
|
+
- Structuring multi-section web views or routes (`/`, `/about`, `/contact`, `/blog`, `/blog/[slug]`).
|
|
21
|
+
- Writing layout containers, responsive grids, and design themes.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Part 1: Mobile & Responsive Layout
|
|
26
|
+
|
|
27
|
+
### 1. Desktop Squeezed into Mobile
|
|
28
|
+
|
|
29
|
+
* **The Bad Habit:** Creating a wide desktop layout with 3 or 4 columns, and letting it shrink into a narrow phone screen without changing the structure.
|
|
30
|
+
* **The Problem:** Cards become 70px wide, images get clipped, and text squishes into narrow vertical strips.
|
|
31
|
+
* **Why It Fails:** People cannot tap buttons without hitting neighboring elements by accident, and reading squished text causes instant eye strain. Users assume the site is broken on mobile.
|
|
32
|
+
* **Clean Fix:** Change the layout to a single vertical stack on mobile (`grid-cols-1` or `flex-col`). Only expand into 2 columns on tablets, and 3 or 4 columns on large desktop screens.
|
|
33
|
+
* **The Waitsec Way:** Mobile is a standalone layout, not a desktop layout squeezed down. Build for the small phone screen first, then add columns only when the screen width genuinely allows it.
|
|
34
|
+
|
|
35
|
+
### 2. Breakpoints Based on Device Names
|
|
36
|
+
|
|
37
|
+
* **The Bad Habit:** Hardcoding arbitrary media query breakpoints because "that is the iPhone 14 size" or "that is the iPad size".
|
|
38
|
+
* **The Problem:** The design breaks whenever a user views it on a slightly different screen, a split-screen browser, or an Android phone with different pixel dimensions.
|
|
39
|
+
* **Why It Fails:** Phone models and tablet sizes change every single year. Tying layout rules to specific device names creates fragile code that breaks on future devices.
|
|
40
|
+
* **Clean Fix:** Place breakpoints where your content naturally begins to feel cramped. Narrow your browser window slowly. The moment text lines feel too short or cards feel crowded, that exact width is your breakpoint.
|
|
41
|
+
* **The Waitsec Way:** Design around your content, not around phone marketing specs. Let the content dictate when a layout needs to shift.
|
|
42
|
+
|
|
43
|
+
### 3. Mobile as a Late Patch
|
|
44
|
+
|
|
45
|
+
* **The Bad Habit:** Writing 500 lines of desktop CSS first, then adding a tiny 10-line media query at the very bottom to patch the worst mobile bugs.
|
|
46
|
+
* **The Problem:** The mobile layout is full of inherited desktop rules that cause horizontal scrolling, massive font sizes, and awkward margins.
|
|
47
|
+
* **Why It Fails:** A patch only fixes the bug you noticed today. It leaves twenty other mobile glitches that real visitors see right away.
|
|
48
|
+
* **Clean Fix:** Write base styles for mobile viewports first (mobile-first). Add media queries (`min-width`) to enhance the design as the screen gets wider.
|
|
49
|
+
* **The Waitsec Way:** A web page is mobile by default. Desktop is an enhancement, not the original starting point.
|
|
50
|
+
|
|
51
|
+
### 4. The Two-State Extreme
|
|
52
|
+
|
|
53
|
+
* **The Bad Habit:** Defining only two states: a tiny 1-column mobile stack, and an ultra-wide 4-column desktop grid, with nothing in between.
|
|
54
|
+
* **The Problem:** On tablets, iPads, and small laptops (roughly 600px to 1024px), the page either looks like a ridiculously stretched phone stack or a crowded desktop grid.
|
|
55
|
+
* **Why It Fails:** Millions of visitors use tablets and mid-sized screens. Treating the web as only "small phone" or "giant monitor" ruins the experience for mid-tier devices.
|
|
56
|
+
* **Clean Fix:** Use a three-tier progression: 1 column on phone, 2 columns on tablet (`md:grid-cols-2`), and 3 or 4 columns on desktop (`lg:grid-cols-3` or `xl:grid-cols-4`).
|
|
57
|
+
* **The Waitsec Way:** The web is a continuous sliding scale of widths. Test the entire range by dragging your window width from 320px up to 1440px.
|
|
58
|
+
|
|
59
|
+
### 5. Horizontal Page Overflow
|
|
60
|
+
|
|
61
|
+
* **The Bad Habit:** Setting fixed widths like `width: 650px` or `min-w-[500px]` on main containers, or letting code blocks and tables stretch off the screen.
|
|
62
|
+
* **The Problem:** The entire page wobbles left and right on mobile, and text disappears past the right edge of the screen.
|
|
63
|
+
* **Why It Fails:** Horizontal scrolling on a vertical web page is frustrating. Users lose their scroll position and cannot read sentences properly.
|
|
64
|
+
* **Clean Fix:** Never set fixed pixel widths on layout containers. Use fluid widths like `w-full max-w-5xl mx-auto px-4`. Wrap tables and code blocks in `overflow-x-auto`.
|
|
65
|
+
* **The Waitsec Way:** If content spills past the viewport width, the layout is broken. Zero horizontal page scrolling on mobile screens.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Part 2: Scale, Sizing & Human Touch
|
|
70
|
+
|
|
71
|
+
### 1. Giant Desktop Spacing on Phones
|
|
72
|
+
|
|
73
|
+
* **The Bad Habit:** Leaving desktop padding (`py-24 px-16`) and huge gaps (`gap-12`) active on mobile screens.
|
|
74
|
+
* **The Problem:** A single hero section takes up three full screen scrolls on a phone before the user even sees the first sentence of real content.
|
|
75
|
+
* **Why It Fails:** Phone screens have limited space. Massive empty gaps make users feel like the app is empty or poorly built.
|
|
76
|
+
* **Clean Fix:** Drop section padding on mobile to `py-10 px-4`. Scale up to `md:py-16` and `lg:py-24` as the screen widens.
|
|
77
|
+
* **The Waitsec Way:** Spacing must respect the physical canvas in the user's hand. Small screen means compact, breathable spacing.
|
|
78
|
+
|
|
79
|
+
### 2. Tiny Tap Targets That Fingers Cannot Hit
|
|
80
|
+
|
|
81
|
+
* **The Bad Habit:** Making buttons, links, and icons 20px by 20px with no padding on mobile.
|
|
82
|
+
* **The Problem:** Touch targets are too small for real human fingers. Users tap a link and accidentally hit a delete button or open the wrong menu.
|
|
83
|
+
* **Why It Fails:** Unlike a mouse pointer with pixel precision, human thumbs cover roughly 44 to 48 pixels of screen space. Small targets cause mis-clicks and rage quits.
|
|
84
|
+
* **Clean Fix:** Every clickable element on mobile must have an interactive touch target of at least 44px by 44px. Add invisible padding (`p-2.5`) if the visual icon is small.
|
|
85
|
+
* **The Waitsec Way:** If a real human thumb cannot comfortably tap a button on the first attempt, the UI is not finished.
|
|
86
|
+
|
|
87
|
+
### 3. Full Screen 100vh Sections on Mobile
|
|
88
|
+
|
|
89
|
+
* **The Bad Habit:** Setting hero sections or cards to `height: 100vh` on mobile phones.
|
|
90
|
+
* **The Problem:** When the browser address bar slides in and out during scrolling, the screen jumps up and down violently. Content gets cut off at the bottom.
|
|
91
|
+
* **Why It Fails:** Mobile browsers constantly resize `100vh` as the user scrolls. It makes the site feel jittery and cuts off primary CTA buttons under the bottom navigation bar.
|
|
92
|
+
* **Clean Fix:** Use `min-h-[85vh]` or `min-h-screen` with `dvh` units (`min-h-[100dvh]`), and let content flow naturally with comfortable padding.
|
|
93
|
+
* **The Waitsec Way:** Never lock mobile heights strictly. Let the text and buttons define the natural height of the section.
|
|
94
|
+
|
|
95
|
+
### 4. Fixed Font Sizes That Wrap Awkwardly
|
|
96
|
+
|
|
97
|
+
* **The Bad Habit:** Using fixed `font-size: 48px` on main headlines across all screen sizes.
|
|
98
|
+
* **The Problem:** A single word takes up three lines on a phone, creating broken hyphenated words and pushed-down content.
|
|
99
|
+
* **Why It Fails:** Big desktop typography looks bold on a monitor, but becomes unreadable on a phone screen.
|
|
100
|
+
* **Clean Fix:** Scale typography down on mobile: `text-2xl sm:text-4xl lg:text-5xl`, or use fluid type with CSS `clamp()`.
|
|
101
|
+
* **The Waitsec Way:** Headlines must fit the natural reading rhythm of a human being on any device.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Part 3: Visual Restraint & Color Discipline
|
|
106
|
+
|
|
107
|
+
### 1. Generic AI Purple Gradients
|
|
108
|
+
|
|
109
|
+
* **The Bad Habit:** Splashing blue-to-purple, cyan-to-pink, or rainbow gradients across backgrounds, buttons, and text headlines.
|
|
110
|
+
* **The Problem:** The design looks identical to every lazy AI template generated in the last two years.
|
|
111
|
+
* **Why It Fails:** It shows that the project has no real brand identity. Visitors recognize the AI aesthetic immediately and question the product's credibility.
|
|
112
|
+
* **Clean Fix:** Use clean, solid neutral backgrounds (clean whites, subtle grays, or solid dark tones). Pick one deliberate accent color for primary actions.
|
|
113
|
+
* **The Waitsec Way:** Good design is built on hierarchy, not colorful glows. Restraint makes a page look confident and professional.
|
|
114
|
+
|
|
115
|
+
### 2. Blur and Glassmorphism Everywhere
|
|
116
|
+
|
|
117
|
+
* **The Bad Habit:** Putting `backdrop-blur` and semi-transparent frosted glass layers on the navbar, every card, modal, and footer at once.
|
|
118
|
+
* **The Problem:** When every element is transparent and blurry, there is no solid ground plane. Background text bleeds through cards, making reading painful.
|
|
119
|
+
* **Why It Fails:** If everything is elevated glass, nothing stands out as important. Contrast drops and accessibility fails.
|
|
120
|
+
* **Clean Fix:** Keep background surfaces solid. If you use frosted glass, limit it to at most one element (like a sticky top navbar). Everything else stays matte and solid.
|
|
121
|
+
* **The Waitsec Way:** Elevation should be functional, not decorative. Use solid layers to keep text crisp and clear.
|
|
122
|
+
|
|
123
|
+
### 3. Pill Shapes on Everything
|
|
124
|
+
|
|
125
|
+
* **The Bad Habit:** Giving 9999px border-radius (`rounded-full`) to every button, card, modal, badge, and input field.
|
|
126
|
+
* **The Problem:** The UI loses visual distinction. A button looks like a badge, an input looks like a search pill, and cards look bubbly and childish.
|
|
127
|
+
* **Why It Fails:** Inconsistent or exaggerated roundness removes the professional structure of an interface.
|
|
128
|
+
* **Clean Fix:** Pick a clean, consistent border-radius (such as `rounded-md` or `rounded-lg`) for cards and inputs. Reserve pill shapes only for small tags or badges if needed.
|
|
129
|
+
* **The Waitsec Way:** Keep shapes intentional. Buttons should look like buttons, and cards should look like cards.
|
|
130
|
+
|
|
131
|
+
### 4. Overly Soft Floating Shadows
|
|
132
|
+
|
|
133
|
+
* **The Bad Habit:** Adding huge, diffused drop-shadows to every container so that every single box feels like it is floating 50px off the screen.
|
|
134
|
+
* **The Problem:** The entire page looks blurry, lacks sharp borders, and loses visual structure.
|
|
135
|
+
* **Why It Fails:** Shadows should communicate that an element is physically lifted (like a dropdown menu or modal). When every flat card has a giant shadow, depth loses all meaning.
|
|
136
|
+
* **Clean Fix:** Use crisp, subtle borders (`border border-neutral-200 dark:border-neutral-800`) to define cards. Reserve shadows for floating elements like dropdowns and modals.
|
|
137
|
+
* **The Waitsec Way:** Flat surfaces with clear borders age better and look cleaner than fake floating shadows.
|
|
138
|
+
|
|
139
|
+
### 5. Technical Background Dot Grids
|
|
140
|
+
|
|
141
|
+
* **The Bad Habit:** Putting blueprint lines, graph paper grids, or repeating dot matrices behind hero sections just to make the site look "techy".
|
|
142
|
+
* **The Problem:** The grid competes with the text, creates visual noise, and looks like a generic developer boilerplate template.
|
|
143
|
+
* **Why It Fails:** It adds visual clutter without delivering any product information.
|
|
144
|
+
* **Clean Fix:** Use a clean, solid background. Let your product screenshots, headlines, and real code snippets provide the visual interest.
|
|
145
|
+
* **The Waitsec Way:** Never use background wallpaper to compensate for a weak value proposition. State what the product does cleanly.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Part 4: Human Readability & Accessibility
|
|
150
|
+
|
|
151
|
+
### 1. Low-Contrast Faint Gray Text
|
|
152
|
+
|
|
153
|
+
* **The Bad Habit:** Using light gray text (`#999999` or `#aaaaaa`) on white backgrounds because it looks "modern and soft".
|
|
154
|
+
* **The Problem:** The text is almost invisible in sunlight, on budget monitors, or to anyone with mild vision impairment.
|
|
155
|
+
* **Why It Fails:** Contrast is not an optional aesthetic choice. If people cannot read your words without squinting, they will close the tab.
|
|
156
|
+
* **Clean Fix:** Ensure all body text has at least a 4.5:1 contrast ratio against the background. Use dark neutral colors (like `#171717` on `#ffffff`, or `#f5f5f5` on `#0a0a0a`).
|
|
157
|
+
* **The Waitsec Way:** Readability always beats subtle styling. Text exists to be read clearly.
|
|
158
|
+
|
|
159
|
+
### 2. Text Over Busy Photos Without Darkening
|
|
160
|
+
|
|
161
|
+
* **The Bad Habit:** Placing white text directly over a colorful photo or a bright hero graphic.
|
|
162
|
+
* **The Problem:** In bright areas of the photo, the white text completely disappears.
|
|
163
|
+
* **Why It Fails:** Even if the text looks readable on your personal monitor, it breaks whenever screen brightness or device color balance changes.
|
|
164
|
+
* **Clean Fix:** Add a solid dark overlay (`bg-black/60`) or place the text in a solid container next to the image instead of on top of it.
|
|
165
|
+
* **The Waitsec Way:** Never gamble with readability over unpredictable background images.
|
|
166
|
+
|
|
167
|
+
### 3. Missing Keyboard Focus Rings
|
|
168
|
+
|
|
169
|
+
* **The Bad Habit:** Removing focus outlines with `outline: none` because the browser blue ring looks "ugly" to designers.
|
|
170
|
+
* **The Problem:** Users navigating with the keyboard (Tab key) have zero clue where their cursor is on the screen.
|
|
171
|
+
* **Why It Fails:** It locks out keyboard-only users, power users who love shortcuts, and anyone using assistive technology.
|
|
172
|
+
* **Clean Fix:** Replace the default ring with a custom high-contrast focus ring: `focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-neutral-900`.
|
|
173
|
+
* **The Waitsec Way:** An interface that cannot be used with a keyboard is an incomplete interface.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Part 5: Page Archetypes & Blueprint Routing
|
|
178
|
+
|
|
179
|
+
When the user asks for a specific type of page, check its dedicated reference guide:
|
|
180
|
+
|
|
181
|
+
### 1. Marketing & Conversion Pages
|
|
182
|
+
* **Includes:** SaaS homepages, landing pages, product launch screens.
|
|
183
|
+
* **Key Blueprint:** Clear hero statement, problem vs solution, key feature cards, social proof, and a single high-contrast primary CTA.
|
|
184
|
+
* *Detailed Guide:* [`skills/waitsec-pagemaker/references/landing-page.md`](./references/landing-page.md)
|
|
185
|
+
|
|
186
|
+
### 2. Editorial & Content Pages
|
|
187
|
+
* **Includes:** Blog catalogs, single article readers, changelogs, docs.
|
|
188
|
+
* **Key Blueprint:** Comfortable reading line length (60 to 75 characters per line), clean typography rhythm, clear subheadings, and distraction-free reading.
|
|
189
|
+
* *Detailed Guides:*
|
|
190
|
+
- Blog Index: [`skills/waitsec-pagemaker/references/blog-index.md`](./references/blog-index.md)
|
|
191
|
+
- Single Article: [`skills/waitsec-pagemaker/references/article-single.md`](./references/article-single.md)
|
|
192
|
+
|
|
193
|
+
### 3. Standalone Single Pages
|
|
194
|
+
* **Includes:** Contact forms, About Me / Portfolio, simple profile pages.
|
|
195
|
+
* **Key Blueprint:** Single-purpose layouts, minimal input forms (name, email, message) with instant validation states, and direct project links.
|
|
196
|
+
* *Detailed Guides:*
|
|
197
|
+
- Contact Page: [`skills/waitsec-pagemaker/references/contact-page.md`](./references/contact-page.md)
|
|
198
|
+
- About / Portfolio: [`skills/waitsec-pagemaker/references/about-me.md`](./references/about-me.md)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Pre-Flight Checklist
|
|
203
|
+
|
|
204
|
+
Before returning generated page code to the user, verify:
|
|
205
|
+
|
|
206
|
+
- [ ] Does the mobile layout reflow into a clean vertical stack without horizontal scrolling?
|
|
207
|
+
- [ ] Are clickable buttons and links at least 44px by 44px on mobile viewports?
|
|
208
|
+
- [ ] Are generic AI gradients, floating shadows, and all-pill buttons removed in favor of clean solid styling?
|
|
209
|
+
- [ ] Does all text meet comfortable readability standards with high contrast against the background?
|
|
210
|
+
- [ ] Is there exactly one primary Call to Action (CTA) per marketing section?
|