@hanzlaa/rcode 4.3.2 → 4.4.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/AGENTS.md +1 -1
- package/CONTRIBUTING.md +2 -1
- package/README.md +45 -10
- package/cli/doctor.js +21 -3
- package/cli/index.js +5 -1
- package/cli/install.js +16 -2
- package/cli/postinstall.js +1 -1
- package/cli/uninstall.js +48 -6
- package/dist/rcode.js +178 -174
- package/package.json +12 -22
- package/rcode/agents/rcode-codebase-mapper.md +12 -0
- package/rcode/agents/rcode-phase-researcher.md +13 -0
- package/rcode/agents/rcode-project-researcher.md +32 -0
- package/rcode/agents/rcode-roadmapper.md +15 -0
- package/rcode/agents/rules/planner/common-patterns.md +40 -0
- package/rcode/bin/lib/roadmap.cjs +184 -11
- package/rcode/bin/rcode-hooks.cjs +303 -14
- package/rcode/bin/rcode-tools.cjs +669 -55
- package/rcode/commands/lens-audit.md +8 -6
- package/rcode/data/intent-table.json +87 -0
- package/rcode/modules/seo.yaml +22 -0
- package/rcode/references/project-types.yaml +75 -0
- package/rcode/skills/SKILLS_INDEX.md +20 -2
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/SKILL.md +16 -21
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/backlog-building.md +13 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/merge-strategy.md +17 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/orchestrator-rhythm.md +9 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/wave-design.md +21 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/templates/heartbeat.sh +0 -0
- package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +60 -1
- package/rcode/skills/core/rcode-lazy/SKILL.md +149 -0
- package/rcode/skills/seo/module.yaml +20 -0
- package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +308 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-example.md +109 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-templates.md +427 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/bulk-audit-playbook.md +116 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/scoring-rubric.md +525 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +94 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/city-matrix-and-pages.md +76 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/monetization.md +70 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/niche-selection.md +60 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/subniche-discovery.md +66 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/service-city-page.md +36 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/subniche-research-prompt.md +34 -0
- package/rcode/skills/seo/seo-audit/SKILL.md +412 -0
- package/rcode/skills/seo/seo-audit/evals/evals.json +136 -0
- package/rcode/skills/seo/seo-audit/references/ai-writing-detection.md +200 -0
- package/rcode/skills/seo/seo-content-factory/SKILL.md +130 -0
- package/rcode/skills/seo/seo-content-factory/rules/agents.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/herdr-wave-mapping.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/pipeline.md +102 -0
- package/rcode/skills/seo/seo-content-factory/rules/programmatic-pages.md +107 -0
- package/rcode/skills/seo/seo-content-factory/rules/quality-gates.md +68 -0
- package/rcode/skills/seo/seo-content-factory/rules/weekly-cadence.md +61 -0
- package/rcode/skills/seo/seo-content-factory/templates/BACKLOG.md +23 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/01-funnel-A1-A4.md +63 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/02-fanout-editorial-A5-A6-A8.md +28 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/03-fanout-programmatic-A7-A6-A8.md +25 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/04-loop-A9-A10.md +34 -0
- package/rcode/skills/seo/seo-content-factory/templates/article.mdx +39 -0
- package/rcode/skills/seo/seo-content-factory/templates/cluster.schema.json +52 -0
- package/rcode/skills/seo/seo-content-factory/templates/content-brief.md +51 -0
- package/rcode/skills/seo/seo-content-factory/templates/jsonld-builders.ts +49 -0
- package/rcode/skills/seo/seo-content-factory/templates/keywords.csv +13 -0
- package/rcode/skills/seo/seo-content-factory/templates/programmatic-page.tsx +58 -0
- package/rcode/skills/seo/seo-content-writer/SKILL.md +263 -0
- package/rcode/skills/seo/seo-content-writer/references/content-structure-templates.md +875 -0
- package/rcode/skills/seo/seo-content-writer/references/instructions-detail.md +239 -0
- package/rcode/skills/seo/seo-content-writer/references/seo-writing-checklist.md +250 -0
- package/rcode/skills/seo/seo-content-writer/references/title-formulas.md +339 -0
- package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +79 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/backlinks.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/content-engine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/dos-and-donts.md +40 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/goals-protocol.md +34 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/local-seo-stack.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/mrr-sprint.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/tools.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/backlink-research.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/goal-protocol.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-citations.md +24 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-city-pages.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gbp-categories.md +23 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gsc-goldmine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-review-mining.md +26 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-30day-plan.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-cut.md +13 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-opportunity-finder.md +17 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-role-model.md +18 -0
- package/rcode/skills/seo/seo-site-builder/SKILL.md +149 -0
- package/rcode/skills/seo/seo-site-builder/rules/01-niche-discovery.md +64 -0
- package/rcode/skills/seo/seo-site-builder/rules/02-deep-research.md +164 -0
- package/rcode/skills/seo/seo-site-builder/rules/03-keyword-strategy.md +82 -0
- package/rcode/skills/seo/seo-site-builder/rules/04-content-plan.md +173 -0
- package/rcode/skills/seo/seo-site-builder/rules/05-site-build.md +187 -0
- package/rcode/skills/seo/seo-site-builder/rules/06-yolo.md +127 -0
- package/rcode/skills/seo/seo-site-builder/templates/article-stub.mdx +62 -0
- package/rcode/skills/seo/seo-site-builder/templates/image-prompt.md +97 -0
- package/rcode/skills/seo/seo-site-builder/templates/keyword-export.md +45 -0
- package/rcode/skills/seo/seo-site-builder/templates/niche-scorecard.md +28 -0
- package/rcode/skills/seo/technical-seo-checker/SKILL.md +329 -0
- package/rcode/skills/seo/technical-seo-checker/references/bulk-audit-playbook.md +118 -0
- package/rcode/skills/seo/technical-seo-checker/references/ecommerce-platform-patterns.md +166 -0
- package/rcode/skills/seo/technical-seo-checker/references/http-status-codes.md +705 -0
- package/rcode/skills/seo/technical-seo-checker/references/llm-crawler-handling.md +257 -0
- package/rcode/skills/seo/technical-seo-checker/references/pre-migration-playbook.md +137 -0
- package/rcode/skills/seo/technical-seo-checker/references/robots-txt-reference.md +717 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-example.md +169 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-templates.md +436 -0
- package/rcode/templates/settings-hooks.json +16 -1
- package/rcode/workflows/do.md +17 -0
- package/rcode/workflows/enable-hooks.md +3 -2
- package/rcode/workflows/execute-sprint.md +22 -0
- package/rcode/workflows/execute.md +17 -3
- package/rcode/workflows/lens-audit.md +49 -8
- package/rcode/workflows/new-milestone.md +21 -9
- package/rcode/workflows/new-project-create-roadmap.md +2 -0
- package/rcode/workflows/new-project-roadmap.md +2 -0
- package/rcode/workflows/new-project.md +3 -0
- package/rcode/workflows/plan.md +15 -2
- package/server/dashboard.js +6 -2
- package/server/lib/api.js +35 -20
- package/server/lib/html/client/components/OrchPanel.js +43 -2
- package/server/lib/html/client/components/dashboard/InProgress.js +5 -4
- package/server/lib/html/client/components/shared.js +14 -0
- package/server/lib/html/client/orchestrator.js +13 -0
- package/server/lib/html/client/views/KanbanView.js +33 -4
- package/server/lib/html/css.js +57 -3
- package/server/lib/scanner.js +40 -4
- package/server/orchestrator.js +42 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Rule: Keyword Strategy
|
|
2
|
+
|
|
3
|
+
## When to Run
|
|
4
|
+
After deep research completes and user approves (or solo yolo auto-continues)
|
|
5
|
+
|
|
6
|
+
## Step 1 — Build Keywords.txt
|
|
7
|
+
Extract ALL keywords from research/02-keyword-research.md
|
|
8
|
+
Format: comma-separated, one line, saved to `/keywords.txt`
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Extract and deduplicate all keywords from research file
|
|
12
|
+
grep -E "^\|" research/02-keyword-research.md | \
|
|
13
|
+
grep -v "Keyword\|---\|keyword" | \
|
|
14
|
+
awk -F'|' '{print $2}' | \
|
|
15
|
+
sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$//' | \
|
|
16
|
+
grep -v "^$" | grep -v "^[0-9]*$" | \
|
|
17
|
+
sort -u | tr '\n' ',' | sed 's/,$/\n/' > keywords.txt
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Tell user:**
|
|
21
|
+
"Keywords saved to keywords.txt — please paste into Google Keyword Planner:
|
|
22
|
+
1. Go to ads.google.com → Tools → Keyword Planner
|
|
23
|
+
2. Click 'Discover new keywords' → 'Enter keywords manually'
|
|
24
|
+
3. Paste the contents of keywords.txt
|
|
25
|
+
4. Download CSV with Volume, CPC, Competition columns
|
|
26
|
+
5. Share the CSV here and I'll re-prioritize the article schedule"
|
|
27
|
+
|
|
28
|
+
## Step 2 — If CSV Provided (Preferred Path)
|
|
29
|
+
Parse CSV with these columns:
|
|
30
|
+
- Keyword, Volume, CPC, AVG DA, Weakspot, Golden Score, Intent, Trending
|
|
31
|
+
|
|
32
|
+
**Priority sort algorithm:**
|
|
33
|
+
```python
|
|
34
|
+
# Step 1: Filter to AVG DA < 55 (beatable without backlinks)
|
|
35
|
+
# Step 2: Sort by Weakspot DESC (more weak pages = easier)
|
|
36
|
+
# Step 3: Within same Weakspot tier, sort by Volume DESC
|
|
37
|
+
# Step 4: Flag Trending=true keywords with ⭐
|
|
38
|
+
# Step 5: Put Golden Score > 1.5 keywords in priority tier
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Article Schedule Tiers:**
|
|
42
|
+
- Tier 1: AVG DA < 45, any Weakspot → Publish Month 1 (no backlinks needed)
|
|
43
|
+
- Tier 2: AVG DA 45-55, Weakspot ≥ 2 → Publish Month 1-2
|
|
44
|
+
- Tier 3: AVG DA 55-65, Weakspot ≥ 1 → Publish Month 3-4
|
|
45
|
+
- Tier 4: AVG DA 65-75, any → Publish Month 4-5 (need some authority)
|
|
46
|
+
- Tier 5: AVG DA 75+, high volume → Money pages, Publish Month 6+
|
|
47
|
+
|
|
48
|
+
## Step 3 — If No CSV (Fallback Path)
|
|
49
|
+
Use browser tool to manually check top 10 SERPs for top 30 keywords:
|
|
50
|
+
- Note if top results are: big brands (bad) vs small blogs (good)
|
|
51
|
+
- Check Moz or Ahrefs toolbar data if visible
|
|
52
|
+
- Estimate DA based on: site type, content depth, known brand recognition
|
|
53
|
+
|
|
54
|
+
## Step 4 — Generate article-schedule.md
|
|
55
|
+
Save to `docs/article-schedule.md` with exact format:
|
|
56
|
+
```markdown
|
|
57
|
+
| # | Title | Keyword | DA | Vol | Weak | Score | Type |
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Each article must have:
|
|
61
|
+
- Exact target keyword
|
|
62
|
+
- Suggested URL slug
|
|
63
|
+
- Article type (Review/Comparison/How-To/Use-Case/FAQ/Roundup)
|
|
64
|
+
- Target publish month
|
|
65
|
+
- Why it ranks without backlinks (1 sentence)
|
|
66
|
+
|
|
67
|
+
## Step 5 — Identify Top 5 "First Week" Articles
|
|
68
|
+
These go live in Week 1-2 for fastest sandbox exit signals:
|
|
69
|
+
1. One troubleshoot/panic search (Reddit/forums dominate SERP)
|
|
70
|
+
2. One specific model review (retailer pages only, zero affiliates)
|
|
71
|
+
3. One comparison nobody wrote (brand A vs brand B gap)
|
|
72
|
+
4. One question-based article (PAA box with weak answers)
|
|
73
|
+
5. One use-case article (health condition + product recommendation)
|
|
74
|
+
|
|
75
|
+
## Copy Keywords to Clipboard
|
|
76
|
+
Always run at end:
|
|
77
|
+
```bash
|
|
78
|
+
cat keywords.txt | clip.exe # WSL
|
|
79
|
+
# or
|
|
80
|
+
cat keywords.txt | pbcopy # Mac
|
|
81
|
+
```
|
|
82
|
+
Tell user: "Keywords copied to clipboard — paste into Google Ads Planner now"
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Rule: Content Plan & Article Stubs
|
|
2
|
+
|
|
3
|
+
## When to Run
|
|
4
|
+
After article-schedule.md is finalized with real keyword data
|
|
5
|
+
|
|
6
|
+
## Step 1 — Create Content Directory Structure
|
|
7
|
+
```
|
|
8
|
+
/content/
|
|
9
|
+
├── reviews/ ← single product/model reviews
|
|
10
|
+
├── comparisons/ ← brand-vs-brand, type-vs-type
|
|
11
|
+
├── guides/ ← buying guides, how-to, educational
|
|
12
|
+
├── health/ ← use-case articles (condition-specific)
|
|
13
|
+
└── best/ ← roundup / best-of lists (money pages)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Step 2 — Generate MDX Stubs for First 20 Articles
|
|
17
|
+
For each article in Tier 1 + Tier 2 of article-schedule.md, create a stub file.
|
|
18
|
+
|
|
19
|
+
File naming: `content/[type]/[slug].mdx`
|
|
20
|
+
|
|
21
|
+
**MDX Frontmatter Template:**
|
|
22
|
+
```mdx
|
|
23
|
+
---
|
|
24
|
+
title: "[Full SEO Title Here]"
|
|
25
|
+
slug: "[url-slug]"
|
|
26
|
+
type: "review|comparison|guide|health|best"
|
|
27
|
+
keyword: "[exact target keyword]"
|
|
28
|
+
metaTitle: "[Title under 60 chars for Google]"
|
|
29
|
+
metaDescription: "[Description 140-160 chars with keyword]"
|
|
30
|
+
publishDate: "[YYYY-MM-DD based on schedule]"
|
|
31
|
+
status: "stub"
|
|
32
|
+
wordCountTarget: [1500-5000 based on type]
|
|
33
|
+
affiliateLinks:
|
|
34
|
+
- brand: "[Brand Name]"
|
|
35
|
+
url: "[affiliate URL placeholder]"
|
|
36
|
+
commission: "[X%]"
|
|
37
|
+
internalLinks:
|
|
38
|
+
- "[related article slug 1]"
|
|
39
|
+
- "[related article slug 2]"
|
|
40
|
+
imageRequired: true
|
|
41
|
+
imagePomptFile: "assets/image-prompts/[slug]-images.md"
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## [H2: Main Section Title]
|
|
45
|
+
|
|
46
|
+
[STUB: Write 2000-word expert review covering: specs, EMF levels, wood quality, heating performance, assembly, verdict]
|
|
47
|
+
|
|
48
|
+
## Pros & Cons
|
|
49
|
+
|
|
50
|
+
**Pros:**
|
|
51
|
+
- [STUB]
|
|
52
|
+
|
|
53
|
+
**Cons:**
|
|
54
|
+
- [STUB]
|
|
55
|
+
|
|
56
|
+
## Verdict
|
|
57
|
+
|
|
58
|
+
[STUB: Final recommendation with affiliate CTA]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Step 3 — Image Handling (Two Strategies)
|
|
62
|
+
|
|
63
|
+
For EVERY article, handle images using ONE of these two strategies:
|
|
64
|
+
|
|
65
|
+
### Strategy A — Download Real Product Images (Preferred for Reviews)
|
|
66
|
+
Use browser tool to find and download actual product images:
|
|
67
|
+
1. Open Google Images: search `[product name] official product photo`
|
|
68
|
+
2. Search brand's official website for press/product images
|
|
69
|
+
3. Search Amazon listing for the product — use main product photos
|
|
70
|
+
4. Download to: `public/images/[slug]/`
|
|
71
|
+
- `hero.jpg` — main product exterior shot
|
|
72
|
+
- `detail.jpg` — close-up or interior shot
|
|
73
|
+
- `specs.jpg` — specs sheet or comparison image if available
|
|
74
|
+
|
|
75
|
+
**When to use Strategy A:**
|
|
76
|
+
- Product review articles (real product photos = more trust + E-E-A-T)
|
|
77
|
+
- Brand overview articles
|
|
78
|
+
- Any article where real product imagery exists online
|
|
79
|
+
|
|
80
|
+
**Browser tool commands:**
|
|
81
|
+
```
|
|
82
|
+
1. Navigate to Google Images
|
|
83
|
+
2. Search: "[Brand] [Model] product photo official"
|
|
84
|
+
3. Filter: Large size, labeled for reuse if possible
|
|
85
|
+
4. Save image to correct path
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Strategy B — AI Generation Prompt File (For Infographics, Cards, Pinterest)
|
|
89
|
+
Create `/assets/image-prompts/[slug]-images.md` with detailed prompts:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# Image Prompts: [Article Title]
|
|
93
|
+
# Place generated images at the exact paths specified below
|
|
94
|
+
|
|
95
|
+
## Image 1 — Hero (if no real product photo found)
|
|
96
|
+
**Place at:** public/images/[slug]/hero.jpg
|
|
97
|
+
**Prompt:** Professional product photography of [product description],
|
|
98
|
+
warm cedar wood interior background, soft diffused natural lighting,
|
|
99
|
+
premium lifestyle feel, no text, 1200x630px, high-end editorial quality,
|
|
100
|
+
warm amber and cream tones
|
|
101
|
+
|
|
102
|
+
## Image 2 — Verdict/Rating Card
|
|
103
|
+
**Place at:** public/images/[slug]/verdict-card.png
|
|
104
|
+
**Prompt:** Rating card graphic showing [X.X]/10 score,
|
|
105
|
+
product name "[Product Name]" in Playfair Display serif font,
|
|
106
|
+
warm Nordic minimal design, burnt amber (#C9622F) accent,
|
|
107
|
+
cream background (#FAF6F1), star rating icons, clean professional layout
|
|
108
|
+
|
|
109
|
+
## Image 3 — Pinterest Pin
|
|
110
|
+
**Place at:** public/images/[slug]/pinterest.jpg
|
|
111
|
+
**Prompt:** Tall Pinterest 2:3 ratio graphic (1000x1500px),
|
|
112
|
+
"[Article Headline]" text in Playfair Display,
|
|
113
|
+
warm sauna interior background, burnt amber banner bottom with site name,
|
|
114
|
+
premium editorial feel, high contrast for mobile readability
|
|
115
|
+
|
|
116
|
+
## Image 4 — Comparison Infographic (for comparison articles)
|
|
117
|
+
**Place at:** public/images/[slug]/comparison.png
|
|
118
|
+
**Prompt:** Clean two-column comparison infographic,
|
|
119
|
+
maple amber (#C9622F) vs dark forest (#1C2B2D) column headers,
|
|
120
|
+
cream background (#FAF6F1), Inter font body text,
|
|
121
|
+
professional data visualization, no stock photo people
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**When to use Strategy B:**
|
|
125
|
+
- Comparison infographics (no real product photo needed)
|
|
126
|
+
- Rating/verdict cards
|
|
127
|
+
- Pinterest pins
|
|
128
|
+
- Any custom graphic that doesn't require a real product photo
|
|
129
|
+
|
|
130
|
+
### Decision Rule Per Article Type
|
|
131
|
+
| Article Type | Hero | Detail | Card | Pinterest |
|
|
132
|
+
|-------------|------|--------|------|-----------|
|
|
133
|
+
| Product Review | Strategy A | Strategy A | Strategy B | Strategy B |
|
|
134
|
+
| Comparison | Strategy B | Strategy A (both products) | Strategy B | Strategy B |
|
|
135
|
+
| How-To / FAQ | Strategy B | Strategy A (if product shown) | — | Strategy B |
|
|
136
|
+
| Roundup | Strategy B | Strategy A (top pick) | Strategy B | Strategy B |
|
|
137
|
+
| Use-Case/Health | Strategy B | Strategy A (product rec) | — | Strategy B |
|
|
138
|
+
|
|
139
|
+
## Step 4 — Internal Linking Map
|
|
140
|
+
Create `docs/internal-linking-map.md`:
|
|
141
|
+
|
|
142
|
+
```markdown
|
|
143
|
+
# Internal Linking Map
|
|
144
|
+
|
|
145
|
+
## Rule: All roads lead to money pages
|
|
146
|
+
|
|
147
|
+
### Money Pages (receive most links)
|
|
148
|
+
- /best/infrared-sauna-for-home ← linked from: all reviews, all comparisons
|
|
149
|
+
- /best/sauna-blanket ← linked from: all blanket reviews, portable comparisons
|
|
150
|
+
|
|
151
|
+
### Hub Pages (give and receive links)
|
|
152
|
+
- /brands/[brand-name] ← linked from all model reviews of that brand
|
|
153
|
+
- /guides/buyers-guide ← linked from all Tier 1-2 articles
|
|
154
|
+
|
|
155
|
+
### Spoke Pages (give links upward)
|
|
156
|
+
- /reviews/[model] → links to: brand hub, most relevant roundup, 1-2 comparisons
|
|
157
|
+
- /health/[condition] → links to: 2-3 model reviews, buyers guide
|
|
158
|
+
|
|
159
|
+
### Anchor Text Rules
|
|
160
|
+
✅ Use: natural phrases ("best for arthritis", "see our full review", "compared here")
|
|
161
|
+
❌ Avoid: exact match anchors ("best infrared sauna") — triggers over-optimization
|
|
162
|
+
❌ Avoid: generic anchors ("click here", "read more")
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Step 5 — Interactive Gate
|
|
166
|
+
After stubs + image prompts created:
|
|
167
|
+
"Content stubs ready for [N] articles.
|
|
168
|
+
Image prompts saved to assets/image-prompts/ — get them generated and place at paths specified.
|
|
169
|
+
|
|
170
|
+
Want to:
|
|
171
|
+
1. Continue to site build (Next.js setup)
|
|
172
|
+
2. Research the next niche idea
|
|
173
|
+
3. Write full content for Article #1 now"
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Rule: Site Build — Next.js + Velite + BMAD
|
|
2
|
+
|
|
3
|
+
## When to Run
|
|
4
|
+
After content plan approved and user wants to build the site
|
|
5
|
+
|
|
6
|
+
## Tech Stack (Always Use Unless User Says Otherwise)
|
|
7
|
+
- **Framework:** Next.js 16.2.1 (App Router) — `pnpm create next-app@16.2.1`
|
|
8
|
+
- **Content Layer:** Velite (MDX + JSON → typed content)
|
|
9
|
+
- **Styling:** Tailwind CSS + shadcn/ui
|
|
10
|
+
- **Hosting:** Vercel (free tier)
|
|
11
|
+
- **Package Manager:** pnpm (ALWAYS — never npm or yarn)
|
|
12
|
+
|
|
13
|
+
## Step 1 — Init Project
|
|
14
|
+
```bash
|
|
15
|
+
cd /home/hanzla/development/
|
|
16
|
+
pnpm create next-app@16.2.1 [project-slug] \
|
|
17
|
+
--typescript \
|
|
18
|
+
--tailwind \
|
|
19
|
+
--eslint \
|
|
20
|
+
--app \
|
|
21
|
+
--src-dir \
|
|
22
|
+
--import-alias "@/*"
|
|
23
|
+
cd [project-slug]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Step 2 — Install Dependencies
|
|
27
|
+
```bash
|
|
28
|
+
# Content layer
|
|
29
|
+
pnpm add velite
|
|
30
|
+
|
|
31
|
+
# UI components
|
|
32
|
+
pnpm dlx shadcn@latest init
|
|
33
|
+
pnpm dlx shadcn@latest add button card badge separator table
|
|
34
|
+
|
|
35
|
+
# SEO
|
|
36
|
+
pnpm add next-sitemap
|
|
37
|
+
|
|
38
|
+
# Utilities
|
|
39
|
+
pnpm add date-fns reading-time
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Step 3 — Directory Structure
|
|
43
|
+
Create exactly:
|
|
44
|
+
```
|
|
45
|
+
src/
|
|
46
|
+
├── app/
|
|
47
|
+
│ ├── layout.tsx ← root layout with SEO defaults
|
|
48
|
+
│ ├── page.tsx ← homepage
|
|
49
|
+
│ ├── reviews/
|
|
50
|
+
│ │ └── [slug]/page.tsx ← single product review
|
|
51
|
+
│ ├── compare/
|
|
52
|
+
│ │ └── [slug]/page.tsx ← comparison articles
|
|
53
|
+
│ ├── guides/
|
|
54
|
+
│ │ └── [slug]/page.tsx ← buying guides
|
|
55
|
+
│ ├── health/
|
|
56
|
+
│ │ └── [slug]/page.tsx ← use-case articles
|
|
57
|
+
│ ├── best/
|
|
58
|
+
│ │ └── [slug]/page.tsx ← roundup pages
|
|
59
|
+
│ └── sitemap.ts ← auto-generated sitemap
|
|
60
|
+
├── components/
|
|
61
|
+
│ ├── ui/ ← shadcn components
|
|
62
|
+
│ ├── ArticleLayout.tsx ← shared article wrapper
|
|
63
|
+
│ ├── ReviewCard.tsx ← product review card
|
|
64
|
+
│ ├── ComparisonTable.tsx ← side-by-side comparison
|
|
65
|
+
│ ├── AffiliateButton.tsx ← CTA button with disclosure
|
|
66
|
+
│ ├── RatingStars.tsx ← star rating display
|
|
67
|
+
│ ├── ProsCons.tsx ← pros/cons list
|
|
68
|
+
│ ├── KeywordBox.tsx ← target keyword highlight
|
|
69
|
+
│ └── SchemaMarkup.tsx ← JSON-LD schema injection
|
|
70
|
+
└── lib/
|
|
71
|
+
├── velite.ts ← content queries
|
|
72
|
+
└── utils.ts ← helpers
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Step 4 — Velite Config
|
|
76
|
+
Create `velite.config.ts` with schemas for each content type:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// velite.config.ts
|
|
80
|
+
import { defineConfig, defineCollection, s } from 'velite'
|
|
81
|
+
|
|
82
|
+
const reviews = defineCollection({
|
|
83
|
+
name: 'Review',
|
|
84
|
+
pattern: 'reviews/**/*.mdx',
|
|
85
|
+
schema: s.object({
|
|
86
|
+
title: s.string(),
|
|
87
|
+
slug: s.string(),
|
|
88
|
+
keyword: s.string(),
|
|
89
|
+
metaTitle: s.string().max(60),
|
|
90
|
+
metaDescription: s.string().max(160),
|
|
91
|
+
publishDate: s.string(),
|
|
92
|
+
wordCountTarget: s.number().optional(),
|
|
93
|
+
affiliateLinks: s.array(s.object({
|
|
94
|
+
brand: s.string(),
|
|
95
|
+
url: s.string(),
|
|
96
|
+
commission: s.string(),
|
|
97
|
+
})).optional(),
|
|
98
|
+
rating: s.number().min(1).max(10).optional(),
|
|
99
|
+
price: s.number().optional(),
|
|
100
|
+
status: s.enum(['stub', 'draft', 'published']).default('stub'),
|
|
101
|
+
}).transform(data => ({ ...data, slugAsParams: data.slug }))
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// Same schema for: comparisons, guides, health, best
|
|
105
|
+
export default defineConfig({
|
|
106
|
+
root: 'content',
|
|
107
|
+
output: { data: '.velite', assets: 'public/static' },
|
|
108
|
+
collections: { reviews, comparisons, guides, health, best }
|
|
109
|
+
})
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Step 5 — Core SEO Components
|
|
113
|
+
|
|
114
|
+
### Metadata Generation (app/reviews/[slug]/page.tsx)
|
|
115
|
+
```typescript
|
|
116
|
+
export async function generateMetadata({ params }): Promise<Metadata> {
|
|
117
|
+
const article = reviews.find(r => r.slug === params.slug)
|
|
118
|
+
return {
|
|
119
|
+
title: article.metaTitle,
|
|
120
|
+
description: article.metaDescription,
|
|
121
|
+
openGraph: { title: article.metaTitle, description: article.metaDescription },
|
|
122
|
+
alternates: { canonical: `https://[domain].com/reviews/${params.slug}` }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### JSON-LD Schema per Page Type
|
|
128
|
+
- Review pages: `Review` + `Product` schema
|
|
129
|
+
- Comparison pages: `Article` + `FAQPage` schema
|
|
130
|
+
- How-To pages: `HowTo` schema
|
|
131
|
+
- FAQ pages: `FAQPage` schema
|
|
132
|
+
- Roundup pages: `Article` + `ItemList` schema
|
|
133
|
+
|
|
134
|
+
## Step 6 — Install BMAD in Project
|
|
135
|
+
```bash
|
|
136
|
+
# Copy BMAD core from global install
|
|
137
|
+
BMAD_SRC="/home/hanzla/.nvm/versions/node/v24.7.0/lib/node_modules/bmad-method/bmad"
|
|
138
|
+
cp -r "$BMAD_SRC/core" ./bmad/
|
|
139
|
+
cp -r "$BMAD_SRC/_cfg" ./bmad/
|
|
140
|
+
cp -r "$BMAD_SRC/docs" ./bmad/
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Create `bmad/config.yaml`:
|
|
144
|
+
```yaml
|
|
145
|
+
user_name: Hanzla
|
|
146
|
+
communication_language: English
|
|
147
|
+
document_output_language: English
|
|
148
|
+
output_folder: "{project-root}/docs"
|
|
149
|
+
project_name: [SiteName]
|
|
150
|
+
project_type: affiliate-content-site
|
|
151
|
+
domain: [domain].com
|
|
152
|
+
niche: [Niche Description]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Step 7 — Create CLAUDE.md
|
|
156
|
+
```markdown
|
|
157
|
+
# [SiteName] — Project Instructions
|
|
158
|
+
[standard project instructions with niche, tech stack, content paths]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Step 8 — Hand Off to BMAD
|
|
162
|
+
After site scaffolding is complete, activate BMAD master agent:
|
|
163
|
+
"BMAD is now installed. To continue building:
|
|
164
|
+
1. Open `/bmad/core/agents/bmad-master.md` in your Claude session
|
|
165
|
+
2. BMAD will guide you through: component building, content writing, deployment
|
|
166
|
+
3. Tell BMAD: 'Build the [SiteName] affiliate review site based on the research in /research/ and content stubs in /content/'"
|
|
167
|
+
|
|
168
|
+
## Design Theme — Maple Light
|
|
169
|
+
Every site built with this skill uses the Maple Light aesthetic:
|
|
170
|
+
|
|
171
|
+
**Color Palette:**
|
|
172
|
+
- Primary: `#C9622F` (burnt amber / maple)
|
|
173
|
+
- Dark: `#1C2B2D` (deep forest)
|
|
174
|
+
- Background: `#FAF6F1` (warm cream)
|
|
175
|
+
- Accent: `#E8A96A` (golden amber)
|
|
176
|
+
- Text: `#2D2D2D` (near black)
|
|
177
|
+
|
|
178
|
+
**Typography:**
|
|
179
|
+
- Headings: Playfair Display (serif, authoritative)
|
|
180
|
+
- Body: Inter (clean, readable)
|
|
181
|
+
|
|
182
|
+
**Design Principles:**
|
|
183
|
+
- Warm, natural, premium feel
|
|
184
|
+
- Cedar wood photography in heroes
|
|
185
|
+
- Clean white space
|
|
186
|
+
- Trust signals prominent (author bio, testing methodology, disclosure)
|
|
187
|
+
- No dark mode (warm cream is the vibe)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Rule: Yolo Mode — Full Autonomous Execution
|
|
2
|
+
|
|
3
|
+
## Trigger Phrases
|
|
4
|
+
User says any of:
|
|
5
|
+
- "yolo"
|
|
6
|
+
- "do all the work and report after you finish"
|
|
7
|
+
- "do everything and report back"
|
|
8
|
+
- "do it all"
|
|
9
|
+
- "handle everything"
|
|
10
|
+
- "just do everything"
|
|
11
|
+
- "report when done"
|
|
12
|
+
|
|
13
|
+
## NOT Triggers (do NOT activate yolo on these)
|
|
14
|
+
- "solo yolo" — this was a one-off phrase, not a real trigger
|
|
15
|
+
- "run autonomously" — too vague, ask for clarification
|
|
16
|
+
- "full auto" — ask: "Do you mean yolo mode (full autonomous, report when done)?"
|
|
17
|
+
|
|
18
|
+
## What Changes in Yolo Mode
|
|
19
|
+
|
|
20
|
+
### Decision Rules (No User Approval Needed)
|
|
21
|
+
| Decision | Yolo Behavior |
|
|
22
|
+
|----------|-------------------|
|
|
23
|
+
| Niche selection | Auto-pick #1 scored niche |
|
|
24
|
+
| Domain name | Auto-pick top recommendation |
|
|
25
|
+
| Research findings | Continue without showing intermediate results |
|
|
26
|
+
| Article schedule | Auto-finalize based on DA + Weakspot sort |
|
|
27
|
+
| Site tech stack | Always use Next.js 16.2.1 + Velite |
|
|
28
|
+
| Content stubs | Generate all Tier 1+2 stubs automatically |
|
|
29
|
+
| BMAD install | Install automatically |
|
|
30
|
+
|
|
31
|
+
### What Yolo NEVER Skips
|
|
32
|
+
Even in full auto mode, always:
|
|
33
|
+
1. **Save all research files** — every agent writes its output file
|
|
34
|
+
2. **Generate keywords.txt** — user needs this for Ads Planner
|
|
35
|
+
3. **Tell user about keywords.txt** — they must manually run Ads Planner
|
|
36
|
+
4. **Create image-prompt files** — user generates images separately
|
|
37
|
+
5. **Report completion** — final summary of everything created
|
|
38
|
+
|
|
39
|
+
### Announcement at Start
|
|
40
|
+
When yolo is triggered, say:
|
|
41
|
+
```
|
|
42
|
+
🔴 YOLO MODE ACTIVATED
|
|
43
|
+
|
|
44
|
+
I will now run the complete workflow autonomously:
|
|
45
|
+
✓ Pick best niche automatically
|
|
46
|
+
✓ Launch 10 research agents in parallel
|
|
47
|
+
✓ Build complete master business plan
|
|
48
|
+
✓ Generate article schedule from keyword data
|
|
49
|
+
✓ Create all content stubs + image prompts
|
|
50
|
+
✓ Init Next.js site + install BMAD
|
|
51
|
+
|
|
52
|
+
I'll only stop if I hit a critical blocker.
|
|
53
|
+
Two things you'll need to do manually:
|
|
54
|
+
1. Paste keywords.txt into Google Keyword Planner
|
|
55
|
+
2. Generate images from the prompt files
|
|
56
|
+
|
|
57
|
+
Starting now...
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Yolo Execution Flow
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
1. Run niche discovery
|
|
64
|
+
→ Score all candidates
|
|
65
|
+
→ Pick #1 automatically
|
|
66
|
+
→ Announce: "Selected: [Niche] (Score: XX/35)"
|
|
67
|
+
|
|
68
|
+
2. Create project directory
|
|
69
|
+
→ /home/hanzla/development/[niche-slug]/
|
|
70
|
+
|
|
71
|
+
3. Launch ALL 10 research agents simultaneously
|
|
72
|
+
→ Announce each agent as it completes (1-line summary)
|
|
73
|
+
|
|
74
|
+
4. Fire synthesis agent
|
|
75
|
+
→ Wait for master plan
|
|
76
|
+
|
|
77
|
+
5. Extract + save keywords.txt
|
|
78
|
+
→ Copy to clipboard
|
|
79
|
+
|
|
80
|
+
6. Parse keyword data (if CSV exists)
|
|
81
|
+
→ OR use research data directly
|
|
82
|
+
|
|
83
|
+
7. Generate article-schedule.md
|
|
84
|
+
→ 50+ articles, Tier 1-5
|
|
85
|
+
|
|
86
|
+
8. Generate MDX stubs (Tier 1+2 articles)
|
|
87
|
+
→ All frontmatter filled
|
|
88
|
+
|
|
89
|
+
9. Generate image-prompt files
|
|
90
|
+
→ One per article
|
|
91
|
+
|
|
92
|
+
10. Init Next.js project
|
|
93
|
+
→ Full structure
|
|
94
|
+
|
|
95
|
+
11. Install BMAD
|
|
96
|
+
|
|
97
|
+
12. Create CLAUDE.md
|
|
98
|
+
|
|
99
|
+
13. Final report:
|
|
100
|
+
"✅ SOLO YOLO COMPLETE
|
|
101
|
+
|
|
102
|
+
Project: [domain].com
|
|
103
|
+
Location: /home/hanzla/development/[slug]/
|
|
104
|
+
Articles planned: [N]
|
|
105
|
+
Stubs created: [N]
|
|
106
|
+
Image prompts: [N] files in assets/image-prompts/
|
|
107
|
+
|
|
108
|
+
YOUR ACTIONS NEEDED:
|
|
109
|
+
1. 📊 Keywords in keywords.txt → paste into Google Keyword Planner
|
|
110
|
+
2. 🖼️ Generate images from assets/image-prompts/ files
|
|
111
|
+
3. 🚀 Open BMAD: bmad/core/agents/bmad-master.md
|
|
112
|
+
|
|
113
|
+
Research: research/00-MASTER-BUSINESS-PLAN.md"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Yolo Blocker Conditions
|
|
117
|
+
STOP and ask user only if:
|
|
118
|
+
- All top 10 niches score below 18/35 (market is oversaturated)
|
|
119
|
+
- No affiliate programs found for selected niche
|
|
120
|
+
- Domain name ideas all appear taken
|
|
121
|
+
- Research agents return empty/error results 3+ times
|
|
122
|
+
|
|
123
|
+
## Continue with Next Idea
|
|
124
|
+
After completing one full workflow, if more niches exist in the queue:
|
|
125
|
+
|
|
126
|
+
**Interactive:** "Research complete for [Niche 1]. Want me to research [Niche 2] next?"
|
|
127
|
+
**Yolo:** Automatically start next niche research, announce: "Starting research for Niche #2: [Name]..."
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "[Full Article Title with Primary Keyword]"
|
|
3
|
+
slug: "[url-slug-lowercase-hyphens]"
|
|
4
|
+
type: "review"
|
|
5
|
+
keyword: "[exact target keyword]"
|
|
6
|
+
metaTitle: "[Under 60 chars — keyword near start]"
|
|
7
|
+
metaDescription: "[140-160 chars — keyword included, action-oriented]"
|
|
8
|
+
publishDate: "YYYY-MM-DD"
|
|
9
|
+
status: "stub"
|
|
10
|
+
wordCountTarget: 2000
|
|
11
|
+
tier: 1
|
|
12
|
+
avgDA: 0
|
|
13
|
+
weakspot: 0
|
|
14
|
+
volume: 0
|
|
15
|
+
intent: "commercial"
|
|
16
|
+
affiliateLinks:
|
|
17
|
+
- brand: "[Brand Name]"
|
|
18
|
+
url: "AFFILIATE_URL_PLACEHOLDER"
|
|
19
|
+
commission: "X%"
|
|
20
|
+
cookieDays: 30
|
|
21
|
+
rating: null
|
|
22
|
+
price: null
|
|
23
|
+
imageHero: "/images/[slug]/hero.jpg"
|
|
24
|
+
imagePomptFile: "assets/image-prompts/[slug]-images.md"
|
|
25
|
+
internalLinks:
|
|
26
|
+
- slug: "[related-article-slug]"
|
|
27
|
+
anchor: "[natural anchor text]"
|
|
28
|
+
featured: false
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
{/* STUB — Replace with full article content */}
|
|
32
|
+
{/* Target: [wordCountTarget] words */}
|
|
33
|
+
{/* Primary keyword: [keyword] */}
|
|
34
|
+
{/* Intent: [intent] — write accordingly */}
|
|
35
|
+
|
|
36
|
+
## Overview
|
|
37
|
+
|
|
38
|
+
[STUB: 200-word intro covering what this product/topic is, who it's for, and what we'll cover. Include primary keyword naturally in first 100 words.]
|
|
39
|
+
|
|
40
|
+
## Key Specs
|
|
41
|
+
|
|
42
|
+
[STUB: Table with key specifications]
|
|
43
|
+
|
|
44
|
+
## Full Review
|
|
45
|
+
|
|
46
|
+
[STUB: 800-1000 words covering: build quality, performance, EMF levels, heating, assembly, value]
|
|
47
|
+
|
|
48
|
+
## Pros & Cons
|
|
49
|
+
|
|
50
|
+
**Pros:**
|
|
51
|
+
- [STUB]
|
|
52
|
+
|
|
53
|
+
**Cons:**
|
|
54
|
+
- [STUB]
|
|
55
|
+
|
|
56
|
+
## Who Should Buy This
|
|
57
|
+
|
|
58
|
+
[STUB: 150 words on ideal buyer profile]
|
|
59
|
+
|
|
60
|
+
## Verdict
|
|
61
|
+
|
|
62
|
+
[STUB: 200-word final verdict with affiliate CTA and rating]
|