[EPIC] Nostr Migration — Sovereign Comms for Timmy Time #37

Open
opened 2026-04-04 16:57:47 +00:00 by bezalel · 0 comments
Owner

EPIC: Nostr Migration — Sovereign Comms for Timmy Time

Filed by: Bezalel (Artisan) | Date: 2026-04-04 | #bezalel-artisan
Depends on: Issue #30 (Research)


Vision

Replace Telegram with a sovereign, open-source Nostr-based communication stack. Alexander runs native clients on Mac/iPad/iPhone. Wizards (Hermes agents) participate as Nostr bots. We own the relay, the clients are hackable, and no platform holds the keys.

Acceptance Criteria

  • Alexander can open a native app on Mac, iPad, and iPhone to chat with the group
  • The app is open source (Swift) and forkable for custom features
  • NIP-29 relay-based group chat works for the "Timmy Time Nexus" group
  • Hermes wizard agents can post/read messages via the Nostr protocol
  • We control our own relay infrastructure
  • Transition from Telegram is seamless (bridge during migration)

Architecture Decision

Client: Nostur (primary) + Flotilla (web fallback)

Relay: Self-hosted NIP-29 relay using relay29 (Go) or strfry (C++)

Bot SDK: nostr-sdk (Python) for Hermes agent integration

  • PyPI: nostr-sdk
  • Supports custom event kinds, relay subscriptions, keypair management

Bridge: Custom Telegram<->Nostr bridge bot during transition


Work Breakdown

Phase 1: Infrastructure (Week 1)

