Developers
The PTR API and SDK are a product, arranged under an enterprise agreement, so the way in is a conversation rather than a signup form.
The moment
A product lead at a health fund ships a member portal her team built. She wants a twin that answers from the fund’s own policies inside that portal, opened from her own button, with every conversation recorded against the page it started on. What she does not want is a chatbot bolted on beside it.
The agreement
Access to the PTR API and SDK is granted under an enterprise agreement, arranged through the contact form. Where a build touches a real person’s likeness or voice, consent and oversight are settled in the agreement, the same position the digital twins page takes. Hosting for the application and its database is recorded as deployed in an Australian region in the Subprocessors and Data Locations register; the governance page is the reviewer-facing version.
Request API and SDK accessGovernance and data locations
Building on PTR for your organisation?
Open on this site
The twin widget and the machine-readable copies of the site are served to anyone. They are the fastest way to see the shape of the thing before a conversation about the rest.
A script tag and an element. Set twin to the twin’s name and source to a short label for your page, so each conversation records where it was opened.
</body> tag.<ptr-digital-twin> element where the twin should open from.twin to the twin’s name and source to a short label for your page, so each conversation records where it was opened.<script src="https://ptr-digital-twin-widget.web.app/ptr-digital-twin.js" defer></script>
<ptr-digital-twin twin="simon" source="corporate"></ptr-digital-twin>
twin names the twin and source names the surface it was opened from; the loader that mounts it here is public/Didymo.dc.html, readable in this page’s own source.
Window events drive it. This site’s own navigation dispatches didymo-toggle, and other pages dispatch didymo-open for a specific action: chat, voice, avatar or book.
window.dispatchEvent(new CustomEvent('didymo-open', { detail: { action: 'chat' } }));
window.dispatchEvent(new CustomEvent('didymo-toggle'));
An event with no detail opens the rail rather than a specific panel; the shipped widget answers the URL hashes #didymo and #didymo-chat the same way.
Each route is published as HTML, as a Markdown alternate at the same path, and inside a whole-site digest. The Markdown is an alternate representation rather than a second canonical page, so it is linked from the head and kept out of the sitemap.
/llms.txt for the list of routes./llms-full.txt when you want every page’s words in one file.https://peopletechrevolution.com/llms.txt the route catalogue
https://peopletechrevolution.com/llms-full.txt every page's words, combined
https://peopletechrevolution.com/sitemap.xml the indexable documents
<link rel="alternate" type="text/markdown" href="https://peopletechrevolution.com/developers.md">
The structured data on each page is a JSON-LD @graph; a tool in the repository submits changed routes to IndexNow.
The privacy policy and the terms are versioned documents, and the build carries a manifest of them: a document identifier, a version, an effective date, a SHA-256 of the text and its canonical address. The documents live at legal.peopletechrevolution.com, and a new version replaces the old one at the same address.
"PTR-PRIVACY": {
"version": "...",
"sha256": "...",
"effective_date": "...",
"title": "People Tech Revolution Privacy Policy",
"canonical_url": "https://legal.peopletechrevolution.com/privacy"
}
How this site is built
The decisions a developer evaluating an integration asks about, each visible in the bytes this site already serves.
Static files behind a hosting edge. Every route whose text is produced at runtime also ships a fallback captured from a real browser, removed in the same frame the runtime mounts the live tree. The marker around it carries a SHA-256 of the component template, its imports and their shared inputs, so a stale capture fails the build’s own check.
<body>
<div data-prerender-static>
... the whole page, exactly as Chrome rendered it ...
</div>
<x-dc><template> ... the live component ... </template></x-dc>
</body>
Grep any route on this domain for data-prerender-static and it is there in the served bytes, bracketed by the marker described above.
curl -s https://peopletechrevolution.com/developers | grep -c "data-prerender-static"
(curl.exe -s https://peopletechrevolution.com/developers | Select-String -Pattern 'data-prerender-static' -AllMatches).Matches.Count
The 360 viewer reads its scenes from a manifest, mounts its renderer on the click that opens it rather than on page load, and pushes a history entry so the hardware back gesture closes the viewer instead of leaving the page. A clean URL served with no trailing slash resolves relative paths against the parent directory, so lib/app.js is fetched from one directory up; naming the document’s own directory in the head removes that failure.
Specifications
Open specifications, each linked to its own publisher so a reviewer can read the source rather than our summary of it.


For readers and agents
The words of every page at fixed addresses, and a front end written against the accessibility guidelines, with focus and reduced motion handled.


Say what your product does, who your users are, and where a PTR twin or scenario would sit inside it. A custom build shapes the rest around your own knowledge; the AI overview shows the pieces.
Building on PTR for your organisation?
Developers
The PTR API and SDK are a product, arranged under an enterprise agreement, so the way in is a conversation rather than a signup form.
The moment
A product lead at a health fund ships a member portal her team built. She wants a twin that answers from the fund’s own policies inside that portal, opened from her own button, with every conversation recorded against the page it started on. What she does not want is a chatbot bolted on beside it.
The agreement
Access to the PTR API and SDK is granted under an enterprise agreement, arranged through the contact form. Where a build touches a real person’s likeness or voice, consent and oversight are settled in the agreement, the same position the digital twins page takes. Hosting for the application and its database is recorded as deployed in an Australian region in the Subprocessors and Data Locations register; the governance page is the reviewer-facing version.
Request API and SDK accessGovernance and data locations
Building on PTR for your organisation?
Open on this site
The twin widget and the machine-readable copies of the site are served to anyone. They are the fastest way to see the shape of the thing before a conversation about the rest.
A script tag and an element. Set twin to the twin’s name and source to a short label for your page, so each conversation records where it was opened.
</body> tag.<ptr-digital-twin> element where the twin should open from.twin to the twin’s name and source to a short label for your page, so each conversation records where it was opened.<script src="https://ptr-digital-twin-widget.web.app/ptr-digital-twin.js" defer></script>
<ptr-digital-twin twin="simon" source="corporate"></ptr-digital-twin>
twin names the twin and source names the surface it was opened from; the loader that mounts it here is public/Didymo.dc.html, readable in this page’s own source.
Window events drive it. This site’s own navigation dispatches didymo-toggle, and other pages dispatch didymo-open for a specific action: chat, voice, avatar or book.
window.dispatchEvent(new CustomEvent('didymo-open', { detail: { action: 'chat' } }));
window.dispatchEvent(new CustomEvent('didymo-toggle'));
An event with no detail opens the rail rather than a specific panel; the shipped widget answers the URL hashes #didymo and #didymo-chat the same way.
Each route is published as HTML, as a Markdown alternate at the same path, and inside a whole-site digest. The Markdown is an alternate representation rather than a second canonical page, so it is linked from the head and kept out of the sitemap.
/llms.txt for the list of routes./llms-full.txt when you want every page’s words in one file.https://peopletechrevolution.com/llms.txt the route catalogue
https://peopletechrevolution.com/llms-full.txt every page's words, combined
https://peopletechrevolution.com/sitemap.xml the indexable documents
<link rel="alternate" type="text/markdown" href="https://peopletechrevolution.com/developers.md">
The structured data on each page is a JSON-LD @graph; a tool in the repository submits changed routes to IndexNow.
The privacy policy and the terms are versioned documents, and the build carries a manifest of them: a document identifier, a version, an effective date, a SHA-256 of the text and its canonical address. The documents live at legal.peopletechrevolution.com, and a new version replaces the old one at the same address.
"PTR-PRIVACY": {
"version": "...",
"sha256": "...",
"effective_date": "...",
"title": "People Tech Revolution Privacy Policy",
"canonical_url": "https://legal.peopletechrevolution.com/privacy"
}
How this site is built
The decisions a developer evaluating an integration asks about, each visible in the bytes this site already serves.
Static files behind a hosting edge. Every route whose text is produced at runtime also ships a fallback captured from a real browser, removed in the same frame the runtime mounts the live tree. The marker around it carries a SHA-256 of the component template, its imports and their shared inputs, so a stale capture fails the build’s own check.
<body>
<div data-prerender-static>
... the whole page, exactly as Chrome rendered it ...
</div>
<x-dc><template> ... the live component ... </template></x-dc>
</body>
Grep any route on this domain for data-prerender-static and it is there in the served bytes, bracketed by the marker described above.
curl -s https://peopletechrevolution.com/developers | grep -c "data-prerender-static"
(curl.exe -s https://peopletechrevolution.com/developers | Select-String -Pattern 'data-prerender-static' -AllMatches).Matches.Count
The 360 viewer reads its scenes from a manifest, mounts its renderer on the click that opens it rather than on page load, and pushes a history entry so the hardware back gesture closes the viewer instead of leaving the page. A clean URL served with no trailing slash resolves relative paths against the parent directory, so lib/app.js is fetched from one directory up; naming the document’s own directory in the head removes that failure.
Specifications
Open specifications, each linked to its own publisher so a reviewer can read the source rather than our summary of it.
For readers and agents
The words of every page at fixed addresses, and a front end written against the accessibility guidelines, with focus and reduced motion handled.
Say what your product does, who your users are, and where a PTR twin or scenario would sit inside it. A custom build shapes the rest around your own knowledge; the AI overview shows the pieces.
Building on PTR for your organisation?