Skip to content
This repository was archived by the owner on Oct 12, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
2c2e628
fix(public): disambiguate Tiny Studio identity across every public pa…
nish3451 Aug 10, 2026
b2521ad
test(public): guard brand disambiguation on every page and llms.txt
nish3451 Aug 10, 2026
ef89d7e
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 11, 2026
ea8f792
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 11, 2026
16b58a0
Merge remote-tracking branch 'origin/main' into tmp-merge-59
nish3451 Aug 11, 2026
d8fbc06
Merge remote-tracking branch 'origin/main' into tmp2-59
nish3451 Aug 11, 2026
436c639
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 12, 2026
7713627
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
7eb0532
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
155c9e1
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
0b2e6d4
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
53e6829
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
c7f9b09
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
5cfa4d5
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 13, 2026
1daf679
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 14, 2026
3a022b0
Merge branch 'main' into fix/public-brand-disambiguation-ai-surface
nish3451 Aug 14, 2026
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: 3 additions & 1 deletion public/contact/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "ContactPage",
Expand Down
4 changes: 3 additions & 1 deletion public/drishti/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/drishti/privacy/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/drishti/support/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "ContactPage",
Expand Down
2 changes: 1 addition & 1 deletion public/llms.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tiny Studio

Tiny Studio is a small product company behind Promptly, Drishti, and 0509.
Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with any other app or studio that uses the name Tiny Studio.

## Public pages

Expand Down
4 changes: 3 additions & 1 deletion public/privacy-choices/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/privacy/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/promptly/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/promptly/privacy/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
4 changes: 3 additions & 1 deletion public/promptly/support/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "ContactPage",
Expand Down
2 changes: 2 additions & 0 deletions public/support/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio.",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
Expand Down
4 changes: 3 additions & 1 deletion public/terms/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
"@type": "Organization",
"@id": "https://tinystudio.in/#organization",
"name": "Tiny Studio",
"url": "https://tinystudio.in/"
"alternateName": "tinystudio.in",
"url": "https://tinystudio.in/",
"description": "Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with other apps or studios that use the name Tiny Studio."
},
{
"@type": "WebPage",
Expand Down
2 changes: 1 addition & 1 deletion scripts/prepare-static-site-bundle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const supportSchema = {

const llmsTxt = `# Tiny Studio

Tiny Studio is a small product company behind Promptly, Drishti, and 0509.
Tiny Studio is the independent product company at tinystudio.in behind Promptly, Drishti, and 0509. It is not affiliated with any other app or studio that uses the name Tiny Studio.

## Public pages

Expand Down
56 changes: 44 additions & 12 deletions scripts/test-public-brand-disambiguation.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { readFileSync } from "node:fs"
import { readFileSync, readdirSync } from "node:fs"
import { fileURLToPath } from "node:url"
import { dirname, join } from "node:path"

Expand Down Expand Up @@ -45,6 +45,16 @@ const bodyText = (html) =>
.replace(/\s+/g, " ")
.trim()

// Every deployed HTML page (index.html under public/, mirroring the
// structured-data and link-target tests).
const publicHtmlFiles = (dir = "public") =>
readdirSync(join(ROOT, dir), { withFileTypes: true }).flatMap((entry) => {
const path = join(dir, entry.name)
if (entry.isDirectory()) return publicHtmlFiles(path)
if (entry.isFile() && entry.name === "index.html") return [path]
return []
})

console.log("test-public-brand-disambiguation: Tiny Studio entity stays distinct from unrelated tiny studio brands")

console.log("A. the homepage says plainly what Tiny Studio is and is not")
Expand All @@ -58,32 +68,54 @@ ok(
"homepage copy states Tiny Studio is not affiliated with other apps or studios using the name"
)

console.log("B. the homepage Organization entity carries distinguishing identity")
const org = orgNode(HOME)
ok(org !== null, "homepage JSON-LD carries the Tiny Studio organization node")
if (org) {
ok(org.name === "Tiny Studio", "organization name is Tiny Studio")
ok(org.alternateName === "tinystudio.in", "organization alternateName is tinystudio.in")
ok(org.url === "https://tinystudio.in/", "organization url is the tinystudio.in home")
console.log("B. every public page's Organization entity carries distinguishing identity")
for (const file of publicHtmlFiles()) {
const html = read(file)
const org = orgNode(html)
ok(org !== null, `${file} carries the Tiny Studio organization node`)
if (!org) continue
ok(org.name === "Tiny Studio", `${file} organization name is Tiny Studio`)
ok(org.alternateName === "tinystudio.in", `${file} organization alternateName is tinystudio.in`)
ok(org.url === "https://tinystudio.in/", `${file} organization url is the tinystudio.in home`)
ok(
typeof org.description === "string" && org.description.length > 0,
"organization carries a description"
`${file} organization carries a description`
)
ok(
org.description &&
org.description.includes("tinystudio.in") &&
org.description.includes("Promptly") &&
org.description.includes("Drishti") &&
org.description.includes("0509"),
"organization description names the unique products and home so the entity cannot be mistaken for another tiny studio"
`${file} organization description names the unique products and home so the entity cannot be mistaken for another tiny studio`
)
ok(
org.description && org.description.includes("not affiliated"),
"organization description states it is not affiliated with other tiny studio brands"
`${file} organization description states it is not affiliated with other tiny studio brands`
)
}

console.log("C. npm test/ci wiring")
console.log("C. the AI-facing llms.txt carries the same identity statement")
const llmsTxt = read("public/llms.txt")
ok(
llmsTxt.includes("independent product company at tinystudio.in"),
"llms.txt identifies Tiny Studio as the independent product company at tinystudio.in"
)
ok(
llmsTxt.includes("not affiliated with any other app or studio that uses the name Tiny Studio"),
"llms.txt states Tiny Studio is not affiliated with other apps or studios using the name"
)
const bundle = read("scripts/prepare-static-site-bundle.mjs")
ok(
bundle.includes("independent product company at tinystudio.in"),
"the llms.txt generator template keeps the independent-company identity"
)
ok(
bundle.includes("not affiliated with any other app or studio that uses the name Tiny Studio"),
"the llms.txt generator template keeps the non-affiliation statement"
)

console.log("D. npm test/ci wiring")
const pkg = JSON.parse(read("package.json"))
ok(
pkg.scripts.test.includes("test-public-brand-disambiguation.mjs"),
Expand Down