Skip to content

Release v0.25.0

Latest

Choose a tag to compare

@joemarct joemarct released this 04 Jul 16:20

Highlights

  • 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 PrivateGroupClosedPrivateGroup and PublicGroupOpenPrivateGroup
  • 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
  • Pinned apps with long-press context menu
  • List/grid view toggle replacing the previous tour

Wallet & Home

  • Token list improvements — drag reorder fixes, hide/unhide assets (replacing delete), eye icon toggles
  • 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 balancegetMnemonic(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
  • Rewards components: AchievementCard, AchievementIcon, PointsBadge, HelpCard, ErrorCard, TransactionItem/TransactionList, PointsReceivedDialog, ReferralQrDialog, RedeemPointsDialog, RedeemHistoryDialog, JoinRewardsDialog
  • PromoContract — updated artifact, rewards swap contract integration, points withdrawal with fee handling, Watchtower UTXO fetching with getUtxos() fallback
  • EngagementHub utilities — reorganized env vars, new API calls for LIFT conversion ratio, redemption history, max redeemable, swap contract details
  • Dependencies — updated nostr-tools, @wizardconnect/wallet, bitcoincash-oauth-client

Pull Requests Merged

  • #692 — Improvements/rewards app
  • #713 — NIP-17 Nostr private messaging chat
  • #714 — Rewards app translations
  • #715 — P2P Ramp improvements
  • #716 — Miscellaneous UI/UX improvements
  • #717 — Safe inset bottom for fixed-bottom class
  • #718 — Token list UI improvements
  • #719 — Token info card & view all card on home page
  • #720 — Wallet UX: seed phrase, preferences, per-wallet chat isolation
  • #721 — Various UI fixes and improvements
  • #722 — Missing translation keys and user-rewards null crash
  • #723 — Active status indicator with WebSocket + touch API
  • #724 — Nostr chat activity improvements
  • #725 — Server-authoritative room list
  • #726 — Home page loading improvements
  • #727 — Rewards referral code link & deep linking
  • #728 — Rename PrivateGroup/PublicGroup terminology
  • #729 — Join Rewards Program button
  • #730 — Promo contract address subscription
  • #731 — Apps UX improvements (escrow verification fix)
  • #732 — Chat typing status indicator
  • #733 — Fix chat profile horizontal overflow on Android
  • #734 — Fix RFP page hang when navigating from rewards home for new users