Enhance the merchant creation process by automatically generating Nostr keypairs
for users who don't have them, and streamline the API interface.
Changes:
- Add CreateMerchantRequest model to simplify merchant creation API
- Auto-generate Nostr keypairs for users without existing keys
- Update merchant creation endpoint to use user account keypairs
- Improve error handling and validation in merchant creation flow
- Clean up frontend JavaScript for merchant creation
This ensures all merchants have proper Nostr keypairs for marketplace
functionality without requiring manual key management from users.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove backend restriction on one merchant per user
- Add "Generate New Key" dialog with npub/nsec display
- Add "Import Existing Key" option with duplicate check
- Change "Save" to "Save & Publish" in edit profile dialog
- Remove standalone Publish button (now part of Save)
- Add trash icon to saved profile for removal
- Show display_name in saved profiles dropdown
- Hide nsec by default with eye toggle in generate dialog
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Call nostrclient /relays API directly from frontend for accurate status
- Show correct error messages from API response (body.detail)
- Add orange warning state for no relays configured
- Show relay count when connected (X of Y connected)
- Simplify status logic: 200 = green, no relays = orange, error = red
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /api/v1/status endpoint to check nostrclient availability
- Add color-coded "Connect" button (red/orange/green) based on status
- Show dropdown with connection details (relays count, websocket status)
- Add warning banner when nostrclient extension is not available
- Update info card with description of extension functionality
Closes#132🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reorganizes the merchant dashboard into a tab-based layout:
- Tabs: Merchant | Shipping | Stalls | Products | Messages | Orders
- Publish dropdown with NIP-15 options (NIP-99 disabled/coming soon)
- Consistent UI patterns across all tabs:
- Search/filter/buttons aligned right
- Actions column on right side of tables
- Equal-width tabs
- Stalls tab: popup edit dialog, navigation to Products/Orders
- Products tab: filter icon dropdown for stall filtering
- Modular component structure for each tab section
- Fixed product API calls to use correct endpoints
Closes#119🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: restore stalls from `nostr` as pending
* feat: stall and prod last update time
* feat: restore products and stalls as `pending`
* feat: show pending stalls
* feat: restore stall
* feat: restore a stall from nostr
* feat: add blank `Restore Product` button
* fix: handle no talls to restore case
* feat: show restore dialog
* feat: allow query for pending products
* feat: restore products
* chore: code clean-up
* fix: last dm and last order query
* chore: code clean-up
* fix: subscribe for stalls and products on merchant create/restore
* feat: add message type to orders
* feat: simplify messages; code format
* feat: add type to DMs; restore DMs from nostr
* fix: parsing ints
* fix: hide copy button if invoice not present
* fix: do not generate invoice if product not found
* feat: order restore: first version
* refactor: move some logic into `services`
* feat: improve restore UX
* fix: too many calls to customer DMs
* fix: allow `All` customers filter
* fix: ws reconnect on server restart
* fix: query for customer profiles only one
* fix: unread messages per customer per merchant
* fix: disable `user-profile-events`
* fix: customer profile is optional
* fix: get customers after new message debounced
* chore: code clean-up
* feat: auto-create zone
* feat: fixed ID for default zone
* feat: notify order paid