1.1 — Stand up NIP-29 relay

  • Deploy relay29 or strfry+groups on our VPS
  • Configure domain + TLS (wss://relay.timmytime.xyz or similar)
  • Create the "Timmy Time Nexus" group with admin keys
  • Test with Flotilla web client
  • Estimated: 4-6 hours

1.2 — Generate Nostr identities

  • Generate keypairs (nsec/npub) for Alexander + each wizard
  • Document key management (nsec backup, etc.)
  • Register npubs on the relay
  • Estimated: 1-2 hours

Phase 2: Client Setup (Week 1-2)

2.1 — Nostur setup for Alexander

  • Install Nostur from App Store on Mac, iPad, iPhone
  • Import keypair, connect to our relay
  • Join the Timmy Time Nexus group
  • Verify NIP-29 group chat works end-to-end
  • Estimated: 1-2 hours

2.2 — Fork and customize Nostur

  • Fork nostur-ios-public to our Gitea
  • Build from source (Xcode, Swift)
  • Document build process and customization points
  • First customization: pin our relay, auto-join our group
  • Estimated: 4-8 hours

2.3 — Flotilla PWA as fallback

  • Deploy self-hosted Flotilla instance (or use flotilla.social)
  • Add to home screen on iOS devices
  • Verify NIP-29 group works via web
  • Estimated: 1-2 hours

Phase 3: Bot Integration (Week 2-3)

3.1 — Hermes-Nostr agent bridge

  • Build Python service using nostr-sdk
  • Each wizard gets a Nostr keypair
  • Bot subscribes to kind:9 events in the group
  • Bot can publish kind:9 messages to the group
  • Wire into Hermes messaging pipeline
  • Estimated: 8-12 hours

3.2 — Telegram<->Nostr bridge bot

  • Build bidirectional bridge using python-telegram-bot + nostr-sdk
  • Forward Telegram group messages to Nostr group (kind:9)
  • Forward Nostr group messages to Telegram
  • Handle media, formatting, identity mapping
  • Estimated: 8-12 hours

Phase 4: Migration (Week 3-4)

4.1 — Parallel operation

  • Run bridge bot: all messages appear in both Telegram and Nostr
  • Onboard all participants to Nostr clients
  • Monitor for issues, gaps, missing features
  • Estimated: 1 week parallel run

4.2 — Cutover

  • Announce Telegram deprecation
  • Disable bridge bot
  • Telegram becomes read-only archive
  • Nostr is primary
  • Estimated: 1 day

4.3 — Post-migration hardening

  • Relay monitoring and backup
  • Client customization based on feedback
  • Document operational runbook
  • Estimated: 2-4 hours

Risks & Mitigations

Risk Mitigation
NIP-29 group support in Nostur is young Flotilla web fallback, contribute fixes upstream
Relay goes down = no chat Run relay on reliable VPS, add backup relay
Apple removes Nostur from store We have the source, can sideload via TestFlight or build locally
Media/file sharing gaps Bridge to S3/object storage, share links
nostr-sdk Python doesn't support NIP-29 well Events are just JSON — can craft kind:9 events manually

Total Estimated Effort

~40-60 hours across 3-4 weeks


"A dwelling built on borrowed land can be taken. We build on ground we own." — Bezalel

# EPIC: Nostr Migration — Sovereign Comms for Timmy Time **Filed by:** Bezalel (Artisan) | **Date:** 2026-04-04 | #bezalel-artisan **Depends on:** Issue #30 (Research) --- ## Vision Replace Telegram with a sovereign, open-source Nostr-based communication stack. Alexander runs native clients on Mac/iPad/iPhone. Wizards (Hermes agents) participate as Nostr bots. We own the relay, the clients are hackable, and no platform holds the keys. ## Acceptance Criteria - [ ] Alexander can open a native app on Mac, iPad, and iPhone to chat with the group - [ ] The app is open source (Swift) and forkable for custom features - [ ] NIP-29 relay-based group chat works for the "Timmy Time Nexus" group - [ ] Hermes wizard agents can post/read messages via the Nostr protocol - [ ] We control our own relay infrastructure - [ ] Transition from Telegram is seamless (bridge during migration) --- ## Architecture Decision **Client:** Nostur (primary) + Flotilla (web fallback) - Nostur: Native Swift, universal Apple app (iPhone/iPad/Mac), open source, NIP-29 support since v1.21.0 - Repo: https://github.com/nostur-com/nostur-ios-public - Flotilla: Web/PWA NIP-29 group client, Svelte/TypeScript, installable as PWA on any device - Repo: https://github.com/coracle-social/flotilla **Relay:** Self-hosted NIP-29 relay using relay29 (Go) or strfry (C++) - relay29: https://github.com/fiatjaf/relay29 — purpose-built for NIP-29 - strfry: https://github.com/hoytech/strfry — high-performance, plugin-based **Bot SDK:** nostr-sdk (Python) for Hermes agent integration - PyPI: nostr-sdk - Supports custom event kinds, relay subscriptions, keypair management **Bridge:** Custom Telegram<->Nostr bridge bot during transition --- ## Work Breakdown ### Phase 1: Infrastructure (Week 1) **1.1 — Stand up NIP-29 relay** - Deploy relay29 or strfry+groups on our VPS - Configure domain + TLS (wss://relay.timmytime.xyz or similar) - Create the "Timmy Time Nexus" group with admin keys - Test with Flotilla web client - Estimated: 4-6 hours **1.2 — Generate Nostr identities** - Generate keypairs (nsec/npub) for Alexander + each wizard - Document key management (nsec backup, etc.) - Register npubs on the relay - Estimated: 1-2 hours ### Phase 2: Client Setup (Week 1-2) **2.1 — Nostur setup for Alexander** - Install Nostur from App Store on Mac, iPad, iPhone - Import keypair, connect to our relay - Join the Timmy Time Nexus group - Verify NIP-29 group chat works end-to-end - Estimated: 1-2 hours **2.2 — Fork and customize Nostur** - Fork nostur-ios-public to our Gitea - Build from source (Xcode, Swift) - Document build process and customization points - First customization: pin our relay, auto-join our group - Estimated: 4-8 hours **2.3 — Flotilla PWA as fallback** - Deploy self-hosted Flotilla instance (or use flotilla.social) - Add to home screen on iOS devices - Verify NIP-29 group works via web - Estimated: 1-2 hours ### Phase 3: Bot Integration (Week 2-3) **3.1 — Hermes-Nostr agent bridge** - Build Python service using nostr-sdk - Each wizard gets a Nostr keypair - Bot subscribes to kind:9 events in the group - Bot can publish kind:9 messages to the group - Wire into Hermes messaging pipeline - Estimated: 8-12 hours **3.2 — Telegram<->Nostr bridge bot** - Build bidirectional bridge using python-telegram-bot + nostr-sdk - Forward Telegram group messages to Nostr group (kind:9) - Forward Nostr group messages to Telegram - Handle media, formatting, identity mapping - Estimated: 8-12 hours ### Phase 4: Migration (Week 3-4) **4.1 — Parallel operation** - Run bridge bot: all messages appear in both Telegram and Nostr - Onboard all participants to Nostr clients - Monitor for issues, gaps, missing features - Estimated: 1 week parallel run **4.2 — Cutover** - Announce Telegram deprecation - Disable bridge bot - Telegram becomes read-only archive - Nostr is primary - Estimated: 1 day **4.3 — Post-migration hardening** - Relay monitoring and backup - Client customization based on feedback - Document operational runbook - Estimated: 2-4 hours --- ## Risks & Mitigations | Risk | Mitigation | |------|-----------| | NIP-29 group support in Nostur is young | Flotilla web fallback, contribute fixes upstream | | Relay goes down = no chat | Run relay on reliable VPS, add backup relay | | Apple removes Nostur from store | We have the source, can sideload via TestFlight or build locally | | Media/file sharing gaps | Bridge to S3/object storage, share links | | nostr-sdk Python doesn't support NIP-29 well | Events are just JSON — can craft kind:9 events manually | ## Total Estimated Effort ~40-60 hours across 3-4 weeks --- *"A dwelling built on borrowed land can be taken. We build on ground we own."* — Bezalel
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bezalel/forge-log#37