@maccesar/aiskills 1.17.1 → 1.18.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/README.md +41 -0
- package/lib/commands/list.js +109 -22
- package/lib/commands/skills.js +1 -3
- package/lib/config.js +1 -0
- package/lib/prompts/checkboxCancel.js +0 -6
- package/lib/symlink.js +1 -1
- package/package.json +4 -2
- package/skills/seo-launch/SKILL.md +91 -0
- package/skills/seo-launch/assets/head.php +85 -0
- package/skills/seo-launch/assets/htaccess-static +86 -0
- package/skills/seo-launch/assets/robots.txt +17 -0
- package/skills/seo-launch/assets/social-meta.blade.php +90 -0
- package/skills/seo-launch/references/head-tags.md +109 -0
- package/skills/seo-launch/references/images.md +86 -0
- package/skills/seo-launch/references/search-engines.md +77 -0
- package/skills/seo-launch/references/server-files.md +168 -0
- package/skills/seo-launch/references/structured-data.md +139 -0
- package/skills/seo-launch/scripts/__pycache__/auditar_seo.cpython-312.pyc +0 -0
- package/skills/seo-launch/scripts/auditar_seo.py +539 -0
- package/skills/stitch-showcase/references/12-video-embedding.md +11 -28
- package/skills/stitch-showcase/references/13-language-detection.md +13 -38
- package/skills/stitch-showcase/scripts/__pycache__/build_showcase.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/component_utils.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/component_utils.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/detect_components.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/detect_components.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_catalog.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_catalog.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_text.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_text.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_zips.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/extract_zips.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/parse_design_md.cpython-313.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/parse_design_md.cpython-314.pyc +0 -0
- package/skills/stitch-showcase/scripts/__pycache__/slug_demangle.cpython-314.pyc +0 -0
|
@@ -2,16 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Sometimes a Stitch slot needs to show a video instead of a still image
|
|
6
|
-
(product demo, animated logo, looping background, recorded screen). This
|
|
7
|
-
document captures the exact pattern that works across browsers and avoids
|
|
8
|
-
the common pitfalls — content recropping, layout shift, AV1 codec, and
|
|
9
|
-
aspect-ratio mismatch with the original wrapper.
|
|
5
|
+
Sometimes a Stitch slot needs to show a video instead of a still image (product demo, animated logo, looping background, recorded screen). This document captures the exact pattern that works across browsers and avoids the common pitfalls — content recropping, layout shift, AV1 codec, and aspect-ratio mismatch with the original wrapper.
|
|
10
6
|
|
|
11
7
|
## The Tag
|
|
12
8
|
|
|
13
|
-
Use a plain `<video>` element with native `width` and `height` attributes
|
|
14
|
-
plus inline styling for safe defaults:
|
|
9
|
+
Use a plain `<video>` element with native `width` and `height` attributes plus inline styling for safe defaults:
|
|
15
10
|
|
|
16
11
|
```html
|
|
17
12
|
<video
|
|
@@ -27,8 +22,7 @@ plus inline styling for safe defaults:
|
|
|
27
22
|
</video>
|
|
28
23
|
```
|
|
29
24
|
|
|
30
|
-
Replace `W` / `H` with the **native** video dimensions and `<slug>` with
|
|
31
|
-
the screen slug (or whatever filename you used inside `videos/`).
|
|
25
|
+
Replace `W` / `H` with the **native** video dimensions and `<slug>` with the screen slug (or whatever filename you used inside `videos/`).
|
|
32
26
|
|
|
33
27
|
### Why each attribute
|
|
34
28
|
|
|
@@ -43,15 +37,13 @@ the screen slug (or whatever filename you used inside `videos/`).
|
|
|
43
37
|
|
|
44
38
|
## File Workflow
|
|
45
39
|
|
|
46
|
-
1. **Download** the source video. For Facebook/Instagram/YouTube/TikTok we
|
|
47
|
-
recommend `yt-dlp`:
|
|
40
|
+
1. **Download** the source video. For Facebook/Instagram/YouTube/TikTok we recommend `yt-dlp`:
|
|
48
41
|
|
|
49
42
|
```bash
|
|
50
43
|
yt-dlp "https://www.facebook.com/<...>/videos/<id>" -o "videos/<slug>.%(ext)s"
|
|
51
44
|
```
|
|
52
45
|
|
|
53
|
-
2. **Re-encode to H.264** if the source comes down as AV1. AV1 doesn't
|
|
54
|
-
preview in macOS Finder and is rejected by Safari < 17:
|
|
46
|
+
2. **Re-encode to H.264** if the source comes down as AV1. AV1 doesn't preview in macOS Finder and is rejected by Safari < 17:
|
|
55
47
|
|
|
56
48
|
```bash
|
|
57
49
|
ffmpeg -i in.mp4 \
|
|
@@ -63,12 +55,9 @@ the screen slug (or whatever filename you used inside `videos/`).
|
|
|
63
55
|
|
|
64
56
|
- `-preset fast`: balanced speed/quality.
|
|
65
57
|
- `-crf 23`: visually-lossless default; lower number = bigger file.
|
|
66
|
-
- `-movflags +faststart`: moves the moov atom to the front so the video
|
|
67
|
-
can start playing before fully downloaded.
|
|
58
|
+
- `-movflags +faststart`: moves the moov atom to the front so the video can start playing before fully downloaded.
|
|
68
59
|
|
|
69
|
-
3. **Place** the encoded `.mp4` in a `videos/` folder at the **project
|
|
70
|
-
level** (the same level as `stitch/` or `showcase/`, not inside
|
|
71
|
-
`assets/`), so the build keeps it out of the screen-extraction pipeline:
|
|
60
|
+
3. **Place** the encoded `.mp4` in a `videos/` folder at the **project level** (the same level as `stitch/` or `showcase/`, not inside `assets/`), so the build keeps it out of the screen-extraction pipeline:
|
|
72
61
|
|
|
73
62
|
```text
|
|
74
63
|
my-project/
|
|
@@ -80,8 +69,7 @@ the screen slug (or whatever filename you used inside `videos/`).
|
|
|
80
69
|
└── <slug>.html ← references ../../videos/hero.mp4
|
|
81
70
|
```
|
|
82
71
|
|
|
83
|
-
4. **Reference from the screen HTML** with a relative path. From inside
|
|
84
|
-
`showcase/assets/<slug>.html`, `videos/` is two levels up:
|
|
72
|
+
4. **Reference from the screen HTML** with a relative path. From inside `showcase/assets/<slug>.html`, `videos/` is two levels up:
|
|
85
73
|
|
|
86
74
|
```html
|
|
87
75
|
<source src="../../videos/hero.mp4" type="video/mp4">
|
|
@@ -89,18 +77,14 @@ the screen slug (or whatever filename you used inside `videos/`).
|
|
|
89
77
|
|
|
90
78
|
## Aspect-Ratio Mismatch
|
|
91
79
|
|
|
92
|
-
The original Stitch wrapper for a video slot usually carries a fixed
|
|
93
|
-
aspect ratio (e.g. `aspect-[4/5]`). If your video is a different shape —
|
|
94
|
-
say 9/16 — keeping the wrapper's aspect locks the video into the wrong
|
|
95
|
-
box, which then forces a choice:
|
|
80
|
+
The original Stitch wrapper for a video slot usually carries a fixed aspect ratio (e.g. `aspect-[4/5]`). If your video is a different shape — say 9/16 — keeping the wrapper's aspect locks the video into the wrong box, which then forces a choice:
|
|
96
81
|
|
|
97
82
|
| Option | Effect |
|
|
98
83
|
|--------|--------|
|
|
99
84
|
| Keep wrapper's `aspect-*` + `object-cover` | Video crops; logos and edges get chopped. |
|
|
100
85
|
| **Remove wrapper's `aspect-*` + `height:auto`** | Video keeps its native aspect; the slot grows or shrinks vertically to fit. ✅ |
|
|
101
86
|
|
|
102
|
-
The second option is almost always what you want — better to have a
|
|
103
|
-
slightly taller card than to chop the brand logo out of the frame.
|
|
87
|
+
The second option is almost always what you want — better to have a slightly taller card than to chop the brand logo out of the frame.
|
|
104
88
|
|
|
105
89
|
## Quick Sanity Checks
|
|
106
90
|
|
|
@@ -109,5 +93,4 @@ After embedding, open the screen in a browser and confirm:
|
|
|
109
93
|
- The video autoplays without a tap on Chrome, Safari, and Firefox.
|
|
110
94
|
- The video loops cleanly (no flash on rewind).
|
|
111
95
|
- On mobile (iOS Safari), it autoplays silently inline (not fullscreen).
|
|
112
|
-
- The file size is reasonable — re-encode with a higher `-crf` if it's
|
|
113
|
-
more than ~3-5 MB per 10 seconds.
|
|
96
|
+
- The file size is reasonable — re-encode with a higher `-crf` if it's more than ~3-5 MB per 10 seconds.
|
|
@@ -2,19 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
The `<html lang="…">` attribute on the generated `index.html` and
|
|
6
|
-
`viewer.html` tells the browser which natural language the content uses.
|
|
7
|
-
If the value disagrees with the actual content, Chrome shows a "Translate
|
|
8
|
-
this page" banner and assistive technologies pronounce words with the
|
|
9
|
-
wrong phoneme set. This document explains how the build picks the value
|
|
10
|
-
and how to override it.
|
|
5
|
+
The `<html lang="…">` attribute on the generated `index.html` and `viewer.html` tells the browser which natural language the content uses. If the value disagrees with the actual content, Chrome shows a "Translate this page" banner and assistive technologies pronounce words with the wrong phoneme set. This document explains how the build picks the value and how to override it.
|
|
11
6
|
|
|
12
7
|
## Resolution Order
|
|
13
8
|
|
|
14
9
|
The `lang` attribute is chosen by the first rule that fires:
|
|
15
10
|
|
|
16
|
-
1. **CLI flag** (future — not implemented yet): `--lang es` on
|
|
17
|
-
`build_showcase.py`.
|
|
11
|
+
1. **CLI flag** (future — not implemented yet): `--lang es` on `build_showcase.py`.
|
|
18
12
|
2. **`showcase.json` field**:
|
|
19
13
|
|
|
20
14
|
```json
|
|
@@ -33,50 +27,31 @@ The `lang` attribute is chosen by the first rule that fires:
|
|
|
33
27
|
es
|
|
34
28
|
```
|
|
35
29
|
|
|
36
|
-
4. **Auto-detection** from the text content of `DESIGN.md` (project name,
|
|
37
|
-
section names, descriptions). The detector counts Spanish signals:
|
|
30
|
+
4. **Auto-detection** from the text content of `DESIGN.md` (project name, section names, descriptions). The detector counts Spanish signals:
|
|
38
31
|
|
|
39
32
|
- Accented characters (`á é í ó ú ñ`).
|
|
40
|
-
- Common Spanish stop words (`de`, `el`, `la`, `los`, `las`, `para`,
|
|
41
|
-
`con`, `pantalla`, `aplicación`, `usuario`, etc.).
|
|
33
|
+
- Common Spanish stop words (`de`, `el`, `la`, `los`, `las`, `para`, `con`, `pantalla`, `aplicación`, `usuario`, etc.).
|
|
42
34
|
|
|
43
|
-
If the Spanish score crosses a small threshold, the lang resolves to
|
|
44
|
-
`"es"`; otherwise it falls through.
|
|
35
|
+
If the Spanish score crosses a small threshold, the lang resolves to `"es"`; otherwise it falls through.
|
|
45
36
|
|
|
46
37
|
5. **Default**: `"en"`.
|
|
47
38
|
|
|
48
39
|
## When to Override
|
|
49
40
|
|
|
50
|
-
The auto-detector handles obvious cases (a project whose DESIGN.md is
|
|
51
|
-
entirely Spanish or entirely English), but it can be fooled by very
|
|
52
|
-
short DESIGN.md files or by projects where the UI language differs from
|
|
53
|
-
the documentation language. Use an explicit override when:
|
|
41
|
+
The auto-detector handles obvious cases (a project whose DESIGN.md is entirely Spanish or entirely English), but it can be fooled by very short DESIGN.md files or by projects where the UI language differs from the documentation language. Use an explicit override when:
|
|
54
42
|
|
|
55
|
-
- The DESIGN.md is in English but the actual screen content is Spanish
|
|
56
|
-
(you'd be documenting an es-MX app in English for a client).
|
|
43
|
+
- The DESIGN.md is in English but the actual screen content is Spanish (you'd be documenting an es-MX app in English for a client).
|
|
57
44
|
- The DESIGN.md is sparse and the heuristic has nothing to score on.
|
|
58
|
-
- You want a non-Spanish, non-English language (`pt`, `fr`, `de` …) —
|
|
59
|
-
the auto-detector only distinguishes Spanish vs everything else.
|
|
45
|
+
- You want a non-Spanish, non-English language (`pt`, `fr`, `de` …) — the auto-detector only distinguishes Spanish vs everything else.
|
|
60
46
|
|
|
61
47
|
## Why It Matters
|
|
62
48
|
|
|
63
|
-
- **Chrome's translate prompt**: with `lang="en"` and Spanish content,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- **Screen readers**: VoiceOver and TalkBack switch pronunciation
|
|
67
|
-
engines per `lang`. A wrong value makes Spanish text sound like a
|
|
68
|
-
speech synthesizer trying to pronounce "configuración" as English.
|
|
69
|
-
- **Search engines**: the `lang` attribute is a soft signal but it's
|
|
70
|
-
read by indexers when ranking pages by locale.
|
|
49
|
+
- **Chrome's translate prompt**: with `lang="en"` and Spanish content, Chrome offers to translate the page to the user's locale. Users perceive this as a bug.
|
|
50
|
+
- **Screen readers**: VoiceOver and TalkBack switch pronunciation engines per `lang`. A wrong value makes Spanish text sound like a speech synthesizer trying to pronounce "configuración" as English.
|
|
51
|
+
- **Search engines**: the `lang` attribute is a soft signal but it's read by indexers when ranking pages by locale.
|
|
71
52
|
|
|
72
53
|
## Common Mistake: Mismatched Lang and Content
|
|
73
54
|
|
|
74
|
-
The previous template hard-coded `lang="en"` even for Spanish-only
|
|
75
|
-
projects. The fix wasn't to flip the default to `"es"` (that just moves
|
|
76
|
-
the bug to English projects) — it was to detect or accept an override.
|
|
77
|
-
The same logic now lives in `parse_design_md.py` (`_detect_lang`) and
|
|
78
|
-
`build_showcase.py` (the `{{HTML_LANG}}` placeholder substitution).
|
|
55
|
+
The previous template hard-coded `lang="en"` even for Spanish-only projects. The fix wasn't to flip the default to `"es"` (that just moves the bug to English projects) — it was to detect or accept an override. The same logic now lives in `parse_design_md.py` (`_detect_lang`) and `build_showcase.py` (the `{{HTML_LANG}}` placeholder substitution).
|
|
79
56
|
|
|
80
|
-
If you ever see Chrome offering to translate one of your showcases:
|
|
81
|
-
that's the signal that the resolved `lang` is wrong. Add an override to
|
|
82
|
-
`showcase.json` or `DESIGN.md` and rebuild.
|
|
57
|
+
If you ever see Chrome offering to translate one of your showcases: that's the signal that the resolved `lang` is wrong. Add an override to `showcase.json` or `DESIGN.md` and rebuild.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|