Skip to content

Social/Profile Integration (non-normative)

This page describes a non-normative adoption pattern for profile and social surfaces (web profile pages, public identity views, and optional indexing flows).

  • Normative contract: Specification and Conformance
  • Non-normative guidance: projection patterns in this page
  • A valid Universal Manifest (lan:Manifest)
  • Resolver or direct retrieval path to fetch current manifests
  • Surface policy for privacy/consent enforcement
  • A deterministic public profile projection
  • Explicit handling for expired/invalid manifests
  • Optional export for indexing/search when consent allows
  • Enforce TTL and reject expired manifests for active use
  • Ignore unknown fields safely
  • Respect consent fields before rendering/indexing
  • Treat LAN-specific conventions as optional extensions

Universal Manifest is a portable state capsule, not “the profile page itself”.

Typical flow:

  1. A system receives a manifest (lan:Manifest) about a subject.
  2. It verifies (or otherwise trusts) the manifest (TTL rules; signature when available).
  3. It derives a projection appropriate for the surface:
    • a web profile page
    • a public display capsule
    • a social identity view
    • a search/index document (opt-in)
  • subject — stable identifier (recommended: DID; allowed: any URI)
  • issuedAt, expiresAt — freshness for use
  • shards — embed or reference profile fragments
  • pointers — canonical source references (website, pod, social actor URL, etc.)
  • consents — whether the profile may be public/indexed/rendered

Schema strategy (avoid inventing the world)

Section titled “Schema strategy (avoid inventing the world)”

For cross-system adoption, prefer embedding standard vocabularies inside shards when helpful:

  • schema:Person for creators (basic public profile fields)
  • schema:Organization / schema:Place for venues

In v0.1, consumers can still interoperate by reading only the fields they understand and ignoring unknowns safely.

ActivityPub can start as a pointer without forcing every consumer to implement ActivityPub:

  • pointer name: activityPub.actor
  • value: https://example.social/@alice

Consumers should default to deny for any use not explicitly consented to.

Suggested consent keys (non-normative strings):

  • social.profilePublic
  • social.indexing
  • publicDisplay

Use these fixtures as implementation aids:

  • /harness/fixtures/v0.1/stubs/social-profile-manifest.jsonld
  • /harness/fixtures/v0.1/manifest-with-shards.jsonld
  • /harness/fixtures/v0.1/unknown-fields-manifest.jsonld
  • /harness/fixtures/v0.2/minimal-signed-manifest.jsonld (for v0.2 readiness)

These examples are non-normative and should not be treated as extra conformance requirements.

  • Universal contract: /spec/v01/
  • v0.1 conformance: /conformance/v01/
  • v0.2 conformance (draft): /conformance/v02/
  • Stub manifests: /getting-started/stub-manifests/