← back to Adsense Command Post
adsense command post: dashboard app reading synced audit/status data (TK-11322)
bf278cf7422d99a249a74fbe581cff8f13c325db · 2026-09-09 16:28:49 -0700 · Steve Abrams
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
A .deploy.confA .gitignoreA data/audit-latest.jsonA data/status-latest.jsonA package.jsonA server.mjs
Diff
commit bf278cf7422d99a249a74fbe581cff8f13c325db
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Sep 9 16:28:49 2026 -0700
adsense command post: dashboard app reading synced audit/status data (TK-11322)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
.deploy.conf | 3 +
.gitignore | 3 +
data/audit-latest.json | 813 ++++++++++++++++++++++++++++++++++++++++++++++++
data/status-latest.json | 185 +++++++++++
package.json | 3 +
server.mjs | 90 ++++++
6 files changed, 1097 insertions(+)
diff --git a/.deploy.conf b/.deploy.conf
new file mode 100644
index 0000000..3957a00
--- /dev/null
+++ b/.deploy.conf
@@ -0,0 +1,3 @@
+PROJECT_NAME=adsense-command-post
+DEPLOY_PATH=/root/public-projects/adsense-command-post
+HEALTH_URL=http://127.0.0.1:9971/
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2524647
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+node_modules/
+.env*
+*.log
diff --git a/data/audit-latest.json b/data/audit-latest.json
new file mode 100644
index 0000000..60c0bb1
--- /dev/null
+++ b/data/audit-latest.json
@@ -0,0 +1,813 @@
+{
+ "ts": "2026-09-09T23:28:01.087Z",
+ "publisher": "pub-5278231299883833",
+ "count": 35,
+ "ready": 35,
+ "results": [
+ {
+ "domain": "1800wallcoverings.com",
+ "words": 644,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "asseeninhotels.com",
+ "words": 610,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "asseeninla.com",
+ "words": 645,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "asseeninmovies.com",
+ "words": 630,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "asseeninshowrooms.com",
+ "words": 619,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "barwallpaper.com",
+ "words": 620,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "blankstocklining.com",
+ "words": 637,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "carmelwallpaper.com",
+ "words": 578,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "classawallcovering.com",
+ "words": 633,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "commercialsalesreps.com",
+ "words": 628,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "commercialwallcovering.com",
+ "words": 595,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "designermagnetics.com",
+ "words": 650,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "etciemurals.com",
+ "words": 715,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "fabricfridays.com",
+ "words": 719,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "fireratedwallcovering.com",
+ "words": 682,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "handmadewallcovering.com",
+ "words": 698,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "hospitalitysalesagency.com",
+ "words": 732,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "montereywallpaper.com",
+ "words": 673,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "naturalwalltextures.com",
+ "words": 666,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "printmurals.com",
+ "words": 702,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "restaurantfabrics.com",
+ "words": 683,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "restaurantmurals.com",
+ "words": 708,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "roomsettings.com",
+ "words": 731,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "sheltermagazines.com",
+ "words": 793,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "specifywallpaper.com",
+ "words": 782,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "thehotelwallpaper.com",
+ "words": 755,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "traditionalwhimsy.com",
+ "words": 779,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "unitedstateswallpaper.com",
+ "words": 734,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallcovering.net",
+ "words": 793,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallpaperexports.com",
+ "words": 718,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallpaperfromthe80s.com",
+ "words": 662,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallpaperny.com",
+ "words": 667,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallpaperpurchasing.com",
+ "words": 718,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wallpaperweekly.com",
+ "words": 704,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ },
+ {
+ "domain": "wc01wallcoverings.com",
+ "words": 685,
+ "passed": 12,
+ "total": 12,
+ "ready": true,
+ "readiness": 100,
+ "blockers": [],
+ "checks": {
+ "https_home_200": true,
+ "adsense_code": true,
+ "ads_txt": true,
+ "content_sufficient": true,
+ "privacy_page": true,
+ "about_page": true,
+ "contact_page": true,
+ "second_content_page": true,
+ "sitemap": true,
+ "robots": true,
+ "gtag": true,
+ "no_forsale_banner": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/status-latest.json b/data/status-latest.json
new file mode 100644
index 0000000..053e955
--- /dev/null
+++ b/data/status-latest.json
@@ -0,0 +1,185 @@
+{
+ "ts": "2026-09-09T23:28:01.164Z",
+ "source": "unavailable",
+ "count": 35,
+ "tally": {
+ "UNKNOWN": 35
+ },
+ "rows": [
+ {
+ "domain": "1800wallcoverings.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "asseeninhotels.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "asseeninla.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "asseeninmovies.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "asseeninshowrooms.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "barwallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "blankstocklining.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "carmelwallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "classawallcovering.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "commercialsalesreps.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "commercialwallcovering.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "designermagnetics.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "etciemurals.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "fabricfridays.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "fireratedwallcovering.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "handmadewallcovering.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "hospitalitysalesagency.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "montereywallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "naturalwalltextures.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "printmurals.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "restaurantfabrics.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "restaurantmurals.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "roomsettings.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "sheltermagazines.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "specifywallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "thehotelwallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "traditionalwhimsy.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "unitedstateswallpaper.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallcovering.net",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallpaperexports.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallpaperfromthe80s.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallpaperny.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallpaperpurchasing.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wallpaperweekly.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ },
+ {
+ "domain": "wc01wallcoverings.com",
+ "approval": "UNKNOWN",
+ "ads_txt": "UNKNOWN"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e0d4f90
--- /dev/null
+++ b/package.json
@@ -0,0 +1,3 @@
+{ "name": "adsense-command-post", "version": "1.0.0", "private": true,
+ "description": "AdSense readiness/approval command post for the dw-domain-fleet monetize sites (data synced from Mac2 poller).",
+ "main": "server.mjs", "scripts": { "start": "node server.mjs" } }
diff --git a/server.mjs b/server.mjs
new file mode 100644
index 0000000..5c7ac18
--- /dev/null
+++ b/server.mjs
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+// AdSense Manager dashboard — Basic-auth page showing, per monetize domain:
+// approval status (live console), readiness audit %, ads.txt state, and blockers.
+// Reads data/audit-latest.json + data/status-latest.json. Port: env PORT or 9971.
+import http from 'http';
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+import { execFile } from 'child_process';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+const SKILL = __dirname; // command post: reads ./data synced from Mac2
+const PORT = process.env.PORT || 9971;
+const USER = 'admin', PASS = 'DW2024!';
+const read = f => { try { return JSON.parse(fs.readFileSync(path.join(SKILL, 'data', f), 'utf8')); } catch { return null; } };
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c]));
+
+function page() {
+ const audit = read('audit-latest.json') || { results: [], ready: 0, count: 0, ts: '' };
+ const status = read('status-latest.json') || { rows: [], tally: {}, ts: '', source: '?' };
+ const sMap = Object.fromEntries((status.rows || []).map(r => [r.domain, r]));
+ const rows = (audit.results || []).map(a => ({ ...a, ...(sMap[a.domain] || {}) }))
+ .sort((a, b) => (a.approval === 'Ready' ? -1 : 0) - (b.approval === 'Ready' ? -1 : 0) || a.readiness - b.readiness);
+ const badge = s => {
+ const m = { 'Ready': ['#16794a', '#e6f2ea'], 'Getting ready': ['#a9761a', '#f6eeda'], 'Requires review': ['#5b6470', '#eef0f3'], 'Needs attention': ['#b0413a', '#f7e7e5'] };
+ const [c, b] = m[s] || ['#8a8f98', '#eef0f2'];
+ return `<span class="pill" style="color:${c};background:${b}">${esc(s || '—')}</span>`;
+ };
+ const tr = r => `<tr>
+ <td class="dom">${esc(r.domain)}</td>
+ <td>${badge(r.approval)}</td>
+ <td class="num ${r.ready ? 'ok' : 'warn'}">${r.readiness}%</td>
+ <td class="ads ${/(Authorized)/i.test(r.ads_txt) ? 'ok' : 'muted'}">${esc(r.ads_txt || '—')}</td>
+ <td class="blk">${r.blockers && r.blockers.length ? esc(r.blockers.join('; ')) : '<span class="ok">all checks pass</span>'}</td></tr>`;
+ const tally = status.tally || {};
+ const tile = (n, l, cls = '') => `<div class="tile ${cls}"><div class="n">${n}</div><div class="l">${l}</div></div>`;
+ return `<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>AdSense Manager</title><style>
+:root{--bg:#f6f5f2;--panel:#fff;--ink:#1b1917;--muted:#6b6560;--rule:#e6e2db;--accent:#2f7a4f;--mono:ui-monospace,Menlo,monospace}
+*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 -apple-system,'Segoe UI',Roboto,sans-serif}
+.wrap{max-width:1150px;margin:0 auto;padding:28px 22px 70px}
+h1{font-size:23px;margin:0 0 3px}.sub{color:var(--muted);font-size:13px;margin-bottom:18px}
+.tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:11px;margin-bottom:18px}
+@media(max-width:720px){.tiles{grid-template-columns:repeat(2,1fr)}}
+.tile{background:var(--panel);border:1px solid var(--rule);border-radius:9px;padding:13px 15px}
+.tile .n{font-size:25px;font-weight:600}.tile .l{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-top:6px}
+.tile.ready .n{color:#16794a}
+.bar{display:flex;gap:10px;align-items:center;margin-bottom:12px}
+button{font:inherit;background:var(--accent);color:#fff;border:0;border-radius:7px;padding:8px 15px;cursor:pointer}
+button:disabled{opacity:.5}
+table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--rule);border-radius:10px;overflow:hidden;font-size:13px}
+th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:10px 13px;border-bottom:1px solid var(--rule)}
+td{padding:9px 13px;border-bottom:1px solid #f0ede8;vertical-align:top}
+tr:last-child td{border-bottom:0}
+.dom{font-family:var(--mono);font-weight:600;white-space:nowrap}
+.pill{font-size:11px;font-weight:600;padding:2px 9px;border-radius:5px;white-space:nowrap}
+.num{font-weight:600;font-variant-numeric:tabular-nums}.num.ok{color:#16794a}.num.warn{color:#b0413a}
+.ads.ok{color:#16794a}.ads.muted{color:var(--muted)}.blk{color:var(--muted);max-width:420px}
+.ok{color:#16794a}.foot{color:var(--muted);font-size:12px;margin-top:16px;line-height:1.7}
+</style></head><body><div class="wrap">
+<h1>AdSense Manager</h1>
+<div class="sub">Publisher pub-5278231299883833 · ${(audit.results||[]).length} monetize domains · audit ${esc((audit.ts||'').slice(0,16))}Z · status ${esc(status.source)} ${esc((status.ts||'').slice(11,16))}</div>
+<div class="tiles">
+ ${tile((audit.results||[]).length, 'Sites')}
+ ${tile(audit.ready ?? 0, 'Audit 100%', 'ready')}
+ ${tile(tally['Ready'] || 0, 'Approved', 'ready')}
+ ${tile(tally['Requires review'] || 0, 'In review')}
+ ${tile((tally['Needs attention'] || 0), 'Needs attention')}
+</div>
+<div class="bar"><button onclick="rc(this)">Re-check now</button><span class="sub" id="msg"></span></div>
+<table><thead><tr><th>Domain</th><th>AdSense status</th><th>Readiness</th><th>ads.txt (Google)</th><th>Blockers</th></tr></thead>
+<tbody>${rows.map(tr).join('')}</tbody></table>
+<p class="foot"><b>Readiness</b> = our own audit vs the AdSense approval checklist (content, required pages, ads.txt, code, no for-sale banner). 100% = nothing on our side blocks approval.
+<b>AdSense status</b> = live from your console; "Requires review" is normal until Google finishes its review. ads.txt "Not found" clears once Google re-crawls (it's live).
+Re-check re-runs the audit + reads the console.</p>
+</div>
+<script>
+async function rc(b){b.disabled=true;document.getElementById('msg').textContent='re-checking…';
+ try{const r=await fetch('/api/refresh',{method:'POST'});await r.json();location.reload();}catch(e){document.getElementById('msg').textContent='error';b.disabled=false;}}
+setTimeout(()=>location.reload(),120000);
+</script></body></html>`;
+}
+
+http.createServer((req, res) => {
+ const auth = (req.headers.authorization || '').split(' ')[1] || '';
+ const [u, p] = Buffer.from(auth, 'base64').toString().split(':');
+ if (u !== USER || p !== PASS) { res.writeHead(401, { 'WWW-Authenticate': 'Basic realm="adsense"' }); return res.end('Auth required'); }
+ if (req.method === 'POST' && req.url === '/api/refresh') { res.writeHead(200,{'content-type':'application/json'}); return res.end('{"ok":true,"note":"data refreshed by the Mac2 poller every 6h"}'); }
+ res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }); res.end(page());
+}).listen(PORT, () => console.log(`AdSense Manager dashboard on http://127.0.0.1:${PORT} (admin/DW2024!)`));
(oldest)
·
back to Adsense Command Post
·
adsense command post: grid renderer + synced shots/data (TK- c2f837f →