waitsec 0.4.4 → 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 +29 -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-code/SKILL.md +33 -13
- 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 +31 -18
- package/skills/waitsec-ui/SKILL.md +34 -13
- /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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Contact Page Blueprint (waitsec-pagemaker)
|
|
2
|
+
|
|
3
|
+
Use this guide when creating a contact page, support inquiry form, or feedback screen. It ensures users can reach out smoothly on mobile and desktop without friction or broken form states.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Complete Page Anatomy & Responsive Flow
|
|
8
|
+
|
|
9
|
+
### 1. Header & Clear Expectations
|
|
10
|
+
* **Desktop & Mobile:** Clear heading ("Get in Touch" or "Contact Us"), followed by an honest response estimate (e.g. "We typically respond within 24 business hours"). Setting expectations prevents users from sending repeat tickets.
|
|
11
|
+
|
|
12
|
+
### 2. Form Layout & Alternative Channels (The Split)
|
|
13
|
+
* **Desktop (1024px+):** 2-column layout (`grid grid-cols-1 lg:grid-cols-12 gap-12`).
|
|
14
|
+
- Left Side (7 cols): Clean form card with minimal inputs.
|
|
15
|
+
- Right Side (5 cols): Direct contact box with direct email, office address, timezone, and live status badge.
|
|
16
|
+
* **Mobile (<768px):** Single vertical stack. The form appears first at the top. The direct contact details and social links appear below the form.
|
|
17
|
+
|
|
18
|
+
### 3. Minimal Field Discipline
|
|
19
|
+
Strictly limit input fields to what is necessary:
|
|
20
|
+
1. Full Name (`<input type="text" required>`)
|
|
21
|
+
2. Email Address (`<input type="email" required>`)
|
|
22
|
+
3. Topic / Category (clean `<select>` dropdown or horizontal radio pills)
|
|
23
|
+
4. Message (`<textarea rows="4" required>`)
|
|
24
|
+
Never demand phone numbers, fax numbers, company size, or physical mailing address for a general contact form.
|
|
25
|
+
|
|
26
|
+
### 4. Interactive States (Feedback Loop)
|
|
27
|
+
* **Default State:** Clean borders with high contrast labels.
|
|
28
|
+
* **Typing / Focus State:** High-contrast focus ring around active input (`focus-visible:ring-2 focus-visible:ring-neutral-900`).
|
|
29
|
+
* **Submitting State:** The submit button disables immediately and shows a clean spinner with "Sending...".
|
|
30
|
+
* **Success State:** The form disappears and displays an inline confirmation message: "Thank you! We received your message and will reply soon."
|
|
31
|
+
* **Error State:** Specific field outlines turn red (`border-red-500`) with a clear error explanation directly below the field.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Detailed Pitfalls & The 5-Point Rule
|
|
36
|
+
|
|
37
|
+
### 1. The 10-Field Interrogation Form
|
|
38
|
+
|
|
39
|
+
* **The Bad Habit:** Demanding full name, company name, company URL, job title, phone number, budget dropdown, industry, country, and message.
|
|
40
|
+
* **The Problem:** The contact form looks like a government tax audit. On a phone, the user has to scroll through 4 screens just to find the submit button.
|
|
41
|
+
* **Why It Fails:** Conversion drops by over 50% for every 2 extra fields added to a form. Mobile users will not type their corporate biography on a phone keyboard.
|
|
42
|
+
* **Clean Fix:** Cut the form down to 3 essential fields: Name, Email, and Message. You can always ask follow-up questions in your reply email:
|
|
43
|
+
```html
|
|
44
|
+
<form class="space-y-4 max-w-lg">
|
|
45
|
+
<div>
|
|
46
|
+
<label for="name" class="block text-sm font-medium text-neutral-700">Full Name</label>
|
|
47
|
+
<input type="text" id="name" required class="w-full mt-1 px-4 py-2.5 border border-neutral-300 rounded-lg focus:ring-2 focus:ring-neutral-900 outline-none">
|
|
48
|
+
</div>
|
|
49
|
+
<div>
|
|
50
|
+
<label for="email" class="block text-sm font-medium text-neutral-700">Email Address</label>
|
|
51
|
+
<input type="email" id="email" required class="w-full mt-1 px-4 py-2.5 border border-neutral-300 rounded-lg focus:ring-2 focus:ring-neutral-900 outline-none">
|
|
52
|
+
</div>
|
|
53
|
+
<div>
|
|
54
|
+
<label for="message" class="block text-sm font-medium text-neutral-700">Message</label>
|
|
55
|
+
<textarea id="message" rows="4" required class="w-full mt-1 px-4 py-2.5 border border-neutral-300 rounded-lg focus:ring-2 focus:ring-neutral-900 outline-none"></textarea>
|
|
56
|
+
</div>
|
|
57
|
+
<button type="submit" class="w-full py-3 bg-neutral-900 text-white font-medium rounded-lg hover:bg-neutral-800 transition">
|
|
58
|
+
Send Message
|
|
59
|
+
</button>
|
|
60
|
+
</form>
|
|
61
|
+
```
|
|
62
|
+
* **The Waitsec Way:** Respect user time. Ask only for what you need to start the conversation.
|
|
63
|
+
|
|
64
|
+
### 2. Stripping Input Focus Outlines
|
|
65
|
+
|
|
66
|
+
* **The Bad Habit:** Setting `outline: none` on inputs without replacing it with a custom focus ring.
|
|
67
|
+
* **The Problem:** When a user taps or tabs into an input box, the border looks completely unchanged.
|
|
68
|
+
* **Why It Fails:** The user cannot tell which field is currently active. On mobile devices with virtual keyboards, it leads to typing into the wrong box.
|
|
69
|
+
* **Clean Fix:** Always provide an unmistakable focus ring:
|
|
70
|
+
```css
|
|
71
|
+
/* Tailwind standard focus */
|
|
72
|
+
input:focus {
|
|
73
|
+
outline: none;
|
|
74
|
+
border-color: #171717;
|
|
75
|
+
box-shadow: 0 0 0 2px #171717;
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
* **The Waitsec Way:** Focus indicators guide the user's attention. Never disable them without providing a better one.
|
|
79
|
+
|
|
80
|
+
### 3. The Silent Ghost Submission
|
|
81
|
+
|
|
82
|
+
* **The Bad Habit:** When the user clicks "Send Message", nothing happens for 4 seconds, then the page reloads back to an empty form with no message.
|
|
83
|
+
* **The Problem:** The user has no idea whether the message went through or crashed. They click the button 5 more times in frustration.
|
|
84
|
+
* **Why It Fails:** Software must always confirm state changes. Silent forms destroy confidence and generate duplicate tickets.
|
|
85
|
+
* **Clean Fix:** Disable the submit button immediately on click, show a loading state, and render an unmistakable success card:
|
|
86
|
+
```html
|
|
87
|
+
<!-- Button Loading State -->
|
|
88
|
+
<button disabled class="w-full py-3 bg-neutral-700 text-white font-medium rounded-lg cursor-not-allowed flex items-center justify-center gap-2">
|
|
89
|
+
<svg class="animate-spin h-4 w-4 text-white" viewBox="0 0 24 24">...</svg>
|
|
90
|
+
<span>Sending...</span>
|
|
91
|
+
</button>
|
|
92
|
+
|
|
93
|
+
<!-- Inline Success State -->
|
|
94
|
+
<div class="p-6 bg-green-50 border border-green-200 rounded-xl text-green-900">
|
|
95
|
+
<h3 class="font-bold">Message sent successfully!</h3>
|
|
96
|
+
<p class="text-sm mt-1 text-green-800">We received your note and will reply to your email within 24 hours.</p>
|
|
97
|
+
</div>
|
|
98
|
+
```
|
|
99
|
+
* **The Waitsec Way:** Never leave users guessing. Give immediate visual feedback for every user submission.
|
|
100
|
+
|
|
101
|
+
### 4. The Trapped Mobile Keyboard Viewport Shift
|
|
102
|
+
|
|
103
|
+
* **The Bad Habit:** Setting the contact container to fixed pixel height (`height: 600px`) or centering the form inside a strict `h-screen flex items-center`.
|
|
104
|
+
* **The Problem:** When the virtual on-screen keyboard pops up on a phone, the viewport height shrinks by 50%. The input field gets pushed behind the keyboard, and the user cannot see what they are typing.
|
|
105
|
+
* **Why It Fails:** Users cannot see their words, cannot review typos, and cannot reach the submit button.
|
|
106
|
+
* **Clean Fix:** Allow the page to scroll naturally. Use `min-h-screen` instead of `h-screen`, and give the form bottom padding (`pb-24`) so the submit button easily clears the virtual keyboard:
|
|
107
|
+
```html
|
|
108
|
+
<main class="min-h-screen py-12 px-4 sm:px-6 pb-32">
|
|
109
|
+
<div class="max-w-xl mx-auto">...</div>
|
|
110
|
+
</main>
|
|
111
|
+
```
|
|
112
|
+
* **The Waitsec Way:** Always account for virtual mobile keyboards. Content must scroll freely above the keyboard plane.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Pre-Flight Checklist for Contact Pages
|
|
117
|
+
|
|
118
|
+
- [ ] Is the form limited to 3 or 4 essential fields (Name, Email, Message)?
|
|
119
|
+
- [ ] Does every input field have a visible label and high-contrast focus ring?
|
|
120
|
+
- [ ] Is there an immediate loading spinner on the submit button to prevent double-submits?
|
|
121
|
+
- [ ] Does the page display an unmistakable success banner after submission?
|
|
122
|
+
- [ ] Is there a direct, visible email address (`mailto:`) provided as an alternative contact method?
|
|
123
|
+
- [ ] Does the form have enough bottom padding to clear mobile virtual keyboards?
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Landing Page Blueprint (waitsec-pagemaker)
|
|
2
|
+
|
|
3
|
+
Use this guide when creating a marketing page, product launch screen, or SaaS homepage. It ensures your page converts well on both small phones and wide desktop screens without typical AI clutter.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Complete Page Anatomy & Responsive Flow
|
|
8
|
+
|
|
9
|
+
### 1. Header & Navigation Bar
|
|
10
|
+
* **Desktop (1024px+):** Horizontal layout. Logo on the left, 3 to 4 clear links in the center, and 1 high-contrast Action Button on the right.
|
|
11
|
+
* **Mobile (<768px):** Clean bar with Logo on the left and a 44px by 44px hamburger menu icon or a single direct CTA button on the right. Slide-out drawer or full-screen overlay for mobile links with zero layout shift.
|
|
12
|
+
|
|
13
|
+
### 2. Hero Section
|
|
14
|
+
* **Desktop:** Clean centered layout or 2-column split (headline and CTA on the left, interactive product preview or screenshot on the right).
|
|
15
|
+
* **Mobile:** Stacks vertically. Headline first, short subtitle second, primary CTA button third, and product preview underneath. Never push the CTA below the fold on phones.
|
|
16
|
+
|
|
17
|
+
### 3. Problem & Solution Contrast
|
|
18
|
+
* **Desktop:** 2-column comparison card (Current Painful Way on the left vs Your Product Solution on the right).
|
|
19
|
+
* **Mobile:** Stacks into two vertical cards. Show the Pain Point card first, followed immediately by the Solution card.
|
|
20
|
+
|
|
21
|
+
### 4. Core Features Grid
|
|
22
|
+
* **Desktop:** 3-column grid (`lg:grid-cols-3 gap-8`). Equal card heights with consistent padding.
|
|
23
|
+
* **Tablet:** 2-column grid (`md:grid-cols-2 gap-6`).
|
|
24
|
+
* **Mobile:** 1-column stack (`grid-cols-1 gap-4`). Each card takes full width so text is easy to read.
|
|
25
|
+
|
|
26
|
+
### 5. Social Proof & Verifiable Metrics
|
|
27
|
+
* **Desktop:** Clean horizontal row of partner logos, GitHub star count, or verified customer quotes.
|
|
28
|
+
* **Mobile:** 2-column logo grid or vertically stacked quote cards. Never use auto-sliding carousels that users cannot pause with a thumb.
|
|
29
|
+
|
|
30
|
+
### 6. Pricing Tiers
|
|
31
|
+
* **Desktop:** 3-column side-by-side cards. The recommended plan is slightly highlighted with a subtle border.
|
|
32
|
+
* **Mobile:** Stacks vertically. Place the Recommended Plan at the very top so mobile users see the best value first without scrolling through basic tiers.
|
|
33
|
+
|
|
34
|
+
### 7. Frequently Asked Questions (FAQ) & Footer
|
|
35
|
+
* **Desktop & Mobile:** Simple vertical accordions (`<details>` and `<summary>`). Clicking opens the answer in place without jumping the page.
|
|
36
|
+
* **Footer:** Clean multi-column layout on desktop, neatly stacked links on mobile with copyright, privacy, and social icons.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Detailed Pitfalls & The 5-Point Rule
|
|
41
|
+
|
|
42
|
+
### 1. The Multi-CTA Confusion Trap
|
|
43
|
+
|
|
44
|
+
* **The Bad Habit:** Putting three different buttons in the hero section: "Start Free Trial", "Book a Demo", and "Read Whitepaper", all with bright background colors.
|
|
45
|
+
* **The Problem:** The visitor has no idea which button is the primary action. On mobile, three stacked buttons take up half the screen before any explanation of the product.
|
|
46
|
+
* **Why It Fails:** When people are given too many competing choices, they freeze and click nothing. Conversion rates drop sharply.
|
|
47
|
+
* **Clean Fix:** Choose exactly 1 primary action button with your main brand color. If you need a second link, make it a plain text link or an outline button:
|
|
48
|
+
```html
|
|
49
|
+
<div class="flex flex-col sm:flex-row items-center gap-3">
|
|
50
|
+
<a href="/signup" class="w-full sm:w-auto px-6 py-3 bg-neutral-900 text-white font-medium rounded-lg text-center">
|
|
51
|
+
Start Free Trial
|
|
52
|
+
</a>
|
|
53
|
+
<a href="#demo" class="w-full sm:w-auto px-6 py-3 text-neutral-600 hover:text-neutral-900 font-medium text-center">
|
|
54
|
+
View Live Demo →
|
|
55
|
+
</a>
|
|
56
|
+
</div>
|
|
57
|
+
```
|
|
58
|
+
* **The Waitsec Way:** Every marketing page has one main job. Make the single most important action obvious in less than 3 seconds.
|
|
59
|
+
|
|
60
|
+
### 2. The Stretched Desktop Comparison Table
|
|
61
|
+
|
|
62
|
+
* **The Bad Habit:** Building a wide 4-column comparison table comparing features against competitors, and letting it shrink directly into a mobile phone view.
|
|
63
|
+
* **The Problem:** The columns squish down to 60px wide, table headers overlap, and checkmark icons clip outside cell borders.
|
|
64
|
+
* **Why It Fails:** Users cannot read which feature belongs to which plan. Trying to pinch-to-zoom on a phone breaks page navigation.
|
|
65
|
+
* **Clean Fix:** On desktop, use a clean responsive table. On mobile screens below 768px, hide the wide table and show stacked feature cards for each plan instead:
|
|
66
|
+
```html
|
|
67
|
+
<!-- Desktop Table View -->
|
|
68
|
+
<div class="hidden md:block overflow-x-auto">
|
|
69
|
+
<table class="w-full text-left border-collapse">...</table>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Mobile Stacked Card View -->
|
|
73
|
+
<div class="block md:hidden space-y-4">
|
|
74
|
+
<div class="p-5 border border-neutral-200 rounded-xl">...</div>
|
|
75
|
+
</div>
|
|
76
|
+
```
|
|
77
|
+
* **The Waitsec Way:** Never force desktop tables into narrow phone viewports. Transform tables into vertical cards when the screen gets tight.
|
|
78
|
+
|
|
79
|
+
### 3. Copy-Paste Feature Cards
|
|
80
|
+
|
|
81
|
+
* **The Bad Habit:** Generating 6 identical cards, each with the exact same layout: a tiny blue icon, a vague headline like "Blazing Fast", and two lines of generic text.
|
|
82
|
+
* **The Problem:** The features section looks like a placeholder template. High-value features and minor features look completely identical.
|
|
83
|
+
* **Why It Fails:** Visitors scan pages quickly. When all cards look the same, visitors skip the entire section without reading.
|
|
84
|
+
* **Clean Fix:** Give primary features more visual weight. Use a bento-grid style: 1 large card with an actual UI preview for your flagship feature, and smaller cards for supporting features:
|
|
85
|
+
```html
|
|
86
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
87
|
+
<!-- Flagship Feature (spans 2 columns on desktop) -->
|
|
88
|
+
<div class="md:col-span-2 p-6 bg-neutral-50 rounded-2xl border border-neutral-200">
|
|
89
|
+
<h3 class="text-xl font-semibold">Real-Time Sync Engine</h3>
|
|
90
|
+
<p class="text-neutral-600 mt-2">Syncs data across tabs in under 50ms.</p>
|
|
91
|
+
<!-- Real preview box -->
|
|
92
|
+
<div class="mt-4 bg-white p-4 rounded-xl border border-neutral-200 font-mono text-xs">...</div>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<!-- Secondary Feature -->
|
|
96
|
+
<div class="p-6 bg-neutral-50 rounded-2xl border border-neutral-200">
|
|
97
|
+
<h3 class="text-lg font-semibold">Offline Ready</h3>
|
|
98
|
+
<p class="text-neutral-600 mt-2">Queues changes until your connection returns.</p>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
```
|
|
102
|
+
* **The Waitsec Way:** Design follows content importance. Give your biggest product advantage the biggest visual real estate.
|
|
103
|
+
|
|
104
|
+
### 4. The 4-Column Pricing Overflow on Mobile
|
|
105
|
+
|
|
106
|
+
* **The Bad Habit:** Putting 3 or 4 pricing plans in a rigid grid that stays horizontal on small screens, causing the page to stretch sideways.
|
|
107
|
+
* **The Problem:** The mobile screen wobbles left and right, and the primary "Buy Now" buttons get clipped out of view.
|
|
108
|
+
* **Why It Fails:** Buying should be effortless. If a customer cannot see the price and the checkout button on their phone, they will leave immediately.
|
|
109
|
+
* **Clean Fix:** Stack pricing tiers vertically on mobile (`grid-cols-1`), switch to 2 columns on tablet (`md:grid-cols-2`), and 3 columns on desktop (`lg:grid-cols-3`). Always pin the Recommended plan at the top of the mobile stack:
|
|
110
|
+
```html
|
|
111
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 max-w-5xl mx-auto">
|
|
112
|
+
<!-- Highlighted Plan: ordered first on mobile with order-1 -->
|
|
113
|
+
<div class="order-1 lg:order-2 p-6 border-2 border-neutral-900 rounded-2xl bg-white shadow-sm">
|
|
114
|
+
<span class="text-xs font-bold uppercase tracking-wider text-neutral-500">Most Popular</span>
|
|
115
|
+
<h3 class="text-2xl font-bold mt-1">Pro Team</h3>
|
|
116
|
+
<div class="text-4xl font-extrabold mt-3">$29<span class="text-sm font-normal text-neutral-500">/mo</span></div>
|
|
117
|
+
<a href="/checkout" class="block w-full py-3 mt-6 text-center bg-neutral-900 text-white font-medium rounded-lg">Get Started</a>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<!-- Basic Plan -->
|
|
121
|
+
<div class="order-2 lg:order-1 p-6 border border-neutral-200 rounded-2xl bg-white">...</div>
|
|
122
|
+
|
|
123
|
+
<!-- Enterprise Plan -->
|
|
124
|
+
<div class="order-3 lg:order-3 p-6 border border-neutral-200 rounded-2xl bg-white">...</div>
|
|
125
|
+
</div>
|
|
126
|
+
```
|
|
127
|
+
* **The Waitsec Way:** Make the purchase path obvious and thumb-friendly. Zero horizontal scrolling on checkout sections.
|
|
128
|
+
|
|
129
|
+
### 5. The Jittery Full-Height Hero on Mobile
|
|
130
|
+
|
|
131
|
+
* **The Bad Habit:** Forcing the hero section to `height: 100vh` on mobile phones.
|
|
132
|
+
* **The Problem:** As the user scrolls down, the mobile browser URL bar shrinks or disappears. This triggers a sudden recalculation of `100vh`, making the hero jump up and down.
|
|
133
|
+
* **Why It Fails:** Visual jumping disorients users and makes the website feel cheap and buggy.
|
|
134
|
+
* **Clean Fix:** Use natural vertical padding (`py-16` or `py-20`), or use dynamic viewport units (`min-h-[100dvh]`):
|
|
135
|
+
```html
|
|
136
|
+
<section class="min-h-[85vh] flex items-center justify-center py-16 px-4">
|
|
137
|
+
<div class="max-w-4xl mx-auto text-center">
|
|
138
|
+
<h1 class="text-3xl sm:text-5xl font-bold tracking-tight text-neutral-900">...</h1>
|
|
139
|
+
</div>
|
|
140
|
+
</section>
|
|
141
|
+
```
|
|
142
|
+
* **The Waitsec Way:** Respect the physical mechanics of phone browsers. Let content breathe naturally instead of locking screen height.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Pre-Flight Checklist for Landing Pages
|
|
147
|
+
|
|
148
|
+
- [ ] Does the hero section have exactly 1 high-contrast primary CTA button?
|
|
149
|
+
- [ ] Do all pricing and comparison tables stack into vertical cards on screens narrower than 768px?
|
|
150
|
+
- [ ] Are feature cards structured with varied visual weight (bento style) rather than copy-paste clones?
|
|
151
|
+
- [ ] Is there zero horizontal page wobble when testing at 320px width?
|
|
152
|
+
- [ ] Are all headlines scaled down comfortably on mobile to avoid breaking words into multiple lines?
|
|
@@ -1,34 +1,47 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: waitsec-quality
|
|
3
|
-
description: "
|
|
3
|
+
description: "Quality and safety guardrails for AI coding agents. Enforces deep security auditing, realistic automated testing, and database migration safety."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# waitsec-quality: Quality & Safety Guardrails
|
|
6
|
+
# waitsec-quality: Systemic Quality & Safety Guardrails
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You operate under the **waitsec-quality** engineering discipline. This skill extends `waitsec` with strict operational boundaries governing systemic security, testing integrity, and data schema migrations.
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Operating Mode & Role
|
|
13
|
+
When writing backend endpoints, creating database migrations, designing test suites, or touching auth layers, act as a defensive software engineer. Reject superficial test passes, enforce strict access boundaries, and protect persistent storage against data loss.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
15
|
+
## Activation Triggers
|
|
16
|
+
Activate this skill whenever:
|
|
17
|
+
- Modifying authentication, authorization, token handling, or RBAC logic
|
|
18
|
+
- Creating or editing database migrations, ORM models, or schema definitions
|
|
19
|
+
- Writing or refactoring automated tests (unit, integration, e2e)
|
|
20
|
+
- Handling sensitive user data (PII, credentials, payment flows)
|
|
19
21
|
|
|
20
22
|
---
|
|
21
23
|
|
|
22
|
-
##
|
|
24
|
+
## Core Guardrails
|
|
25
|
+
|
|
26
|
+
### 1. Security Auditing & Access Boundaries
|
|
27
|
+
- **Ownership & IDOR:** Validate tenant and user ownership on every database read, update, and delete operation. Never trust client-supplied entity IDs without verifying permissions.
|
|
28
|
+
- **Sensitive Data Exposure:** Never return raw password hashes, internal server stack traces, or private keys in API responses. Use explicit serialization filters.
|
|
29
|
+
- **Mass Assignment:** Whitelist fillable attributes explicitly on ORM models or request validators. Reject raw wildcard inserts.
|
|
23
30
|
|
|
24
|
-
|
|
31
|
+
### 2. Testing Discipline
|
|
32
|
+
- **Assertion Reality:** Every test must assert concrete side-effects or state changes. Trivial assertions (`assert true`, `assert response is not null`) are prohibited.
|
|
33
|
+
- **Mocking Boundaries:** Test actual business logic and database queries where feasible. Never mock the system under test to force an artificial passing run.
|
|
34
|
+
- **Regression Tests:** When fixing an existing bug, write a failing reproduction test before applying the fix.
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
### 3. Data & Migration Integrity
|
|
37
|
+
- **Rollback Safety:** Every database migration must include a working, tested down/rollback method.
|
|
38
|
+
- **Zero Destructive Shortcuts:** Never drop tables or columns on production schemas without an explicit multi-step deprecation plan.
|
|
39
|
+
- **Constraint Discipline:** Enforce foreign keys and uniqueness constraints at the database engine level, not solely in application memory.
|
|
29
40
|
|
|
30
|
-
|
|
41
|
+
---
|
|
31
42
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
## Pre-Flight Checklist
|
|
44
|
+
Before finalizing work:
|
|
45
|
+
- [ ] Are all newly created endpoints protected by authentication and authorization checks?
|
|
46
|
+
- [ ] Do automated tests actually exercise edge cases and failures, or just happy paths?
|
|
47
|
+
- [ ] Is every schema migration reversible and guarded against data loss?
|
|
@@ -1,26 +1,47 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: waitsec-ui
|
|
3
|
-
description: "
|
|
3
|
+
description: "Frontend and UI anti-slop guardrails. Eliminates generic AI aesthetics, enforces mobile-first responsive design, and removes developer implementation leaks from UI copy."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# waitsec-ui: Frontend
|
|
6
|
+
# waitsec-ui: Frontend Restraint & UI Copy Cleanliness
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You operate under the **waitsec-ui** engineering discipline. This skill strips typical AI visual clichés, enforces clean responsive layout patterns, and ensures UI copy serves user decisions rather than documenting implementation details.
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Operating Mode & Role
|
|
13
|
+
When building UI components, writing styles, or phrasing interface labels, design for human usability and cognitive ease. Reject meaningless visual noise, redundant decorators, and developer-speak.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
15
|
+
## Activation Triggers
|
|
16
|
+
Activate this skill whenever:
|
|
17
|
+
- Editing frontend views, templates, or components (`*.tsx`, `*.jsx`, `*.vue`, `*.blade.php`, `*.html`)
|
|
18
|
+
- Writing styles in Tailwind, CSS, SCSS, or CSS-in-JS
|
|
19
|
+
- Creating user-facing microcopy, empty states, tooltips, error banners, or button labels
|
|
19
20
|
|
|
20
21
|
---
|
|
21
22
|
|
|
22
|
-
##
|
|
23
|
+
## Core Guardrails
|
|
24
|
+
|
|
25
|
+
### 1. Anti-Slop Visuals & CSS
|
|
26
|
+
- **No Cliché AI Aesthetics:** Reject gratuitous purple/indigo gradients, multi-layered floating drop-shadows, and slow decorative hover animations.
|
|
27
|
+
- **Functional Decoration:** Every border, shadow, and background variation must serve visual hierarchy. If removing an effect does not hurt usability, remove it.
|
|
28
|
+
- **System Design Consistency:** Use existing project design tokens, spacing scales, and colors rather than arbitrary hex values or arbitrary CSS classes.
|
|
29
|
+
|
|
30
|
+
### 2. Responsive Discipline
|
|
31
|
+
- **Mobile-First Layouts:** Ensure every layout flexes cleanly down to small screens (320px).
|
|
32
|
+
- **No Fixed Widths:** Never set fixed pixel widths (`width: 600px`) on main layout containers. Use fluid widths, `max-width`, and relative units (`rem`, `%`).
|
|
33
|
+
- **No Horizontal Overflow:** Prevent content from clipping or causing horizontal page scrolls on mobile viewports.
|
|
34
|
+
|
|
35
|
+
### 3. Anti-Slop UI Copy (Implementation Silence)
|
|
36
|
+
- **User Value Over Mechanism:** Never explain technical implementations to the user (e.g. "Data loaded via asynchronous API", "Infinite scroll - 40 items per request"). Users need product information, not architecture docs.
|
|
37
|
+
- **Decision Clarity:** Only display copy, badges, or helper text if they help the user understand data or complete an action.
|
|
38
|
+
- **Visual Self-Explanation:** If an action or button is self-evident, do not attach redundant instructions ("Click here to submit").
|
|
39
|
+
- *Deep Dive & Triage:* Read [`skills/waitsec/references/write-info-analyzer.md`](../waitsec/references/write-info-analyzer.md).
|
|
40
|
+
|
|
41
|
+
---
|
|
23
42
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
43
|
+
## Pre-Flight Checklist
|
|
44
|
+
Before finalizing work:
|
|
45
|
+
- [ ] Are arbitrary decorative shadows, gradients, or non-functional animations removed?
|
|
46
|
+
- [ ] Does the UI render cleanly on mobile viewports without horizontal scrolling?
|
|
47
|
+
- [ ] Has all internal developer-speak and redundant instructional copy been eliminated?
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|