saglitzdesign-mcp 0.3.1

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.
Files changed (65) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +191 -0
  3. package/dist/examples.js +67 -0
  4. package/dist/index.js +374 -0
  5. package/dist/knowledge.js +123 -0
  6. package/knowledge/books/design-of-everyday-things.md +155 -0
  7. package/knowledge/books/dont-make-me-think.md +154 -0
  8. package/knowledge/books/grid-typography-classics.md +152 -0
  9. package/knowledge/books/hooked-retention.md +196 -0
  10. package/knowledge/books/influence-persuasion.md +232 -0
  11. package/knowledge/books/positioning-messaging.md +178 -0
  12. package/knowledge/books/psychology-of-design.md +152 -0
  13. package/knowledge/books/refactoring-ui.md +157 -0
  14. package/knowledge/books/storybrand-copywriting.md +194 -0
  15. package/knowledge/components/buttons.md +90 -0
  16. package/knowledge/components/cards-lists-modals.md +63 -0
  17. package/knowledge/components/forms-inputs.md +61 -0
  18. package/knowledge/components/navigation.md +54 -0
  19. package/knowledge/craft/design-critique-scoring.md +237 -0
  20. package/knowledge/craft/typography-craft.md +177 -0
  21. package/knowledge/craft/ux-writing.md +185 -0
  22. package/knowledge/craft/visual-craft-standards.md +161 -0
  23. package/knowledge/design-languages/android-app-design.md +197 -0
  24. package/knowledge/design-languages/apple-hig-liquid-glass.md +94 -0
  25. package/knowledge/design-languages/design-tokens-theming.md +108 -0
  26. package/knowledge/design-languages/fluent-2.md +82 -0
  27. package/knowledge/design-languages/ios-app-design.md +205 -0
  28. package/knowledge/design-languages/macos-app-design.md +202 -0
  29. package/knowledge/design-languages/material-3.md +113 -0
  30. package/knowledge/design-languages/web-trends-2026.md +87 -0
  31. package/knowledge/examples/ios.json +299 -0
  32. package/knowledge/examples/web.json +321 -0
  33. package/knowledge/geo/geo-fundamentals.md +120 -0
  34. package/knowledge/geo/geo-tactics-checklist.md +148 -0
  35. package/knowledge/marketing/ad-creative.md +155 -0
  36. package/knowledge/marketing/branding-identity.md +153 -0
  37. package/knowledge/marketing/email-marketing.md +155 -0
  38. package/knowledge/patterns/mobile/android-patterns.md +181 -0
  39. package/knowledge/patterns/mobile/auth-patterns.md +69 -0
  40. package/knowledge/patterns/mobile/checkout-payments.md +77 -0
  41. package/knowledge/patterns/mobile/empty-states-buttons.md +80 -0
  42. package/knowledge/patterns/mobile/navigation-home.md +78 -0
  43. package/knowledge/patterns/mobile/onboarding-paywall.md +85 -0
  44. package/knowledge/patterns/mobile/settings-lists.md +71 -0
  45. package/knowledge/patterns/web/dashboards.md +141 -0
  46. package/knowledge/patterns/web/feature-sections.md +122 -0
  47. package/knowledge/patterns/web/hero-sections.md +121 -0
  48. package/knowledge/patterns/web/landing-signup.md +168 -0
  49. package/knowledge/patterns/web/pricing-sections.md +122 -0
  50. package/knowledge/patterns/web/social-proof-footer.md +156 -0
  51. package/knowledge/process/marketing-website-roadmap.md +72 -0
  52. package/knowledge/process/product-design-roadmap.md +117 -0
  53. package/knowledge/seo/on-page-seo.md +124 -0
  54. package/knowledge/seo/seo-for-designers.md +159 -0
  55. package/knowledge/seo/technical-seo.md +194 -0
  56. package/knowledge/ux/accessibility.md +68 -0
  57. package/knowledge/ux/color-systems.md +58 -0
  58. package/knowledge/ux/conversion-ux.md +78 -0
  59. package/knowledge/ux/mobile-ux.md +69 -0
  60. package/knowledge/ux/motion-microinteractions.md +67 -0
  61. package/knowledge/ux/principles-heuristics.md +57 -0
  62. package/knowledge/ux/spacing-layout.md +68 -0
  63. package/knowledge/ux/typography.md +63 -0
  64. package/package.json +63 -0
  65. package/scripts/regenerate-examples.md +61 -0
@@ -0,0 +1,159 @@
1
+ ---
2
+ id: seo-for-designers
3
+ title: "SEO for Designers 2026"
4
+ category: seo
5
+ platform: web
6
+ tags: [core-web-vitals, layout-shift, font-loading, image-optimization, mobile-first, accessibility]
7
+ sources: ["https://web.dev/articles/vitals", "https://web.dev/articles/optimize-cls", "https://web.dev/articles/font-best-practices", "https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing", "https://www.uxpin.com/studio/blog/web-design-seo-key-principles/", "https://www.uxpin.com/studio/blog/ux-seo-guide/", "https://www.modernwebseo.com/en/blog/seo-friendly-web-design-guide/", "https://www.elegantthemes.com/blog/design/web-design-and-seo"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # SEO for Designers 2026
12
+
13
+ Every design decision — hero media, font choice, navigation pattern, animation — becomes a Core Web Vitals number, a crawlability property, or an accessibility signal. This file maps design choices to their SEO consequences with hard rules. Thresholds referenced: LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1 at the 75th percentile of real users (see technical-seo.md).
14
+
15
+ ## 1. Layout Stability (CLS) — Design Rules
16
+
17
+ CLS ≤ 0.1 means the page visually budges almost not at all after first paint. Shifts are caused by *designed* elements arriving late.
18
+
19
+ **Rules:**
20
+ - **Reserve space for everything that loads late.** Images, videos, iframes, embeds, ad slots, testimonial carousels: fixed `aspect-ratio` or explicit `width`/`height` in the design spec, always.
21
+ ```css
22
+ .hero-media { aspect-ratio: 16 / 9; width: 100%; }
23
+ img { max-width: 100%; height: auto; } /* with width/height attrs in HTML */
24
+ ```
25
+ - **Cookie banners and promo bars:** design them as `position: fixed` overlays (bottom sheet) or reserve their height in the layout. Never let them push the page down on arrival.
26
+ - **No content injected above the fold after load** — late-loading announcement bars are the single most common CLS failure.
27
+ - **Skeleton screens must match final content dimensions exactly** — a skeleton that's shorter than the loaded card causes the shift it was meant to prevent.
28
+ - **Carousels/accordions/tabs:** size the container to the tallest state, or animate `transform` (compositor-only) rather than `height`/`top`. `transform`/`opacity` animations never count toward CLS; layout-property animations do.
29
+ - **Buttons/badges with dynamic text** ("3 items"): min-width so digits changing doesn't reflow neighbors.
30
+ - Design review gate: load the page on throttled 4G and watch — anything that visibly jumps fails the design, not just the build.
31
+
32
+ ## 2. Font Loading — Typography Without the SEO Tax
33
+
34
+ Web fonts are a top cause of both CLS (swap reflow) and slow LCP (text is often the LCP element).
35
+
36
+ **Rules:**
37
+ - **Max 2 font families, ≤ 4 total weights/styles.** Every weight is a network file. Prefer a variable font when you need > 2 weights of one family.
38
+ - **Self-host WOFF2.** Third-party font CDNs add a connection; Google Fonts via CSS link is slower than self-hosting and has privacy implications in the EU.
39
+ - **Preload the primary text font:**
40
+ ```html
41
+ <link rel="preload" href="/fonts/inter-var.woff2" as="font" type="font/woff2" crossorigin>
42
+ ```
43
+ - **`font-display: swap`** so text is never invisible (FOIT kills LCP). Then neutralize the swap-reflow with fallback metric matching:
44
+ ```css
45
+ @font-face {
46
+ font-family: "Inter";
47
+ src: url("/fonts/inter-var.woff2") format("woff2");
48
+ font-display: swap;
49
+ }
50
+ @font-face {
51
+ font-family: "Inter Fallback";
52
+ src: local("Arial");
53
+ size-adjust: 107%;
54
+ ascent-override: 90%;
55
+ descent-override: 22%;
56
+ }
57
+ body { font-family: "Inter", "Inter Fallback", sans-serif; }
58
+ ```
59
+ (`size-adjust`/`ascent-override` tuned so the fallback occupies identical space → zero font-swap CLS. Tools: Fontaine, next/font does this automatically.)
60
+ - **Subset fonts** to used character sets (latin) — often 70%+ smaller.
61
+ - Decorative display fonts used once in the hero: consider an SVG wordmark or accept system-font fallback on slow connections.
62
+ - **Don't** load icon fonts (Font Awesome as font) — use inline SVG icons; icon fonts are a render-blocking request and an accessibility problem.
63
+
64
+ ## 3. Images & Media — The LCP Discipline
65
+
66
+ The hero image is usually the LCP element; the design decision about it *is* the performance decision.
67
+
68
+ **Rules:**
69
+ - **Formats:** AVIF first, WebP fallback, via `<picture>` or content negotiation. JPEG only as last resort; PNG only for UI screenshots needing lossless; SVG for logos/icons/illustrations.
70
+ - **Hero/LCP image:** `fetchpriority="high"`, never `loading="lazy"`, preloaded if it's a CSS background. Target ≤ 200 KB for a full-bleed hero (AVIF makes this achievable at 1920 px).
71
+ - **Everything below the fold:** `loading="lazy" decoding="async"`.
72
+ - **Responsive sizing:** export/serve multiple widths with `srcset` + `sizes`; never ship a 2400 px image into a 400 px slot:
73
+ ```html
74
+ <img src="/work/case-800.avif"
75
+ srcset="/work/case-400.avif 400w, /work/case-800.avif 800w, /work/case-1600.avif 1600w"
76
+ sizes="(max-width: 768px) 100vw, 50vw"
77
+ width="1600" height="1000"
78
+ alt="Redesigned checkout flow for Acme, mobile and desktop views"
79
+ loading="lazy" decoding="async">
80
+ ```
81
+ - **Alt text on every meaningful image:** describe content and function, include keywords only when natural. Decorative images: `alt=""` (empty, not missing).
82
+ - **Descriptive filenames:** `bakery-website-redesign-hero.avif`, not `IMG_4021-final-v3.png`.
83
+ - **Background video heroes:** muted, `preload="none"` or poster-first, compressed ≤ 2–3 MB, with a static image fallback on mobile/reduced-data. Autoplaying video must never be the LCP bottleneck — the poster image can be the LCP element instead.
84
+ - Text as text, never baked into images — invisible to search, AI engines, and translation.
85
+
86
+ ## 4. Mobile-First Indexing — Parity Is Non-Negotiable
87
+
88
+ Google indexes and ranks from the **mobile rendering** of your site. Whatever the mobile design hides, SEO loses.
89
+
90
+ **Rules:**
91
+ - **Content parity:** the mobile design must contain the same content, headings, structured data, and internal links as desktop. "Simplified" mobile pages that drop sections drop rankings.
92
+ - Content in accordions/tabs on mobile is fine and fully indexed — as long as it's in the DOM (HTML present, visually collapsed), not fetched on click.
93
+ - **Tap targets ≥ 48×48 px** with ≥ 8 px spacing; body text ≥ 16 px without zooming; no horizontal scroll at 360 px width.
94
+ - `<meta name="viewport" content="width=device-width, initial-scale=1">` — absence makes the page "not mobile friendly" outright.
95
+ - No intrusive interstitials on mobile entry (full-screen popups before content) — explicitly penalized. Design email-capture as inline sections, exit-intent (desktop), or small dismissible banners.
96
+ - Design mobile-first in Figma: the 375–414 px frame is the canonical design, desktop is the enhancement.
97
+ - Hamburger menus are fine for crawling (links must be in HTML), but every strategic page should also have contextual in-body links (see on-page-seo.md §4).
98
+
99
+ ## 5. Accessibility ↔ SEO Overlap
100
+
101
+ Accessibility work is SEO work — the same semantics feed screen readers, Googlebot, and LLM crawlers:
102
+
103
+ | Accessibility practice | SEO effect |
104
+ |---|---|
105
+ | Semantic landmarks (`<header> <nav> <main> <footer> <article>`) | Cleaner content extraction, better AI parsing |
106
+ | Correct heading outline | Section-level ranking & AI Overview citation |
107
+ | Alt text | Image search + image context for page relevance |
108
+ | Descriptive link text | Anchor-text relevance signals |
109
+ | Color contrast ≥ 4.5:1, visible focus states | Engagement/UX quality, lower pogo-sticking |
110
+ | Captions/transcripts for video | Indexable text for otherwise opaque media |
111
+ | `prefers-reduced-motion` respected | Lower INP/CLS risk from heavy animation |
112
+
113
+ - Buttons for actions, links (`<a href>`) for navigation — misuse breaks both keyboard users and crawlers.
114
+ - One page language declared: `<html lang="en-GB">` — feeds translation, screen readers, and international targeting.
115
+
116
+ ## 6. Design Patterns That Hurt SEO (Avoid / Replace)
117
+
118
+ | Anti-pattern | Why it hurts | Replace with |
119
+ |---|---|---|
120
+ | Full-page preloader/splash animation | Delays LCP by its full duration | Instant content, subtle entrance animation |
121
+ | Text embedded in hero images | Invisible to search/AI | Real text over image (`<h1>` + CSS) |
122
+ | Infinite scroll only | Deep items never crawled | Infinite scroll + paginated URLs (`/work/page/2/`) |
123
+ | Mega "app-like" SPA portfolio with client-only routes | Empty HTML to AI crawlers, delayed Google indexing | SSG/SSR (Astro, Next) |
124
+ | Hover-only content reveals | No tap equivalent, content risk on mobile index | Click-to-expand with content in DOM |
125
+ | Carousel as sole home for key messages | Slides 2+ barely seen or crawled | Stacked sections; carousel for gallery only |
126
+ | Scroll-jacking / heavy parallax libraries | Main-thread cost → INP failures | CSS scroll-driven animations, `transform`-only effects |
127
+ | PDF for service/pricing info | Poor mobile UX, weak indexing | HTML page (PDF as secondary download) |
128
+ | Thin "gallery-only" portfolio pages | No text = nothing to rank | Case studies: problem → process → measurable result |
129
+ | Custom cursors/heavy WebGL on every page | JS weight, INP, battery | Reserve for one showcase page, not sitewide |
130
+
131
+ ## 7. Design-Phase SEO Checklist (before handoff)
132
+
133
+ - [ ] Every image/media block in the mockup has defined aspect ratio + max file-size budget noted
134
+ - [ ] Hero: LCP element identified; image ≤ 200 KB AVIF plan; no text baked in
135
+ - [ ] Fonts: ≤ 2 families, weights listed, variable font considered, fallback metrics planned
136
+ - [ ] Heading levels annotated in the design (H1/H2/H3), one H1 per page
137
+ - [ ] Mobile frames designed first; content parity with desktop confirmed
138
+ - [ ] Tap targets ≥ 48 px; body ≥ 16 px; contrast ≥ 4.5:1
139
+ - [ ] Cookie/promo banners designed as non-shifting overlays
140
+ - [ ] Nav + footer link map matches the site's internal-linking plan
141
+ - [ ] No intrusive mobile interstitials in the flow
142
+ - [ ] Animations specified as `transform`/`opacity`; reduced-motion variant defined
143
+ - [ ] Empty/loading states sized identically to loaded states
144
+ - [ ] Each template's target query + H1 + title documented alongside the mockup
145
+
146
+ ## 8. Performance Budget (per page template, 2026 defaults)
147
+
148
+ | Budget item | Target |
149
+ |---|---|
150
+ | HTML document | ≤ 50 KB |
151
+ | Total CSS | ≤ 100 KB (critical CSS inlined ≤ 15 KB) |
152
+ | JS shipped to client | ≤ 200 KB compressed (marketing pages ≤ 100 KB) |
153
+ | Hero image | ≤ 200 KB AVIF |
154
+ | Total page weight (first load) | ≤ 1.5 MB mobile |
155
+ | Web fonts | ≤ 2 files, ≤ 120 KB total |
156
+ | Third-party scripts | ≤ 3, all deferred |
157
+ | Field LCP / INP / CLS | ≤ 2.0 s / ≤ 150 ms / ≤ 0.05 (buffer under official 2.5 s / 200 ms / 0.1) |
158
+
159
+ Budgets are design constraints, not engineering afterthoughts: if the concept needs 4 fonts and a 4 MB video, the concept fails the budget review.
@@ -0,0 +1,194 @@
1
+ ---
2
+ id: technical-seo
3
+ title: "Technical SEO 2026"
4
+ category: seo
5
+ platform: web
6
+ tags: [core-web-vitals, structured-data, crawling, javascript-seo, hreflang, sitemaps]
7
+ sources: ["https://web.dev/articles/vitals", "https://developers.google.com/search/docs/appearance/core-web-vitals", "https://developers.google.com/search/updates", "https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites", "https://www.debugbear.com/blog/technical-seo-checklist", "https://www.stackmatix.com/blog/javascript-rendering-seo-best-practices", "https://seomator.com/blog/crawl-to-refer-ratio-ai-crawlers-llm-bots", "https://www.linkgraph.com/blog/hreflang-implementation-guide/"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # Technical SEO 2026
12
+
13
+ Technical SEO in 2026 has two audiences: Google's crawler/renderer **and** AI crawlers (GPTBot, ClaudeBot, PerplexityBot) that now account for roughly half of all crawler traffic and **do not execute JavaScript**. Everything below assumes both.
14
+
15
+ ## 1. Core Web Vitals — Current Official Thresholds
16
+
17
+ Google evaluates each metric at the **75th percentile** of real-user (CrUX field) data, segmented by mobile and desktop. All three must be "Good" for the page to pass.
18
+
19
+ | Metric | Good | Needs Improvement | Poor |
20
+ |---|---|---|---|
21
+ | **LCP** (Largest Contentful Paint) | ≤ 2.5 s | 2.5–4.0 s | > 4.0 s |
22
+ | **INP** (Interaction to Next Paint) | ≤ 200 ms | 200–500 ms | > 500 ms |
23
+ | **CLS** (Cumulative Layout Shift) | ≤ 0.1 | 0.1–0.25 | > 0.25 |
24
+
25
+ - INP replaced FID in March 2024. FID is dead — ignore any guidance referencing it.
26
+ - **Myth check (verified July 2026):** several SEO blogs claim Google lowered the LCP "Good" threshold to 2.0 s in a "March 2026 update." Google's official docs (web.dev and Search Central, last updated Dec 2025) still state **2.5 s**. Treat 2.5 s as the pass line, but target ≤ 2.0 s LCP and ≤ 150 ms INP as a competitive buffer — thresholds are graded on field data you don't fully control (slow devices, slow networks).
27
+ - CWV is a ranking signal, but a modest tiebreaker — it will not rescue thin content, and great content ranks despite mediocre vitals. Fix vitals for UX and conversion first, rankings second.
28
+
29
+ ### LCP quick wins
30
+ - The LCP element is usually the hero image or H1. Serve it from your own origin, in AVIF/WebP, **never lazy-loaded**, with `fetchpriority="high"`.
31
+ - `<link rel="preload" as="image" href="/hero.avif" fetchpriority="high">` for CSS background heroes.
32
+ - TTFB budget: ≤ 800 ms. Use CDN + edge caching; LCP can't be good if the HTML is slow.
33
+ - Inline critical CSS; defer non-critical CSS and all non-essential JS.
34
+
35
+ ### INP quick wins
36
+ - Break long tasks (> 50 ms) with `scheduler.yield()` / `setTimeout` chunking.
37
+ - Minimize third-party scripts; load tag managers and chat widgets after interaction or with `defer`.
38
+ - Give instant visual feedback on tap (CSS `:active` states) even if work continues async.
39
+ - Avoid re-rendering huge DOM trees on input; keep DOM under ~1,400 nodes where possible.
40
+
41
+ ### CLS quick wins
42
+ - Explicit `width`/`height` (or `aspect-ratio`) on ALL images, videos, iframes, embeds, ads.
43
+ - Reserve space for ads/banners with `min-height` placeholders.
44
+ - Never inject content above existing content (cookie bars: use `position: fixed`, or reserve space).
45
+ - Fonts: see the font-loading rules in `seo-for-designers.md`.
46
+
47
+ ## 2. Crawlability & Indexing
48
+
49
+ ### Checklist
50
+ - [ ] `robots.txt` at root; blocks only genuinely private paths. Never block CSS/JS — Google must render the page.
51
+ - [ ] One canonical protocol+host: force HTTPS and one of www/non-www via 301.
52
+ - [ ] Every important page reachable within **3 clicks** of the homepage.
53
+ - [ ] No orphan pages (pages with zero internal links).
54
+ - [ ] Return proper status codes: 404/410 for gone, 301 for moved, no "soft 404s" (200 with empty content).
55
+ - [ ] Redirect chains ≤ 1 hop; no redirect loops.
56
+ - [ ] Paginated archives: self-canonical each page, plain `<a href>` links between pages (`rel=prev/next` is ignored by Google but harmless).
57
+ - [ ] Faceted/filter URLs: `noindex` or canonicalize to the base category; block crawl-trap parameter combinations in robots.txt.
58
+ - [ ] Monitor Search Console → Pages report monthly for "Crawled – currently not indexed" spikes (usually a quality/duplication signal, not technical).
59
+
60
+ ### Do / Don't
61
+ - **Do** use real `<a href="/path">` anchors for all navigation. Buttons with click handlers and router `pushState` links are invisible to crawlers.
62
+ - **Do** keep URL structure flat, lowercase, hyphen-separated: `/services/web-design`, not `/index.php?cat=2&id=17`.
63
+ - **Don't** put indexable content behind login, infinite scroll without paginated URLs, or hover/tap-only reveals with no HTML fallback.
64
+ - **Don't** use meta refresh or JS redirects; use HTTP 301/302.
65
+
66
+ ## 3. JavaScript Rendering
67
+
68
+ Google renders JS in a second wave (delayed, resource-limited). AI crawlers **read initial HTML only**. Rule of thumb for 2026:
69
+
70
+ > **If content matters for search or AI citation, it must exist in the server-rendered HTML response.**
71
+
72
+ - **Preferred:** SSG (static) or SSR (Next.js, Nuxt, Astro, SvelteKit) for all indexable routes. Hydrate for interactivity.
73
+ - **Acceptable:** hybrid/ISR — static shell with server-rendered content, client-side enhancement.
74
+ - **Avoid:** pure client-side rendering (CRA-style SPA) for anything you want ranked or cited. Dynamic rendering (serving bots a prerendered version) is officially deprecated as a long-term approach — treat as a temporary patch only.
75
+ - Metadata (title, meta description, canonical, structured data) must be server-rendered. Client-injected JSON-LD works for Google *if* rendering succeeds, but fails for AI crawlers — inject server-side.
76
+ - Test: `curl -s https://example.com/page | grep -i "your key phrase"` — if it's not in the raw HTML, AI engines can't see it.
77
+
78
+ ## 4. Structured Data (Schema.org)
79
+
80
+ Use **JSON-LD in the `<head>` or body, server-rendered**. Validate with Google's Rich Results Test and Schema.org validator.
81
+
82
+ ### Still-supported, high-value types (2026)
83
+ `Organization`, `LocalBusiness`, `Product` (+ `Offer`, `AggregateRating`), `Article`/`BlogPosting`, `BreadcrumbList`, `Person`, `WebSite`, `Event`, `JobPosting`, `Recipe`, `VideoObject`, `Review`.
84
+
85
+ ### Deprecated — do NOT promise clients rich results from these
86
+ - `HowTo` rich results: removed 2023–2024.
87
+ - `FAQPage` rich results: restricted in 2023, fully retired for visual snippets by 2026.
88
+ - June 2025 removals: Course Info, Claim Review, Estimated Salary, Learning Video, Special Announcement, Vehicle Listing (Book Actions was later reinstated).
89
+ - The markup itself is still valid schema.org and can aid entity understanding / AI comprehension — it just earns no SERP visual. Keep FAQPage markup if cheap; don't build strategy on it.
90
+
91
+ ### Example: LocalBusiness + WebSite (design-agency baseline)
92
+ ```html
93
+ <script type="application/ld+json">
94
+ {
95
+ "@context": "https://schema.org",
96
+ "@type": "ProfessionalService",
97
+ "@id": "https://example.com/#business",
98
+ "name": "Saglitz Design",
99
+ "url": "https://example.com/",
100
+ "logo": "https://example.com/logo.png",
101
+ "image": "https://example.com/studio.jpg",
102
+ "telephone": "+44-20-0000-0000",
103
+ "address": {
104
+ "@type": "PostalAddress",
105
+ "streetAddress": "1 Example St",
106
+ "addressLocality": "London",
107
+ "postalCode": "EC1A 1AA",
108
+ "addressCountry": "GB"
109
+ },
110
+ "sameAs": [
111
+ "https://www.linkedin.com/company/example",
112
+ "https://www.instagram.com/example"
113
+ ]
114
+ }
115
+ </script>
116
+ ```
117
+
118
+ ### Example: Article with author entity (E-E-A-T support)
119
+ ```html
120
+ <script type="application/ld+json">
121
+ {
122
+ "@context": "https://schema.org",
123
+ "@type": "Article",
124
+ "headline": "How Layout Shift Kills Conversions",
125
+ "datePublished": "2026-06-01",
126
+ "dateModified": "2026-07-01",
127
+ "author": {
128
+ "@type": "Person",
129
+ "name": "Jane Doe",
130
+ "url": "https://example.com/about/jane-doe",
131
+ "jobTitle": "Founder & Designer",
132
+ "sameAs": ["https://www.linkedin.com/in/example"]
133
+ },
134
+ "publisher": { "@id": "https://example.com/#business" }
135
+ }
136
+ </script>
137
+ ```
138
+
139
+ ## 5. Canonicals
140
+
141
+ - Every indexable page carries a **self-referencing** canonical: `<link rel="canonical" href="https://example.com/page/">`.
142
+ - Absolute URLs only, matching final protocol/host/trailing-slash exactly.
143
+ - One canonical tag per page — duplicates or conflicts cause Google to ignore all of them.
144
+ - Canonical is a *hint*, not a directive. Reinforce with matching internal links, sitemap URLs, and redirects.
145
+ - Don't canonicalize paginated page 2+ to page 1 (hides deep content); self-canonicalize each.
146
+ - Parameter variants (`?utm=`, sort, filter) → canonical to the clean URL.
147
+
148
+ ## 6. Hreflang (International SEO)
149
+
150
+ ~75% of international sites have hreflang errors. The three non-negotiables:
151
+
152
+ 1. **Self-reference:** each page lists itself in its own hreflang set.
153
+ 2. **Reciprocity (return tags):** if A points to B, B must point back to A. One-way tags are ignored.
154
+ 3. **Valid codes:** ISO 639-1 language + optional ISO 3166-1 Alpha-2 region. `en-GB` ✓, `en-UK` ✗, `gb` alone ✗.
155
+
156
+ ```html
157
+ <link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/" />
158
+ <link rel="alternate" hreflang="en-us" href="https://example.com/en-us/" />
159
+ <link rel="alternate" hreflang="de" href="https://example.com/de/" />
160
+ <link rel="alternate" hreflang="x-default" href="https://example.com/" />
161
+ ```
162
+
163
+ - Always include `x-default` (global/language-picker fallback).
164
+ - hreflang targets must be indexable, 200-status, self-canonical URLs — never redirect or noindexed pages.
165
+ - Implementation options: HTML `<head>` tags (small sites), XML sitemap (large sites — easier to maintain), HTTP headers (PDFs).
166
+ - URL structure: subdirectories (`/de/`) are the default recommendation — consolidate authority on one domain. ccTLDs (`example.de`) give the strongest geo signal but split link equity. Avoid parameters (`?lang=de`).
167
+ - **Don't** auto-redirect users by IP to a locale version — Googlebot crawls mostly from the US and will never see other versions. Offer a banner/suggestion instead.
168
+ - Translate content properly; don't hreflang two identical English pages to `en-us`/`en-gb` unless there's genuine localization (currency, spelling, offers).
169
+
170
+ ## 7. XML Sitemaps
171
+
172
+ - Include **only** canonical, indexable, 200-status URLs. No redirects, no noindexed pages, no parameter dupes.
173
+ - Max 50,000 URLs / 50 MB uncompressed per file; use a sitemap index for more.
174
+ - `<lastmod>` must be truthful (Google uses it; fake dates get ignored). Skip `changefreq`/`priority` — ignored.
175
+ - Reference it in robots.txt: `Sitemap: https://example.com/sitemap.xml` and submit in Search Console.
176
+ - Split by type (`sitemap-pages.xml`, `sitemap-posts.xml`, `sitemap-images.xml`) to isolate indexing problems per section.
177
+ - Image/video sitemaps (or `<image:image>` extensions) for media-heavy portfolio sites.
178
+
179
+ ## 8. AI Crawlers & GEO (Generative Engine Optimization)
180
+
181
+ - AI/LLM crawlers now exceed traditional search crawlers in volume (~52% vs ~34% of crawler traffic, 2026 data).
182
+ - **Default: allow them.** Blocking GPTBot/ClaudeBot/PerplexityBot removes you from AI answers and citations. Block only for genuine licensing/competitive reasons.
183
+ - They read raw HTML only → SSR everything (see §3), keep clean heading hierarchy, use semantic HTML.
184
+ - `llms.txt` (a curated markdown index of key pages at `/llms.txt`): no confirmed ranking/citation effect yet, but zero-risk and ~30 minutes to create. Optional, low priority.
185
+ - Rate-limit abusive crawlers at CDN level rather than blanket robots.txt bans if server load is the concern.
186
+
187
+ ## 9. Technical SEO Audit — Minimum Monthly Checks
188
+
189
+ 1. Search Console: Pages (indexing), Core Web Vitals, and Crawl Stats reports.
190
+ 2. Field CWV via CrUX (PageSpeed Insights) on top 10 templates — field data, not just Lighthouse lab scores.
191
+ 3. Crawl the site (Screaming Frog/Sitebulb): broken links, redirect chains, missing/duplicate titles & canonicals, orphan pages.
192
+ 4. Validate structured data on each template type.
193
+ 5. `curl` key pages to confirm content + JSON-LD present in raw HTML.
194
+ 6. Confirm sitemap URL count ≈ indexable URL count (large gaps = index bloat or coverage loss).
@@ -0,0 +1,68 @@
1
+ ---
2
+ id: accessibility
3
+ title: "Accessibility (WCAG 2.2) — Practical Guide"
4
+ category: ux
5
+ platform: both
6
+ tags: [a11y, wcag, contrast, keyboard, screen-readers, aria]
7
+ sources: ["https://www.w3.org/WAI/WCAG22/quickref/", "https://webaim.org/resources/contrastchecker/"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # Accessibility — Practical Guide (WCAG 2.2 AA baseline)
12
+
13
+ Accessibility is a design constraint, not a QA pass. Target WCAG 2.2 AA.
14
+
15
+ ## Contrast (memorize these)
16
+
17
+ - Normal text: **≥4.5:1** against background.
18
+ - Large text (≥24px, or ≥18.66px bold): **≥3:1**.
19
+ - Non-text UI (borders of inputs, icons, focus rings, button fills vs page): **≥3:1**.
20
+ - Placeholder text, disabled elements: exempt, but keep placeholders ~4.5:1 anyway if they carry format info.
21
+ - Don't put text on busy imagery without a scrim/overlay (40–60% black or gradient).
22
+
23
+ ## Color independence
24
+
25
+ Never encode meaning in color alone: pair with icon, label, or pattern (error = red + icon + message; chart series = color + shape/label; links in body text = underline, not just color).
26
+
27
+ ## Keyboard (web) — hard requirements
28
+
29
+ - Everything operable by keyboard; logical tab order following visual order.
30
+ - `:focus-visible` ring on every interactive element: ≥2px, ≥3:1 contrast, offset from element.
31
+ - Skip-to-content link first in tab order. Escape closes overlays. Arrow keys within composite widgets (menus, tabs, radio groups).
32
+ - No keyboard traps; focus never lands on invisible elements.
33
+ - WCAG 2.2 additions: focus not fully obscured by sticky headers/footers; dragging operations need a click alternative.
34
+
35
+ ## Touch & pointer
36
+
37
+ - Targets ≥24×24 CSS px absolute minimum (WCAG 2.2), 44–48px recommended.
38
+ - Gesture-only functions (swipe, pinch, long-press) need visible single-tap alternatives.
39
+
40
+ ## Semantics & ARIA
41
+
42
+ - Native elements first: `<button>`, `<a>`, `<nav>`, `<main>`, `<label>` — ARIA is a repair tool, not a replacement ("No ARIA is better than bad ARIA").
43
+ - One `<h1>` per page; heading levels never skip; headings describe structure, not styling.
44
+ - Images: meaningful → descriptive `alt`; decorative → `alt=""`.
45
+ - Icon-only buttons: `aria-label`. Live updates (toasts, validation, cart count): `aria-live="polite"`.
46
+ - Forms: programmatic label association; errors referenced via `aria-describedby`; `aria-invalid` on failed fields.
47
+
48
+ ## Motion & media
49
+
50
+ - Respect `prefers-reduced-motion`: disable parallax, large movement, auto-playing animation; keep opacity/color transitions.
51
+ - No flashing >3 times/second. Auto-playing carousels/video need pause controls (or better: don't autoplay).
52
+ - Video: captions; audio: transcripts.
53
+
54
+ ## Text & zoom
55
+
56
+ - Base body ≥16px; support 200% zoom / iOS-Android Dynamic Type without loss of content or horizontal scroll.
57
+ - Use relative units (rem) for font sizes on web; test at 320px-wide viewport equivalent.
58
+ - Line length 45–75 characters; line-height ≥1.5 body text.
59
+
60
+ ## Quick audit checklist
61
+
62
+ 1. Tab through the page — reachable, visible focus, sane order?
63
+ 2. Grayscale screenshot — does meaning survive?
64
+ 3. Contrast-check text, buttons, inputs, focus rings.
65
+ 4. Screen reader pass (VoiceOver/NVDA) on the core flow.
66
+ 5. 200% zoom + 320px viewport — usable, no horizontal scroll?
67
+ 6. Forms: labels, error announcement, keyboard submit.
68
+ 7. `prefers-reduced-motion` honored?
@@ -0,0 +1,58 @@
1
+ ---
2
+ id: color-systems
3
+ title: "Color Systems — Palettes, Semantics, Dark Mode"
4
+ category: ux
5
+ platform: both
6
+ tags: [color, palette, dark-mode, semantic-tokens, contrast]
7
+ sources: ["https://m3.material.io/styles/color/system", "https://developer.apple.com/design/human-interface-guidelines/color"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # Color Systems — Palettes, Semantics, Dark Mode
12
+
13
+ ## Building a product palette
14
+
15
+ - **60-30-10**: ~60% neutral surfaces, ~30% secondary/structural, ~10% accent. Accent is scarce by design — that scarcity is what makes CTAs pop.
16
+ - One brand/accent hue + full neutral ramp + 4 semantic hues (success green, warning amber, danger red, info blue).
17
+ - Build ramps of 10–12 steps per hue (50→950). Generate in a perceptual space (OKLCH) so steps are visually even; keep hue slightly shifting across the ramp (warmer lights, cooler darks) to avoid dead grays.
18
+ - Neutrals: tint them toward the brand hue 1–3% saturation — pure gray reads lifeless next to a colored accent.
19
+ - Test every pairing you actually use: accent-on-surface, text-on-accent, border-on-surface at 3:1/4.5:1.
20
+
21
+ ## Semantic tokens (never hardcode hex in components)
22
+
23
+ Two layers:
24
+ 1. **Primitives**: `blue-600`, `gray-100` … (raw ramps)
25
+ 2. **Semantic roles**: `bg/surface`, `bg/surface-raised`, `bg/accent`, `text/primary`, `text/secondary`, `text/on-accent`, `border/default`, `border/focus`, `state/success|warning|danger`
26
+
27
+ Components consume only semantic roles → dark mode and theming become a token swap, not a redesign.
28
+
29
+ ## Dark mode (rules, not inversion)
30
+
31
+ - Surfaces: dark gray (#0A0A0B–#1C1C1E range), **never pure black** behind text (halation); elevation = lighter surface, not shadow.
32
+ - Desaturate accents ~10–20% and lighten them; saturated brights vibrate on dark.
33
+ - Text: white at 87–92% opacity primary, 60% secondary — pure #FFF body text is harsh.
34
+ - Shadows barely work — use borders (`+6–8%` white overlay) to separate raised surfaces.
35
+ - Semantic colors need dark-mode variants (lighter red/green for 4.5:1 on dark surfaces).
36
+ - Images/illustrations: dim slightly (~90% opacity) or provide dark variants.
37
+ - Respect the OS setting (`prefers-color-scheme`) and offer a manual override that persists.
38
+
39
+ ## Psychology & context (use lightly)
40
+
41
+ - Blue = trust/finance-tech default (also the most overused); green = growth/health/money; red = urgency/danger — reserve for destructive & errors in-product; purple = premium/creative; orange/yellow = energy/attention, weak for text.
42
+ - Cultural check for global products (white/red/gold meanings vary).
43
+ - Category convention beats psychology: fintech ≈ blue/green + dark premium; health ≈ calm greens/blues; food ≈ warm reds/oranges.
44
+
45
+ ## Practical rules
46
+
47
+ - Red/danger only ever means destructive or error in-product. Don't use it for badges/accents.
48
+ - Links: one link color, underline in body prose.
49
+ - Charts: 6-hue max categorical palette, colorblind-safe (test deuteranopia), consistent series colors across the product.
50
+ - Gradients: same-hue or adjacent-hue only (blue→violet fine, blue→orange muddy); subtle in UI, bolder allowed in marketing heroes.
51
+ - White space is a color: default to more surface, less ink.
52
+
53
+ ## Anti-patterns
54
+
55
+ - Accent color used for 30% of the screen (nothing pops).
56
+ - Text on gradients/images without scrim.
57
+ - Dark mode as naive inversion (pure black + neon saturated accents).
58
+ - Six different blues drifting across a product because values were hardcoded per-component.
@@ -0,0 +1,78 @@
1
+ ---
2
+ id: conversion-ux
3
+ title: "Conversion UX — Landing Pages, CRO, Trust"
4
+ category: ux
5
+ platform: web
6
+ tags: [conversion, cro, landing-page, cta, social-proof, pricing]
7
+ sources: ["https://www.nngroup.com/articles/conversion-rate/", "https://cxl.com/blog/"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # Conversion UX — Landing Pages, CRO, Trust
12
+
13
+ ## The above-the-fold contract
14
+
15
+ Within 5 seconds a visitor must be able to answer: **What is this? Who is it for? Why should I care? What do I do next?**
16
+
17
+ - Headline: outcome-focused, specific, ≤10 words ("Ship your app in days, not months" — not "Welcome to X" or vague "Empower your workflow").
18
+ - Subheadline: 1–2 lines expanding the how/who.
19
+ - One primary CTA above the fold; optional low-commitment secondary ("See demo").
20
+ - Real product visual (screenshot/video) beats abstract illustration for SaaS.
21
+ - Social-proof strip (logos / rating / user count) immediately under the hero.
22
+
23
+ ## Page narrative (proven order)
24
+
25
+ 1. Hero (promise + CTA + proof strip)
26
+ 2. Problem/agitation or "how it works" (3 steps)
27
+ 3. Feature/benefit sections — benefit-led headings; features as evidence
28
+ 4. Deep social proof (testimonials with names, faces, companies, specific results)
29
+ 5. Pricing (if self-serve)
30
+ 6. Objection handling / FAQ
31
+ 7. Final CTA section (restate promise)
32
+ 8. Footer
33
+
34
+ Repeat the CTA every 1.5–2 viewport heights. All CTAs on one page → same action (one conversion goal per page).
35
+
36
+ ## CTA optimization
37
+
38
+ - First-person, value-forward labels test well: "Start my free trial", "Get the template" > "Submit", "Learn more".
39
+ - Reduce perceived risk beside the CTA: "Free 14-day trial · No credit card required · Cancel anytime".
40
+ - Contrast: CTA should be the highest-contrast element in its viewport; if you screenshot and squint, the CTA must be the first thing you see.
41
+
42
+ ## Forms & signup friction
43
+
44
+ - Every field costs conversion: signup = email + password (or SSO only). Ask for the rest later (progressive profiling).
45
+ - Multi-step beats single long form; start with the easy/engaging question (commitment escalation).
46
+ - Show value before the wall: interactive demo, free tier, sample output.
47
+
48
+ ## Trust & credibility (Stanford guidelines, operationalized)
49
+
50
+ - Specificity sells: "12,483 teams" > "thousands of teams"; "reduced churn 23%" > "improves retention".
51
+ - Testimonials: full name + photo + role/company + concrete result. Anonymous quotes are worse than none.
52
+ - Security/compliance badges near payment and signup (SOC2, GDPR, Stripe).
53
+ - Visible humans, physical address, responsive support links; polished 404s and error states — sloppy edges leak distrust.
54
+ - Price transparency: hiding pricing behind "Contact us" for a self-serve-priced product kills qualified traffic.
55
+
56
+ ## Pricing page patterns
57
+
58
+ - 3 tiers, middle highlighted ("Most popular") — anchor high tier first on enterprise-leaning products.
59
+ - Per-tier CTA; feature comparison collapsed below the cards; annual/monthly toggle with savings label ("Save 20%").
60
+ - Answer the top 5 objections in FAQ on the pricing page itself (refunds, cancellation, limits, security, migration).
61
+
62
+ ## Urgency & ethics
63
+
64
+ Real scarcity/deadlines only. Fake countdowns, hidden costs at checkout, confirm-shaming ("No thanks, I hate saving money"), forced continuity, and roach-motel cancellations are dark patterns — they convert once, destroy LTV and brand, and increasingly are illegal (FTC/EU).
65
+
66
+ ## Measurement
67
+
68
+ - One primary conversion metric per page; instrument scroll depth, CTA clicks, form-field drop-off.
69
+ - A/B test one variable at a time; headline and hero tests move numbers more than button-color tests.
70
+ - Speed is CRO: every second of load costs ~5–10% conversions; mobile experience is the majority experience.
71
+
72
+ ## Anti-patterns
73
+
74
+ - Carousel heroes (message dilution; slide 2+ is never seen); auto-playing sound.
75
+ - Multiple competing CTAs ("Sign up" + "Contact" + "Download" equally weighted).
76
+ - Wall-of-features tables with no benefits framing; jargon headlines ("Synergize your workflows").
77
+ - Newsletter modal before the visitor reads a single paragraph.
78
+ - Stock photos of handshakes/headsets standing in for a real product.
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: mobile-ux
3
+ title: "Mobile App UX — Platform Rules & Ergonomics"
4
+ category: ux
5
+ platform: mobile
6
+ tags: [mobile, thumb-zone, gestures, ios, android, onboarding]
7
+ sources: ["https://developer.apple.com/design/human-interface-guidelines/", "https://m3.material.io/", "https://www.nngroup.com/articles/mobile-ux/"]
8
+ updated: 2026-07-08
9
+ ---
10
+
11
+ # Mobile App UX — Platform Rules & Ergonomics
12
+
13
+ ## Thumb-zone design
14
+
15
+ - Bottom third of the screen = easy reach; top corners = hardest. On 6.1–6.9" phones, one-handed use dominates.
16
+ - Primary actions, tab bars, key CTAs → bottom. Destructive actions → out of accidental-tap zones.
17
+ - Top of screen: titles, status, search (with pull-down or bottom-sheet alternatives in reach-heavy apps).
18
+ - FABs: bottom-right (Material); avoid covering list content actions.
19
+
20
+ ## Platform respect (don't ship one design to both)
21
+
22
+ | Concern | iOS | Android |
23
+ |---|---|---|
24
+ | Back | Top-left back + edge-swipe | System back gesture/button — must always work correctly |
25
+ | Nav bar | Tab bar 49pt + safe area | Navigation bar 80dp |
26
+ | Typography | SF Pro, Dynamic Type | Roboto/brand, sp units |
27
+ | Sheets | Detent sheets, capsule buttons | Bottom sheets, M3 shapes |
28
+ | Settings | Grouped inset lists | Preference lists |
29
+ | Share/context | Share sheet, context menus (long-press preview) | Share sheet, ⋮ menus |
30
+
31
+ Core brand and layout can match; navigation, gestures, pickers, and system integrations must be native-correct.
32
+
33
+ ## Gestures
34
+
35
+ - Every gesture needs a visible alternative (swipe-to-delete → edit mode / ⋯ menu).
36
+ - Standard gestures only: swipe back, pull-to-refresh, long-press context, pinch zoom on media. Custom gestures need onboarding and rarely stick.
37
+ - Don't fight system gestures: keep interactive elements out of edge-swipe zones and the home-indicator area.
38
+
39
+ ## Onboarding & first-run
40
+
41
+ - Time-to-value is the metric: get users to the core "aha" in <60 seconds. Defer signup until value is shown when possible.
42
+ - Skip intro carousels or cap at 3 screens with Skip; contextual education (tooltips at first encounter) beats upfront tours.
43
+ - Personalization questions: only if answers visibly change the experience; show progress; ≤5 steps.
44
+ - Permissions: ask in context with a pre-permission explainer screen (notifications after user does something worth notifying about — never on cold start). Each cold-start permission dialog costs conversions.
45
+ - Sign-in: offer Apple/Google SSO first (one-tap), email fallback; passkeys are the 2026 default recommendation.
46
+
47
+ ## Performance = UX
48
+
49
+ - Cold start <2s to interactive content; show branded splash → skeleton, never splash → blank.
50
+ - 60fps scrolling is non-negotiable; janky lists read as "cheap app".
51
+ - Offline: cache last content, queue writes, explicit offline banner + retry. Airplane-mode test every core flow.
52
+ - Images progressive/lazy; interactions respond <100ms (optimistic UI for likes/saves).
53
+
54
+ ## Mobile-specific patterns
55
+
56
+ - Keyboard management: scroll focused input above keyboard; "Done/Next" return-key flow through forms; dismiss on scroll or tap-out.
57
+ - Notifications: transactional > promotional; batch digests; deep-link every notification to its exact content.
58
+ - App Store touchpoints: request review only after a success moment, cap frequency; never interrupt a task.
59
+ - Haptics: light impact for selections/toggles, success/error notification haptics — subtle, never on scroll.
60
+ - Text: minimum tap targets 44pt; body 16–17pt; support Dynamic Type up to accessibility sizes without truncation.
61
+
62
+ ## Anti-patterns
63
+
64
+ - Web-view wrappers that ignore platform navigation.
65
+ - Login wall before demonstrating any value (unless product truly requires it).
66
+ - Interstitial ads/paywalls mid-task; notification permission dialog at first launch.
67
+ - Hiding core actions behind long-press with no hint.
68
+ - Splash screens >2s; forced app tours; blocking "rate us" dialogs.
69
+ - Bottom sheets/keyboards covering the input being edited.