Summary
useNostr.ts is 668 lines doing everything — auth, publishing, article fetching, relay management, zap verification. This makes it hard to reason about, test, and maintain.
Proposed Split
useAuth.ts — Login/logout, NIP-07/NIP-46/nsec/Android signer, session management
usePublish.ts — Article building, signing, relay publishing, zap-gated publishing
useArticles.ts — Fetching articles, drafts, profiles from relays
useRelays.ts — Relay list management, read/write relay preferences
- Keep
useNostr.ts as a thin orchestrator that composes the above
Principles
- Each hook should be independently testable
- Shared state (pubkey, signer) passed via context or composition
- No circular dependencies between hooks
Acceptance Criteria
Summary
useNostr.tsis 668 lines doing everything — auth, publishing, article fetching, relay management, zap verification. This makes it hard to reason about, test, and maintain.Proposed Split
useAuth.ts— Login/logout, NIP-07/NIP-46/nsec/Android signer, session managementusePublish.ts— Article building, signing, relay publishing, zap-gated publishinguseArticles.ts— Fetching articles, drafts, profiles from relaysuseRelays.ts— Relay list management, read/write relay preferencesuseNostr.tsas a thin orchestrator that composes the abovePrinciples
Acceptance Criteria
useNostris a thin composition layer