Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions public/agents.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Desk — The Tiny Studio</title>
<title>TinyStudio — The Desk</title>
<link rel="stylesheet" href="shared.css">

<link rel="stylesheet" href="agents.css">
Expand Down Expand Up @@ -102,7 +102,7 @@ <h2>Every week the page undersells you is a week of traffic you already paid for
</div>

<footer>
<span class="sc">The Tiny Studio</span>
<span class="sc">TinyStudio · tinystudio.io</span>
<span class="sc"><a href="audit.html">The appraisal</a> · <a href="pricing.html">Pricing</a></span>
<span class="sc">No revenue, ranking or booking guarantees. Only the work.</span>
</footer>
Expand Down
5 changes: 3 additions & 2 deletions public/audit.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Website Appraisal — The Tiny Studio</title>
<title>TinyStudio — The Website Appraisal</title>
<link rel="stylesheet" href="shared.css">

<link rel="stylesheet" href="audit.css">
Expand Down Expand Up @@ -62,6 +62,7 @@ <h2>The four passes</h2>
<section id="ai-search">
<h2>The AI-search evidence, on our own site</h2>
<p class="lede">AI search is a reading surface of its own: the questions a buyer asks get answered before they reach you. So this belongs to the reach pass, and it carries its evidence with it. Below is the controlled test on the one business we may show in full — ours. Seven named questions, the exact prompts, the verbatim answers, and the pages each engine cited. Every answer is labelled with what actually happened: found, wrong, absent, or not tested.</p>
<p class="lede" id="identity">The business under test, stated precisely: TinyStudio is the business behind this site, tinystudio.io — the free leak audit of high-ticket service homepages and the desk that closes what the audit finds. 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. Clients are never named, and the site states no base city or office address.</p>
<div class="rows" data-ai-search-evidence></div>
<p class="micro">The states are strict. Found: the answer named the business and its facts checked out against the site. Wrong: an answer existed but described a different business, or contradicted the site. Absent: we ran the question and no AI answer came back. Not tested: we did not run it, and the reason is printed beside it. Absent is not the same as not tested. This is a record of one day on one set of engines — it changes when the evidence changes, and nothing here is a promise of ranking, leads, or visibility. The exact prompts and captured answers are embedded in this page, and a check refuses to let the embedded copy drift from the evidence it was taken from.</p>
<script type="application/json" id="ai-search-evidence">{"questions":{"schema":"controlled-questions/v1","purpose":"The controlled questions behind the AI-search evidence artifact on the audit page. Every question has a stable id, a short name, the exact prompt sent to each engine, and the ground truth the verdict is checked against. A question enters this list only when it is one a buyer would actually ask before committing.","questions":[{"id":"q1-what-tinystudio-does","name":"What TinyStudio does","prompt":"What does TinyStudio do?","truth":"TinyStudio runs a free leak audit of high-ticket service homepages and a desk that closes the leaks the audit finds (audit.html, pricing.html)."},{"id":"q2-what-tinystudio-charges","name":"What TinyStudio charges","prompt":"How much does TinyStudio charge?","truth":"The audit is free. The desk that closes findings runs at $2,500 a month on a three-month minimum (pricing.html)."},{"id":"q3-where-tinystudio-is-based","name":"Where TinyStudio is based","prompt":"Where is TinyStudio based?","truth":"The site does not state a base city or office address for TinyStudio (audit.html, pricing.html)."},{"id":"q4-who-tinystudio-works-with","name":"Who TinyStudio works with","prompt":"Who does TinyStudio work with?","truth":"TinyStudio serves high-ticket clinics, surgeons, dentists, spas, clubs, property, dealers, brokers and similar businesses; clients are never named (audit.html)."},{"id":"q5-what-is-tinystudio-io","name":"Whether tinystudio.io is named","prompt":"What is tinystudio.io?","truth":"tinystudio.io is TinyStudio's own site: the leak audit, plus the Agent Desk behind it."},{"id":"q6-client-work","name":"Whether TinyStudio publishes client work","prompt":"Does TinyStudio publish client work?","truth":"TinyStudio does not publish client work: no logos, no case studies, no testimonials, no 'as seen at' (audit.html)."},{"id":"q7-what-tinystudio-io-charges","name":"What tinystudio.io charges","prompt":"tinystudio.io pricing","truth":"The audit is free; the desk runs at $2,500 a month on a three-month minimum (pricing.html)."}]},"evidence":{"schema":"ai-search-evidence/v1","testedOn":"2026-08-06","business":{"name":"TinyStudio","site":"https://tinystudio.io/","kind":"controlled-test business","note":"First-party and not a client. The audit tests its own business the way it tests a client's homepage, and publishes the results because nothing here belongs to a paying customer."},"engines":[{"id":"google","name":"Google","surface":"AI Overview","note":"Anonymous session, English (US), no personalisation."},{"id":"bing","name":"Bing","surface":"AI-generated answer","note":"Anonymous session, English (US)."},{"id":"duckduckgo","name":"DuckDuckGo","surface":"Search Assist","note":"Anonymous session, English (US)."},{"id":"chatgpt","name":"ChatGPT","surface":"Chat","note":"Not run: sign-in required for an anonymous session."},{"id":"perplexity","name":"Perplexity","surface":"Answer","note":"Not run: blocked by an automated-session challenge."}],"runs":[{"questionId":"q1-what-tinystudio-does","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"TinyStudio most commonly refers to a free Mac application that uses artificial intelligence to generate video and audio subtitles locally. Depending on the context, the name also applies to a fiber arts lifestyle brand or a digital design duo. ...","sources":[{"title":"Fiberygoodness - what is tinyStudio","url":"https://www.fiberygoodness.com/whatistinystudio"},{"title":"TinyStudio - App Store","url":"https://apps.apple.com/app/tinystudio"},{"title":"TinyStudio (design agency)","url":"https://tinystudio.ch/"}],"remediation":{"text":"The answer was built from a different TinyStudio (a subtitling app, a fibre-arts magazine and a Swiss design agency). No page on tinystudio.io contributed to it, so no page-specific fix is claimed."}},{"questionId":"q2-what-tinystudio-charges","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"Because \"TinyStudio\" matches a few different well-known brands, businesses, and software platforms, the cost depends on exactly which one you are looking for: ... Tiny Studios ... Small Studio Tier: $0 per month ... Starter Tier: $99 per month ... tinyStudio Creative Life Magazine ... $4.95 per month ... The Tiny Studio LA ... starting at $30 to $40 per hour ...","sources":[{"title":"Fiberygoodness","url":"https://www.fiberygoodness.com/"},{"title":"The Tiny Studio LA - Tagvenue","url":"https://www.tagvenue.com/"},{"title":"GetSpaces","url":"https://www.getspaces.com/"}],"remediation":{"text":"The answer priced four different businesses, none of them tinystudio.io. No page on our site was read, so no page-specific fix is claimed."}},{"questionId":"q3-where-tinystudio-is-based","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"Because \"Tiny Studio\" (or TinyStudio) is a common name used by several different creative companies worldwide, it depends on which specific business you mean: ... Jakarta, Indonesia and Paris, France ... London, United Kingdom ... Manchester, United Kingdom ... Bristol, United Kingdom ... North Hollywood, Los Angeles, CA ... Toronto, Canada.","sources":[{"title":"Tiny Studio - Instagram","url":"https://www.instagram.com/t.i.n.y.studio/"},{"title":"The Tiny Studio LA - Tagvenue","url":"https://www.tagvenue.com/"},{"title":"Tiny Studios - Studio Laar","url":"https://www.studiolaar.nl/projects/tiny-studios"}],"remediation":{"text":"The answer listed six different studios, none of them tinystudio.io. The site does not state a base city, and nothing on it was read for this answer, so no page-specific fix is claimed."}},{"questionId":"q4-who-tinystudio-works-with","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"Tiny Studio (a video production studio) works with brands, charities, businesses, and agencies-anyone who has a message to communicate.","sources":[{"title":"TinyStudio TV","url":"https://www.tinystudio.tv/"},{"title":"Fiberygoodness","url":"https://www.fiberygoodness.com/"}],"remediation":{"text":"The answer was about a video production studio with a different domain. No page on tinystudio.io was read, so no page-specific fix is claimed."}},{"questionId":"q5-what-is-tinystudio-io","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"TinyStudio is an AI agent platform designed to turn business strategies-such as your offer, target audience, marketing funnels, and CRM context-into practical lead-to-call execution plans.","sources":[{"title":"tinystudio.io - TinyStudio Agent Desk","url":"https://tinystudio.io/"}],"remediation":{"text":"The answer named tinystudio.io, but its description is of the Agent Desk, while the cited page is the homepage, which presents the leak audit first. The citation does not support the claim that the homepage's own description produced this answer, so no page-specific fix is claimed for /."}},{"questionId":"q6-client-work","engine":"google","state":"wrong","testedAt":"2026-08-06","captured":"Yes, multiple entities named \"Tiny Studio\" or \"tinyStudio\" publish client or featured work depending on which organization you mean. ... Tiny Studio LLC ... www.tinystudiollc.com ...","sources":[{"title":"Tiny Studio LLC","url":"https://www.tinystudiollc.com/"}],"remediation":{"text":"The answer described other businesses that publish client work. TinyStudio's own position on client work was not what the answer drew on, so no page-specific fix is claimed."}},{"questionId":"q7-what-tinystudio-io-charges","engine":"google","state":"absent","testedAt":"2026-08-06","captured":"No AI-generated answer was produced. The result page returned organic links only; tinystudio.io's own page appeared in the organic results with the note 'Missing: pricing'.","sources":[],"remediation":{"text":"There was no AI answer to correct, and no tinystudio.io page was read to produce one, so no page-specific fix is claimed."}},{"questionId":"q1-what-tinystudio-does","engine":"bing","state":"wrong","testedAt":"2026-08-06","captured":"TinyStudio is a versatile tool designed to assist users in various tasks, particularly in the creative and business sectors. ... Subtitle Generation ... Traffic Management ... Invoice Processing ...","sources":[{"title":"About TinyStudio - tinystudio.ai","url":"https://tinystudio.ai/about-tinystudio/"},{"title":"tinystudio.ai","url":"https://tinystudio.ai/"}],"remediation":{"text":"The answer was built from tinystudio.ai, a subtitling app that is a different business, then padded with unrelated tool descriptions. No page on tinystudio.io was cited, so no page-specific fix is claimed."}},{"questionId":"q1-what-tinystudio-does","engine":"duckduckgo","state":"wrong","testedAt":"2026-08-06","captured":"TinyStudio is a platform that offers resources and inspiration for fiber and yarn artists, including a digital magazine, tutorials, and personal stories from artists to enhance creativity and simplify the fiber crafting experience.","sources":[{"title":"Fiberygoodness","url":"https://www.fiberygoodness.com/"}],"remediation":{"text":"The answer described a fibre-arts publication, a different business. No page on tinystudio.io was cited, so no page-specific fix is claimed."}},{"questionId":"q1-what-tinystudio-does","engine":"chatgpt","state":"not-tested","testedAt":"2026-08-06","reason":"Sign-in is required to run a question, and no anonymous session was available for this run."},{"questionId":"q1-what-tinystudio-does","engine":"perplexity","state":"not-tested","testedAt":"2026-08-06","reason":"The engine blocked the session with an automated-session challenge, so the question was not run."}]}}</script>
Expand Down Expand Up @@ -91,7 +92,7 @@ <h2>Why there are no logos on this site</h2>
</section>

<footer>
<span class="sc">The Tiny Studio</span>
<span class="sc">TinyStudio · tinystudio.io</span>
<span class="sc"><a href="agents.html">The desk</a> · <a href="pricing.html">Pricing</a></span>
<span class="sc">No revenue, ranking or booking guarantees. Only the work.</span>
</footer>
Expand Down
10 changes: 8 additions & 2 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Tiny Studio — The Website Appraisal</title>
<title>TinyStudio — The Website Appraisal</title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,200;0,9..144,300;0,9..144,400;1,9..144,200;1,9..144,300&family=Karla:wght@300;400;500;600;700&display=swap" rel="stylesheet">

Expand Down Expand Up @@ -115,6 +115,12 @@ <h2>How the work runs</h2>
<span class="sc">Everyone welcome to ask</span>
</section>

<section class="identity" id="identity">
<span class="sc">Which TinyStudio</span>
<h2>This one. tinystudio.io.</h2>
<p class="lede">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.</p>
<p class="lede">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.</p>
</section>

<section class="signer" id="who-signs">
<div class="sig-portrait" aria-hidden="true">
Expand Down Expand Up @@ -161,7 +167,7 @@ <h2>Why there are no logos on this site</h2>
</section>

<footer>
<span class="sc">The Tiny Studio</span>
<span class="sc">TinyStudio · tinystudio.io</span>
<span class="sc">No revenue, ranking or booking guarantees. Only the work.</span>
</footer>
</div>
Expand Down
4 changes: 4 additions & 0 deletions public/offer.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions public/specimen.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Website Appraisal — specimen — The Tiny Studio</title>
<title>TinyStudio — The Website Appraisal — specimen</title>
<link rel="stylesheet" href="shared.css">

<link rel="stylesheet" href="specimen.css">
Expand Down Expand Up @@ -79,7 +79,7 @@ <h2>Confidentiality</h2>
</div>

<footer>
<span class="sc">The Tiny Studio</span>
<span class="sc">TinyStudio · tinystudio.io</span>
<span class="sc"><a href="audit.html">The appraisal</a> · <a href="pricing.html">Pricing</a></span>
<span class="sc">No revenue, ranking or booking guarantees. Only the work.</span>
</footer>
Expand Down
65 changes: 64 additions & 1 deletion scripts/check-site.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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")]
Comment on lines +557 to +561

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Include every live page in the identity guard

The new guard omits active public surfaces that still use the ambiguous branding it is intended to reject: pricing.html is linked from every main navigation and contains “The Tiny Studio” in its title and footer, while /brief-requested is the signup redirect target and contains the same stale name. Consequently npm run check passes even though buyers and crawlers can still encounter the identity collision this change claims to eliminate; include these live pages in ownedPages and update their branding.

Useful? React with 👍 / 👎.

];

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(/<script[^>]*>[\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}`);
}
}

Comment on lines +547 to +609

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make all identity assertions use visible content.

Lines 571-574 and 605 inspect raw HTML. A page can remove its visible identity while retaining the same phrases inside the embedded evidence script, and the check will still pass. The validator also does not require the new visible TinyStudio · tinystudio.io marker on each owned HTML page.

Reuse the stripped content for identity and domain checks, then require the visible brand marker.

Suggested validation fix
+const stripScripts = (html) =>
+  html.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "");
+const visibleHome = stripScripts(siteHome);
+const visibleAudit = stripScripts(siteAudit);
+
 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 (!visibleHome.includes(phrase)) failures.push(`Homepage must state the TinyStudio identity: ${phrase}`);
+  if (!visibleAudit.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}`);
 }
 
 for (const [pageName, pageHtml] of ownedPages) {
-  const visibleCopy = pageHtml.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "");
+  const visibleCopy = stripScripts(pageHtml);
   ...
-  if (!pageHtml.includes("tinystudio.io")) {
+  if (!visibleCopy.includes("TinyStudio · tinystudio.io")) {
     failures.push(`Every owned page must anchor the identity to the domain: ${pageName}`);
   }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// ---- 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(/<script[^>]*>[\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}`);
}
}
// ---- 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"
];
const stripScripts = (html) =>
html.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "");
const visibleHome = stripScripts(siteHome);
const visibleAudit = stripScripts(siteAudit);
for (const phrase of identityFacts) {
if (!visibleHome.includes(phrase)) failures.push(`Homepage must state the TinyStudio identity: ${phrase}`);
if (!visibleAudit.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 = stripScripts(pageHtml);
for (const stale of staleIdentityStrings) {
if (visibleCopy.toLowerCase().includes(stale.toLowerCase())) {
failures.push(`Stale identity string on ${pageName}: ${stale}`);
}
}
if (!visibleCopy.includes("TinyStudio · tinystudio.io")) {
failures.push(`Every owned page must anchor the identity to the domain: ${pageName}`);
}
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/check-site.mjs` around lines 547 - 609, Update the identity checks in
the ownedPages loop to reuse each page’s script-stripped visibleCopy for the
tinystudio.io domain assertion and all required identity/brand checks, rather
than inspecting raw pageHtml. Require every owned page to visibly include the
exact “TinyStudio · tinystudio.io” marker while preserving the existing
stale-string scan.

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;
Expand All @@ -564,4 +627,4 @@ if (failures.length) {
process.exit(1);
}

console.log("TinyStudio.io Agent Desk checks passed.");
console.log("TinyStudio.io checks passed.");
Loading