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.
@@ -0,0 +1,122 @@
1
+ # About Me & Portfolio Blueprint (waitsec-pagemaker)
2
+
3
+ Use this guide when creating a personal developer portfolio, founder bio, or engineer profile page. It ensures the page highlights real-world work and technical competence without cheesy resume clichés.
4
+
5
+ ---
6
+
7
+ ## Complete Page Anatomy & Responsive Flow
8
+
9
+ ### 1. Intro Snapshot (The Header)
10
+ * **Desktop (1024px+):** Side-by-side layout. Profile photo or avatar on the left (80px to 96px), short 2-sentence bio on the right, followed by status badge (e.g. "Available for projects") and direct social links (GitHub, X, LinkedIn, Email).
11
+ * **Mobile (<768px):** Stacks vertically. Avatar centered or left-aligned with clean text underneath. Keep intro under 50 words so visitors see projects without scrolling endlessly.
12
+
13
+ ### 2. Selected Projects Showcase
14
+ * **Desktop:** 2-column grid (`md:grid-cols-2 gap-6`). Each card highlights 1 tangible problem solved, tech stack badges, live demo link, and GitHub repository link.
15
+ * **Mobile:** 1-column vertical stack (`grid-cols-1 gap-6`). Full-width cards with large touch targets for external links.
16
+
17
+ ### 3. Career & Experience Timeline
18
+ * **Desktop & Mobile:** Single vertical line aligned to the left edge with bullet dots. Never use an alternating left-and-right zigzag timeline that breaks on mobile.
19
+ * Content per role: Company name, job title, start/end dates, and 2 concise bullet points detailing measurable engineering impact.
20
+
21
+ ### 4. Technical Skills & Tools
22
+ * **Desktop & Mobile:** Simple, clean text pills organized by category (Languages, Frameworks, Cloud & Databases, Tooling).
23
+ * Absolutely zero animated percentage bars or fake skill ratings.
24
+
25
+ ### 5. Direct Reachout Section
26
+ * A clean footer box with a prominent email link (`mailto:your@email.com`) and location timezone.
27
+
28
+ ---
29
+
30
+ ## Detailed Pitfalls & The 5-Point Rule
31
+
32
+ ### 1. The Fake Skill Percentage Bars
33
+
34
+ * **The Bad Habit:** Adding animated progress bars that claim "JavaScript: 95%", "Docker: 80%", "Teamwork: 90%".
35
+ * **The Problem:** Percentage numbers on human skills mean literally nothing. What does 95% of JavaScript even mean? Does it mean you wrote the V8 engine?
36
+ * **Why It Fails:** Senior hiring managers and engineering leads instantly recognize skill bars as amateur filler. It damages technical credibility.
37
+ * **Clean Fix:** Group skills into clear categorical text badges, or list them alongside the real projects where you actually used them:
38
+ ```html
39
+ <div class="space-y-4">
40
+ <h3 class="text-sm font-semibold uppercase tracking-wider text-neutral-500">Core Technologies</h3>
41
+ <div class="flex flex-wrap gap-2">
42
+ <span class="px-3 py-1 bg-neutral-100 dark:bg-neutral-800 text-neutral-700 dark:text-neutral-300 text-xs rounded-md">TypeScript</span>
43
+ <span class="px-3 py-1 bg-neutral-100 dark:bg-neutral-800 text-neutral-700 dark:text-neutral-300 text-xs rounded-md">Next.js</span>
44
+ <span class="px-3 py-1 bg-neutral-100 dark:bg-neutral-800 text-neutral-700 dark:text-neutral-300 text-xs rounded-md">PostgreSQL</span>
45
+ <span class="px-3 py-1 bg-neutral-100 dark:bg-neutral-800 text-neutral-700 dark:text-neutral-300 text-xs rounded-md">Tailwind CSS</span>
46
+ </div>
47
+ </div>
48
+ ```
49
+ * **The Waitsec Way:** Prove skills through projects and code, not through invented percentages.
50
+
51
+ ### 2. The Alternating Zigzag Timeline on Mobile
52
+
53
+ * **The Bad Habit:** Creating a timeline where odd years are on the left of a center line and even years are on the right.
54
+ * **The Problem:** On a 375px phone screen, dividing the screen in half leaves only 140px of width for text. Sentences wrap every 2 words.
55
+ * **Why It Fails:** It looks like a tangled mess on phones, and dates collide with company names.
56
+ * **Clean Fix:** Use a left-aligned timeline across all screen sizes. The timeline border sits strictly on the left margin:
57
+ ```html
58
+ <div class="relative border-l border-neutral-200 dark:border-neutral-800 ml-3 space-y-8">
59
+ <div class="relative pl-6">
60
+ <!-- Timeline Node Dot -->
61
+ <div class="absolute -left-1.5 top-1.5 w-3 h-3 bg-neutral-900 dark:bg-white rounded-full"></div>
62
+ <div class="text-xs text-neutral-400 font-medium">2024 - Present</div>
63
+ <h3 class="text-base font-bold text-neutral-900 dark:text-white mt-1">Lead Backend Engineer • Fastro</h3>
64
+ <p class="text-sm text-neutral-600 dark:text-neutral-400 mt-2">
65
+ Redesigned API gateway architecture, reducing response latency by 35%.
66
+ </p>
67
+ </div>
68
+ </div>
69
+ ```
70
+ * **The Waitsec Way:** Keep mobile layouts simple. A single vertical line reads naturally from top to bottom on any device.
71
+
72
+ ### 3. Vague Project Cards With No Live Proof
73
+
74
+ * **The Bad Habit:** Listing 8 generic project cards with titles like "E-Commerce App" and "Task Manager", with no live demo and no source code link.
75
+ * **The Problem:** The visitor has no way to verify whether the project was actually built or just copied from a YouTube tutorial.
76
+ * **Why It Fails:** Recruiters and clients want to see live code and architecture decisions. Dead links cause visitors to bounce.
77
+ * **Clean Fix:** Showcase 3 or 4 high-quality projects. For each project, explain the technical problem it solved, provide a live link, and link the GitHub repository:
78
+ ```html
79
+ <div class="p-6 border border-neutral-200 dark:border-neutral-800 rounded-xl hover:border-neutral-400 transition-colors">
80
+ <div class="flex items-center justify-between">
81
+ <h3 class="text-lg font-bold text-neutral-900 dark:text-white">Waitsec CLI</h3>
82
+ <div class="flex items-center gap-3 text-sm">
83
+ <a href="https://github.com/..." class="text-neutral-500 hover:text-neutral-900">GitHub &rarr;</a>
84
+ <a href="https://waitsec.dev" class="text-neutral-900 dark:text-white font-medium">Live &rarr;</a>
85
+ </div>
86
+ </div>
87
+ <p class="text-sm text-neutral-600 dark:text-neutral-400 mt-2">
88
+ Lightweight engineering discipline tool for AI coding agents with zero external dependencies.
89
+ </p>
90
+ <div class="flex gap-2 mt-4 text-xs font-mono text-neutral-500">
91
+ <span>Node.js</span> • <span>ESM</span> • <span>CLI</span>
92
+ </div>
93
+ </div>
94
+ ```
95
+ * **The Waitsec Way:** Fewer projects with real code beats twenty shallow placeholders.
96
+
97
+ ### 4. Hiding the Contact Email Behind a Wall
98
+
99
+ * **The Bad Habit:** Hiding the contact option behind a broken third-party contact form with 8 mandatory fields.
100
+ * **The Problem:** The user just wants to send a quick freelance inquiry or collaboration email, but the form errors out or sends into a void.
101
+ * **Why It Fails:** Friction kills inbound opportunities. If people cannot easily email you, they will message someone else.
102
+ * **Clean Fix:** Always provide a direct, visible email address with a clickable `mailto:` link:
103
+ ```html
104
+ <div class="p-8 bg-neutral-50 dark:bg-neutral-900 rounded-2xl border border-neutral-200 dark:border-neutral-800 text-center">
105
+ <h2 class="text-2xl font-bold">Let's build something together</h2>
106
+ <p class="text-neutral-600 dark:text-neutral-400 mt-2 text-sm">Currently open to select contract and advisory roles.</p>
107
+ <a href="mailto:hello@example.com" class="inline-block mt-4 px-6 py-3 bg-neutral-900 text-white dark:bg-white dark:text-neutral-900 font-medium rounded-lg">
108
+ hello@example.com
109
+ </a>
110
+ </div>
111
+ ```
112
+ * **The Waitsec Way:** Remove barriers between you and your audience. Make reaching out as easy as clicking one button.
113
+
114
+ ---
115
+
116
+ ## Pre-Flight Checklist for About Me & Portfolio Pages
117
+
118
+ - [ ] Are all fake animated skill percentage bars removed in favor of clean categorical tags?
119
+ - [ ] Is the career timeline strictly left-aligned with zero alternating zigzag layouts?
120
+ - [ ] Does every featured project have a working live link or public repository link?
121
+ - [ ] Is there a direct, clickable `mailto:` link clearly visible on the page?
122
+ - [ ] Do project cards collapse into a clean single vertical stack on mobile screens?
@@ -0,0 +1,104 @@
1
+ # Single Article & Reading View Blueprint (waitsec-pagemaker)
2
+
3
+ Use this guide when creating a single article view, blog post template, or markdown documentation page. It ensures readers can focus comfortably on long-form text without eye strain on any device.
4
+
5
+ ---
6
+
7
+ ## Complete Page Anatomy & Responsive Flow
8
+
9
+ ### 1. Top Navigation & Context
10
+ * **Desktop & Mobile:** A clean back link at the top (for example: "&larr; Back to all articles"). Keeps the reader oriented so they never feel lost in deep content.
11
+
12
+ ### 2. Article Header & Metadata
13
+ * **Category Badge:** Small tag indicating the topic (e.g. "Tutorial" or "Architecture").
14
+ * **Main Title (`<h1>`):** Bold, clear, and prominent. Use `text-3xl sm:text-4xl lg:text-5xl font-bold tracking-tight`.
15
+ * **Author & Meta Row:** Author avatar, full name, publication date, and estimated reading time (e.g. "Sep 12, 2026 • 6 min read").
16
+
17
+ ### 3. Reading Container & Measure
18
+ * **Desktop (1024px+):** Constrain the reading container to `max-w-prose` or `max-w-3xl mx-auto px-4`. Never allow lines of text to stretch wider than 70 to 75 characters per line.
19
+ * **Mobile (<768px):** Full width with generous side padding (`px-4 sm:px-6`). Use comfortable 16px or 17px body text with relaxed line-height.
20
+
21
+ ### 4. Rich Media & Code Elements
22
+ * **Code Blocks:** Dark background, syntax highlighting, monospace font, with an explicit `overflow-x-auto` wrapper so long lines of code scroll horizontally instead of blowing up the mobile page.
23
+ * **Blockquotes:** Indented with a 3px solid neutral accent border on the left and slightly italicized text.
24
+ * **Tables:** Always wrapped in a container with `overflow-x-auto` to allow smooth horizontal scrolling on phones.
25
+
26
+ ### 5. Article Footer & Engagement
27
+ * **Author Card:** 2-sentence bio with direct links to GitHub or social profiles.
28
+ * **Next / Previous Navigation:** 2-column cards at the bottom of the article linking to the next piece of content.
29
+
30
+ ---
31
+
32
+ ## Detailed Pitfalls & The 5-Point Rule
33
+
34
+ ### 1. The 1920px Full-Width Reading Nightmare
35
+
36
+ * **The Bad Habit:** Letting article paragraphs stretch 100% across the full width of an ultrawide desktop monitor.
37
+ * **The Problem:** Lines of text become 180 characters long. Readers have to physically turn their heads from left to right to finish a single sentence.
38
+ * **Why It Fails:** Human eyes lose track of the next line when scanning sentences longer than 75 characters. Readers get disoriented, skip paragraphs, and leave out of fatigue.
39
+ * **Clean Fix:** Strictly constrain the text wrapper using `max-w-3xl` or `max-w-prose` with centered margins:
40
+ ```html
41
+ <main class="w-full max-w-3xl mx-auto px-4 sm:px-6 py-12">
42
+ <article class="prose prose-neutral dark:prose-invert max-w-none">
43
+ <p class="text-base sm:text-lg leading-relaxed text-neutral-800">
44
+ Paragraph text stays comfortable and readable across any screen size.
45
+ </p>
46
+ </article>
47
+ </main>
48
+ ```
49
+ * **The Waitsec Way:** Reading comfort is non-negotiable. Cap line length between 60 and 75 characters per line on all devices.
50
+
51
+ ### 2. Code Blocks That Break Mobile Viewports
52
+
53
+ * **The Bad Habit:** Rendering `<pre><code>` blocks with default styling or `white-space: pre` without horizontal overflow protection.
54
+ * **The Problem:** A single long line of code (like a long URL or terminal command) forces the entire mobile page to expand to 900px width.
55
+ * **Why It Fails:** The entire website starts wobbling sideways on mobile phones. Users have to pinch-to-zoom just to recenter the text.
56
+ * **Clean Fix:** Always wrap code blocks with `overflow-x-auto` and specify a clean monospace font stack:
57
+ ```html
58
+ <div class="my-6 rounded-xl bg-neutral-900 text-neutral-100 p-4 overflow-x-auto border border-neutral-800">
59
+ <pre class="font-mono text-sm leading-normal"><code>const response = await fetch("https://api.example.com/v1/data/endpoint/users");</code></pre>
60
+ </div>
61
+ ```
62
+ * **The Waitsec Way:** Code snippets must adapt to the screen, not break the screen. Contain horizontal overflow strictly inside the code block.
63
+
64
+ ### 3. Markdown Tables Clipping Columns on Phones
65
+
66
+ * **The Bad Habit:** Inserting a 5-column data table inside an article and expecting it to fit on a 375px phone screen.
67
+ * **The Problem:** The rightmost 3 columns get permanently cut off, or the text inside table cells squishes into unreadable single-letter stacks.
68
+ * **Why It Fails:** Tables cannot shrink below the width of their text. When table boundaries are locked, readers miss crucial data.
69
+ * **Clean Fix:** Wrap every markdown table in an explicit scroll container with a visual scroll indicator:
70
+ ```html
71
+ <div class="my-6 w-full overflow-x-auto border border-neutral-200 rounded-lg">
72
+ <table class="w-full min-w-[500px] text-left text-sm">
73
+ <thead class="bg-neutral-50 border-b border-neutral-200">...</thead>
74
+ <tbody class="divide-y divide-neutral-200">...</tbody>
75
+ </table>
76
+ </div>
77
+ ```
78
+ * **The Waitsec Way:** Tables are inherently wide. Always give them dedicated horizontal scroll containers so the main page stays rock solid.
79
+
80
+ ### 4. Header Crowding & Suffocating Line-Height
81
+
82
+ * **The Bad Habit:** Using tight line-height (`leading-tight`) on body paragraphs and putting zero top margin above `<h2>` and `<h3>` subheadings.
83
+ * **The Problem:** Subheadings look glued to the paragraph above them, and dense blocks of text look like intimidating walls of gray ink.
84
+ * **Why It Fails:** Reading on a screen is tiring. Without generous breathing room, readers skim and bounce.
85
+ * **Clean Fix:** Give subheadings double the margin above them (`mt-10 mb-4`), and use relaxed line height (`leading-relaxed` or `line-height: 1.75`) for body text:
86
+ ```html
87
+ <h2 class="text-2xl font-bold tracking-tight text-neutral-900 mt-12 mb-4">
88
+ Core Architectural Changes
89
+ </h2>
90
+ <p class="text-base sm:text-lg leading-relaxed text-neutral-700 mb-6">
91
+ Notice how the generous space above makes it instantly obvious that a new topic has begun.
92
+ </p>
93
+ ```
94
+ * **The Waitsec Way:** Visual breathing room creates typographic rhythm. Generous spacing makes complex technical content easy to absorb.
95
+
96
+ ---
97
+
98
+ ## Pre-Flight Checklist for Single Article Pages
99
+
100
+ - [ ] Is the article reading width capped at `max-w-3xl` or `65-75ch` to prevent eye strain?
101
+ - [ ] Do all code blocks and tables have `overflow-x-auto` to prevent mobile viewport wobbling?
102
+ - [ ] Is body paragraph line-height set to relaxed (`leading-relaxed` / 1.75)?
103
+ - [ ] Are subheadings given generous top margin (`mt-10` to `mt-12`) to separate topics clearly?
104
+ - [ ] Is there a clear back-navigation link at the top of the article?
@@ -0,0 +1,121 @@
1
+ # Blog & Article Index Blueprint (waitsec-pagemaker)
2
+
3
+ Use this guide when creating a blog listing, article archive, or news feed. It ensures your readers can easily discover, browse, and filter articles across phones, tablets, and wide monitors.
4
+
5
+ ---
6
+
7
+ ## Complete Page Anatomy & Responsive Flow
8
+
9
+ ### 1. Header & Category Bar
10
+ * **Desktop (1024px+):** Clean page heading (e.g. "Engineering Journal"), a 1-sentence descriptor, and a horizontal row of category pills (All, Architecture, Security, Tutorials).
11
+ * **Mobile (<768px):** Category pills sit in a smooth horizontally scrollable row (`overflow-x-auto no-scrollbar`) with 44px touch targets. Never wrap 15 category tags into four messy vertical lines.
12
+
13
+ ### 2. Featured / Latest Story (Hero Card)
14
+ * **Desktop:** Wide horizontal card (spans 2 columns or full width). High-resolution cover image on the left (50% width), title, category tag, 3-line excerpt, and author metadata on the right (50% width).
15
+ * **Mobile:** Stacks vertically. Image on top (aspect-video), followed by title, date, reading time, and excerpt.
16
+
17
+ ### 3. Article Stream / Card Grid
18
+ * **Desktop Grid Option:** 3-column card grid (`lg:grid-cols-3 gap-8`).
19
+ * **Desktop Feed Option (Substack/Medium Style):** Single centered feed (`max-w-3xl mx-auto space-y-8`). Highly recommended for tech blogs.
20
+ * **Tablet:** 2-column grid (`md:grid-cols-2 gap-6`).
21
+ * **Mobile:** 1-column vertical stack (`grid-cols-1 gap-6`). Every card gets full screen width with generous tap target padding.
22
+
23
+ ### 4. Article Card Anatomy
24
+ Every article preview card must contain:
25
+ 1. Category badge (e.g. "Security" or "CSS").
26
+ 2. Article title (`<h2>` or `<h3>`) with clear hover underline or color shift.
27
+ 3. Reading metadata: Publication date and estimated reading time (e.g. "Sep 12, 2026 • 5 min read").
28
+ 4. Short excerpt: strictly truncated to 2 or 3 lines (`line-clamp-2` or `line-clamp-3`).
29
+ 5. Author snapshot: small 28px avatar and author name.
30
+
31
+ ### 5. Pagination & Page Navigation
32
+ * **Desktop & Mobile:** Explicit page numbers or simple "Previous Page" and "Next Page" buttons.
33
+ * Avoid infinite scroll by default so users can reach the footer and search filters comfortably.
34
+
35
+ ---
36
+
37
+ ## Detailed Pitfalls & The 5-Point Rule
38
+
39
+ ### 1. The Giant Image Trap on Mobile
40
+
41
+ * **The Bad Habit:** Placing massive 16:9 cover images with fixed 400px heights above every single article card.
42
+ * **The Problem:** On a phone, one single article card fills the entire screen. The user has to scroll 3 full times just to see two article titles.
43
+ * **Why It Fails:** People browse blog indexes to scan headlines quickly. Giant thumbnail images waste mobile vertical space and burn unnecessary cellular data.
44
+ * **Clean Fix:** Use compact thumbnail aspect ratios on mobile, or switch to a clean text-first layout where thumbnails are small squares placed on the right side:
45
+ ```html
46
+ <article class="flex flex-col sm:flex-row items-start justify-between gap-4 py-6 border-b border-neutral-200">
47
+ <div class="flex-1">
48
+ <span class="text-xs font-semibold text-neutral-500 uppercase">Architecture</span>
49
+ <h2 class="text-xl font-bold mt-1 hover:text-neutral-600">
50
+ <a href="/blog/scaling-sqlite">How We Scaled SQLite to 100k Requests</a>
51
+ </h2>
52
+ <p class="text-sm text-neutral-600 mt-2 line-clamp-2">
53
+ A practical walkthrough of write-ahead logging and connection pooling.
54
+ </p>
55
+ <div class="text-xs text-neutral-400 mt-3">Sep 12, 2026 • 4 min read</div>
56
+ </div>
57
+ <!-- Small thumbnail on right (tablet/desktop), hidden or compact on mobile -->
58
+ <div class="w-full sm:w-32 h-32 bg-neutral-100 rounded-lg overflow-hidden shrink-0">...</div>
59
+ </article>
60
+ ```
61
+ * **The Waitsec Way:** A blog index is an index for reading. Headlines and excerpts must always take priority over decorative stock images.
62
+
63
+ ### 2. The Wrapping Category Pill Explosion
64
+
65
+ * **The Bad Habit:** Displaying 10 or 15 topic tags ("JavaScript", "Python", "Database", "Design", "DevOps") as inline flex pills that wrap into 4 uneven rows on mobile.
66
+ * **The Problem:** The top third of the phone screen is consumed by a wall of colorful tag pills, pushing the actual articles out of view.
67
+ * **Why It Fails:** It looks messy, creates visual clutter, and forces mobile users to scroll before they even see an article.
68
+ * **Clean Fix:** Use a single horizontal scrolling row on mobile, or use a clean dropdown selector:
69
+ ```html
70
+ <div class="flex items-center gap-2 overflow-x-auto pb-2 -mx-4 px-4 sm:mx-0 sm:px-0 scrollbar-none">
71
+ <button class="px-4 py-2 text-xs font-semibold bg-neutral-900 text-white rounded-full shrink-0">All Posts</button>
72
+ <button class="px-4 py-2 text-xs font-semibold bg-neutral-100 text-neutral-700 rounded-full shrink-0 hover:bg-neutral-200">Security</button>
73
+ <button class="px-4 py-2 text-xs font-semibold bg-neutral-100 text-neutral-700 rounded-full shrink-0 hover:bg-neutral-200">Architecture</button>
74
+ <button class="px-4 py-2 text-xs font-semibold bg-neutral-100 text-neutral-700 rounded-full shrink-0 hover:bg-neutral-200">Frontend</button>
75
+ </div>
76
+ ```
77
+ * **The Waitsec Way:** Protect vertical mobile screen space. Keep navigation filters on a single horizontal plane.
78
+
79
+ ### 3. The Uncontrollable Infinite Scroll
80
+
81
+ * **The Bad Habit:** Loading 20 more articles automatically every time the user scrolls near the bottom of the page, with zero option to stop.
82
+ * **The Problem:** The footer, contact links, copyright, and RSS feed links become completely unreachable because the page keeps jumping and inserting new items.
83
+ * **Why It Fails:** Users get trapped in an endless scroll. If they want to find an older article or visit the privacy policy, they are blocked.
84
+ * **Clean Fix:** Use clean, explicit pagination buttons or a manual "Load More Articles" button that only triggers when clicked:
85
+ ```html
86
+ <div class="flex items-center justify-between pt-10 border-t border-neutral-200">
87
+ <a href="?page=1" class="px-4 py-2 text-sm font-medium border border-neutral-300 rounded-lg hover:bg-neutral-50">
88
+ &larr; Newer Posts
89
+ </a>
90
+ <span class="text-xs text-neutral-500">Page 2 of 8</span>
91
+ <a href="?page=3" class="px-4 py-2 text-sm font-medium border border-neutral-300 rounded-lg hover:bg-neutral-50">
92
+ Older Posts &rarr;
93
+ </a>
94
+ </div>
95
+ ```
96
+ * **The Waitsec Way:** Put the user in total control of their navigation. Never trap users with automatic background triggers.
97
+
98
+ ### 4. The Tiny Unreadable Date Stamp
99
+
100
+ * **The Bad Habit:** Showing dates in 9px light gray text (`text-[9px] text-gray-300`), making it nearly invisible against white backgrounds.
101
+ * **The Problem:** Readers have no idea whether an engineering tutorial was written yesterday or seven years ago.
102
+ * **Why It Fails:** Outdated software tutorials waste hours of developer time. Freshness is one of the most critical decision factors for technical articles.
103
+ * **Clean Fix:** Display dates and reading times in clear, readable 12px or 13px neutral text with proper contrast:
104
+ ```html
105
+ <div class="flex items-center gap-2 text-xs text-neutral-500 font-medium">
106
+ <time datetime="2026-09-12">Sep 12, 2026</time>
107
+ <span>•</span>
108
+ <span>4 min read</span>
109
+ </div>
110
+ ```
111
+ * **The Waitsec Way:** Metadata gives context to content. Make publication dates and reading times clearly legible.
112
+
113
+ ---
114
+
115
+ ## Pre-Flight Checklist for Blog Index Pages
116
+
117
+ - [ ] Do article cards stack into a clean single column on mobile without horizontal scrolling?
118
+ - [ ] Are category filter pills contained in a single horizontal scrollable row on mobile?
119
+ - [ ] Are article excerpts clamped to 2 or 3 lines so cards maintain a predictable height?
120
+ - [ ] Can visitors comfortably reach the footer without being trapped by automatic infinite scroll?
121
+ - [ ] Are publication dates and reading estimates clearly legible with strong contrast?
@@ -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 &rarr;
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?
@@ -5,7 +5,7 @@ description: "Quality and safety guardrails for AI coding agents. Enforces deep
5
5
 
6
6
  # waitsec-quality: Systemic Quality & Safety Guardrails
7
7
 
8
- You operate under the **waitsec-quality** engineering discipline. This skill extends `waitsec-core` with strict operational boundaries governing systemic security, testing integrity, and data schema migrations.
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
 
@@ -36,6 +36,7 @@ Activate this skill whenever:
36
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
37
  - **Decision Clarity:** Only display copy, badges, or helper text if they help the user understand data or complete an action.
38
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).
39
40
 
40
41
  ---
41
42