Skip to content

fix(public): distinguish TinyStudio from same-name entities and lock identity - #17

Merged
nish3451 merged 1 commit into
mainfrom
fix/name-collision-entity-offer
Aug 7, 2026
Merged

fix(public): distinguish TinyStudio from same-name entities and lock identity#17
nish3451 merged 1 commit into
mainfrom
fix/name-collision-entity-offer

Conversation

@nish3451

@nish3451 nish3451 commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

intended-outcome: buyers and AI readers can distinguish TinyStudio at tinystudio.io from unrelated same-name entities, with deterministic guards preventing identity drift.
verify: npm run check; npm test; sgscan; local before/after AI-search improvement remains unverified until a fresh live panel is run.

Summary by CodeRabbit

  • Content Updates

    • Standardized branding across the site to “TinyStudio · tinystudio.io.”
    • Updated page titles for clearer page identification.
    • Added business identity details, contact information, service description, and clarification about unrelated businesses.
    • Added transparency regarding client confidentiality and the absence of a stated physical location.
  • Quality Assurance

    • Expanded site checks to verify required identity and branding information across owned pages.

…identity

Add a deterministic identity clarification to the homepage, audit page,
and offer.md: TinyStudio is the business behind tinystudio.io, the free
leak audit of high-ticket service homepages plus the desk that closes
what it finds; other businesses share the name and none are this one.
Rebrand visible copy from "The Tiny Studio" to "TinyStudio · tinystudio.io"
and extend scripts/check-site.mjs with guards that fail the build if the
identity facts or the stale framing strings ("The Tiny Studio", "Tiny
Studio", "self-serve", "Pipeline Brief", "Agent Desk") drift back into
visible copy. The embedded AI-search evidence bundle stays a verbatim
record; no live search improvement is claimed.

Co-Authored-By: Claude <noreply@anthropic.com>

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The public pages now use the TinyStudio identity and tinystudio.io branding. The site-check script validates identity content, domain references, legacy product wording, and the updated check result.

Changes

TinyStudio identity alignment

Layer / File(s) Summary
Public identity content
public/agents.html, public/audit.html, public/index.html, public/offer.md, public/specimen.html
Page titles and footer labels now use TinyStudio branding. Identity sections define the business, domain, services, contact details, location disclosure, and unrelated namesakes.
Identity validation
scripts/check-site.mjs
Site checks now require identity facts and sections, domain references, legacy product demotion wording, and rejection of stale visible copy. The success message is now TinyStudio.io checks passed.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: distinguishing TinyStudio from same-name entities and enforcing consistent identity.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/name-collision-entity-offer

Comment @coderabbitai help to get the list of available commands.

@nish3451
nish3451 merged commit dd2d487 into main Aug 7, 2026
2 of 3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49750a0289

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/check-site.mjs
Comment on lines +557 to +561
const ownedPages = [
["homepage", siteHome],
["audit page", siteAudit],
["desk page", read("public/agents.html")],
["specimen page", read("public/specimen.html")]

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 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with 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.

Inline comments:
In `@scripts/check-site.mjs`:
- Around line 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.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 753e058e-fc1b-451e-97e1-a2f8b6885d4f

📥 Commits

Reviewing files that changed from the base of the PR and between 4c30372 and 49750a0.

📒 Files selected for processing (6)
  • public/agents.html
  • public/audit.html
  • public/index.html
  • public/offer.md
  • public/specimen.html
  • scripts/check-site.mjs

Comment thread scripts/check-site.mjs
Comment on lines +547 to +609
// ---- 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}`);
}
}

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant