Ein Google Docs-ähnlicher Realtime-Editor mit Svelte 5, TipTap, Yjs und Nostr als verteiltem Message-Bus.
✅ MVP 1 - Lokaler Editor
- Rich-Text Editor mit TipTap
- CRDT-basierte Konfliktauflösung mit Yjs
- Lokale Kollaboration (mehrere Tabs)
- Offline-Support dank IndexedDB
✅ MVP 2 - Nostr-Integration
- Dezentralisierte Synchronisation über Nostr-Relays
- Unterstützung für NIP-07 Browser-Extensions
- Mode-Switcher (Local/Nostr)
- Robuste WebSocket-Verbindung via
NativeRelay
✅ MVP 3 - Presence & Cursors
- Live-Cursor-Synchronisation
- Farbcodierte Benutzer
- Presence-Liste mit aktiven Nutzern
# Dependencies installieren
pnpm install
# Dev-Server starten
pnpm run dev- Navigiere zu
/editorund wähle eine Document-ID - Öffne das gleiche Dokument in mehreren Browser-Tabs oder Fenstern
- Lokaler Modus: Synchronisation über Browser-Speicher (IndexedDB/Memory)
- Nostr-Modus: Aktiviere eine NIP-07 Extension (z.B. Alby, nos2x) und wähle "Nostr" aus
src/
├── lib/
│ ├── TipTapEditor.svelte # Haupt-Editor-Komponente
│ ├── PresenceList.svelte # User-Presence-Anzeige
│ ├── useLocalYDoc.ts # Lokales Yjs-Setup
│ ├── useNostrYDoc.ts # Nostr-basiertes Yjs-Setup
│ ├── NostrYDocProvider.ts # Yjs ↔ Nostr Sync (Dokument)
│ ├── NostrAwarenessProvider.ts # Yjs ↔ Nostr Sync (Presence)
│ └── nostrUtils.ts # NIP-07 Utilities
└── routes/
└── editor/
├── +page.svelte # Document-Auswahl
└── [documentId]/
└── +page.svelte # Editor-Seite
- Svelte 5 (Runes) - UI Framework
- TipTap - Rich-Text Editor
- Yjs - CRDT für Konfliktauflösung
- Nostr - Dezentrales Messaging-Protokoll
- nostr-tools - Nostr Client Library
- y-protocols - Yjs Awareness Protocol
Siehe /docs für detaillierte Spezifikationen:
AGENTS.md- Entwickler-GuidelinesROADMAP.md- EntwicklungsplanARCHITECTURE.md- System-ArchitekturYJS_NOSTR_SPEC.md- Yjs-Nostr-IntegrationPRESENCE_SPEC.md- Presence & CursorsEDITOR_SPEC.md- Editor-Spezifikation
MIT