diff --git a/public/agents.html b/public/agents.html index 02e2fc42..c8087f89 100644 --- a/public/agents.html +++ b/public/agents.html @@ -3,7 +3,7 @@ -The Desk — The Tiny Studio +TinyStudio — The Desk @@ -102,7 +102,7 @@

Every week the page undersells you is a week of traffic you already paid for diff --git a/public/audit.html b/public/audit.html index 9e071d72..70c667e6 100644 --- a/public/audit.html +++ b/public/audit.html @@ -3,7 +3,7 @@ -The Website Appraisal — The Tiny Studio +TinyStudio — The Website Appraisal @@ -62,6 +62,7 @@

The four passes

diff --git a/public/index.html b/public/index.html index 651a88bf..c8c87792 100644 --- a/public/index.html +++ b/public/index.html @@ -3,7 +3,7 @@ -The Tiny Studio — The Website Appraisal +TinyStudio — The Website Appraisal @@ -115,6 +115,12 @@

How the work runs

Everyone welcome to ask +
+ Which TinyStudio +

This one. tinystudio.io.

+

TinyStudio is the business behind this site: the free leak audit of high-ticket service homepages, and the desk that closes what the audit finds. Run by one person, Nish, who signs every audit. Reachable at hello@tinystudio.io.

+

The name is shared with other businesses we are not: a Mac subtitle app, a fibre-arts magazine, a design agency, a video production studio, a Los Angeles venue, an unrelated studio LLC. None of them are this TinyStudio, and this TinyStudio is none of them. The site states no base city or office address.

+
diff --git a/public/offer.md b/public/offer.md index c5f4e341..1359ce45 100644 --- a/public/offer.md +++ b/public/offer.md @@ -2,6 +2,10 @@ TinyStudio sells one human-reviewed managed service: The Website Correction. It is a managed service with human review, not autonomous software. +## Identity + +TinyStudio is the business behind tinystudio.io: the free leak audit of high-ticket service homepages and the desk that closes what the audit finds, run by Nish, who signs every audit. Other businesses share the name — a Mac subtitle app, a fibre-arts magazine, a design agency, a video production studio, a Los Angeles venue, an unrelated studio LLC. None of them are this TinyStudio. The site states no base city or office address. Contact: hello@tinystudio.io. + ## Buyer Founder-led Managed IT, MSP, and cybersecurity companies with a live site and a high-value offer. diff --git a/public/specimen.html b/public/specimen.html index ec98154e..6c7bda20 100644 --- a/public/specimen.html +++ b/public/specimen.html @@ -3,7 +3,7 @@ -The Website Appraisal — specimen — The Tiny Studio +TinyStudio — The Website Appraisal — specimen @@ -79,7 +79,7 @@

Confidentiality

diff --git a/scripts/check-site.mjs b/scripts/check-site.mjs index de163738..933730c5 100644 --- a/scripts/check-site.mjs +++ b/scripts/check-site.mjs @@ -544,6 +544,69 @@ if (aiQuestions && aiEvidence) { } } +// ---- TinyStudio identity clarification ------------------------------------- +// One precise identity must run through every owned public surface: TinyStudio +// is the business behind tinystudio.io — the free leak audit of high-ticket +// service homepages plus the desk that closes what it finds. The clarification +// must be present on the homepage, the audit page, and in offer.md, and the +// ambiguous or retired framings ("The Tiny Studio", the spaced name form, and +// the self-serve Agent Desk product names) must not reappear in visible copy. +// The embedded AI-search evidence bundle is a verbatim record of captured +// engine answers that legitimately quotes other businesses' names, so script +// blocks are stripped before the stale-string scan. +const ownedPages = [ + ["homepage", siteHome], + ["audit page", siteAudit], + ["desk page", read("public/agents.html")], + ["specimen page", read("public/specimen.html")] +]; + +const identityFacts = [ + "tinystudio.io", + "Mac subtitle app", + "fibre-arts magazine", + "states no base city or office address" +]; + +for (const phrase of identityFacts) { + if (!siteHome.includes(phrase)) failures.push(`Homepage must state the TinyStudio identity: ${phrase}`); + if (!siteAudit.includes(phrase)) failures.push(`Audit page must state the TinyStudio identity: ${phrase}`); + if (!offer.includes(phrase)) failures.push(`offer.md must state the TinyStudio identity: ${phrase}`); +} + +if (!siteHome.includes('id="identity"')) { + failures.push("Homepage must carry the identity clarification (id=\"identity\")."); +} +if (!siteAudit.includes('id="identity"')) { + failures.push("Audit page must carry the identity clarification (id=\"identity\")."); +} +if (!offer.includes("## Identity")) { + failures.push("offer.md must carry the machine-readable Identity section."); +} +if (!offer.includes("is not the current offer")) { + failures.push("offer.md must keep the legacy Agent Desk demotion statement."); +} + +const staleIdentityStrings = [ + "The Tiny Studio", // collides with "The Tiny Studio LA", an unrelated venue + "Tiny Studio", // the spaced name form is never used by this business + "self-serve", // the retired Agent Desk framing + "Pipeline Brief", // the retired Agent Desk deliverable + "Agent Desk" // the retired product name +]; + +for (const [pageName, pageHtml] of ownedPages) { + const visibleCopy = pageHtml.replace(/]*>[\s\S]*?<\/script>/gi, ""); + for (const stale of staleIdentityStrings) { + if (visibleCopy.toLowerCase().includes(stale.toLowerCase())) { + failures.push(`Stale identity string on ${pageName}: ${stale}`); + } + } + if (!pageHtml.includes("tinystudio.io")) { + failures.push(`Every owned page must anchor the identity to the domain: ${pageName}`); + } +} + for (const migration of ["migrations/0002_agent_runs.sql", "migrations/0003_agent_usage_limits.sql"]) { if (!existsSync(new URL(`../${migration}`, import.meta.url))) { failures.push(`Missing migration: ${migration}`); continue; @@ -564,4 +627,4 @@ if (failures.length) { process.exit(1); } -console.log("TinyStudio.io Agent Desk checks passed."); +console.log("TinyStudio.io checks passed.");