seo-intel 1.1.7 → 1.1.8
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/.env.example +1 -1
- package/CHANGELOG.md +42 -0
- package/LICENSE +4 -5
- package/README.md +3 -3
- package/cli.js +1 -1
- package/crawler/index.js +1 -1
- package/crawler/subdomain-discovery.js +1 -1
- package/lib/gate.js +5 -5
- package/lib/license.js +2 -2
- package/lib/updater.js +3 -3
- package/package.json +3 -2
- package/seo-audit.js +2 -2
- package/setup/wizard.html +1 -1
package/.env.example
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Run `node cli.js setup` to configure interactively
|
|
3
3
|
|
|
4
4
|
# ── License (Pro features) ───────────────────────────────────────────────
|
|
5
|
-
# Get your key at https://
|
|
5
|
+
# Get your key at https://ukkometa.fi/en/seo-intel/
|
|
6
6
|
# SEO_INTEL_LICENSE=SI-xxxx-xxxx-xxxx-xxxx
|
|
7
7
|
|
|
8
8
|
# ── Analysis Model (cloud, pick one) ──────────────────────────────────────
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 1.1.8 (2026-03-27)
|
|
4
|
+
|
|
5
|
+
- Rebranded all references from froggo.pro → ukkometa.fi (endpoints, dashboard links, license validation, bot user-agents, skill)
|
|
6
|
+
- Pricing updated: €9.99/mo · €79/yr
|
|
7
|
+
- Contact updated: ukko@ukkometa.fi
|
|
8
|
+
- Added README.md and CHANGELOG.md to npm package and LS zip
|
|
9
|
+
|
|
10
|
+
## 1.1.7 (2026-03-26)
|
|
11
|
+
|
|
12
|
+
### New Features
|
|
13
|
+
- **Programmatic Template Intelligence** (`seo-intel templates <project>`) — detect URL pattern groups (e.g. `/token/*`, `/blog/*`), stealth-crawl samples, overlay GSC data, and score each group with keep/noindex/improve verdicts. Pro-gated.
|
|
14
|
+
- **Stale domain auto-pruning** — domains removed from config are now automatically cleaned from the DB (pages, keywords, extractions, schemas, headings, links) on next crawl. No more ghost data from renamed/removed subdomains.
|
|
15
|
+
- **Manual prune** — `seo-intel competitors <project> --prune` to clean stale DB entries on demand.
|
|
16
|
+
- **Full body text storage** — crawler now stores full page body text in DB (up to 200K chars) for richer extraction and analysis. Log output stays compact.
|
|
17
|
+
|
|
18
|
+
### Improvements
|
|
19
|
+
- **Background crawl/extract** — long-running crawl and extract jobs now survive browser tab close. Terminal shows "backgrounded" instead of "disconnected", and jobs continue server-side.
|
|
20
|
+
- **Dashboard terminal** — stealth flag now visible in terminal command display. Stop button properly closes SSE + server-side process. Status bar syncs with terminal state.
|
|
21
|
+
- **Templates button** added to dashboard terminal panel.
|
|
22
|
+
- **Dashboard refresh** — crawl and analyze now always regenerate the multi-project dashboard, keeping all projects current.
|
|
23
|
+
- **Config remove = DB remove** — `--remove` and `--remove-owned` now auto-prune matching DB data, not just config JSON.
|
|
24
|
+
|
|
25
|
+
### Fixes
|
|
26
|
+
- SSE disconnect no longer kills crawl/extract processes (detached child process).
|
|
27
|
+
- Terminal command display now shows `--stealth` flag when enabled.
|
|
28
|
+
|
|
29
|
+
## 1.1.6 (2026-03-24)
|
|
30
|
+
|
|
31
|
+
- Stop button, stealth sync, extraction layout, EADDRINUSE recovery.
|
|
32
|
+
|
|
33
|
+
## 1.1.5 (2026-03-21)
|
|
34
|
+
|
|
35
|
+
- Update checker, job stop API, background analyze, LAN Ollama hosts, `html` CLI command, wizard UX improvements.
|
|
36
|
+
|
|
37
|
+
## 1.1.8 (2026-03-27)
|
|
38
|
+
|
|
39
|
+
- Rebranded all references from froggo.pro → ukkometa.fi (endpoints, dashboard links, license validation, bot user-agents, skill)
|
|
40
|
+
- Pricing updated: €9.99/mo · €79/yr
|
|
41
|
+
- Contact updated: ukko@ukkometa.fi
|
|
42
|
+
- Added README.md and CHANGELOG.md to npm package and LS zip
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
SEO Intel — Dual License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2024-2026
|
|
3
|
+
Copyright (c) 2024-2026 Ukkometa (ukkometa.fi)
|
|
4
4
|
|
|
5
5
|
This project uses a dual license structure:
|
|
6
6
|
|
|
@@ -65,11 +65,10 @@ You MAY:
|
|
|
65
65
|
- Share generated reports and dashboards (outputs are yours)
|
|
66
66
|
|
|
67
67
|
License:
|
|
68
|
-
Solo — €19.99/month or €199/year — full AI analysis, all commands
|
|
69
|
-
Also available at $9.99/month via froggo.pro marketplace
|
|
68
|
+
Solo — €19.99/month or €199.99/year — full AI analysis, all commands
|
|
70
69
|
|
|
71
|
-
Purchase at: https://ukkometa.fi
|
|
70
|
+
Purchase at: https://ukkometa.fi/en/seo-intel/
|
|
72
71
|
|
|
73
72
|
================================================================================
|
|
74
73
|
|
|
75
|
-
For questions:
|
|
74
|
+
For questions: ukko@ukkometa.fi
|
package/README.md
CHANGED
|
@@ -75,7 +75,7 @@ seo-intel suggest-usecases myproject --scope docs # infer what pages/docs s
|
|
|
75
75
|
| `schemas <project>` | Schema.org coverage analysis |
|
|
76
76
|
| `update` | Check for updates |
|
|
77
77
|
|
|
78
|
-
### Solo (€19.99/mo · [ukkometa.fi/seo-intel](https://ukkometa.fi/seo-intel))
|
|
78
|
+
### Solo (€19.99/mo · [ukkometa.fi/seo-intel](https://ukkometa.fi/en/seo-intel/))
|
|
79
79
|
|
|
80
80
|
| Command | Description |
|
|
81
81
|
|---------|-------------|
|
|
@@ -194,7 +194,7 @@ Upload your GSC data for ranking insights:
|
|
|
194
194
|
- 1 project, 500 pages/domain
|
|
195
195
|
- Crawl, extract, setup, basic reports
|
|
196
196
|
|
|
197
|
-
###
|
|
197
|
+
### Solo (€19.99/mo · €199.99/yr)
|
|
198
198
|
- Unlimited projects and pages
|
|
199
199
|
- All analysis commands, GSC insights, scheduling
|
|
200
200
|
|
|
@@ -203,7 +203,7 @@ Upload your GSC data for ranking insights:
|
|
|
203
203
|
echo "SEO_INTEL_LICENSE=SI-xxxx-xxxx-xxxx-xxxx" >> .env
|
|
204
204
|
```
|
|
205
205
|
|
|
206
|
-
Get a key at [
|
|
206
|
+
Get a key at [ukkometa.fi/seo-intel](https://ukkometa.fi/en/seo-intel/)
|
|
207
207
|
|
|
208
208
|
## Updates
|
|
209
209
|
|
package/cli.js
CHANGED
|
@@ -1269,7 +1269,7 @@ program
|
|
|
1269
1269
|
console.log(chalk.gray(' npm registry: ') + chalk.white(info.npmVersion));
|
|
1270
1270
|
}
|
|
1271
1271
|
if (info.froggoVersion) {
|
|
1272
|
-
console.log(chalk.gray('
|
|
1272
|
+
console.log(chalk.gray(' ukkometa.fi: ') + chalk.white(info.froggoVersion));
|
|
1273
1273
|
}
|
|
1274
1274
|
|
|
1275
1275
|
if (!info.hasUpdate) {
|
package/crawler/index.js
CHANGED
|
@@ -186,7 +186,7 @@ export async function* crawlDomain(startUrl, opts = {}) {
|
|
|
186
186
|
// When hostname contains "docs.", spoof Googlebot UA to reduce WAF friction.
|
|
187
187
|
const isDocsHostname = base.hostname.toLowerCase().includes('docs.');
|
|
188
188
|
const GOOGLEBOT_UA = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
|
|
189
|
-
const defaultUA = 'Mozilla/5.0 (compatible; SEOIntelBot/1.0; +https://
|
|
189
|
+
const defaultUA = 'Mozilla/5.0 (compatible; SEOIntelBot/1.0; +https://ukkometa.fi/en/seo-intel/bot)';
|
|
190
190
|
const effectiveUA = isDocsHostname ? GOOGLEBOT_UA : defaultUA;
|
|
191
191
|
|
|
192
192
|
async function tryLoadLlmsTxt() {
|
|
@@ -181,7 +181,7 @@ async function checkHttp(hostname) {
|
|
|
181
181
|
signal: controller.signal,
|
|
182
182
|
redirect: 'follow',
|
|
183
183
|
headers: {
|
|
184
|
-
'User-Agent': 'Mozilla/5.0 (compatible; SEOIntelBot/1.0; +https://
|
|
184
|
+
'User-Agent': 'Mozilla/5.0 (compatible; SEOIntelBot/1.0; +https://ukkometa.fi/en/seo-intel/bot)',
|
|
185
185
|
},
|
|
186
186
|
});
|
|
187
187
|
|
package/lib/gate.js
CHANGED
|
@@ -31,7 +31,7 @@ function printUpgradeMessage(feature) {
|
|
|
31
31
|
console.log(`${GOLD}${BOLD} ⭐ Paid Feature: ${feature}${RESET}`);
|
|
32
32
|
console.log(`${DIM} This feature requires SEO Intel Solo (€19.99/mo).${RESET}`);
|
|
33
33
|
console.log('');
|
|
34
|
-
console.log(`${DIM} Get your license at ${CYAN}https://
|
|
34
|
+
console.log(`${DIM} Get your license at ${CYAN}https://ukkometa.fi/en/seo-intel/${RESET}`);
|
|
35
35
|
console.log(`${DIM} Then add your key: ${CYAN}SEO_INTEL_LICENSE=SI-xxxx-xxxx-xxxx-xxxx${RESET} ${DIM}in .env${RESET}`);
|
|
36
36
|
console.log('');
|
|
37
37
|
}
|
|
@@ -104,7 +104,7 @@ export function getPremiumPlaceholder(section) {
|
|
|
104
104
|
<p style="font-size: 0.72rem; color: var(--text-muted); margin-bottom: 12px;">
|
|
105
105
|
This section requires SEO Intel Solo (€19.99/mo)
|
|
106
106
|
</p>
|
|
107
|
-
<a href="https://
|
|
107
|
+
<a href="https://ukkometa.fi/en/seo-intel/" target="_blank"
|
|
108
108
|
style="color: var(--accent-gold); font-size: 0.72rem; text-decoration: underline;">
|
|
109
109
|
Upgrade to unlock →
|
|
110
110
|
</a>
|
|
@@ -160,7 +160,7 @@ export function capPages(requestedPages) {
|
|
|
160
160
|
export function printLicenseStatus() {
|
|
161
161
|
const license = loadLicense();
|
|
162
162
|
|
|
163
|
-
const sourceLabel = license.source === '
|
|
163
|
+
const sourceLabel = license.source === 'lemon-squeezy' ? ' (LS)' : '';
|
|
164
164
|
|
|
165
165
|
if (license.tier === 'agency') {
|
|
166
166
|
console.log(`${GOLD}${BOLD} ⭐ SEO Intel Agency${RESET}`);
|
|
@@ -181,7 +181,7 @@ export function printLicenseStatus() {
|
|
|
181
181
|
if (license.needsActivation) {
|
|
182
182
|
console.log(`\x1b[33m ⚠ License key found but not yet validated — run any command to activate${RESET}`);
|
|
183
183
|
}
|
|
184
|
-
console.log(`${DIM} Upgrade: ${CYAN}https://
|
|
184
|
+
console.log(`${DIM} Upgrade: ${CYAN}https://ukkometa.fi/en/seo-intel/${RESET} ${DIM}— Solo €19.99/mo · €199.99/yr${RESET}`);
|
|
185
185
|
}
|
|
186
186
|
console.log('');
|
|
187
187
|
}
|
|
@@ -200,6 +200,6 @@ export function getLicenseInfo() {
|
|
|
200
200
|
maxProjects: Number.isFinite(license.maxProjects) ? license.maxProjects : null,
|
|
201
201
|
maxPages: Number.isFinite(license.maxPagesPerDomain) ? license.maxPagesPerDomain : null,
|
|
202
202
|
features: license.features === 'all' ? 'all' : [...license.features],
|
|
203
|
-
upgradeUrl: 'https://
|
|
203
|
+
upgradeUrl: 'https://ukkometa.fi/en/seo-intel/',
|
|
204
204
|
};
|
|
205
205
|
}
|
package/lib/license.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - Beyond stale limit → degrade to free tier + warn
|
|
13
13
|
*
|
|
14
14
|
* Free tier: crawl + raw HTML export only. No AI extraction or analysis.
|
|
15
|
-
* Solo (€19.99/mo or €199/yr via LS
|
|
15
|
+
* Solo (€19.99/mo or €199.99/yr via LS): Full AI extraction + analysis, all commands.
|
|
16
16
|
* Agency: Later phase — not sold yet.
|
|
17
17
|
*/
|
|
18
18
|
|
|
@@ -164,7 +164,7 @@ async function validateWithFroggo(token) {
|
|
|
164
164
|
const controller = new AbortController();
|
|
165
165
|
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
166
166
|
|
|
167
|
-
const res = await fetch('https://
|
|
167
|
+
const res = await fetch('https://ukkometa.fi/api/seo-intel/licenses/validate', {
|
|
168
168
|
signal: controller.signal,
|
|
169
169
|
method: 'POST',
|
|
170
170
|
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
|
package/lib/updater.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Two update channels:
|
|
8
8
|
* - npm registry (public installs via `npm install -g seo-intel`)
|
|
9
|
-
* -
|
|
9
|
+
* - ukkometa.fi (direct downloads / pro users)
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
12
|
* import { checkForUpdates, printUpdateNotice } from './updater.js';
|
|
@@ -113,7 +113,7 @@ async function checkNpm() {
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/**
|
|
116
|
-
* Check
|
|
116
|
+
* Check ukkometa.fi for latest version.
|
|
117
117
|
* Endpoint returns { version, changelog?, downloadUrl? }
|
|
118
118
|
*/
|
|
119
119
|
async function checkFroggo() {
|
|
@@ -121,7 +121,7 @@ async function checkFroggo() {
|
|
|
121
121
|
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
122
122
|
|
|
123
123
|
try {
|
|
124
|
-
const res = await fetch('https://
|
|
124
|
+
const res = await fetch('https://ukkometa.fi/api/seo-intel/version', {
|
|
125
125
|
signal: controller.signal,
|
|
126
126
|
headers: { 'Accept': 'application/json' },
|
|
127
127
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seo-intel",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
4
|
"description": "Local Ahrefs-style SEO competitor intelligence. Crawl → SQLite → cloud analysis.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -56,7 +56,8 @@
|
|
|
56
56
|
"Start SEO Intel.command",
|
|
57
57
|
"Setup SEO Intel.command",
|
|
58
58
|
"Start SEO Intel.bat",
|
|
59
|
-
"start-seo-intel.sh"
|
|
59
|
+
"start-seo-intel.sh",
|
|
60
|
+
"CHANGELOG.md"
|
|
60
61
|
],
|
|
61
62
|
"scripts": {
|
|
62
63
|
"crawl": "node cli.js crawl",
|
package/seo-audit.js
CHANGED
|
@@ -507,7 +507,7 @@ async function generateReport(rawUrl) {
|
|
|
507
507
|
|
|
508
508
|
lines.push(`# SEO Audit Report — ${rawUrl}`);
|
|
509
509
|
lines.push(`**Date:** ${date} `);
|
|
510
|
-
lines.push(`**Tool:** SEO Intel (
|
|
510
|
+
lines.push(`**Tool:** SEO Intel (ukkometa.fi)\n`);
|
|
511
511
|
lines.push(`---\n`);
|
|
512
512
|
|
|
513
513
|
// Score card
|
|
@@ -596,7 +596,7 @@ async function generateReport(rawUrl) {
|
|
|
596
596
|
}
|
|
597
597
|
lines.push('');
|
|
598
598
|
lines.push(`---\n`);
|
|
599
|
-
lines.push(`*Generated by SEO Intel —
|
|
599
|
+
lines.push(`*Generated by SEO Intel — ukkometa.fi*`);
|
|
600
600
|
|
|
601
601
|
const md = lines.join('\n');
|
|
602
602
|
writeFileSync(outFile, md);
|
package/setup/wizard.html
CHANGED
|
@@ -1234,7 +1234,7 @@ input::placeholder {
|
|
|
1234
1234
|
<button class="btn btn-gold" onclick="saveLicenseKey()" id="activateBtn" style="white-space:nowrap;">Activate →</button>
|
|
1235
1235
|
</div>
|
|
1236
1236
|
<p style="font-size:0.65rem; color:var(--text-muted); margin-top:6px;">
|
|
1237
|
-
Get Solo at <a href="https://ukkometa.fi/seo-intel/" target="_blank" style="color:var(--accent-gold);">ukkometa.fi/seo-intel</a>
|
|
1237
|
+
Get Solo at <a href="https://ukkometa.fi/en/seo-intel/" target="_blank" style="color:var(--accent-gold);">ukkometa.fi/seo-intel</a>
|
|
1238
1238
|
</p>
|
|
1239
1239
|
</div>
|
|
1240
1240
|
<div id="licenseSolo" style="display:none;">
|