Deno-basiertes Sync-Modul, das Markdown-Posts mit commonMetadata-Frontmatter aus dem oer.community-Content-Repo als Nostr-Events (Kind 30023 + 30142) auf die edufeed-Relays publiziert.
Status: Phase 0 (Single-Post-Publisher) abgeschlossen. Phase 1 (Discovery + Orchestrator) und Phase 2 (GitHub Action im Mirror-Repo) folgen.
sync/
├── deno.json # Tasks + applesauce/nostr-tools imports
├── parser.ts # YAML-Frontmatter (commonMetadata-Block)
├── events/
│ ├── article.ts # Kind 30023 Builder
│ └── amb.ts # Kind 30142 Builder
├── signer.ts # NIP-46 Bunker via applesauce-signers
├── relay.ts # Single-Event-Publisher via applesauce-relay
└── publish-single.ts # CLI: ein Pfad → 30023 + 30142
Bewusst weggelassen (kommt in Phase 1): Discovery, Image-AMB-Events, Validierung über content-lint hinaus, Tests.
- Deno 2.x
mdparser/.envmitBUNKER_URL=bunker://…(gitignored)- Bunker-Signing-App (Amber, nsec.app, …) bereit zum Approven
cd mdparser/sync
deno task dry-run-single /path/to/post/index.mdGibt beide Events als JSON aus + voraussichtliche naddr mit Fallback-Pubkey.
cd mdparser/sync
deno task publish-single /path/to/post/index.mdConnectet den Bunker (erste App-Approval nötig), signiert beide Events, published 30023 → relay-rpi.edufeed.org, 30142 → amb-relay.edufeed.org. Output: naddr1… der Article-Adresse mit Habla-/Yakihonne-Links für Live-Kommentare.
d-Tag = letzter Pfadteil voncommonMetadata.id(z.B.https://oer.community/foo→foo)- Identischer
d-Tag für 30023 und 30142 — Adresse istkind:pubkey:d, kollidiert nicht a-Cross-Refs zwischen 30023 und 30142 (Markercontentbzw.amb-metadata)- Kind 30142 wird nur erstellt, wenn
type: LearningResource published_ataus YAMLdatePublished,created_at= Sync-Zeitpunkt (Replaceable Events)
docs/superpowers/specs/2026-03-30-md-to-nostr-sync-design.md— vollständige Architektur-Specdocs/superpowers/plans/2026-03-30-md-to-nostr-dry-run.md— Implementation-Plan (Discovery-Variante mit Tests)docs/superpowers/plans/2026-04-29-phase-0-single-post-publisher.md— was tatsächlich in Phase 0 gebaut wurdejoerglohrerde/publish/— Blaupause für Phase 2 (GitHub Action, NIP-46 Bunker)