Skip to content
PPCP
Draft proposal · 0.1.0

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.

contact.vcf
BEGIN:VCARD
VERSION:4.0
FN:Joakim Jardenberg
URL;TYPE=ppcp-profile:https://joakim.jardenberg.net/
END:VCARD

Existing 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.

ProfilePage JSON-LD
<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.

/.well-known/ppcp.json · experimental
{
  "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.

/.well-known/webfinger response
{
  "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.