- Introduced comprehensive documentation for the Nostr Development Kit (NDK) including an overview, quick reference, and troubleshooting guide. - Added detailed examples covering initialization, authentication, event publishing, querying, and user profile management. - Structured the documentation to facilitate quick lookups and deep learning, based on real-world usage patterns from the Plebeian Market application. - Created an index for examples to enhance usability and navigation. - Bumped version to 1.0.0 to reflect the addition of this new skill set.
287 lines
6.8 KiB
Markdown
287 lines
6.8 KiB
Markdown
# NDK (Nostr Development Kit) Claude Skill
|
|
|
|
> **Comprehensive knowledge base for working with NDK in production applications**
|
|
|
|
This Claude skill provides deep expertise in the Nostr Development Kit based on real-world usage patterns from the Plebeian Market application.
|
|
|
|
## 📚 Documentation Structure
|
|
|
|
```
|
|
.claude/skills/ndk/
|
|
├── README.md # This file - Overview and getting started
|
|
├── ndk-skill.md # Complete reference guide (18KB)
|
|
├── quick-reference.md # Fast lookup for common tasks (7KB)
|
|
├── troubleshooting.md # Common problems and solutions
|
|
└── examples/ # Production code examples
|
|
├── README.md
|
|
├── 01-initialization.ts # NDK setup and connection
|
|
├── 02-authentication.ts # NIP-07, NIP-46, private keys
|
|
├── 03-publishing-events.ts # Creating and publishing events
|
|
├── 04-querying-subscribing.ts # Fetching and real-time subs
|
|
└── 05-users-profiles.ts # User and profile management
|
|
```
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### For Quick Lookups
|
|
Start with **`quick-reference.md`** for:
|
|
- Common code snippets
|
|
- Quick syntax reminders
|
|
- Frequently used patterns
|
|
|
|
### For Deep Learning
|
|
Read **`ndk-skill.md`** for:
|
|
- Complete API documentation
|
|
- Best practices
|
|
- Integration patterns
|
|
- Performance optimization
|
|
|
|
### For Problem Solving
|
|
Check **`troubleshooting.md`** for:
|
|
- Common error solutions
|
|
- Performance tips
|
|
- Testing strategies
|
|
- Debug techniques
|
|
|
|
### For Code Examples
|
|
Browse **`examples/`** directory for:
|
|
- Real production code
|
|
- Full implementations
|
|
- React integration patterns
|
|
- Error handling examples
|
|
|
|
## 📖 Core Topics Covered
|
|
|
|
### 1. Initialization & Setup
|
|
- Basic NDK initialization
|
|
- Multiple instance patterns (main + zap relays)
|
|
- Connection management with timeouts
|
|
- Relay pool configuration
|
|
- Connection status monitoring
|
|
|
|
### 2. Authentication
|
|
- **NIP-07**: Browser extension signers (Alby, nos2x)
|
|
- **NIP-46**: Remote signers (Bunker)
|
|
- **Private Keys**: Direct key management
|
|
- Auto-login with localStorage
|
|
- Multi-account session management
|
|
|
|
### 3. Event Publishing
|
|
- Basic text notes
|
|
- Parameterized replaceable events (products, profiles)
|
|
- Order and payment events
|
|
- Batch publishing
|
|
- Error handling patterns
|
|
|
|
### 4. Querying & Subscriptions
|
|
- One-time fetches with `fetchEvents()`
|
|
- Real-time subscriptions
|
|
- Tag filtering patterns
|
|
- Time-range queries
|
|
- Event monitoring
|
|
- React Query integration
|
|
|
|
### 5. User & Profile Management
|
|
- Fetch profiles (npub, hex, NIP-05)
|
|
- Update user profiles
|
|
- Follow/unfollow operations
|
|
- Batch profile loading
|
|
- Profile caching strategies
|
|
|
|
### 6. Advanced Patterns
|
|
- Store-based NDK management
|
|
- Query + subscription combination
|
|
- Event parsing utilities
|
|
- Memory leak prevention
|
|
- Performance optimization
|
|
|
|
## 🎯 Use Cases
|
|
|
|
### Building a Nostr Client
|
|
```typescript
|
|
// Initialize
|
|
const { ndk, isConnected } = await initializeNDK({
|
|
relays: ['wss://relay.damus.io', 'wss://nos.lol'],
|
|
timeoutMs: 10000
|
|
})
|
|
|
|
// Authenticate
|
|
const { user } = await loginWithExtension(ndk)
|
|
|
|
// Publish
|
|
await publishBasicNote(ndk, 'Hello Nostr!')
|
|
|
|
// Subscribe
|
|
const sub = subscribeToNotes(ndk, user.pubkey, (event) => {
|
|
console.log('New note:', event.content)
|
|
})
|
|
```
|
|
|
|
### Building a Marketplace
|
|
```typescript
|
|
// Publish product
|
|
await publishProduct(ndk, {
|
|
slug: 'bitcoin-shirt',
|
|
title: 'Bitcoin T-Shirt',
|
|
price: 25,
|
|
currency: 'USD',
|
|
images: ['https://...']
|
|
})
|
|
|
|
// Create order
|
|
await createOrder(ndk, {
|
|
orderId: uuidv4(),
|
|
sellerPubkey: merchant.pubkey,
|
|
productRef: '30402:pubkey:bitcoin-shirt',
|
|
quantity: 1,
|
|
totalAmount: '25.00'
|
|
})
|
|
|
|
// Monitor payment
|
|
monitorPaymentReceipt(ndk, orderId, invoiceId, (preimage) => {
|
|
console.log('Payment confirmed!')
|
|
})
|
|
```
|
|
|
|
### React Integration
|
|
```typescript
|
|
function Feed() {
|
|
const ndk = useNDK()
|
|
const { user } = useAuth()
|
|
|
|
// Query with real-time updates
|
|
const { data: notes } = useNotesWithSubscription(
|
|
ndk,
|
|
user.pubkey
|
|
)
|
|
|
|
return (
|
|
<div>
|
|
{notes?.map(note => (
|
|
<NoteCard key={note.id} note={note} />
|
|
))}
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
## 🔍 Common Patterns Quick Reference
|
|
|
|
### Safe NDK Access
|
|
```typescript
|
|
const ndk = ndkActions.getNDK()
|
|
if (!ndk) throw new Error('NDK not initialized')
|
|
```
|
|
|
|
### Subscription Cleanup
|
|
```typescript
|
|
useEffect(() => {
|
|
const sub = ndk.subscribe(filter, { closeOnEose: false })
|
|
sub.on('event', handleEvent)
|
|
return () => sub.stop() // Critical!
|
|
}, [ndk])
|
|
```
|
|
|
|
### Error Handling
|
|
```typescript
|
|
try {
|
|
await event.sign()
|
|
await event.publish()
|
|
} catch (error) {
|
|
console.error('Publishing failed:', error)
|
|
throw new Error('Failed to publish. Check connection.')
|
|
}
|
|
```
|
|
|
|
### Tag Filtering
|
|
```typescript
|
|
// ✅ Correct (note the # prefix for tag filters)
|
|
{ kinds: [16], '#order': [orderId] }
|
|
|
|
// ❌ Wrong
|
|
{ kinds: [16], 'order': [orderId] }
|
|
```
|
|
|
|
## 🛠 Development Tools
|
|
|
|
### VS Code Integration
|
|
These skill files work with:
|
|
- Cursor AI for code completion
|
|
- Claude for code assistance
|
|
- GitHub Copilot with context
|
|
|
|
### Debugging Tips
|
|
```typescript
|
|
// Check connection
|
|
console.log('Connected relays:',
|
|
Array.from(ndk.pool?.relays.values() || [])
|
|
.filter(r => r.status === 1)
|
|
.map(r => r.url)
|
|
)
|
|
|
|
// Verify signer
|
|
console.log('Signer:', ndk.signer)
|
|
console.log('Active user:', ndk.activeUser)
|
|
|
|
// Event inspection
|
|
console.log('Event:', {
|
|
id: event.id,
|
|
kind: event.kind,
|
|
tags: event.tags,
|
|
sig: event.sig
|
|
})
|
|
```
|
|
|
|
## 📊 Statistics
|
|
|
|
- **Total Documentation**: ~50KB
|
|
- **Code Examples**: 5 complete modules
|
|
- **Patterns Documented**: 50+
|
|
- **Common Issues Covered**: 15+
|
|
- **Based On**: Real production code
|
|
|
|
## 🔗 Additional Resources
|
|
|
|
### Official NDK Resources
|
|
- **GitHub**: https://github.com/nostr-dev-kit/ndk
|
|
- **Documentation**: https://ndk.fyi
|
|
- **NPM**: `@nostr-dev-kit/ndk`
|
|
|
|
### Nostr Protocol
|
|
- **NIPs**: https://github.com/nostr-protocol/nips
|
|
- **Nostr**: https://nostr.com
|
|
|
|
### Related Tools
|
|
- **TanStack Query**: React state management
|
|
- **TanStack Router**: Type-safe routing
|
|
- **Radix UI**: Accessible components
|
|
|
|
## 💡 Tips for Using This Skill
|
|
|
|
1. **Start Small**: Begin with quick-reference.md for syntax
|
|
2. **Go Deep**: Read ndk-skill.md section by section
|
|
3. **Copy Examples**: Use examples/ as templates
|
|
4. **Debug Issues**: Check troubleshooting.md first
|
|
5. **Stay Updated**: Patterns based on production usage
|
|
|
|
## 🤝 Contributing
|
|
|
|
This skill is maintained based on the Plebeian Market codebase. To improve it:
|
|
|
|
1. Document new patterns you discover
|
|
2. Add solutions to common problems
|
|
3. Update examples with better approaches
|
|
4. Keep synchronized with NDK updates
|
|
|
|
## 📝 Version Info
|
|
|
|
- **Skill Version**: 1.0.0
|
|
- **NDK Version**: Latest (based on production usage)
|
|
- **Last Updated**: November 2025
|
|
- **Codebase**: Plebeian Market
|
|
|
|
---
|
|
|
|
**Ready to build with NDK?** Start with `quick-reference.md` or dive into `examples/01-initialization.ts`!
|
|
|