You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nostr Chat (NIP-17) — Full end-to-end encrypted private messaging with group chats, reactions, media sharing, in-chat BCH payments, typing indicators, and active status.
Rewards App Overhaul — Complete UI/UX redesign with gamification, help tours, points redemption, referral links, and a Join Rewards Program prompt.
P2P Ramp Improvements — Eliminated duplicate API calls, peer info display with trade stats, report user flow, and escrow verification fixes.
Performance & UX — Home page loading optimizations, token list improvements, safe insets, and a reimagined apps page.
New Features
Nostr Chat (NIP-17 Private Messaging)
Encrypted DMs & group chats over Nostr with NIP-17 gift-wrapped events (Kind 14) and NIP-78 group metadata
Emoji reactions (NIP-25) with animated badges, detail popup, and undo
Reply, edit, delete with a long-press floating context menu; edit/delete within a 1-minute window
Encrypted media sharing via Blossom servers with image resize prompts (Small/Medium/Large) for files >= 1 MB, lazy-loading, and persistent thumbnail cache
In-chat BCH payments via /send <amount> [currency] command with swipe-to-confirm and rich payment cards
Read receipts via NIP-25 Kind 7 "👀" reactions, gift-wrapped for privacy, with unread badge counts
Active status indicators (green dots) showing contacts active within the last 3 minutes, backed by WebSocket + touch API
Typing status indicator riding on the existing status WebSocket, throttled to 3s
Push notifications via Watchtower OAuth with client-side registration and in-app fallback for web/PWA
User profiles with avatar upload (Blossom storage), display name publishing, and BCH address publishing (NIP-78)
Contact management — add, rename, block, archive, delete; shareable group invite links with request-to-join flow
Server-authoritative room list with encrypted group names (NIP-44); relay messages no longer mutate room objects
Per-wallet isolation of chat state (rooms, messages, caches, profile) via byWallet[walletHash] structure
Telegram-like UI with tabs (All/Unread/Archived), floating chat icon in footer with animated unread badge, theme-aware glassmorphic styling, multiline auto-grow textarea, and relay connection status chip
Reliability — exponential backoff for relay resubscription, WebSocket ping/keepalive, auto-resubscribe on background tab return
Renamed PrivateGroup → ClosedPrivateGroup and PublicGroup → OpenPrivateGroup
Chat disabled on chipnet
Rewards App
Complete UI/UX redesign of Rewards home, User Rewards, and RFP (Refer-a-Friend) pages with achievement icons, points badges, and reusable cards
Collapsible rewards summary on home page showing aggregated points, LIFT conversion ratio, and BCH/fiat prices fetched from Cauldron
Gamified points redemption — RedeemPointsDialog with celebration effects, real-time max redeemable from API, dynamic token balance from promo contract, and integration with rewards swap contract
Redemption history dialog tracking point-to-token conversions
Referral program — QR code sharing via ReferralQrDialog encoding full referral URL (https://rewards.paytaca.com/referral?code=...), deep link handling on Android & iOS, and auto-open referral dialog with pre-filled code
Help tours — data-driven HelpCard component with step-by-step guides, contextual highlighting, scroll-to-view, and smart card placement
Transaction points — automatic point awarding for marketplace/merchant, cashin, eload, and P2P ramp transactions
One-time points tracking for first-time user actions (first 7 transactions)
Join Rewards Program prompt shown once after initial app load, tracked per-wallet; defers until backup reminder is resolved
Referral banner for new users who skipped entering a referral code during wallet creation
Beta flag removed — Rewards is now a production app
P2P Ramp
Peer info component with trade stats (completed/failed/completion %) and reported badge
Report user flow with reason selection dialog and greyscale styling for reported users
Price percentage indicator on TradeInfoCard with skeleton loader
Rate Your Experience with pre-composed feedback chips and trade breakdown display
Apps Page
Reimagined apps page with categorized list, sticky category chips, visible descriptions, beta section, and search bar
Token info card on transaction history with Send/Receive/Swap/Chart actions
View All card on home page when favorite tokens exceed the subscription limit
BCH info card on transaction history (previously only cash tokens)
Home page performance — batched price API calls (parallel chunks of 10), store mutation guards skipping no-op updates, and excluded unused senders/recipients fields from list views
Transaction caching in localStorage for instant home page rendering
Chat avatar caching in localStorage for instant display
Bug Fixes
P2P Exchange
Escrow verification not triggering after swipe-to-escrow — reordered EscrowTransfer.vue so escrowPendingOrder() is awaited before emitting success, preventing a race that left the page stuck in escrow-bch state until manual navigation. (#731)
Wallet / Transactions
Token metadata inconsistency between home/asset-list and transaction history resolved via BCMR store lookup and background enrichment.
Address scan — cached master HD node with TTL, fixed usedDiscovery fallback, and added balance refresh.
Imported wallet showing zero balance — getMnemonic(index) now tries hash-based storage before migration flag, fixing mnemonic retrieval for wallets imported from other wallets.
Multisig UTXO type mismatch — false "Insufficient BCH balance" errors fixed by converting targetSatoshis to bigint before UTXO selection.
WalletConnect message signing — fixed "buffer length error" by replacing BCHjs signer with libauth; changed response format from hex to base64 to match personal_sign expectations.
UI / Display
Safe inset bottom for fixed-bottom class — fixed marketplace cart/chat button spacing at the bottom of the screen. (#717)
Localization
Added ~300 new Nostr chat translation keys across 17 locales.
Added missing translation keys for apps page, chat profile prompt, and ResetChatDialog.
Wrapped hardcoded strings in rewards app with translation keys.
German (de): Deposit changed from "Anzahlung" to "Empfangen"; added missing Share → "Teilen".
Added --key and --keys flags to i18n tooling for targeted re-translation.
Technical Changes
New store module: src/store/nostr-chat/ — complete Vuex store with per-wallet state isolation
New services: src/services/nostr-chat.js, src/wallet/nostr.js (NIP-06/17/25/59), src/wallet/nostr-media.js (Blossom), src/utils/chat-markup.js, src/utils/watchtower-oauth.js
New chat components: ChatInput, MessageBubble, RoomList, SendBchDialog, RelayStatusChip
New chat pages: index, conversation, dm-info, group-info, profile, debug/push-notifications-reset