Skip to content

feat(analytics): catalogue invite links, moderation, search and Currency Info - #1889

Merged
bmc08gt merged 4 commits into
code/cashfrom
feat/analytics-group-discovery
Oct 30, 2026
Merged

bmc08gt merged 4 commits into
code/cashfrom
feat/analytics-group-discovery

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Gap

Neither app sends anything for these features, so their funnels can't be measured. Evidence is in section 1 and 2 of the 2026-10-29 analytics audit. Catalogue only: no event is sent until an engineer wires it in both apps.

Entries

Event Properties
Group: Invite Link Created State, Error (optional)
Group: Invite Link Revoked State, Error (optional)
Group: Join Request Approved State, Error (optional)
Group: Join Request Denied State, Error (optional)
Group: Member Silenced Duration (new list SilenceDuration), State, Error (optional)
Group: Member Removed State, Error (optional)
Search: Opened none (new domain Search)
Search: Result Tapped Result Type (new list SearchResultType: Chat, Currency, Message, Link)
Token Info: Opened From Search Mint (new SEARCH value on TokenInfoSource)
Token Info: Tile Tapped Tile (new list CurrencyInfoTile: Send, Buy, Buy In, Transactions, More), Mint
Token Info: More Option Picked Option (new list CurrencyInfoMoreOption: Convert, Withdraw, Deposit), Mint
Token Info: Community Chat Tapped Mint
Group: New Opened (changed) Type (new list GroupType: Private, Community), optional

Design notes:

  • Approve and deny are two events, like Chat Muted / Chat Unmuted, not one event with a decision property.
  • SilenceDuration is a new list. MuteDuration doesn't fit: chat mute's last option is "Always", silence's is "Forever" on both apps (SilenceOption.kt:17-27, GroupModeration.swift:26-36).
  • Search has no people or group result kind on either app. Both show Chats (DMs and groups), Currencies, Messages and Links.
  • Community Chat Tapped covers the preview row and the View All list, which share a handler on both apps.
  • Catalogue changes to Group: New Opened make Type a required argument of the generated GroupEvents.newOpened(type) on Kotlin. The one Android call site, NewChatScreen.kt:77, now passes null so the build compiles. That is the only app code touched. iOS has the same break at NewChatScreen.swift:34 and :71 (doNewOpened()) when it bumps SharedCore.
  • kmp/shared-core/spm/.../AnalyticsEvents.swift gets typealiases for the five new lists and SearchEvents.

As wired

Android only; iOS receives the events after the next Publish SharedCore release and a version bump. Outcome events send State on the RPC result and Error on failure, as Group: Created does.

Event Android function Moment
Group: Invite Link Created ManageInvitesViewModel.create, InviteLinkViewModel.create via trackInviteLinkCreated When CreateInvite returns: Created is success; TooMany, NotAvailable, Failed are failure
Group: Invite Link Revoked ManageInvitesViewModel.revoke via trackInviteLinkRevoked When RevokeInvite returns, after the confirm dialog
Group: Join Request Approved ChatViewModel ApproveJoinRequest handler via trackJoinRequestApproved When AdmitLobbyMember returns
Group: Join Request Denied ChatViewModel DenyJoinRequest handler via trackJoinRequestDenied When DenyLobbyMember returns
Group: Member Silenced SilenceUserViewModel.silence via trackMemberSilenced When SilenceUser returns, with the picked SilenceOption
Group: Member Removed MemberModerationViewModel.remove via trackMemberRemoved When BanUser returns, after the confirm
Search: Opened SearchViewModel init Screen opens
Search: Result Tapped SearchViewModel.resultTapped, called from SearchScreen onOpenChat / onOpenCurrency / onOpenLink The tap; message hit (has a message id) is Message, other chat rows and recents are Chat
Token Info: Opened From Search TokenInfoEntry.Search in SearchScreen, mapped in toTokenInfoSource Token Info opens from a currency result
Token Info: Tile Tapped CurrencyInfoContentV2 via trackTileTapped The tap, before anything opens
Token Info: More Option Picked TokenInfoViewModel.presentMore via trackMoreOptionPicked The pick; Convert sends only when it proceeds
Token Info: Community Chat Tapped CurrencyInfoContentV2 preview, CommunityChatsScreen via trackCommunityChatTapped The tap
Group: New Opened NewChatScreen Row tap; Type Private on the group row (new send), Community on the community row (was null)

Join Request Approved/Denied and the other outcome events map their server errors in Conversions.chatResult.

Not included

  • Group: Joined from invite links, Invite Followed and Invite Shared fixes, Group: Edited balance requirements, the notification status page, the photo viewer and the reaction banner.

Wire the events catalogued in this PR through FlipcashAnalytics: invite link
created/revoked, join request approved/denied, member silenced/removed,
Search opened/result tapped, Token Info opened from Search, Currency Info
tile/more option/community chat taps, and Group: New Opened with Type on both
rows (Private row previously sent nothing).

Moderation outcomes report State and Error like Group: Created; the new
error types map in chatResult. Add TokenInfoEntry.Search so Search currency
results report source Search instead of Discovery.
…cash

Drop the explicit null in newOpened now that optional builder params default to null, point search at the test-fixtures modules, and disambiguate the ResourceHelper.getString mocks.
@bmc08gt
bmc08gt force-pushed the feat/analytics-group-discovery branch from d162a31 to 4849234 Compare October 30, 2026 04:14
@bmc08gt
bmc08gt marked this pull request as ready for review October 30, 2026 04:32
@bmc08gt
bmc08gt merged commit 27bff07 into code/cash Oct 30, 2026
6 checks passed
@bmc08gt
bmc08gt deleted the feat/analytics-group-discovery branch October 30, 2026 04:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: tokens Token accounts, balances, token info type: feature New functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant