← back to Adsense Fleet Viewer
Load all 8 AdSense account sites (steveabramsdesigns@gmail.com) + reconcile dashboard review-status vs live probe; list-driven via sites.txt
3bc598e9c3619aafb2f4de0766b7af86d94cfa16 · 2026-08-05 11:29:04 -0700 · Steve
Files touched
M account-status.jsonA adsense-sites.jsonM build.mjsM public/index.htmlM public/status.jsonA sites.txt
Diff
commit 3bc598e9c3619aafb2f4de0766b7af86d94cfa16
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Aug 5 11:29:04 2026 -0700
Load all 8 AdSense account sites (steveabramsdesigns@gmail.com) + reconcile dashboard review-status vs live probe; list-driven via sites.txt
---
account-status.json | 11 ++---
adsense-sites.json | 16 +++++++
build.mjs | 109 ++++++++++++++++++++++++++++++++-------------
public/index.html | 124 +++++++++++++++++++++++++---------------------------
public/status.json | 96 +++++++++++++++++++++-------------------
sites.txt | 14 ++++++
6 files changed, 226 insertions(+), 144 deletions(-)
diff --git a/account-status.json b/account-status.json
index 3fe7e5c..12b06a1 100644
--- a/account-status.json
+++ b/account-status.json
@@ -1,9 +1,10 @@
{
- "_comment": "MANUAL — the one thing probing cannot see. Fill these after checking adsense.google.com, then re-run `node build.mjs`. Values: yes | no | unknown",
+ "_comment": "MANUAL — dashboard-only truth. Values: yes | no | unknown | in-review. Update after checking adsense.google.com, then re-run `node build.mjs`.",
+ "account": "steveabramsdesigns@gmail.com",
"pubId": "pub-5278231299883833",
- "approved": "unknown",
+ "approved": "no",
"autoAdsOn": "unknown",
- "serving": "unknown",
- "checkedAt": "",
- "notes": ""
+ "serving": "no",
+ "checkedAt": "2026-08-05",
+ "notes": "8 sites added; NONE 'Ready' — 3 Getting ready, 5 Requires review. No site is serving real ads yet. celebsignatures + chargeandexplore are closest ('Getting ready')."
}
diff --git a/adsense-sites.json b/adsense-sites.json
new file mode 100644
index 0000000..b1d873b
--- /dev/null
+++ b/adsense-sites.json
@@ -0,0 +1,16 @@
+{
+ "_comment": "Snapshot of the AdSense 'Manage your sites' dashboard (account steveabramsdesigns@gmail.com / pub-5278231299883833). Pasted 2026-08-05. review = Ready|Getting ready|Requires review|Needs attention. adsTxt = what GOOGLE's crawler sees (Authorized|Not found). Update after each dashboard visit.",
+ "account": "steveabramsdesigns@gmail.com",
+ "pubId": "pub-5278231299883833",
+ "snapshotAt": "2026-08-05",
+ "sites": {
+ "nodailyworries.com": { "review": "Requires review", "adsTxt": "Not found", "added": "2025-08-24" },
+ "beverlyhillsvideos.com": { "review": "Requires review", "adsTxt": "Not found", "added": "2025-08-24" },
+ "wholivedthere.com": { "review": "Requires review", "adsTxt": "Not found", "added": "2026-08-05" },
+ "claimmyaddress.com": { "review": "Requires review", "adsTxt": "Not found", "added": "2026-08-05" },
+ "bubbe.ai": { "review": "Requires review", "adsTxt": "Authorized", "added": "2026-08-05" },
+ "celebsignatures.com": { "review": "Getting ready", "adsTxt": "Not found", "added": "2026-08-04" },
+ "bubbesblock.com": { "review": "Getting ready", "adsTxt": "Not found", "added": "2026-08-04" },
+ "chargeandexplore.com": { "review": "Getting ready", "adsTxt": "Authorized", "added": "2026-08-04" }
+ }
+}
diff --git a/build.mjs b/build.mjs
index e13f5d2..efcfb17 100644
--- a/build.mjs
+++ b/build.mjs
@@ -16,22 +16,46 @@ import { writeFile, readFile } from 'node:fs/promises';
let ACCT = { pubId: 'pub-5278231299883833', approved: 'unknown', autoAdsOn: 'unknown', serving: 'unknown', checkedAt: '', notes: '' };
try { ACCT = { ...ACCT, ...JSON.parse(await readFile(new URL('./account-status.json', import.meta.url), 'utf8')) }; } catch {}
-// domain -> which project owns it. Best-known mapping; edit as domains are confirmed.
+// LIST-DRIVEN: the domains probed come from sites.txt (one domain per line;
+// '#' comments + blank lines ignored). Paste your AdSense Sites list in there and
+// re-run. Known domains get policy/project metadata from POLICY_MAP below; any
+// domain not in the map is probed as policy:'unknown' with a name derived from it.
+//
// policy = the AdSense placement rule (DTD verdict 2026-08-05):
-// allow — content/traffic surface, ads OK
-// forbid — customer-facing luxury/commerce surface, ads must NOT run
-// verify — thin/low-content, only after account check + real per-page content
-// na — not a public ad surface
-const FLEET = [
- { project: 'CelebritySignatures', domain: 'celebsignatures.com', policy: 'allow' },
- { project: 'interiordesignershowroom', domain: 'interiordesignershowroom.com', policy: 'forbid', flag: 'REMOVE pending approval' },
- { project: 'tesla (Charge & Explore)', domain: 'chargeandexplore.com', policy: 'verify', note: 'app landing — thin page, keep only if not cluttering conversion' },
- { project: 'ventura-corridor', domain: 'venturacorridor.com', policy: 'verify', note: 'templated directory — needs real per-page content first' },
- { project: 'allnewsdaily', domain: 'allnewsdaily.com', policy: 'allow' },
- { project: 'fashion-style-guides', domain: 'fashionstyleguides.com', policy: 'allow' },
- { project: 'restaurant-directory', domain: null, policy: 'allow', note: 'public domain unconfirmed' },
- { project: 'AbramsEgo', domain: null, policy: 'na', note: 'internal command center (:9773) — not a public ad surface' },
-];
+// allow — content/traffic surface, ads OK
+// forbid — customer-facing luxury/commerce surface, ads must NOT run
+// verify — thin/low-content, only after account check + real per-page content
+// na — not a public ad surface
+// unknown— not yet classified (default for pasted domains)
+const POLICY_MAP = {
+ 'nodailyworries.com': { project: 'nodailyworries', policy: 'allow' },
+ 'beverlyhillsvideos.com': { project: 'beverlyhillsvideos', policy: 'allow' },
+ 'wholivedthere.com': { project: 'WhoLivedThere', policy: 'allow' },
+ 'claimmyaddress.com': { project: 'ClaimMyAddress', policy: 'allow' },
+ 'bubbe.ai': { project: 'bubbe.ai', policy: 'allow' },
+ 'bubbesblock.com': { project: 'BubbesBlock', policy: 'allow' },
+ 'celebsignatures.com': { project: 'CelebritySignatures', policy: 'allow' },
+ 'chargeandexplore.com': { project: 'tesla (Charge & Explore)', policy: 'verify', note: 'app landing — thin page' },
+ 'interiordesignershowroom.com': { project: 'interiordesignershowroom', policy: 'forbid', flag: 'Serving loader but NOT in AdSense account — REMOVE (pending approval)' },
+};
+
+// AdSense dashboard snapshot (what Google's console reports — the truth probing can't see)
+let ADSENSE = { account: '', pubId: '', snapshotAt: '', sites: {} };
+try { ADSENSE = { ...ADSENSE, ...JSON.parse(await readFile(new URL('./adsense-sites.json', import.meta.url), 'utf8')) }; } catch {}
+
+let domains = [];
+try {
+ const txt = await readFile(new URL('./sites.txt', import.meta.url), 'utf8');
+ domains = [...new Set(txt.split('\n').map(l => l.trim().toLowerCase())
+ .filter(l => l && !l.startsWith('#'))
+ .map(l => l.replace(/^https?:\/\//, '').replace(/\/.*$/, '')))];
+} catch { domains = Object.keys(POLICY_MAP); }
+
+const FLEET = domains.map(domain => {
+ const meta = POLICY_MAP[domain] || {};
+ const project = meta.project || domain.replace(/\.(com|org|net|io|co)$/, '');
+ return { domain, project, policy: meta.policy || 'unknown', note: meta.note, flag: meta.flag };
+});
const timeout = (ms) => new AbortController(); // placeholder (see fetchT)
async function fetchT(url, ms = 9000) {
@@ -83,14 +107,17 @@ const PILL = {
na: ['#5b5b5b', '#eee', '– N/A'],
};
-const liveCount = results.filter(r => verdict(r).key === 'loader' || verdict(r).key === 'full').length;
-const adSurfaces = results.filter(r => r.domain && !(r.note || '').includes('internal')).length;
+const liveCount = results.filter(r => r.loader).length;
+const sitesInAccount = Object.keys(ADSENSE.sites || {}).length;
+const readyCount = Object.values(ADSENSE.sites || {}).filter(s => s.review === 'Ready').length;
+const gettingReady = Object.values(ADSENSE.sites || {}).filter(s => s.review === 'Getting ready').length;
const POLICY = {
- allow: ['#0a7d33', '#e6f4ea', '✅ Ads OK'],
- forbid: ['#9a2323', '#fbeaea', '⛔ No ads (luxury/commerce)'],
- verify: ['#a86a00', '#fdf3e2', '⚠ Verify content first'],
- na: ['#5b5b5b', '#eee', '– N/A'],
+ allow: ['#0a7d33', '#e6f4ea', '✅ Ads OK'],
+ forbid: ['#9a2323', '#fbeaea', '⛔ No ads (luxury/commerce)'],
+ verify: ['#a86a00', '#fdf3e2', '⚠ Verify content first'],
+ na: ['#5b5b5b', '#eee', '– N/A'],
+ unknown: ['#4a4a4a', '#eef0f2', '· Unclassified'],
};
function policyPill(r) {
const [fg, bg, txt] = POLICY[r.policy] || POLICY.na;
@@ -98,6 +125,28 @@ function policyPill(r) {
return `<span class="pill" style="color:${fg};background:${bg}">${txt}</span>${flag}`;
}
+// AdSense dashboard review-status pill (from the console snapshot)
+const REVIEW = {
+ 'Ready': ['#0a7d33', '#e6f4ea'],
+ 'Getting ready': ['#0a6ba8', '#e4f1fa'],
+ 'Requires review': ['#a86a00', '#fdf3e2'],
+ 'Needs attention': ['#9a2323', '#fbeaea'],
+};
+function adsenseCells(domain, liveAdsTxt) {
+ const s = ADSENSE.sites?.[domain];
+ if (!s) return `<td><span class="muted">not in account</span></td><td><span class="muted">—</span></td>`;
+ const [fg, bg] = REVIEW[s.review] || ['#4a4a4a', '#eef0f2'];
+ const rev = `<span class="pill" style="color:${fg};background:${bg}">${s.review}</span><div class="sub">added ${s.added}</div>`;
+ // reconcile Google-crawled ads.txt vs what we actually serve live
+ const liveHas = !!liveAdsTxt;
+ const gAuth = s.adsTxt === 'Authorized';
+ let recon;
+ if (gAuth) recon = `<span style="color:#0a7d33">✓ Authorized</span>`;
+ else if (liveHas) recon = `<span style="color:#a86a00">Google: not found<br><span class="sub">but we serve it — awaiting re-crawl</span></span>`;
+ else recon = `<span style="color:#9a2323">✗ not found</span>`;
+ return `<td>${rev}</td><td>${recon}</td>`;
+}
+
// Manual account-status card (dashboard-only truth)
const AS = { yes: ['#0a7d33', '#e6f4ea', 'YES'], no: ['#9a2323', '#fbeaea', 'NO'], unknown: ['#a86a00', '#fdf3e2', 'UNKNOWN'] };
const asBadge = (v) => { const [fg, bg, t] = AS[v] || AS.unknown; return `<span class="pill" style="color:${fg};background:${bg}">${t}</span>`; };
@@ -107,6 +156,7 @@ const acctCard = `<div class="acct">
<div><span>Approved</span>${asBadge(ACCT.approved)}</div>
<div><span>Auto ads ON</span>${asBadge(ACCT.autoAdsOn)}</div>
<div><span>Actually serving</span>${asBadge(ACCT.serving)}</div>
+ <div><span>Account</span><code>${ACCT.account || '—'}</code></div>
<div><span>Pub id</span><code>${ACCT.pubId}</code></div>
</div>
<div class="acct-foot">${ACCT.checkedAt ? `🕓 checked <code>${ACCT.checkedAt}</code>` : '<span class="warn">Not yet checked.</span>'} ${ACCT.notes ? '· ' + ACCT.notes : ''}
@@ -125,12 +175,10 @@ const rows = results.map(r => {
return `<tr>
<td><span class="proj">${r.project}</span><div class="sub">${site}</div></td>
<td>${policyPill(r)}</td>
+ ${adsenseCells(r.domain, r.adsTxt)}
<td><span class="pill" style="color:${fg};background:${bg}">${txt}</span><div class="sub">${vd.label}</div></td>
- <td>${r.http ? cell(r.http) : cell(null)}</td>
<td>${r.loader ? cell('yes', r.domain ? `view-source:https://${r.domain}/` : null) : cell(r.domain ? 'no' : null)}</td>
- <td>${cell(r.adsTxt, r.domain ? `https://${r.domain}/ads.txt` : null, true)}</td>
- <td>${r.slots.length ? cell(r.slots.join(', ')) : '<span class="muted">none (Auto ads only)</span>'}</td>
- <td>${cell(r.pubFromLoader, null, true)}</td>
+ <td>${r.slots.length ? cell(r.slots.join(', ')) : '<span class="muted">none (Auto only)</span>'}</td>
</tr>`;
}).join('\n');
@@ -168,15 +216,16 @@ a{color:#1d7a36}.muted{color:var(--muted)}
<div class="stamp">🕓 Live-probed <code>${stamp}</code> · re-run <code>node build.mjs</code> to refresh</div>
<div class="cards">
- <div class="card"><b>${liveCount}/${adSurfaces}</b><span>Loader live on ad surfaces</span></div>
- <div class="card"><b>0</b><span>Manual ad units live (fleet-wide)</span></div>
- <div class="card"><b>pub-5278…3833</b><span>Primary account</span></div>
+ <div class="card"><b>${readyCount}/${sitesInAccount}</b><span>Sites approved (Ready) in AdSense</span></div>
+ <div class="card"><b>${gettingReady}</b><span>Getting ready (in review)</span></div>
+ <div class="card"><b>${liveCount}</b><span>Loader served live on-site</span></div>
+ <div class="card"><b>0</b><span>Manual ad units live</span></div>
</div>
${acctCard}
<table>
-<thead><tr><th>Project / Domain</th><th>Policy</th><th>Status</th><th>HTTP</th><th>Loader</th><th>ads.txt</th><th>Manual units</th><th>Pub id (live)</th></tr></thead>
+<thead><tr><th>Project / Domain</th><th>Policy</th><th>AdSense review</th><th>ads.txt (Google vs live)</th><th>Live loader status</th><th>Loader served</th><th>Manual units</th></tr></thead>
<tbody>
${rows}
</tbody></table>
@@ -193,4 +242,4 @@ ${rows}
await writeFile(new URL('./public/index.html', import.meta.url), html);
await writeFile(new URL('./public/status.json', import.meta.url), JSON.stringify({ probedAt: now.toISOString(), results }, null, 2));
-console.log(`Wrote public/index.html — ${liveCount}/${adSurfaces} loader-live at ${stamp}`);
+console.log(`Wrote public/index.html — ${sitesInAccount} sites in account, ${readyCount} Ready, ${liveCount} loader-live at ${stamp}`);
diff --git a/public/index.html b/public/index.html
index 6484915..532a3d0 100644
--- a/public/index.html
+++ b/public/index.html
@@ -29,108 +29,102 @@ a{color:#1d7a36}.muted{color:var(--muted)}
.acct-foot{margin-top:12px;font-size:12px;color:#6b6b6b}
</style></head><body><div class="wrap">
<h1>AdSense Fleet Status</h1>
-<div class="stamp">🕓 Live-probed <code>Aug 5, 2026, 11:19 AM</code> · re-run <code>node build.mjs</code> to refresh</div>
+<div class="stamp">🕓 Live-probed <code>Aug 5, 2026, 11:28 AM</code> · re-run <code>node build.mjs</code> to refresh</div>
<div class="cards">
- <div class="card"><b>3/6</b><span>Loader live on ad surfaces</span></div>
- <div class="card"><b>0</b><span>Manual ad units live (fleet-wide)</span></div>
- <div class="card"><b>pub-5278…3833</b><span>Primary account</span></div>
+ <div class="card"><b>0/8</b><span>Sites approved (Ready) in AdSense</span></div>
+ <div class="card"><b>3</b><span>Getting ready (in review)</span></div>
+ <div class="card"><b>6</b><span>Loader served live on-site</span></div>
+ <div class="card"><b>0</b><span>Manual ad units live</span></div>
</div>
<div class="acct">
<h2>Account status — <span class="muted">dashboard-only, not probeable</span></h2>
<div class="acct-row">
- <div><span>Approved</span><span class="pill" style="color:#a86a00;background:#fdf3e2">UNKNOWN</span></div>
+ <div><span>Approved</span><span class="pill" style="color:#9a2323;background:#fbeaea">NO</span></div>
<div><span>Auto ads ON</span><span class="pill" style="color:#a86a00;background:#fdf3e2">UNKNOWN</span></div>
- <div><span>Actually serving</span><span class="pill" style="color:#a86a00;background:#fdf3e2">UNKNOWN</span></div>
+ <div><span>Actually serving</span><span class="pill" style="color:#9a2323;background:#fbeaea">NO</span></div>
+ <div><span>Account</span><code>steveabramsdesigns@gmail.com</code></div>
<div><span>Pub id</span><code>pub-5278231299883833</code></div>
</div>
- <div class="acct-foot"><span class="warn">Not yet checked.</span>
+ <div class="acct-foot">🕓 checked <code>2026-08-05</code> · 8 sites added; NONE 'Ready' — 3 Getting ready, 5 Requires review. No site is serving real ads yet. celebsignatures + chargeandexplore are closest ('Getting ready').
<div class="muted">Fill these at <a href="https://adsense.google.com/" target="_blank" rel="noopener">adsense.google.com</a> → edit <code>account-status.json</code> → re-run <code>node build.mjs</code>.</div></div>
</div>
<table>
-<thead><tr><th>Project / Domain</th><th>Policy</th><th>Status</th><th>HTTP</th><th>Loader</th><th>ads.txt</th><th>Manual units</th><th>Pub id (live)</th></tr></thead>
+<thead><tr><th>Project / Domain</th><th>Policy</th><th>AdSense review</th><th>ads.txt (Google vs live)</th><th>Live loader status</th><th>Loader served</th><th>Manual units</th></tr></thead>
<tbody>
<tr>
- <td><span class="proj">CelebritySignatures</span><div class="sub"><a href="https://celebsignatures.com/" target="_blank" rel="noopener">celebsignatures.com</a></div></td>
+ <td><span class="proj">nodailyworries</span><div class="sub"><a href="https://nodailyworries.com/" target="_blank" rel="noopener">nodailyworries.com</a></div></td>
<td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
- <td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
- <td>200</td>
- <td><a href="view-source:https://celebsignatures.com/" target="_blank" rel="noopener">yes</a></td>
- <td><a href="https://celebsignatures.com/ads.txt" target="_blank" rel="noopener"><code>pub-5278231299883833</code></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><code>pub-5278231299883833</code></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">Requires review</span><div class="sub">added 2025-08-24</div></td><td><span style="color:#9a2323">✗ not found</span></td>
+ <td><span class="pill" style="color:#9a2323;background:#fbeaea">○ Not serving</span><div class="sub">No ads on live site</div></td>
+ <td>no</td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">interiordesignershowroom</span><div class="sub"><a href="https://interiordesignershowroom.com/" target="_blank" rel="noopener">interiordesignershowroom.com</a></div></td>
- <td><span class="pill" style="color:#9a2323;background:#fbeaea">⛔ No ads (luxury/commerce)</span><div class="sub warn">REMOVE pending approval</div></td>
+ <td><span class="proj">beverlyhillsvideos</span><div class="sub"><a href="https://beverlyhillsvideos.com/" target="_blank" rel="noopener">beverlyhillsvideos.com</a></div></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">Requires review</span><div class="sub">added 2025-08-24</div></td><td><span style="color:#9a2323">✗ not found</span></td>
+ <td><span class="pill" style="color:#9a2323;background:#fbeaea">✕ Unreachable</span><div class="sub">fetch failed</div></td>
+ <td>no</td>
+ <td><span class="muted">none (Auto only)</span></td>
+ </tr>
+<tr>
+ <td><span class="proj">WhoLivedThere</span><div class="sub"><a href="https://wholivedthere.com/" target="_blank" rel="noopener">wholivedthere.com</a></div></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">Requires review</span><div class="sub">added 2026-08-05</div></td><td><span style="color:#a86a00">Google: not found<br><span class="sub">but we serve it — awaiting re-crawl</span></span></td>
<td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
- <td>200</td>
- <td><a href="view-source:https://interiordesignershowroom.com/" target="_blank" rel="noopener">yes</a></td>
- <td><a href="https://interiordesignershowroom.com/ads.txt" target="_blank" rel="noopener"><code>pub-5278231299883833</code></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><code>pub-5278231299883833</code></td>
+ <td><a href="view-source:https://wholivedthere.com/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">tesla (Charge & Explore)</span><div class="sub"><a href="https://chargeandexplore.com/" target="_blank" rel="noopener">chargeandexplore.com</a></div></td>
- <td><span class="pill" style="color:#a86a00;background:#fdf3e2">⚠ Verify content first</span></td>
+ <td><span class="proj">ClaimMyAddress</span><div class="sub"><a href="https://claimmyaddress.com/" target="_blank" rel="noopener">claimmyaddress.com</a></div></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">Requires review</span><div class="sub">added 2026-08-05</div></td><td><span style="color:#a86a00">Google: not found<br><span class="sub">but we serve it — awaiting re-crawl</span></span></td>
<td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
- <td>200</td>
- <td><a href="view-source:https://chargeandexplore.com/" target="_blank" rel="noopener">yes</a></td>
- <td><a href="https://chargeandexplore.com/ads.txt" target="_blank" rel="noopener"><code>pub-5278231299883833</code></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><code>pub-5278231299883833</code></td>
+ <td><a href="view-source:https://claimmyaddress.com/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">ventura-corridor</span><div class="sub"><a href="https://venturacorridor.com/" target="_blank" rel="noopener">venturacorridor.com</a></div></td>
- <td><span class="pill" style="color:#a86a00;background:#fdf3e2">⚠ Verify content first</span></td>
- <td><span class="pill" style="color:#9a2323;background:#fbeaea">○ Not serving</span><div class="sub">No ads on live site</div></td>
- <td>200</td>
- <td>no</td>
- <td><a href="https://venturacorridor.com/ads.txt" target="_blank" rel="noopener"><span class="muted">—</span></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><span class="muted">—</span></td>
+ <td><span class="proj">bubbe.ai</span><div class="sub"><a href="https://bubbe.ai/" target="_blank" rel="noopener">bubbe.ai</a></div></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">Requires review</span><div class="sub">added 2026-08-05</div></td><td><span style="color:#0a7d33">✓ Authorized</span></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
+ <td><a href="view-source:https://bubbe.ai/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">allnewsdaily</span><div class="sub"><a href="https://allnewsdaily.com/" target="_blank" rel="noopener">allnewsdaily.com</a></div></td>
+ <td><span class="proj">CelebritySignatures</span><div class="sub"><a href="https://celebsignatures.com/" target="_blank" rel="noopener">celebsignatures.com</a></div></td>
<td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
- <td><span class="pill" style="color:#9a2323;background:#fbeaea">○ Not serving</span><div class="sub">No ads on live site</div></td>
- <td>200</td>
- <td>no</td>
- <td><a href="https://allnewsdaily.com/ads.txt" target="_blank" rel="noopener"><span class="muted">—</span></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><span class="muted">—</span></td>
+ <td><span class="pill" style="color:#0a6ba8;background:#e4f1fa">Getting ready</span><div class="sub">added 2026-08-04</div></td><td><span style="color:#a86a00">Google: not found<br><span class="sub">but we serve it — awaiting re-crawl</span></span></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
+ <td><a href="view-source:https://celebsignatures.com/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">fashion-style-guides</span><div class="sub"><a href="https://fashionstyleguides.com/" target="_blank" rel="noopener">fashionstyleguides.com</a></div></td>
+ <td><span class="proj">BubbesBlock</span><div class="sub"><a href="https://bubbesblock.com/" target="_blank" rel="noopener">bubbesblock.com</a></div></td>
<td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
+ <td><span class="pill" style="color:#0a6ba8;background:#e4f1fa">Getting ready</span><div class="sub">added 2026-08-04</div></td><td><span style="color:#9a2323">✗ not found</span></td>
<td><span class="pill" style="color:#9a2323;background:#fbeaea">○ Not serving</span><div class="sub">No ads on live site</div></td>
- <td>200</td>
<td>no</td>
- <td><a href="https://fashionstyleguides.com/ads.txt" target="_blank" rel="noopener"><span class="muted">—</span></a></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><span class="muted">—</span></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">restaurant-directory</span><div class="sub"><span class="muted">public domain unconfirmed</span></div></td>
- <td><span class="pill" style="color:#0a7d33;background:#e6f4ea">✅ Ads OK</span></td>
- <td><span class="pill" style="color:#5b5b5b;background:#eee">– N/A</span><div class="sub">No domain</div></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><span class="muted">—</span></td>
+ <td><span class="proj">tesla (Charge & Explore)</span><div class="sub"><a href="https://chargeandexplore.com/" target="_blank" rel="noopener">chargeandexplore.com</a></div></td>
+ <td><span class="pill" style="color:#a86a00;background:#fdf3e2">⚠ Verify content first</span></td>
+ <td><span class="pill" style="color:#0a6ba8;background:#e4f1fa">Getting ready</span><div class="sub">added 2026-08-04</div></td><td><span style="color:#0a7d33">✓ Authorized</span></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
+ <td><a href="view-source:https://chargeandexplore.com/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
<tr>
- <td><span class="proj">AbramsEgo</span><div class="sub"><span class="muted">internal command center (:9773) — not a public ad surface</span></div></td>
- <td><span class="pill" style="color:#5b5b5b;background:#eee">– N/A</span></td>
- <td><span class="pill" style="color:#5b5b5b;background:#eee">– N/A</span><div class="sub">N/A · internal</div></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">—</span></td>
- <td><span class="muted">none (Auto ads only)</span></td>
- <td><span class="muted">—</span></td>
+ <td><span class="proj">interiordesignershowroom</span><div class="sub"><a href="https://interiordesignershowroom.com/" target="_blank" rel="noopener">interiordesignershowroom.com</a></div></td>
+ <td><span class="pill" style="color:#9a2323;background:#fbeaea">⛔ No ads (luxury/commerce)</span><div class="sub warn">Serving loader but NOT in AdSense account — REMOVE (pending approval)</div></td>
+ <td><span class="muted">not in account</span></td><td><span class="muted">—</span></td>
+ <td><span class="pill" style="color:#0a7d33;background:#e9f6ee">● Loader live</span><div class="sub">Loader live</div></td>
+ <td><a href="view-source:https://interiordesignershowroom.com/" target="_blank" rel="noopener">yes</a></td>
+ <td><span class="muted">none (Auto only)</span></td>
</tr>
</tbody></table>
diff --git a/public/status.json b/public/status.json
index 070873c..f6044a5 100644
--- a/public/status.json
+++ b/public/status.json
@@ -1,22 +1,32 @@
{
- "probedAt": "2026-08-05T18:19:52.140Z",
+ "probedAt": "2026-08-05T18:28:23.062Z",
"results": [
{
- "project": "CelebritySignatures",
- "domain": "celebsignatures.com",
+ "domain": "nodailyworries.com",
+ "project": "nodailyworries",
"policy": "allow",
"http": 200,
- "loader": true,
- "pubFromLoader": "pub-5278231299883833",
- "adsTxt": "pub-5278231299883833",
+ "loader": false,
+ "pubFromLoader": null,
+ "adsTxt": null,
"slots": [],
"err": null
},
{
- "project": "interiordesignershowroom",
- "domain": "interiordesignershowroom.com",
- "policy": "forbid",
- "flag": "REMOVE pending approval",
+ "domain": "beverlyhillsvideos.com",
+ "project": "beverlyhillsvideos",
+ "policy": "allow",
+ "http": null,
+ "loader": false,
+ "pubFromLoader": null,
+ "adsTxt": null,
+ "slots": [],
+ "err": "fetch failed"
+ },
+ {
+ "domain": "wholivedthere.com",
+ "project": "WhoLivedThere",
+ "policy": "allow",
"http": 200,
"loader": true,
"pubFromLoader": "pub-5278231299883833",
@@ -25,10 +35,9 @@
"err": null
},
{
- "project": "tesla (Charge & Explore)",
- "domain": "chargeandexplore.com",
- "policy": "verify",
- "note": "app landing — thin page, keep only if not cluttering conversion",
+ "domain": "claimmyaddress.com",
+ "project": "ClaimMyAddress",
+ "policy": "allow",
"http": 200,
"loader": true,
"pubFromLoader": "pub-5278231299883833",
@@ -37,31 +46,30 @@
"err": null
},
{
- "project": "ventura-corridor",
- "domain": "venturacorridor.com",
- "policy": "verify",
- "note": "templated directory — needs real per-page content first",
+ "domain": "bubbe.ai",
+ "project": "bubbe.ai",
+ "policy": "allow",
"http": 200,
- "loader": false,
- "pubFromLoader": null,
- "adsTxt": null,
+ "loader": true,
+ "pubFromLoader": "pub-5278231299883833",
+ "adsTxt": "pub-5278231299883833",
"slots": [],
"err": null
},
{
- "project": "allnewsdaily",
- "domain": "allnewsdaily.com",
+ "domain": "celebsignatures.com",
+ "project": "CelebritySignatures",
"policy": "allow",
"http": 200,
- "loader": false,
- "pubFromLoader": null,
- "adsTxt": null,
+ "loader": true,
+ "pubFromLoader": "pub-5278231299883833",
+ "adsTxt": "pub-5278231299883833",
"slots": [],
"err": null
},
{
- "project": "fashion-style-guides",
- "domain": "fashionstyleguides.com",
+ "domain": "bubbesblock.com",
+ "project": "BubbesBlock",
"policy": "allow",
"http": 200,
"loader": false,
@@ -71,26 +79,26 @@
"err": null
},
{
- "project": "restaurant-directory",
- "domain": null,
- "policy": "allow",
- "note": "public domain unconfirmed",
- "http": null,
- "loader": false,
- "pubFromLoader": null,
- "adsTxt": null,
+ "domain": "chargeandexplore.com",
+ "project": "tesla (Charge & Explore)",
+ "policy": "verify",
+ "note": "app landing — thin page",
+ "http": 200,
+ "loader": true,
+ "pubFromLoader": "pub-5278231299883833",
+ "adsTxt": "pub-5278231299883833",
"slots": [],
"err": null
},
{
- "project": "AbramsEgo",
- "domain": null,
- "policy": "na",
- "note": "internal command center (:9773) — not a public ad surface",
- "http": null,
- "loader": false,
- "pubFromLoader": null,
- "adsTxt": null,
+ "domain": "interiordesignershowroom.com",
+ "project": "interiordesignershowroom",
+ "policy": "forbid",
+ "flag": "Serving loader but NOT in AdSense account — REMOVE (pending approval)",
+ "http": 200,
+ "loader": true,
+ "pubFromLoader": "pub-5278231299883833",
+ "adsTxt": "pub-5278231299883833",
"slots": [],
"err": null
}
diff --git a/sites.txt b/sites.txt
new file mode 100644
index 0000000..cebda28
--- /dev/null
+++ b/sites.txt
@@ -0,0 +1,14 @@
+# AdSense sites — account steveabramsdesigns@gmail.com / pub-5278231299883833
+# Pasted from the AdSense "Manage your sites" page 2026-08-05. One domain per line.
+# These 8 are the sites ADDED to the AdSense account (the authoritative list).
+nodailyworries.com
+beverlyhillsvideos.com
+wholivedthere.com
+claimmyaddress.com
+bubbe.ai
+celebsignatures.com
+bubbesblock.com
+chargeandexplore.com
+
+# --- Serving the loader but NOT in the AdSense account (misconfig — see flag) ---
+interiordesignershowroom.com
← cccd696 AdSense fleet status viewer — live probe + policy column + m
·
back to Adsense Fleet Viewer
·
Accurate per-site diagnosis: nodailyworries PARKED (needs DN 009af2f →