Vision
beacon is the identity + discovery layer of a nostr-native, Solid-like stack:
| Solid |
this stack |
| WebID |
did:nostr:<hex> |
| Pod / LWS storage |
nosdav (currently a thin layer over jss) |
| Type index / directory |
beacon |
| Solid apps |
super apps (sign-in-with-did:nostr) |
nosdav already exists as a small storage layer on top of jss — so the storage server is not new work. The missing pieces are discovery (advertise an identity's storage in its DID document) and the super-app wiring (resolve → discover storage → read/write).
The hinge: a service entry in the DID document
The did:nostr DID document already carries a service array (today: relays from kind-10002). Add a nosdav storage service so every identity's storage home is discoverable at /.well-known/did/nostr/<hex>.json, e.g.:
{
"id": "did:nostr:<hex>#storage",
"type": "nosdav",
"serviceEndpoint": "https://<jss-host>/<identity>/"
}
This is the Solid "pod URL in the WebID" pattern, nostr-native.
How an identity advertises storage (open)
Pick the source of truth — options to weigh:
- a nostr event (a kind, or a tag on an existing kind like 10002),
- a
.well-known on the storage host,
- jss-side mapping (deterministic endpoint from the pubkey).
beacon's resolver (diddoc.js) then surfaces it as a service entry. Reader already merges service endpoints, so this is additive.
Super apps
With the service in place: sign-in-with-did:nostr (one key — the SSO backlog item) → resolve the DID → discover nosdav storage + relays → read/write with nostr-key auth (LWS auth, served by jss). beacon is the shared registry every app resolves against; the social graph (follows) gives super-apps a follow graph for free.
Acceptance
- DID documents include a
nosdav service entry when an identity advertises storage.
- A demo super-app resolves an identity → discovers its nosdav endpoint → reads/writes a file with nostr-key auth.
- Conformance unaffected (service is a standard DID-doc member).
Related
Vision
beacon is the identity + discovery layer of a nostr-native, Solid-like stack:
did:nostr:<hex>nosdav already exists as a small storage layer on top of jss — so the storage server is not new work. The missing pieces are discovery (advertise an identity's storage in its DID document) and the super-app wiring (resolve → discover storage → read/write).
The hinge: a
serviceentry in the DID documentThe did:nostr DID document already carries a
servicearray (today: relays from kind-10002). Add a nosdav storage service so every identity's storage home is discoverable at/.well-known/did/nostr/<hex>.json, e.g.:{ "id": "did:nostr:<hex>#storage", "type": "nosdav", "serviceEndpoint": "https://<jss-host>/<identity>/" }This is the Solid "pod URL in the WebID" pattern, nostr-native.
How an identity advertises storage (open)
Pick the source of truth — options to weigh:
.well-knownon the storage host,beacon's resolver (
diddoc.js) then surfaces it as aserviceentry. Reader already merges service endpoints, so this is additive.Super apps
With the service in place: sign-in-with-did:nostr (one key — the SSO backlog item) → resolve the DID → discover nosdav storage + relays → read/write with nostr-key auth (LWS auth, served by jss). beacon is the shared registry every app resolves against; the social graph (follows) gives super-apps a follow graph for free.
Acceptance
nosdavserviceentry when an identity advertises storage.Related
servicein the DID document