# Nostr Profile Manager Lightweight typescript micro app for basic nostr profile management. Current USP is offline backup and restore. Minimial javascript dependencies. no JS frameworks. no state management tools. ## Live instances - https://metadata.nostr.com/ ## Features Supported profile events: kind `0`, `10002` and `3`. ##### Backup and Restore - [x] backup your profile events to offline browser storage - [x] review changes between backups - [x] `0` - [x] `10002` - [x] `3` - [x] selectively restore previous versions - [x] download profile backup history as JSON file - [ ] restore backups from JSON file ##### Refine - [x] Metadata - [x] basic editing - [x] nip05 verifiation - [x] profile and banner previews - [x] preserve, edit and remove custom properties - [x] Contacts - [x] Add Contacts based on nip05, nip19 (npub, nprofile or naddr) or hex - [x] keyword search profiles to find contacts - [ ] keyword search profiles to find contacts of contacts - [x] Remove Contacts - [x] Edit petname and relay - [ ] Suggestions Engine - [ ] Contacts recommendation based off social graph - [ ] Suggest updates to contact relay based on Contact's kind `10002` and `2` events - [x] Relays - [x] editable table of read / write relays kind `10002` event - [ ] auto suggestion of `10002` event based on contact's relays if no event present - [ ] evaluation of `10002` based on contact's - [ ] decentralisation score to encourage users not to use the same relay - [ ] manage event distribution to relays - [ ] Show which and how many relays return an each event (and including historic events) - [ ] Show warning if selected write relays don't - [ ] suggest republishing events (particularly `10002`) to spread them to more relays if appropriate - [ ] look far and wide for events - cycle through all known relays to find current and previous versions of profile events to enable restoration. reccommended only when accessed through a VPN ##### Lightweight - [x] connects to the minimum number of relays - [x] connect relays specified in `10002` or 3 default relays - [ ] minimises the number of open websockets - [x] use blastr relay to send profile events far and wide - [ ] efficent (TODO: currently the 'Contacts' functionality is very inefficent)