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).
Boundary: normative vs non-normative
Section titled “Boundary: normative vs non-normative”- Normative contract: Specification and Conformance
- Non-normative guidance: projection patterns in this page
What you implement (minimum checklist)
Section titled “What you implement (minimum checklist)”Inputs
Section titled “Inputs”- A valid Universal Manifest (
lan:Manifest) - Resolver or direct retrieval path to fetch current manifests
- Surface policy for privacy/consent enforcement
Outputs
Section titled “Outputs”- A deterministic public profile projection
- Explicit handling for expired/invalid manifests
- Optional export for indexing/search when consent allows
Minimum behaviors
Section titled “Minimum behaviors”- 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
Core idea: Manifest → projection
Section titled “Core idea: Manifest → projection”Universal Manifest is a portable state capsule, not “the profile page itself”.
Typical flow:
- A system receives a manifest (
lan:Manifest) about asubject. - It verifies (or otherwise trusts) the manifest (TTL rules; signature when available).
- 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)
Minimum fields for a profile projection
Section titled “Minimum fields for a profile projection”subject— stable identifier (recommended: DID; allowed: any URI)issuedAt,expiresAt— freshness for useshards— embed or reference profile fragmentspointers— 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:Personfor creators (basic public profile fields)schema:Organization/schema:Placefor venues
In v0.1, consumers can still interoperate by reading only the fields they understand and ignoring unknowns safely.
ActivityPub pointer (optional)
Section titled “ActivityPub pointer (optional)”ActivityPub can start as a pointer without forcing every consumer to implement ActivityPub:
- pointer name:
activityPub.actor - value:
https://example.social/@alice
Privacy & consent
Section titled “Privacy & consent”Consumers should default to deny for any use not explicitly consented to.
Suggested consent keys (non-normative strings):
social.profilePublicsocial.indexingpublicDisplay
Reference fixtures (non-normative)
Section titled “Reference fixtures (non-normative)”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/