PPT AI publishes 3,926 presentation templates, each with a page of its own at ppt.sophoninc.com. A page whose job is to show a design still has to be readable by someone who cannot see the design yet, or who is deciding between two of them. That means at least: what the deck is for, what is on each slide, how many slides and at what size, what can be changed, and how to start. This post is about finding out how far our pages were from that, and what we measured before adding anything.
What a template page renders today
Four template pages were fetched and counted on 16 September 2026. Counting method: remove script and style elements, remove the remaining tags, unescape HTML entities, take word tokens matching [A-Za-z0-9][A-Za-z0-9’'&-]*, and lowercase them before counting distinct ones. The tokenizer is stated because the distinct counts move by a few words depending on it.
| Page | Running words | Distinct words | Distinct words outside the shared chrome |
|---|---|---|---|
| brand-agency-book-editorial-dark | 148 | 91 | 31 |
| medical-blood-test-clean-corporate | 142 | 88 | 28 |
| resume-illustrator-professional-blue | 147 | 90 | 30 |
| poster-bold-text-modern-gradient | 134 | 79 | 19 |
“Shared chrome” is the 60 distinct words common to all four pages: the navigation, the footer, the breadcrumb and the two calls to action. Strip those and between 19 and 31 distinct words on each page are about that template. The rest of the page is the same on 3,926 pages.
For context, over the three months to 16 September 2026 those pages drew 484 impressions and 7 clicks at an average position of 20.2, across 187 distinct pages and 12 distinct queries. That figure comes from Google Search Console for sc-domain:sophoninc.com, filtered to ppt.sophoninc.com/templates/. Search Console is visible only to the property's owners; the property, the filter and the date range are given so that anyone with access can reproduce it, which is as checkable as that source gets.
The question the audit had to answer
Each template's slides carry text: headings, labels, body copy written to fill the design. It is served publicly at /api/v2/templates/<slug>/slides/<n>, and it is the obvious thing to put on the page. Before doing that, one objection has to be answered: 3,926 pages of generated deck copy could be 3,926 near-identical pages, which is worse than 3,926 thin ones.
So: how much text does a template share with the template it most resembles?
Why a uniform sample gives the wrong answer
The naive method is to sample templates at random and compare pairs. That method cannot find duplication in this corpus, and it is worth being exact about why.
The library is organised by category, by recipe and by style family. A random pair drawn from 3,926 items is overwhelmingly a pair from different categories about different subjects. Those pairs share almost nothing no matter how duplicative the corpus is. We measured it: 392 random cross-family pairs have a median 5-gram containment of 0.00% and a maximum of 0.3%. A uniform sample returns “the corpus is unique” as an artefact of the sampling, not as a finding.
The pairs that would reveal duplication are the nearest neighbours, and they are a vanishing fraction of all pairs. So the sample was weighted toward them. Templates were grouped by category, recipe slug and style family, and 33 groups were drawn across four kinds:
- numbered twins, where the slugs differ only by a trailing
-2or-3(8 groups) - same recipe and same style family (4 groups)
- same style family, different recipe (13 groups)
- coverage groups, one per category, so no category is unmeasured (8 groups)
Slide text was then fetched for every member of every group: 232 templates, 1,034 slides, 0 fetch errors, on 16 September 2026. That is 5.9% of the corpus, chosen to be the hardest 5.9%.
The decisive pass
Weighting the sample is still not enough on its own, because a template's true nearest neighbour might be one that was not fetched, which would understate the overlap. So a second pass restricted the comparison to clusters where every member had been fetched: 46 complete clusters, 117 templates. Inside those, a template's nearest neighbour in the whole 3,926-template corpus is guaranteed to be in the measured set.
The metric is 5-gram containment: the fraction of a template's distinct five-word sequences that also occur in its nearest peer. Containment rather than Jaccard because it is asymmetric — a short template wholly contained in a long one should read as fully duplicated, and Jaccard would report it as partly unique.
Results for those 117 templates, against the true nearest corpus neighbour:
| Measure | Value |
|---|---|
| Median 5-gram containment | 0.00% |
| Mean | 0.50% |
| 95th percentile | 3.46% |
| Maximum | 8.82% |
| Templates above 10% | 0 |
| 3-gram containment, median / maximum | 0.31% / 13.89% |
The 3-gram pass is there to catch copy that was reworded rather than reused; it moves the numbers but not the conclusion. The worst pair in the corpus is poster-quote-typography-modern-gradient against poster-bold-text-modern-gradient, at 8.82%.
Across all 232 templates: of 3,448 distinct sentences of six words or more, 2 appear in more than one template — “the results relate only to the items tested” and “no other graphic elements should intrude into this zone”. Per slide, of 992 slides carrying 20 words or more, the median containment with the nearest slide in any other template is 0.0%; 8 are above 20% and none is above 50%. Topical similarity measured by bag-of-words cosine, which ignores wording, is higher, as it should be for two resume templates: median 12.7% against the nearest same-family peer, maximum 35.3%.
The honest limit: this is 232 of 3,926 templates and 117 in the guaranteed-nearest set. It is evidence about the hardest part of the corpus, not a proof about all of it.
What we decided
The audit removes the duplication objection to publishing slide text. We did not publish the slide bodies. We published the slide titles, which already existed in the template record and were being fetched and discarded.
Checked across all 3,926 templates before publishing them: 14,969 titles, none empty, none a bare “Slide N” or “Page N”, and slide_titles.length equal to slide_count on every one. Two limits were recorded rather than smoothed over: 156 titles (1.0%) end in “… Page N”, and on 77 templates (2%) every title does. 1,321 templates (34%) have a single slide and get no list at all.
The change therefore reaches 2,605 pages and adds a median of 15 words to each, a mean of 10.4 words per page across the corpus. That is real and it is small. It does not by itself take a page out of thin-content territory, and the more useful part may be that the titles are clickable: jumping to slide 7 previously required pressing Next six times.
The same branch links the templates nothing linked to. The browse surfaces pinned aspect_ratio to 16:9, which is about 45% of the library, so the rest appeared on no hub page and in no related block: /templates?category=document and ?category=poster returned a “coming soon” page with zero template links. A page with no internal link into it owes a reader nothing, because no reader arrives.
Not deployed, and one question still open
None of this is live. It is pull request 10 on Sophon-LLC/ppt-ai, opened 15 September 2026 and still open on 16 September 2026, three commits, verified with a type check, a lint run and a production build served against the live datastore. Until it merges, the pages are as measured at the top of this post.
The open question is the one the audit does not answer. The measured set carries a median of 288 words of body text per template, against the 19 to 31 template-specific words a page renders today. The audit says that text is not duplicative. It does not say that text written to fill a layout reads as content to a person rather than as filler, and nobody has measured that. Publishing 3,926 pages of it on the strength of a duplication result alone would be answering a question we did not ask.