@houtini/seo-audit-console 0.7.8 → 0.8.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 CHANGED
@@ -46,9 +46,10 @@ This README is the story and the quick start. The detail lives in the manual:
46
46
  | [The check registry](manual/checks.md) | All 93 checks with what each catches, its D/N label, and the fix |
47
47
  | [Composition](manual/composition.md) | The join keys, the grains, and thirteen worked recipes for asking your own questions across the data |
48
48
  | [Competitive analysis](manual/competitive.md) | The Semrush-replacement workflows, DataForSEO setup, link intersect with the Majestic Trust Flow tier, and the real costs |
49
+ | [SEO Recon](manual/recon.md) | Why a page is losing: the live SERP + AI-Overview citation verdict, the competitor diff, and the trackable to-do ledger |
49
50
  | [DataForSEO functions](manual/dataforseo.md) | Every DataForSEO-backed tool grouped by API module — Keywords, SERP, Labs, Backlinks, OnPage — each with its endpoint and cost |
50
51
  | [Majestic functions](manual/majestic.md) | The optional Trust Flow tier — what it adds and how `link_intersect` uses it |
51
- | [Dashboard & reports](manual/dashboard.md) | The six tabs, what each chart shows, and the shareable export |
52
+ | [Dashboard & reports](manual/dashboard.md) | The eight tabs, the report hub, what each chart shows, and the shareable export |
52
53
 
53
54
  ## Surprisingly little has changed in twenty years
54
55
 
@@ -129,7 +130,7 @@ Each of these is a real procedure I use, and each is one prompt. The expanded ve
129
130
  9. **Reporting.** *"Show me the dashboard"* in the chat, *"serve the dashboard"* for the live version in your browser, or *"export the report"* as one self-contained HTML file you can send a client. → [dashboard.md](manual/dashboard.md)
130
131
  10. **The content opportunity report.** If you write for a living, this is your page one: *"Content opportunities for mysite.com"* returns what to WRITE next (demand you already earn impressions for with no winning page), what to REFRESH (pages bleeding clicks), which SNIPPETS to rewrite (ranking well, under-clicked), and which clusters to STRENGTHEN (position 4-20, one push from the money). Every row traces to your own Search Console data - no invented keyword ideas - and *"draft the brief for row 1"* turns any of them into a grounded outline. → [competitive.md](manual/competitive.md)
131
132
  11. **Market Sizing and Prioritisation.** *"Size the market: mysite.com vs rival1.com and rival2.com"* - the keyword universe, total monthly demand, and share of voice per topic cluster, from one cached call per domain. The engagement-opening read that used to need a Semrush subscription. → [competitive.md](manual/competitive.md)
132
- 12. **Content recon - why is this page losing?** *"Run content recon on mysite.com"* takes your worst declining pages, pulls the live Google SERP for each, and reads whether the **AI Overview** cites you. The verdict is the honest bit: *rank but not cited* is a data-accuracy or freshness problem, not a rewrite. It transcribes the ranking videos (Supadata), reads the reachable competitors (Firecrawl, plus a free browser-profile fetch that even gets Reddit), and writes the gaps into a tracked to-do board you can annotate and re-measure. → [competitive.md](manual/competitive.md)
133
+ 12. **Content recon - why is this page losing?** *"Run content recon on mysite.com"* takes your worst declining pages, pulls the live Google SERP for each, and reads whether the **AI Overview** cites you. The verdict is the honest bit: *rank but not cited* is a data-accuracy or freshness problem, not a rewrite. It transcribes the ranking videos (Supadata), reads the reachable competitors (Firecrawl, plus a free browser-profile fetch that even gets Reddit), and writes the gaps into a tracked to-do board you can annotate and re-measure. → [recon.md](manual/recon.md)
133
134
  13. **Link prospecting, sorted by authority that's real.** *"Link intersect for mysite.com vs rival1.com, rival2.com"* returns the domains linking to your rivals and not to you - the outreach list, followed-first and spam-filtered. Add a **Majestic** key and it re-sorts on **Trust Flow** and shows each prospect's **Topical Trust Flow**, so the directories drop out and what's left is authority that's actually on your topic. → [Majestic, below](#link-intersect-and-the-majestic-trust-flow-tier)
134
135
 
135
136
  ![Ranking distribution over time - impressions by position bucket](assets/search-performance.png)
@@ -6,9 +6,10 @@
6
6
  * Two cost-control layers the user asked for:
7
7
  * - SINGULAR WORKER: live requests are serialised (one at a time) via a promise
8
8
  * chain, so we never fan out paid calls concurrently.
9
- * - 20-DAY CACHE: every response is written to a shared SQLite cache keyed on
9
+ * - TTL CACHE: every response is written to a shared SQLite cache keyed on
10
10
  * (endpoint + body); a cache hit costs nothing and skips the worker entirely.
11
- * SERP/keyword/domain data is stable enough that a ~20-day TTL is safe.
11
+ * TTL is set by the caller (DATAFORSEO_CACHE_DAYS, default 7); SERP/keyword/
12
+ * domain data is stable enough that a ~7-day TTL is safe.
12
13
  */
13
14
  export interface DfsResponse {
14
15
  tasks: any[];
@@ -24,7 +25,7 @@ export declare class DataForSeoClient {
24
25
  /** Serialise live work — only one request in flight at any time (singular worker). */
25
26
  private serialize;
26
27
  private keyFor;
27
- /** POST to a DataForSEO endpoint, served from the 20-day cache when fresh. */
28
+ /** POST to a DataForSEO endpoint, served from the 7-day cache when fresh. */
28
29
  call(endpoint: string, body: unknown[], timeoutMs?: number): Promise<DfsResponse>;
29
30
  /** Build the location field — numeric → location_code, string → location_name, else US default. */
30
31
  private loc;
@@ -40,7 +41,7 @@ export declare class DataForSeoClient {
40
41
  loadAsyncAiOverview?: boolean;
41
42
  }): Promise<DfsResponse>;
42
43
  /** SERP — live YouTube organic results for a keyword (video discovery). Same SERP
43
- * scope + 20-day cache as serpOrganic. Returns the ranking videos shaped for content
44
+ * scope + 7-day cache as serpOrganic. Returns the ranking videos shaped for content
44
45
  * research: title, url, channel, views, publish date, duration. `blockDepth` = how many
45
46
  * videos to collect (YouTube SERP uses block_depth, default 20, max 200). */
46
47
  serpYoutube(keyword: string, location?: string | number, languageCode?: string, blockDepth?: number): Promise<{
@@ -61,7 +62,7 @@ export declare class DataForSeoClient {
61
62
  cost: number;
62
63
  }>;
63
64
  /** SERP — live Google News results for a keyword (what's been PUBLISHED / freshness).
64
- * Same SERP scope + 20-day cache. Flattens both `news_search` items and `top_stories`
65
+ * Same SERP scope + 7-day cache. Flattens both `news_search` items and `top_stories`
65
66
  * groups into one ranked list: title, url, source, snippet, timestamp. */
66
67
  serpNews(keyword: string, location?: string | number, languageCode?: string, depth?: number): Promise<{
67
68
  articles: Array<{
@@ -80,7 +81,7 @@ export declare class DataForSeoClient {
80
81
  * keywords, for seasonality / "is this rising or fading". Returns the time series per
81
82
  * keyword (values aligned to the queried keywords). `timeRange` presets: past_7_days,
82
83
  * past_30_days, past_90_days, past_12_months (default), past_5_years, 2004_present.
83
- * `type`: web (default), news, youtube, images, froogle. Cached 20 days. */
84
+ * `type`: web (default), news, youtube, images, froogle. Cached 7 days. */
84
85
  googleTrends(keywords: string[], location?: string | number, languageCode?: string, opts?: {
85
86
  timeRange?: string;
86
87
  type?: string;
@@ -97,7 +98,7 @@ export declare class DataForSeoClient {
97
98
  /**
98
99
  * Related terms for a keyword — People Also Ask questions + related searches,
99
100
  * parsed from the SERP advanced response. Powers the click-through "related
100
- * terms" on the keyword charts. Cached 20 days via the underlying SERP call.
101
+ * terms" on the keyword charts. Cached 7 days via the underlying SERP call.
101
102
  */
102
103
  relatedTerms(keyword: string, location?: string | number, languageCode?: string): Promise<{
103
104
  peopleAlsoAsk: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"DataForSeoClient.d.ts","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataForSeoClient.d.ts","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export class DataForSeoClient {
8
8
  ttlMs;
9
9
  cache;
10
10
  chain = Promise.resolve();
11
- constructor(login, password, cacheDbPath, ttlDays = 20) {
11
+ constructor(login, password, cacheDbPath, ttlDays = 7) {
12
12
  this.auth = 'Basic ' + Buffer.from(`${login}:${password}`).toString('base64');
13
13
  this.ttlMs = ttlDays * 86400000;
14
14
  mkdirSync(dirname(cacheDbPath), { recursive: true });
@@ -39,7 +39,7 @@ export class DataForSeoClient {
39
39
  : v);
40
40
  return createHash('sha256').update(endpoint + '\n' + canonical).digest('hex');
41
41
  }
42
- /** POST to a DataForSEO endpoint, served from the 20-day cache when fresh. */
42
+ /** POST to a DataForSEO endpoint, served from the 7-day cache when fresh. */
43
43
  async call(endpoint, body, timeoutMs = 60000) {
44
44
  const key = this.keyFor(endpoint, body);
45
45
  const row = this.cache
@@ -77,7 +77,7 @@ export class DataForSeoClient {
77
77
  }
78
78
  const cost = Number(json.cost) || 0;
79
79
  // Only cache genuinely successful responses — a task-level failure (40xxx) or
80
- // all-null results must not be cached for 20 days; let a later call retry.
80
+ // all-null results must not be cached for 7 days; let a later call retry.
81
81
  const taskOk = tasks.length > 0 && (tasks[0]?.status_code ?? 20000) < 40000 && tasks.some((t) => t?.result != null);
82
82
  if (taskOk) {
83
83
  this.cache
@@ -120,7 +120,7 @@ export class DataForSeoClient {
120
120
  ]);
121
121
  }
122
122
  /** SERP — live YouTube organic results for a keyword (video discovery). Same SERP
123
- * scope + 20-day cache as serpOrganic. Returns the ranking videos shaped for content
123
+ * scope + 7-day cache as serpOrganic. Returns the ranking videos shaped for content
124
124
  * research: title, url, channel, views, publish date, duration. `blockDepth` = how many
125
125
  * videos to collect (YouTube SERP uses block_depth, default 20, max 200). */
126
126
  async serpYoutube(keyword, location, languageCode = 'en', blockDepth = 20) {
@@ -146,7 +146,7 @@ export class DataForSeoClient {
146
146
  return { videos, cached: r.cached, cost: r.cost };
147
147
  }
148
148
  /** SERP — live Google News results for a keyword (what's been PUBLISHED / freshness).
149
- * Same SERP scope + 20-day cache. Flattens both `news_search` items and `top_stories`
149
+ * Same SERP scope + 7-day cache. Flattens both `news_search` items and `top_stories`
150
150
  * groups into one ranked list: title, url, source, snippet, timestamp. */
151
151
  async serpNews(keyword, location, languageCode = 'en', depth = 20) {
152
152
  const r = await this.call('/v3/serp/google/news/live/advanced', [
@@ -170,7 +170,7 @@ export class DataForSeoClient {
170
170
  * keywords, for seasonality / "is this rising or fading". Returns the time series per
171
171
  * keyword (values aligned to the queried keywords). `timeRange` presets: past_7_days,
172
172
  * past_30_days, past_90_days, past_12_months (default), past_5_years, 2004_present.
173
- * `type`: web (default), news, youtube, images, froogle. Cached 20 days. */
173
+ * `type`: web (default), news, youtube, images, froogle. Cached 7 days. */
174
174
  async googleTrends(keywords, location, languageCode = 'en', opts = {}) {
175
175
  const kwIn = keywords.slice(0, 5);
176
176
  const r = await this.call('/v3/keywords_data/google_trends/explore/live', [
@@ -193,7 +193,7 @@ export class DataForSeoClient {
193
193
  /**
194
194
  * Related terms for a keyword — People Also Ask questions + related searches,
195
195
  * parsed from the SERP advanced response. Powers the click-through "related
196
- * terms" on the keyword charts. Cached 20 days via the underlying SERP call.
196
+ * terms" on the keyword charts. Cached 7 days via the underlying SERP call.
197
197
  */
198
198
  async relatedTerms(keyword, location, languageCode = 'en') {
199
199
  const r = await this.serpOrganic(keyword, location, languageCode, 30);
@@ -1 +1 @@
1
- {"version":3,"file":"DataForSeoClient.js","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataForSeoClient.js","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * Cost control mirrors DataForSeoClient:
12
12
  * - SINGULAR WORKER: live requests serialised (Majestic decrements resource units per item).
13
- * - CACHE (default 20 days): per (item, datasource); a hit costs nothing and skips the worker.
13
+ * - CACHE (default 30 days, MAJESTIC_CACHE_DAYS): per (item, datasource); a hit costs nothing and skips the worker.
14
14
  *
15
15
  * Host: LIVE is api.majestic.com (real, current index, consumes units). The dev sandbox
16
16
  * developer.majestic.com is a frozen 2015 Historic subset (schema-only) — override via
@@ -16,7 +16,7 @@ export class MajesticClient {
16
16
  ttlMs;
17
17
  cache;
18
18
  chain = Promise.resolve();
19
- constructor(apiKey, cacheDbPath, ttlDays = 20, host = process.env.MAJESTIC_API_HOST || DEFAULT_HOST) {
19
+ constructor(apiKey, cacheDbPath, ttlDays = 30, host = process.env.MAJESTIC_API_HOST || DEFAULT_HOST) {
20
20
  this.key = apiKey;
21
21
  this.host = host.replace(/\/+$/, '');
22
22
  this.ttlMs = ttlDays * 86400000;
@@ -0,0 +1,20 @@
1
+ import type { WebCallHandlers } from './webServer.js';
2
+ import type { DataForSeoClient } from './DataForSeoClient.js';
3
+ /**
4
+ * The web UI's server-side call handlers (POST /api/call allowlist), factored out so BOTH
5
+ * surfaces share one definition: the in-MCP `serve_dashboard` / auto-serve (src/server.ts) and
6
+ * the standalone dashboard sidecar (src/dashboard.ts) used in the Docker-aware mode, where the
7
+ * MCP runs stdio-only behind the gateway and a separate published container serves the reports.
8
+ */
9
+ export interface WebHandlerDeps {
10
+ dataDir: () => string;
11
+ dfs: DataForSeoClient | null;
12
+ apiKeys: () => {
13
+ dataforseo: boolean;
14
+ majestic: boolean;
15
+ firecrawl: boolean;
16
+ supadata: boolean;
17
+ };
18
+ }
19
+ export declare function buildWebCallHandlers(deps: WebHandlerDeps): WebCallHandlers;
20
+ //# sourceMappingURL=webHandlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webHandlers.d.ts","sourceRoot":"","sources":["../../src/core/webHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CAClG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CA4C1E"}
@@ -0,0 +1,67 @@
1
+ import { listLocalProperties } from './webServer.js';
2
+ import { getDashboardData } from './dashboardData.js';
3
+ import { fetchGoogleNews } from './googleNews.js';
4
+ export function buildWebCallHandlers(deps) {
5
+ const { dataDir } = deps;
6
+ const requireDfs = () => {
7
+ if (!deps.dfs)
8
+ throw new Error('DataForSEO not configured (DATAFORSEO_USERNAME / DATAFORSEO_PASSWORD)');
9
+ return deps.dfs;
10
+ };
11
+ return {
12
+ get_dashboard_data: async (a) => {
13
+ const want = String(a.siteUrl ?? '');
14
+ // Only serve properties that actually exist locally — getDashboardData would otherwise
15
+ // CREATE an empty DB file for any bogus siteUrl posted at the API.
16
+ if (!listLocalProperties(dataDir()).some(p => p.siteUrl === want))
17
+ throw new Error(`unknown property ${want}`);
18
+ return { ...getDashboardData(dataDir(), want), apiKeys: deps.apiKeys() };
19
+ },
20
+ related_terms: async (a) => {
21
+ const r = await requireDfs().relatedTerms(String(a.keyword ?? ''), a.location, a.languageCode);
22
+ return r;
23
+ },
24
+ // Content research (on-demand) — News (free Google News + paid DFS) / Videos / Trends.
25
+ news_discovery: async (a) => {
26
+ const kw = String(a.keyword ?? '');
27
+ const seen = new Set();
28
+ const articles = [];
29
+ const add = (x) => { const k = String(x.url || x.title || '').toLowerCase(); if (k && !seen.has(k)) {
30
+ seen.add(k);
31
+ articles.push(x);
32
+ } };
33
+ try {
34
+ const g = await fetchGoogleNews(kw, { limit: 20 });
35
+ for (const x of g.articles)
36
+ add({ ...x, via: 'google-news' });
37
+ }
38
+ catch { /* free source optional */ }
39
+ if (deps.dfs) {
40
+ try {
41
+ const r = await deps.dfs.serpNews(kw, a.location, a.languageCode);
42
+ for (const x of r.articles)
43
+ add({ ...x, via: 'dataforseo' });
44
+ }
45
+ catch { /* paid optional */ }
46
+ }
47
+ return { articles };
48
+ },
49
+ youtube_discovery: async (a) => {
50
+ const r = await requireDfs().serpYoutube(String(a.keyword ?? ''), a.location, a.languageCode, a.blockDepth);
51
+ return r;
52
+ },
53
+ topic_trend: async (a) => {
54
+ const kws = Array.isArray(a.keywords) ? a.keywords : [String(a.keyword ?? '')].filter(Boolean);
55
+ const r = await requireDfs().googleTrends(kws, a.location, a.languageCode, {});
56
+ return r;
57
+ },
58
+ keyword_volume: async (a) => {
59
+ const r = await requireDfs().searchVolume(a.keywords ?? [], a.location, a.languageCode);
60
+ const items = (r.tasks[0]?.result ?? []).map((k) => ({
61
+ keyword: k.keyword, searchVolume: k.search_volume, cpc: k.cpc, competition: k.competition,
62
+ }));
63
+ return { keywords: items, cached: r.cached, cost: r.cost };
64
+ },
65
+ };
66
+ }
67
+ //# sourceMappingURL=webHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webHandlers.js","sourceRoot":"","sources":["../../src/core/webHandlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAelD,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,UAAU,GAAG,GAAqB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACxG,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC,CAAC;IACF,OAAO;QACL,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,uFAAuF;YACvF,mEAAmE;YACnE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC/G,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAwC,CAAC;QACjH,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,QAAuC,EAAE,CAAC,CAAC,YAAkC,CAAC,CAAC;YACpJ,OAAO,CAAuC,CAAC;QACjD,CAAC;QACD,uFAAuF;QACvF,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAAC,MAAM,QAAQ,GAAU,EAAE,CAAC;YAC3D,MAAM,GAAG,GAAG,CAAC,CAAM,EAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC;YACpJ,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;oBAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;YAC/J,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAuC,EAAE,CAAC,CAAC,YAAkC,CAAC,CAAC;oBAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;wBAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAAC,CAAC;YAC7O,OAAO,EAAE,QAAQ,EAAwC,CAAC;QAC5D,CAAC;QACD,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,QAAuC,EAAE,CAAC,CAAC,YAAkC,EAAE,CAAC,CAAC,UAAgC,CAAC,CAAC;YACvL,OAAO,CAAuC,CAAC;QACjD,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7G,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,QAAuC,EAAE,CAAC,CAAC,YAAkC,EAAE,EAAE,CAAC,CAAC;YACpI,OAAO,CAAuC,CAAC;QACjD,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,YAAY,CAAE,CAAC,CAAC,QAAqB,IAAI,EAAE,EAAE,CAAC,CAAC,QAAuC,EAAE,CAAC,CAAC,YAAkC,CAAC,CAAC;YAC3J,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBACxD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW;aAC1F,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,7 +2,14 @@
2
2
  * Local dashboard webserver — the "Phase 2" delivery surface. Serves the built dashboard
3
3
  * UI at http://127.0.0.1:PORT with live data from the property SQLite DBs, so the report
4
4
  * lives in a real browser tab: no MCP-App host cache, no iframe sandbox, native file
5
- * downloads, and a property switcher. Localhost-only by design (binds 127.0.0.1).
5
+ * downloads, and a property switcher.
6
+ *
7
+ * Localhost-only by design. Binds 127.0.0.1 by default; a container sets
8
+ * SAC_DASHBOARD_BIND=0.0.0.0 (so a published `127.0.0.1:PORT->PORT` host mapping can reach it)
9
+ * and SAC_DASHBOARD_PORT to a fixed, publishable port. Even bound to 0.0.0.0, the Host-header
10
+ * allowlist below refuses any request not addressed to localhost, so the SQLite data is never
11
+ * answered to a network client. The advertised URL host stays 127.0.0.1 (SAC_DASHBOARD_URL_HOST
12
+ * to override) — that is the address the user's browser actually reaches.
6
13
  */
7
14
  /** Named server-side handlers the web UI may invoke via POST /api/call (allowlist). */
8
15
  export type WebCallHandlers = Record<string, (args: Record<string, unknown>) => Promise<Record<string, unknown>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../src/core/webServer.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAElH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,qGAAqG;IACrG,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgBD,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAiBxF;AA4BD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EzG;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM5D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD"}
1
+ {"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../src/core/webServer.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAElH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,qGAAqG;IACrG,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgBD,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAiBxF;AA4BD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmFzG;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM5D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD"}
@@ -124,16 +124,24 @@ export async function startDashboardServer(opts) {
124
124
  }
125
125
  });
126
126
  starting = (async () => {
127
+ // Bind host: 127.0.0.1 by default (never expose the SQLite data on the network). A container
128
+ // sets SAC_DASHBOARD_BIND=0.0.0.0 so a published 127.0.0.1:PORT->PORT host mapping can reach it;
129
+ // the Host-header allowlist above still refuses anything not addressed to localhost.
130
+ const bindHost = process.env.SAC_DASHBOARD_BIND || '127.0.0.1';
131
+ // Port: explicit arg > SAC_DASHBOARD_PORT (a fixed, publishable port for Docker) > 0 (random).
132
+ const wantPort = opts.port ?? (Number(process.env.SAC_DASHBOARD_PORT) || 0);
127
133
  const port = await new Promise((resolve, reject) => {
128
134
  server.once('error', reject);
129
- // 127.0.0.1 only — never expose the dashboard (or the SQLite data behind it) on the network.
130
- server.listen(opts.port ?? 0, '127.0.0.1', () => {
135
+ server.listen(wantPort, bindHost, () => {
131
136
  const addr = server.address();
132
- resolve(typeof addr === 'object' && addr ? addr.port : (opts.port ?? 0));
137
+ resolve(typeof addr === 'object' && addr ? addr.port : wantPort);
133
138
  });
134
139
  });
135
140
  server.unref(); // never keep the MCP process alive on our account
136
- const url = `http://127.0.0.1:${port}`;
141
+ // Advertised host is the address the user's browser reaches — 127.0.0.1 for a host-run process,
142
+ // and also for a container whose port is published to the host's 127.0.0.1:PORT.
143
+ const urlHost = process.env.SAC_DASHBOARD_URL_HOST || '127.0.0.1';
144
+ const url = `http://${urlHost}:${port}`;
137
145
  running = { server, port, url };
138
146
  return { url, port };
139
147
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"webServer.js","sourceRoot":"","sources":["../../src/core/webServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webServer.js","sourceRoot":"","sources":["../../src/core/webServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ // Copyright (c) 2026 Richard Baxter / Houtini — Source-Available (see LICENSE)
3
+ import path from 'node:path';
4
+ import os from 'node:os';
5
+ import { readFileSync } from 'node:fs';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { startDashboardServer } from './core/webServer.js';
8
+ import { buildWebCallHandlers } from './core/webHandlers.js';
9
+ import { DataForSeoClient } from './core/DataForSeoClient.js';
10
+ /**
11
+ * Standalone dashboard server — the Docker-aware delivery surface.
12
+ *
13
+ * The MCP server itself talks stdio behind the Docker MCP gateway, which does NOT publish
14
+ * container ports, so a dashboard served from inside the MCP container is unreachable from the
15
+ * host. This entrypoint is a SEPARATE, publishable process: it mounts the same SAC_DATA_DIR (the
16
+ * shared `mcp-sac-data` volume, read-only is fine) and serves the exact same dashboard on a fixed,
17
+ * published port — so the reports get a stable URL that always reflects the live database.
18
+ *
19
+ * Run it as a sidecar container (the image ENTRYPOINT is `node dist/index.js`, so override it —
20
+ * bins aren't on PATH in the runtime image; WORKDIR is /app):
21
+ * docker run -d --name seo-audit-dashboard \
22
+ * -p 127.0.0.1:8788:8788 \
23
+ * -e SAC_DASHBOARD_BIND=0.0.0.0 -e SAC_DASHBOARD_PORT=8788 -e SAC_DATA_DIR=/data \
24
+ * -v mcp-sac-data:/data:ro \
25
+ * --entrypoint node houtini-seo-audit-local:latest dist/dashboard.js
26
+ * then open http://127.0.0.1:8788/. DataForSEO creds (optional) enable the Content-research tab.
27
+ */
28
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
29
+ const DATA_DIR = process.env.SAC_DATA_DIR || path.join(os.homedir(), 'Documents', 'seo-audit-console');
30
+ const dataDir = () => DATA_DIR;
31
+ const dfsUser = process.env.DATAFORSEO_USERNAME;
32
+ const dfsPass = process.env.DATAFORSEO_PASSWORD;
33
+ const dfs = dfsUser && dfsPass
34
+ ? new DataForSeoClient(dfsUser, dfsPass, path.join(DATA_DIR, 'dataforseo-cache.db'), Number(process.env.DATAFORSEO_CACHE_DAYS) || 7)
35
+ : null;
36
+ const apiKeys = () => ({
37
+ dataforseo: !!dfs,
38
+ majestic: !!process.env.MAJESTIC_API_KEY,
39
+ firecrawl: !!process.env.FIRECRAWL_API_KEY,
40
+ supadata: !!process.env.SUPADATA_API_KEY,
41
+ });
42
+ // Same built UI the MCP serves (Vite output tree: dist/src/ui/dashboard.html, next to this file).
43
+ const uiHtml = () => readFileSync(path.join(__dirname, 'src', 'ui', 'dashboard.html'), 'utf8');
44
+ async function main() {
45
+ const { url } = await startDashboardServer({
46
+ dataDir,
47
+ uiHtml,
48
+ call: buildWebCallHandlers({ dataDir, dfs, apiKeys }),
49
+ ...(process.env.SAC_DASHBOARD_PORT ? { port: Number(process.env.SAC_DASHBOARD_PORT) } : {}),
50
+ });
51
+ // Never stdout — parity with the MCP's stdio rule (and harmless here). Log the reachable URL.
52
+ console.error(`[seo-audit-dashboard] serving ${url} — data dir ${DATA_DIR}, DataForSEO ${dfs ? 'on' : 'off'}`);
53
+ // startDashboardServer unref()s its listener so it can't hold an MCP process open; this is a
54
+ // dedicated process whose whole job is to stay up, so keep the event loop alive explicitly.
55
+ setInterval(() => { }, 1 << 30);
56
+ }
57
+ main().catch((e) => { console.error('[seo-audit-dashboard] failed to start:', e); process.exit(1); });
58
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiFpE,wBAAgB,OAAO,IAAI,MAAM,CAGhC;AAkLD,wBAAgB,YAAY,IAAI;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAiqE9E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkFpE,wBAAgB,OAAO,IAAI,MAAM,CAGhC;AAkLD,wBAAgB,YAAY,IAAI;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgpE9E"}