commits
- container stacks vertically on mobile, 3-col grid on desktop (768px+)
- message controls appear first on mobile (order: -1)
- buttons 2x2 grid with 44px touch targets on mobile
- state summary stacks vertically on mobile
- infrastructure cards single column on mobile (640px+)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- alice on pds-message-demo, bob on pds-message-demo-2
- messages route to recipient's PDS (actual cross-PDS auth)
- bob's PDS signs JWT, alice's PDS verifies via plc.directory
- add wrangler configs to demo repo
- fix CSS so panes don't resize based on content
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
clickable cards linking to the real ATProto infrastructure:
- PDS (describeServer endpoint)
- spam labeler (DID on plc.directory)
- PLC directory
also fix panel height alignment in grid layout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add labeler/ cloudflare worker with proper label signing
- secp256k1 + DAG-CBOR label signatures
- queryLabels XRPC endpoint
- spam management endpoints
- create labeler DID (did:plc:x6io7svnbth4pikg2e63vvkx)
- update pds.js to check labeler before accepting messages
- update frontend LabelerClient to use remote labeler
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add xyz.fake.inbox.unblock endpoint to pds.js
- add unblockSender method to client
- toggle reject/unblock button based on blocked state
- fix panel heights with CSS
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fetches state via xyz.fake.inbox.getState and displays each user's
accepted and blocked lists. helps visitors understand persisted state.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
covers the full flow: session auth → service auth → PLC resolution →
signature verification → inbox rules. includes sequence diagram,
SQL examples, and references ngerakines' PDS-as-crypto-service framing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add client.js wrapping XRPC calls to deployed pds.js
- remove client-side crypto (crypto.js, models.js)
- use com.atproto.server.getServiceAuth for JWT signing
- update README with real architecture and live demo URL
- fix UI: loading guards, inbox styling, tooltips
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- verifyServiceJwt() decompresses P-256 public key and verifies via WebCrypto
- PDS.evaluate() now cryptographically verifies JWT against sender's public key
- UI shows verification status (✓/✗) in event log
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add chadtmiller.com/pds.js as git submodule
- import P-256/ES256 primitives (generateKeyPair, createServiceJwt)
- each PDS generates real key pair on init
- service tokens are actual JWTs with cryptographic signatures
- show JWT details (iss, aud, lxm, sig) in event log
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- replace python/textual TUI with sveltekit
- add wisp.place deployment workflow
- cleaner component structure: models.js, stores.js, PdsPanel.svelte
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- simulate com.atproto.server.getServiceAuth JWT pattern
- simulate com.atproto.label spam filtering
- dynamic recipient panel updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
demonstrates jacob.gold's proposal using docket for queue semantics.
user-driven TUI - no scripted sequences.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- container stacks vertically on mobile, 3-col grid on desktop (768px+)
- message controls appear first on mobile (order: -1)
- buttons 2x2 grid with 44px touch targets on mobile
- state summary stacks vertically on mobile
- infrastructure cards single column on mobile (640px+)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- alice on pds-message-demo, bob on pds-message-demo-2
- messages route to recipient's PDS (actual cross-PDS auth)
- bob's PDS signs JWT, alice's PDS verifies via plc.directory
- add wrangler configs to demo repo
- fix CSS so panes don't resize based on content
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
clickable cards linking to the real ATProto infrastructure:
- PDS (describeServer endpoint)
- spam labeler (DID on plc.directory)
- PLC directory
also fix panel height alignment in grid layout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add labeler/ cloudflare worker with proper label signing
- secp256k1 + DAG-CBOR label signatures
- queryLabels XRPC endpoint
- spam management endpoints
- create labeler DID (did:plc:x6io7svnbth4pikg2e63vvkx)
- update pds.js to check labeler before accepting messages
- update frontend LabelerClient to use remote labeler
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
covers the full flow: session auth → service auth → PLC resolution →
signature verification → inbox rules. includes sequence diagram,
SQL examples, and references ngerakines' PDS-as-crypto-service framing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add client.js wrapping XRPC calls to deployed pds.js
- remove client-side crypto (crypto.js, models.js)
- use com.atproto.server.getServiceAuth for JWT signing
- update README with real architecture and live demo URL
- fix UI: loading guards, inbox styling, tooltips
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- verifyServiceJwt() decompresses P-256 public key and verifies via WebCrypto
- PDS.evaluate() now cryptographically verifies JWT against sender's public key
- UI shows verification status (✓/✗) in event log
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add chadtmiller.com/pds.js as git submodule
- import P-256/ES256 primitives (generateKeyPair, createServiceJwt)
- each PDS generates real key pair on init
- service tokens are actual JWTs with cryptographic signatures
- show JWT details (iss, aud, lxm, sig) in event log
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>