Skip to content

docs(design): Dotify v2 - access model, chunked streaming, Polkadot App stack#75

Merged
knzeng-e merged 1 commit into
mainfrom
design/access-streaming-v2
Jul 8, 2026
Merged

docs(design): Dotify v2 - access model, chunked streaming, Polkadot App stack#75
knzeng-e merged 1 commit into
mainfrom
design/access-streaming-v2

Conversation

@knzeng-e

@knzeng-e knzeng-e commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Design-only PR (no code) for the radical angle: remove the 42% preview, rethink access + protection + streaming, and land Dotify on the Polkadot App stack. Full document: docs/design/dotify-v2-access-and-streaming.md, tracked as docs/backlog/24-access-streaming-v2.md.

The design in one screen

Access model v2 - artist-chosen, on-chain, changeable without re-upload:

Mode Who plays Check
free everyone, no wallet none
paid buyers musicAccCanAccess (Coinage as future rail)
human-free verified humans Proof of Personhood (replaces the mocked admin call)

No previews: unauthorized = honest unlock CTA. Discovery lives in free tracks and rooms (where host access already lets everyone hear full tracks). This deletes the whole preview apparatus - including the ticket 18 preview assets, consciously retired.

Sign once, listen freely - one SIWE-style signature opens a ~24h revocable session; per-track authorization becomes an on-chain read by the key service. No signature per listen. Keys stay per-track, delivered after the chain check, never bundled. Room guests still need nothing at all.

Everything encrypted at rest, streamed in chunks - dotify.audio.v2: chunked AES-256-GCM (per-chunk nonce + tag), one CID, HTTP Range through IPFS gateways, MSE progressive playback. Time-to-first-sound = one chunk, not one file. Free tracks are encrypted too: the mode is a policy hinge (flippable later), documented honestly as such. No ffmpeg/HLS; v1 blobs keep playing via the version byte.

Rooms - doctrine untouched (host satisfies policy, listeners get only WebRTC). Chunking attacks the real cause of track-change dead air (source load time). Drift correction and in-place track swaps stay gated behind two-device browser validation - the standing lesson from the reverted replaceTrack attempt.

Polkadot App stack (grounded on docs.polkadot.com/apps): Triangle hosts (Desktop / App / Web dot.li) + Host API signing, Proof of Personhood for humanity, Coinage as candidate payment rail, dotify.dot on DotNS over the existing single-file Bulletin build, Statement Store as the presence layer.

Phases (each shippable)

P1 access v2 + delete previews -> P2 session auth -> P3 chunked container -> P4 real PoP -> P5 Triangle/DotNS/Statement Store.

Open questions flagged in the doc

Key custody decentralization timing, chunk size tuning, unauthenticated free-key delivery, optional artist-chosen excerpts later.

Review = approve the direction; implementation starts at P1 in its own PRs.

🤖 Generated with Claude Code

…pp stack

Proposed strategic pivot (design only, no code):

- Remove the 42% preview. Access becomes a three-mode artist policy: free,
  paid, human-free (Proof of Personhood). Unauthorized playback is an honest
  unlock CTA; discovery moves to free tracks and rooms.
- Sign once, listen freely: one SIWE-style signature opens a session; every
  later track authorization is an on-chain read by the key service (paid ->
  musicAccCanAccess, human-free -> PoP status, free -> no auth).
- All audio encrypted at rest, including free tracks (mode is pure on-chain
  policy, flippable without re-pinning; IPFS never holds clear audio).
- dotify.audio.v2: chunked AES-256-GCM container, Range requests through IPFS
  gateways, MSE progressive playback - time-to-first-sound is one chunk, not
  one file; v1 blobs keep playing. No ffmpeg/HLS dependency.
- Rooms untouched in doctrine; faster host loads shorten track-change dead
  air; realtime refinements gated behind two-device browser validation.
- Polkadot App stack: Triangle hosts + Host API signing, PoP for humanity,
  Coinage as candidate payment rail, DotNS name, Statement Store presence.
- Five independently shippable phases; open questions flagged (key custody
  decentralization, chunk size, free-mode key delivery, optional excerpts).

Tracked as ticket 24; once approved its P1 consciously retires the preview
machinery including the ticket 18 preview assets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Jul 8, 2026

Copy link
Copy Markdown

Deploy Preview for muzinga canceled.

Name Link
🔨 Latest commit 01f825a
🔍 Latest deploy log https://app.netlify.com/projects/muzinga/deploys/6a4e23e04e4da9000851a12c

@knzeng-e
knzeng-e merged commit cd7a1f4 into main Jul 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant