30817:edufeed-didactic

NIP-DIDACTIC

Edufeed

published
2026-08-27

Funded Didactic Projects, Teaching Measures, and Project Publications

draft optional

Abstract

This NIP defines two addressable event kinds for representing funded didactic projects (and their byproducts) on Nostr, and delegates the third byproduct — project publications — to NKBIP-01 kind 30040:

Kind Entity Schema-type
30143 Projekt Project
30144 Maßnahme TeachingMeasure
Publikation Uses NKBIP-01 kind 30040 (see below)

The first producer of these kinds is transferkiosk.net (the Stiftung Innovation in der Hochschullehre / Stil portal), but the shapes are generic enough to also describe BMBF / DFG / EU-funded teaching innovation projects.

This NIP is a companion to NIP-AMB:

  • NIP-AMB (kind 30142) models consumable learning resources (videos, textbooks, OER). It does not have a slot for the funded project that produced a resource, nor for the documented teaching intervention that a resource arose from, nor for the scholarly publication that reflects on it.
  • NIP-DIDACTIC fills those gaps. The two kinds reuse NIP-AMB's flattening grammar and Nostr-native tag conventions so AMB-aware tooling can be extended uniformly.
  • Vocabularies for the controlled fields below are published per NIP-VOCAB (kinds 39737 ConceptScheme / 39738 Concept) and referenced from event tags.

Authorship and trust model

These events are third-party catalog records. The event pubkey is the publisher/indexer that mirrors the source catalogue (e.g. the edufeed importer for transferkiosk.net) — not the project, its host institution, or a publication's authors. Tags such as host:*, funder:*, and author:* describe entities named in the source data; they are claims attested by the publishing pubkey, not self-published identities. A consumer that needs provenance should treat the pubkey as the asserting party and follow the r tag back to the source record. When a described person or organisation has its own Nostr identity, a p tag links to it (see below); absent that, the flattened *:name fallbacks carry display metadata only, not identity.

Shared Conventions

This section covers the two native kinds, Projekt (30143) and Maßnahme (30144); both inherit the NIP-AMB flattening grammar:

  • d tag — stable identifier, addressed as kind:pubkey:d.
  • type tag — human-readable schema-type label. Authoritative routing is done via the kind number.
  • Flattening with : — nested objects are flattened with : as the delimiter (funder:program:name, host:location:name).
  • Arrays — repeat the same tag key in order. When an array element is itself an object spanning several tags (a concept triple, an author, an editor), that element's tags MUST be emitted contiguously and led by its anchor key: :id for concept triples, :name for persons/organisations. A repeat of the anchor key marks the start of the next element. This is the "boundary on repeated :id" rule inherited from NIP-AMB; consumers reassemble objects by splitting each repeated group at its anchor key.
  • content field — duplicates the description tag for client display.
  • t tag — keywords / Stichwort.
  • r tag — external URLs (source page, DOI, project website).
  • i tag — external identifier URIs (ORCID, ROR, GND, w3id.org URIs).
  • p tag — for project members / authors with a Nostr identity: ["p", <pubkey-hex>, <relay-hint>, <role>] where <role> is "creator", "contributor", "author", or "participant". Persons without a Nostr identity use the flattened creator:* / author:* / participant:* fallbacks.
  • ext:<ns>:<facet>:<sub> — extension namespace for source-specific fields not standardised here, exactly as in NIP-AMB. The transferkiosk producer uses ext:tk:*.

Publications (delegated to NKBIP-01 kind 30040, see below) follow NKBIP-01's own conventions instead: the content duplication rule above does NOT apply to them (their content field MUST be empty), and their i tag uses NIP-73-style code form (doi:10.x/…) rather than the identifier-URI convention above.

Concept references (flat-concept triple)

Wherever a tag references a term from a controlled vocabulary, three flat tags together describe the concept:

["<facet>:id",              "<concept URI>"]
["<facet>:prefLabel:<lang>", "<label>"]
["<facet>:type",             "Concept"]

When a facet carries several concepts, the three tags repeat per concept. The <facet>:id tag MUST come first within each concept and marks the concept boundary (see Arrays above); consumers group each :prefLabel/:type with the most recent :id.

The <concept URI> is always an external (resolvable or stable) URI — never a Nostr coordinate. If the vocabulary is also published on Nostr per NIP-VOCAB, an additional companion a tag SHOULD be emitted so vocab-aware clients can fetch the underlying kind:39738 event for label translation, narrower/broader concepts, etc.:

["a", "39738:<pubkey>:<concept-d>", "<relay>", "<facet>"]

The fourth element matches the flattened tag prefix (audience, activity, about, …). Consumers without a vocab-aware index can ignore the a and still group by <facet>:id.

Cross-entity relations

A relation between two events — either of the two native kinds, or between a delegated NKBIP-01 publication event (kind 30040) and a native Projekt/ Maßnahme — is expressed with an a tag whose fourth element is a relationship marker:

Marker Direction Meaning
isPartOf Maßnahme → Projekt; sub-Projekt → Verbund-Projekt The subject belongs inside the referenced object.
hasPart Inverse of isPartOf Optional; mostly used by indexers.
isOutputOf Publikation (30040) → Projekt The publication is an output of the referenced project.
documents Publikation (30040) → Maßnahme The publication reports on a specific measure.

isPartOf and hasPart reuse NIP-AMB vocabulary; isOutputOf and documents are introduced by this NIP.

Kind 30143 — Projekt

A funded didactic / teaching-innovation project. Time-bounded, hosted at one or more institutions, with at least one funding source.

Required tags

Tag Notes
d Stable identifier (e.g. source URL).
type "Project".
name Project title.
description Project summary. ALSO duplicated into content.

Optional tags

Tag Source/meaning
acronym Project acronym / Kurztitel.
projectNumber Funder-internal number, e.g. "FR-599/2023".
startDate, endDate ISO 8601 dates.
extendedUntil ISO 8601 date; optional extension cutoff.
status e.g. veroeffentlicht, laufend.
inLanguage BCP47 code, repeatable.
image URL of a representative image.
dateCreated / datePublished / dateModified ISO 8601 (per NIP-AMB).
funder:name / funder:type / funder:id Funding body. type=FundingScheme for programs.
funder:program:name / funder:program:id Funding program inside the funder.
funder:programLine:name / funder:programLine:id Sub-line inside the program.
host:id / host:name / host:type Hosting institution. type=Organization.
host:location:id / host:location:name E.g. federal state.
host:kind:id / host:kind:name Institution type (Universität, Fachhochschule, …).
participant:name / participant:role / participant:id Non-Nostr team members.
p Team members with Nostr identity, role "participant".
r Source URL, project website, …
t Keywords.

Concept references

Concept triples (with companion a tag) using these facets:

Facet Meaning Vocab d-tag (transferkiosk producer)
about Subject area (Fächergruppe/-bereich) tk-faechergruppen, tk-fachbereiche
objective Project goal (Projektziel) tk-projektziele

Relations

  • ["a", "30143:<pub>:<d>", "<relay>", "isPartOf"] — sub-project of a Verbund-Projekt.

Example

{
  "kind": 30143,
  "tags": [
    ["d", "https://transferkiosk.net/p/101553"],
    ["type", "Project"],
    ["name", "Lernspiel für die Orthopädie und Unfallchirurgie"],
    ["acronym", "LeOpädchi"],
    ["projectNumber", "FR-599/2023"],
    ["description", "Ein wesentlicher Teil akuter medizinischer Konsultationen geht auf Erkrankungen und Verletzungen des Bewegungsapparates zurück …"],
    ["startDate", "2024-04-01"],
    ["endDate", "2026-03-31"],
    ["status", "veroeffentlicht"],
    ["datePublished", "2025-12-19"],
    ["inLanguage", "de"],
    ["host:id", "https://transferkiosk.net/vocab/tk-einrichtung/100448"],
    ["host:name", "Universitätsklinikum Bonn"],
    ["host:type", "Organization"],
    ["host:location:name", "Nordrhein-Westfalen"],
    ["host:kind:name", "Universitäten"],
    ["funder:name", "Freiraum 2023"],
    ["funder:type", "FundingScheme"],
    ["funder:program:name", "Freiraum"],
    ["funder:programLine:name", "Förderlinie C"],
    ["about:id", "https://transferkiosk.net/vocab/tk-faechergruppen/100004"],
    ["about:prefLabel:de", "Humanmedizin/Gesundheitswissenschaften"],
    ["about:type", "Concept"],
    ["a", "39738:d2689e2f…:tk-faechergruppen/100004", "wss://relay.edufeed.org", "about"],
    ["objective:id", "https://transferkiosk.net/vocab/tk-projektziele/100007"],
    ["objective:prefLabel:de", "Hochschule: Flexibilisierung & Individualisierung"],
    ["objective:type", "Concept"],
    ["a", "39738:d2689e2f…:tk-projektziele/100007", "wss://relay.edufeed.org", "objective"],
    ["r", "https://transferkiosk.net/p/101553"]
  ],
  "content": "Ein wesentlicher Teil akuter medizinischer Konsultationen …"
}

Kind 30144 — Maßnahme

A documented concrete teaching intervention within a Projekt. Carries narrative sections plus rich classification across many didactic axes.

Required tags

Tag Notes
d Stable identifier (e.g. source URL).
type "TeachingMeasure".
name Measure title (Maßnahmentitel).
description Summary (Zusammenfassung). Also duplicated into content.
a (isPartOf) ["a", "30143:<pub>:<d>", "<relay>", "isPartOf"] to parent Projekt.

Narrative section tags

Each MAY appear at most once. The value is short text; long prose SHOULD be duplicated into content (as markdown headings) and the tag kept only for queryability.

Tag Source
summary Zusammenfassung
challenge Herausforderungen
approach Herangehensweise
context Zusammenhang
prerequisite Voraussetzungen
procedure Vorgehen
outcome Effekte
learnings Learnings
recommendation Empfehlung
tips Tipps

Method / format / tool annotations

Recommended and not-recommended values use distinct tag names so consumers can render the polarity:

Tag Meaning
method:recommended A method the author recommends.
method:notRecommended A method the author warns against.
format:recommended
format:notRecommended
tool:recommended
tool:notRecommended

Concept references

Facet Meaning Vocab d-tag (transferkiosk producer)
audience Zielgruppe tk-zielgruppen
about Fachbereich / Fächergruppe tk-massnahme-fachbereiche, tk-massnahme-faechergruppen
activity Aktivität tk-aktivitaeten
actionScope Aktionsradius tk-aktionsradius
actionField Handlungsfeld tk-handlungsfeld
studyModel Studienmodell tk-studienmodell
effortLevel Zeitaufwand tk-zeitaufwand
staffNeed Personalbedarf tk-personalbedarf
materialNeed Sachmittelbedarf tk-sachmittelbedarf
investmentNeed Investitionsmittelbedarf tk-investitionsmittelbedarf
transferability Transferierbarkeit tk-transferierbarkeit

Extension namespace (ext:tk:*)

The following transferkiosk-specific facets are not in NIP-DIDACTIC core and use the ext namespace:

Facet Source
ext:tk:projectCyclePhase Projektzyklusphase
ext:tk:qualityDimension Qualitätsdimension
ext:tk:qualityDevelopment Qualitätsentwicklung
ext:tk:evaluationLevel Evaluationsebene
ext:tk:evaluationCriterion Evaluationskriterium
ext:tk:evaluationMethod Evaluationsverfahren
ext:tk:fachbezug Fachbezug

Each follows the flat-concept-triple grammar (ext:tk:<facet>:id, ext:tk:<facet>:prefLabel:<lang>, ext:tk:<facet>:type).

Relations

  • ["a", "30143:<pub>:<d>", "<relay>", "isPartOf"] — REQUIRED, to parent Projekt.

Publikationen (NKBIP-01 kind 30040)

Publications are not a NIP-DIDACTIC kind. A Publikation is published as a standard NKBIP-01 Curated Publications index event of kind 30040. (The NKBIP-01 spec document is itself a kind-30817 record — naddr…tn64lg, whose own d-tag is nkbip-01. That is the spec's address, not a tag on any publication event; the publication's own d-tag is the next item below.)

A Publikation carries d (lowercase letters/digits/hyphens, deterministic tk-p{projekt}-pub{id} for Transferkiosk imports), title, type (academic, or book for monographs), summary (abstract; the event content MUST be empty), plain author tags, i external identifier in code form (doi:10.xxxx/…), source (readable landing page), published_on, published_by, and AMB-style creator:* runs (creator:type/creator:name/creator:honorificPrefix) mirroring edufeed-app's 30040 dialect.

NKBIP-01 permits additional tags; Transferkiosk publications carry these extensions:

Tag Meaning
additionalType schema.org type: ScholarlyArticle, Book, Chapter.
editor:name/:type/:honorificPrefix Herausgeber:innen (run per person).
publicationLocation Ort.
pageRange Umfang / Seitenzahlen.
publicationType:* Publikationsart concept triple (vocab tk-publikationsart).
["a", "30143:<pub>:<d>", "<relay>", "isOutputOf"] REQUIRED parent-Projekt link.

Historical note: kind 30145 served this role until 2026-07; those events were deleted (NIP-09) and re-published as kind 30040.

Querying

NIP-01 filter examples

// all projects
{"kinds": [30143]}

// project by its addressable coordinate
{"kinds": [30143], "authors": ["<pubkey>"], "#d": ["https://transferkiosk.net/p/101553"]}

// all measures belonging to a specific project
{
  "kinds": [30144],
  "#a": ["30143:<pubkey>:https://transferkiosk.net/p/101553"]
}

// all publications that came out of any project by this publisher
{"kinds": [30040], "authors": ["<pubkey>"]}

// publications of a specific project (NIP-50 field syntax; the relay
// resolves partOf against its facet — a bare #partOf tag filter is not
// supported)
{"kinds": [30040], "search": "partOf:30143:<pubkey>:<project-d>"}

// projects with a specific subject area
{"kinds": [30143], "#about:id": ["https://transferkiosk.net/vocab/tk-faechergruppen/100004"]}

// measures targeting a specific audience
{"kinds": [30144], "#audience:id": ["https://transferkiosk.net/vocab/tk-zielgruppen/100000"]}

nak CLI examples

PUB=<publisher-pubkey-hex>

# fetch a project
nak req -k 30143 -a $PUB -d https://transferkiosk.net/p/101553 wss://relay.edufeed.org

# all measures of a project
nak req -k 30144 -a $PUB --tag a=30143:$PUB:https://transferkiosk.net/p/101553 wss://relay.edufeed.org

# publication by DOI (code form)
nak req -k 30040 --search "doi:10.3224/gender.v17i3.02" wss://relay.edufeed.org

Reverse Conversion (Nostr event → JSON-LD-ish)

Mirrors NIP-AMB's reverse-conversion section:

  1. Extract tags array.
  2. Group flat tags by prefix; reassemble nested objects via :.
  3. Duplicate-key tags become array elements (order preserved).
  4. d tag → id.
  5. t tags → keywords array.
  6. r tags → out-of-band see-also references (no JSON-LD equivalent).
  7. p tags with role → creator/contributor/author/participant, resolved via kind:0 profiles.
  8. a tags with marker isPartOf/hasPart/isOutputOf/documentsisPartOf/hasPart/isOutputOf/documents properties whose id is a nostr:naddr1… URI (NIP-19 / NIP-21).
  9. a tags with marker matching a flattened-concept facet → resolve to the referenced kind:39738 event for label translation, then merge into the concept object under <facet> alongside the :id/:prefLabel triple.
  10. ext:<ns>:<facet>:<sub> tags → sibling ext.<ns>.<facet> array of concept objects, exactly as in NIP-AMB. Producers MUST NOT fold ext into core properties on reverse conversion.

Reference Implementations

  • transferkiosk crawler + converter — Python reference: crawl.py (raw fetch), extract-vocabs.py, publish-vocabs.py (NIP-VOCAB publish), convert.py (raw → 30143/30144 + NKBIP-01 30040).
  • edufeed amb-relay — generic Nostr relay that already supports addressable events in this range.

References

  • NIP-AMB — flattening grammar and concept triple inherited here.
  • NIP-VOCAB — kinds 39737/39738/39739 for published vocabs.
  • NIP-01 — addressable events.
  • NIP-19nprofile/naddr encodings for reverse conversion.
  • NIP-21nostr: URI prefix.
  • NIP-65 — relay discovery for p-tag relay hints.

Cited links

Discussion

Connect a key to comment.