Discovery
How a profile gets found
Discovery is mostly ordinary web practice: link the profile from the places people already look. Everything beyond that is optional, and one of the mechanisms below is an experiment this draft invented.
Baseline · required in practice
Link it yourself
A publisher should link the canonical profile from their public site and contact information. This single habit does more than every optional mechanism below. The reference route convention is /, /profile.md, /profile.json and /CHANGELOG.md — this proposal's convention, not a universally implemented discovery path.
Existing standard · RFC 6350
vCard URL property
A vCard can point at the profile with its standard URL property. No custom vCard field is required or defined by PPCP. A type parameter is a hint at most; consumers that ignore it still get a working URL.
BEGIN:VCARD
VERSION:4.0
FN:Joakim Jardenberg
URL;TYPE=ppcp-profile:https://joakim.jardenberg.net/
END:VCARDExisting standard · Schema.org
HTML and Markdown
The HTML page should use Schema.org ProfilePage with a Person mainEntity, whose sameAs can identify established identity records such as Wikidata. A profile URL describes a person; publishing it does not make its claims independently verified.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfilePage",
"dateModified": "2026-09-13T09:00:00Z",
"mainEntity": {
"@type": "Person",
"name": "Joakim Jardenberg",
"url": "https://joakim.jardenberg.net/",
"sameAs": ["https://www.wikidata.org/wiki/Q5880163"]
}
}
</script>Alongside it, the downloadable Markdown must stay useful when detached from the site: keep the subject, version, date, license and review status inside the file itself. A copy does not update itself.
Experimental · this draft only
/.well-known/ppcp.json
PPCP defines an optional discovery card for implementations of this draft. It is not an IANA-registered well-known URI and no arbitrary agent is guaranteed to request it. Treat it as a convenience for clients that already speak PPCP.
{
"protocol": "PPCP",
"protocol_version": "0.1.0",
"subject": {
"id": "https://joakim.jardenberg.net/#person",
"name": "Joakim Jardenberg"
},
"canonical_url": "https://joakim.jardenberg.net/",
"markdown_url": "https://joakim.jardenberg.net/profile.md",
"json_url": "https://joakim.jardenberg.net/profile.json",
"profile_version": "2026.1",
"license": {
"id": "CC-BY-4.0",
"url": "https://creativecommons.org/licenses/by/4.0/"
},
"review_status": "owner-review-pending",
"mcp_endpoint": "https://joakim.jardenberg.net/mcp"
}Optional · existing standard
WebFinger
WebFinger may expose a public profile-page link for clients that support it. If you already serve WebFinger, add the link — do not replace an existing WebFinger or contact configuration without preserving its unrelated functions.
{
"subject": "acct:joakim@jardenberg.net",
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://joakim.jardenberg.net/"
}
]
}Optional · emerging convention
llms.txt
An llms.txt link may provide an additional route to the profile and its machine-readable files. It is a community convention, honoured only by tools that decided to honour it, and it grants no crawling rights beyond your ordinary robots policy. This site publishes its own llms.txt as a working example.