Community Curation of Custom NIPs

This article outlines a simple system to delegate curation of nostr NIPs to your personalized web of trust. Custom NIPs (kind 30817) at NostrHub.io will be enhanced using kind 7 reactions (+/−) for up/downvotes. Reactions will be filtered using personalized GrapeRank metrics communicated via Trusted Assertions. Additional features can be added in the future to ensure a rich, robust and truly decentralized system of NIP management.

david

28. Oktober 2025October 28, 2025 · 4 Min. Lesezeit4 min read

The vision of community-curated Nostr Implementation Possibilities (NIPs) has long inspired the Nostr ecosystem. With Alex Gleason' s “NIP NIP ” — a meta-spec enabling anyone to publish custom NIPs outside the official repository — and its live implementation on NostrHub.io, that vision took a major step forward.

But while anyone can now author and archive a custom NIP, truly decentralized curation remains elusive. How do we remove the burden of NIP curation from any single individual or group? How do we surface proposals with genuine community support while filtering out spam?

This article proposes a minimal, decentralized, and trust-aware voting system for custom NIPs — one that builds on existing NIPs, requires no new backend infrastructure, and leverages personalized reputation.

The Two Core Needs#

  1. Remove obvious spam

  2. Highlight proposals with meaningful community approval

The Solution: Three NIPs, One System#

We rely upon 3 existing NIPs:

Step 1: Enable Upvote & Downvote Buttons#

Add thumbs-up and thumbs-down buttons in two places:

  1. On each individual custom NIP page

  2. On each NIP card in the main listing

Clicking either button publishes a Kind 7 reaction event:

{
  "kind": 7,
  "content": "+",  // or "-"
  "tags": [
    ["a", "30817:<pubkey>:<d-tag>"]  // the custom NIP
  ]
}

These events are broadcast to the same relays used by NostrHub for comments (Kind 1111), ensuring consistency and discoverability.

Step 2: Display Raw Vote Counts#

Next to the buttons, show total vote counts:

👍 42    👎 8

These numbers come from a simple filter:

{
  kinds: [7],
  "#a": ["30817:<pubkey>:<d-tag>"]
}

Step 3: Filter Votes by Trust (NIP-85)#

Raw counts are vulnerable to spam. A single user with 100 keys can flood a NIP with fake upvotes.

Enter NIP-85: Trusted Assertions — Vitor Pamplona' s framework for decentralized reputation.

Using the rank metric from NIP-85:

This is personalized filtering: your view reflects your trust graph.

Step 4: Calculate Approval Rating#

Approval Score = (Trusted Upvotes) − (Trusted Downvotes)

Or, for more nuance (future versions):

Approval % = Trusted Upvotes / (Trusted Upvotes + Trusted Downvotes)

Result: Fully Decentralized NIP Curation#

NIP + - Approval Score Status
Decentralized Lists 38 3 +35 Promoted
Spammy Spam 0 15 -15 Hidden
Nippy NIP 0 0 0 Neutral

Future Enhancements (Post-MVP)#

Once the core system is live, consider:

But keep v1 simple. Ship fast. Iterate.

Conclusion#

Custom NIPs exist at the cutting edge of Nostr innovation. With Kind 7 reactions, personalized GrapeRank trust metrics, and Trusted Assertions, we can achieve what many will say is impossible: truly decentralized curation of the entire nostr protocol.

#GrapeRank#Grapevine#NIPs#NostrHub#Trusted Assertions#nostr#web of trust

Written by

Comments

No comments yet. Start the conversation.

Contents

9 sections

  1. The Two Core Needs
  2. The Solution: Three NIPs, One System
  3. Step 1: Enable Upvote & Downvote Buttons
  4. Step 2: Display Raw Vote Counts
  5. Step 3: Filter Votes by Trust (NIP-85)
  6. Step 4: Calculate Approval Rating
  7. Result: Fully Decentralized NIP Curation
  8. Future Enhancements (Post-MVP)
  9. Conclusion