Reaktor DocsBestBudsMarket Readiness

BestBuds - Product UX

BestBuds Market Readiness UX Audit

Expanded screen-by-screen audit of the real BestBuds app after the prototype-style migration, grounded in the app graph and broader research on messaging, events, real-world social coordination, trust, and retention.

Use whenPolishing the actual Android, iOS, and desktop app UI for a public-quality release.
SourceCodex scan of modules/app, modules/design, prototype, targets/appWeb, and visual reference apps.
Route/docs/bestbuds-market-readiness-ux-audit

Executive Summary

BestBuds is no longer a generic chat shell. The migration has moved the app toward a warm editorial social product with staged campaigns, real-world events, friend profiles, palette switching, and a scoped design component system. The next step is to make every screen express the product promise: meet compatible people, build trust in a small circle, do something in the real world, and keep the right people.

What works now

The core app graph is coherent. Chat, campaign, discover, events, friends, profile, palette, and dev routes are visible in the app. Shared tokens and scoped components give us a real foundation for a consistent visual system.

What still feels pre-market

Several CTAs are placeholders, profile creation and edit routes are empty states, event creation is not wired, campaign details are shallow, and the first-time experience does not yet explain why BestBuds is different in the first 30 seconds.

What will make it memorable

Turn the app into a living social cockpit: day-by-day reveal, Budbot prompts, stronger event cards, beautiful group profiles, micro-animations, expressive avatar stacks, explicit trust signals, and end-to-end chat-to-event-to-friend loops.

Market bar: a first-time user should understand "this creates real circles, not another infinite feed" before they reach the chat list. A returning user should immediately see what changed, who needs a reply, and what real-world action is next.

Product Loop

BestBuds should not compete as a prettier messaging app. It should own a loop that ordinary social products do not complete well.

Loop stageWhat the app must make obviousPrimary screensCurrent gap
EnterBestBuds creates small, time-boxed circles for real-world connection.Start, onboardingLogin is functional, but the value proposition is mostly hidden behind auth.
RevealTrust grows over days, with identities and context unlocking progressively.Chat, group profile, campaignThe prototype has reveal schedule and lock cards; the real app has only light stage language.
BondConversation should have prompts, reactions, replies, photos, stickers, and social context.Chat, chat listChat is much improved, but Budbot and group context need more presence.
MeetThe app should convert conversation energy into plans and events.Public events, private events, create eventEvents look better, but add/create/join flows are mostly placeholders.
KeepGood connections become permanent friends with memory and continuity.Friends, profiles, campaign historyFriends list exists, but profile history and proof of relationship are thin.

Experience North Star

Every screen should answer one of three questions: "Who should I connect with?", "What should I say or do next?", and "Why should I trust this person or circle?" If a screen cannot answer one of those, it should be redesigned or removed from the main path.

Experience Principles

BestBuds should feel like a small-circle social operating system, not a feed, dating app, or generic chat wrapper. These principles should be used as review criteria for every new screen and component.

1. Small Circle First

The main unit is a circle with a purpose, not a post. Every home surface should make the circle, its members, and its next shared action visible.

2. Real-World Bias

The product should keep pushing conversations toward plans, events, walks, meals, classes, games, or meetups. Engagement is useful only when it becomes shared time.

3. Trust Is Interface

Trust cannot live only in policy. Reveal levels, permission explanations, relationship sources, mutuals, safety controls, and data-use copy must be visible in the product surface.

4. Pacing Beats Volume

BestBuds should avoid infinite-scroll pressure. Daily reveal, limited prompts, and timed plans can create anticipation without making the app feel addictive in the wrong way.

5. Actionable Beauty

Every beautiful card needs a next action. A poster, profile, campaign, or group card should let the user reply, RSVP, save, plan, react, or refine the recommendation.

6. Failure Feels Human

Failed sends, empty circles, denied permissions, no RSVP, or missing profile data need carefully written states with recovery actions, not generic errors.

Design review rule: if a screen is visually beautiful but does not advance trust, conversation, or a real-world plan, it is not finished.

Research Map

Broader research supports the BestBuds premise: people already use social platforms daily, but the opportunity is to turn that frequency into healthier, smaller, real-world connection. The product should synthesize the best mechanics from social, event, and coordination products without inheriting their worst incentives.

Research areaRelevant findingBestBuds design implication
Social connection as health infrastructureThe U.S. Surgeon General frames social connection as critical to individual and community health, with digital environments explicitly called out as one lever.Position BestBuds around meaningful connection and local social infrastructure, not follower growth. Product metrics should measure plans, friendships, and healthy participation.
Teen and young-adult social frequencyPew's 2025 teen platform data shows high daily usage across YouTube, TikTok, Snapchat, and Instagram, with major platforms competing for habitual attention.BestBuds cannot win only by being another daily app. It needs a different reward: "I met people I actually want to keep seeing."
Connection and pressure tradeoffPew's 2022 social media report shows teens credit platforms with connection, creativity, and support, while also reporting pressure, drama, and personal-data concern.Use prompt-led expression and small groups, but avoid public popularity mechanics. Add visible privacy control and keep performance pressure low.
Event planning systemsOutWithFriendz studied 500+ users and 300+ group events and identified mobility, individual preferences, host preferences, and group voting as important planning factors.Events need availability, venue, distance, host preference, and group voting primitives. A static event card is not enough.
Group coordination productsProducts like Let’s and Plandra make polls, checklists, expense splitting, photo sharing, calendar conflict, and group chat part of the planning surface.BestBuds should make planning inside chat feel native: poll, date, venue, checklist, memory, and post-event recap should be message-native objects.
Activity communitiesStrava turns real-world actions into social proof through goals, challenges, routes, clubs, feeds, privacy controls, and grouped activities.BestBuds should create social proof around actual meetups and shared moments, with privacy boundaries clear enough for location-sensitive experiences.
Anti-pattern to avoid: a beautiful feed that still leaves users alone. BestBuds should optimize for circles that meet, not content that scrolls.

Reference Apps

These are not competitors to copy one-to-one. They are references for interaction quality, emotional pacing, and product mechanics that map to BestBuds.

ReferenceWhat to studyBestBuds application
HingeProfiles are structured around prompts and specific content interactions, not only a swipe stack. Roses and Standouts also show how one high-intent signal can be visually elevated.Make profile and friend screens prompt-first. Let users react to a specific prompt, campaign memory, photo, or event preference instead of only tapping "Message".
Bumble BFF / Bumble For FriendsFriend discovery now leans into group connection and real plans, including group meetup mechanics.BestBuds should make "join a plan" and "create a small hang" first-class across chat, events, and group profiles.
PartifulEvents feel expressive, aesthetic, shareable, and socially alive through invite pages, RSVP visibility, comments, photos, and updates.Public and private events need poster-level visual design, guest energy, RSVP state, comments, updates, and post-event photo memory.
Apple InvitesEvents become richer when invitation, RSVP, shared photo album, music playlist, web access, and memory capture are treated as one product surface.BestBuds event detail should connect the plan, the group, the guest list, the playlist/photo memory, and the after-event recap instead of ending at RSVP.
MeetupInterest-based groups and local events are discoverable through categories, search, map, RSVP, organizer tools, discussion, and direct messaging.Discover should combine "who you might like" with "what you can do together this week." The map/category layer matters once events become real inventory.
Instagram DMsMessaging retention comes from fast replies, presence, rich media, pinned chats, themes, reactions, edits, scheduling, and low-friction sharing.BestBuds chat should gain edit/delete, voice notes, pinned prompts, event shares, richer attachment composer, and persistent thread identity.
DiscordCommunities work because text, voice, events, permissions, polls, roles, and embeds are all native primitives inside one server context.Group profile should own permissions, event links, polls, member state, and rich shared objects. Chat should not be only text bubbles.
GenevaGroup chat works when chat, events, calendar, polls, pins, attachments, reactions, and rooms coexist.Group profile should become the circle hub: members, pinned plan, prompts, events, polls, memory wall, and safety/trust controls.
Let’s / PlandraSocial coordination products reduce planning friction with voting, suggestions, conflict detection, checklists, expense splitting, and shared photos.Add event polls and planning objects directly into BestBuds chat, then turn accepted plans into event detail pages automatically.
StravaReal-world actions become repeatable social loops through goals, group challenges, clubs, activity feeds, and privacy controls.Translate activity proof into social proof: completed events, shared moments, recurring plans, and circle milestones should become profile and group memories.
Locket and BeRealClose-circle social products feel intimate by limiting audience, reducing performance pressure, and emphasizing authentic moments.Do not turn BestBuds into a public feed. Use small-circle constraints, candid moments, and low-pressure daily check-ins.
CREDPremium perception comes from consistency, motion, tactile components, and a complete design language that can support many product surfaces.BestBuds needs a custom visual language for cards, menus, inputs, event posters, stage badges, and rewards rather than default Material surfaces.

Screen Inventory

The app graph currently exposes the following market-facing surfaces. This audit treats dev/admin as a release hygiene item, not a consumer feature.

AreaFiles scannedCurrent qualityMarket risk
Start / loginStartScreen.ktFunctional and visually lighter; typewriter moment gives some brand personality.Does not yet sell the product before login. Dev impersonation avatars must be hidden in release builds.
OnboardingOnboardingScreen.kt, OnboardingViews.ktQuestion flow works with custom controls.Too questionnaire-like. Needs profile preview, trust copy, privacy explanations, and completion reward.
Chat listChatsScreen.kt, ChatViews.ktGood structural upgrade: hero, filters, sections, unread state, relation chips.Needs stronger visual hierarchy, day/reveal states, pinned plan, archived section, search/new chat actions.
Chat threadChatScreen.kt, ChatViews.kt, MessageView.ktBest current surface. Custom composer, reply, reactions, stickers, images, forwarding, presence, and member rail exist.Still missing the prototype's campaign reveal system, Budbot assistant panel, event cards, richer composer, and polished media message layouts.
CampaignsCampaignScreen.kt, CampaignComponents.ktStage tokens, trust ring, member stack, and stage track are strong.No detail route or story depth. CTAs are mostly TODO. Current screen can feel like a static list.
DiscoverDiscoverScreen.ktSearch and campaign cards are present.Needs recommendation explanation, map/local context, filters, "why this circle", and join confirmation.
EventsPublicEventsScreen.kt, PrivateEventsScreen.kt, CreateEventScreen.ktPublic screen has hero, modes, search, event rows. Private screen uses shared event cards.Create/add flows are not connected. Public events need poster art, RSVP state, details, sharing, and social proof.
FriendsFriendsScreen.ktSimple permanent friends list with profile navigation.Needs search, groups, relationship memory, recent activity, and "plan again" actions.
ProfilesProfileScreen.kt, FriendProfileScreen.kt, GroupProfileScreen.ktPersonal and group profiles are visually upgraded; friend profile is simpler.Create/edit profile routes are empty. Profile screens need media, prompts, campaign history, trust, privacy, and clearer CTAs.
Palette / menu / navigationPaletteScreen.kt, BestBudsTopBar.kt, BestBudsContainers.ktPalette selector is useful for design work; top bar and bottom nav are functional.Overflow menu is still utilitarian. Navigation should feel like part of the brand and avoid release-only dead ends.

App Architecture Findings

The app is further along than a pure visual shell. The market work should use the existing graph, repositories, realtime chat state, analytics hooks, and shared design components instead of rebuilding those layers again.

Strong foundation

The route graph already covers start, onboarding, chat list, chat thread, profiles, campaigns, discover, events, friends, palette, and dev surfaces. The migrated design components are used broadly across consumer screens.

Hidden leverage

ChatInteractor already has optimistic sends, retry/discard, reactions, replies, forwarding, typing, presence, pagination, participants, cache-first loading, and WebSocket updates.

Market blockers

Several paths still stop at TODO callbacks: campaign open/join/detail, private event action/card, event image picker, profile save, create/edit profile completion, and chat call action.

Route Graph Reality

RouteConsumer meaningRelease implication
/Start/auth entry.Must become the premium first impression and hide debug impersonation in release.
/onboardingProfile and matching setup.Must become a social passport builder, not a form sequence.
/homeMain tab container.Must avoid dead tabs and surface the most valuable daily action first.
/chats, /chats/{id}Daily social cockpit and message thread.Highest retention surface; needs reveal, planning, Budbot, richer shared objects, and polished failure states.
/chats/profile/friend/{id}, /chats/profile/group/{id}Friend/group context from chat.Group icon tap should open a preview sheet first, then full profile with members, plan, memory, and safety.
/profiles/user, /profiles/create, /profiles/user/editPersonal identity and setup.Create/edit cannot remain empty or placeholder; either finish the flow or remove from release nav.
/campaigns/current, /campaigns/discoverCircle lifecycle and discovery.Needs detail route, join state, recommendation explanations, and route-to-chat/profile wiring.
/events/private, /events/public, /eventsIRL conversion surface.Needs event detail, create, RSVP, guest, map, share, reminder, and memory states.
/friends, /friends/{id}Permanent social graph.Needs relationship memory, plan-again CTA, and recent shared activity.
/palette, /devDesign/user mood and internal tooling.Palette can be an "App mood" feature; dev must be release-gated.

Implementation Leverage Already Present

  • Cache-first repositories: MessageRepository and SocialRepository can support offline shells, skeletons, and stale-while-revalidate UI.
  • Realtime chat state: typing, presence, message send, retry, reaction, reply, forwarding, participants, and pagination are already modeled enough for premium UI states.
  • Analytics hooks: TrackScreenView, search tracking, chat opened, message sent, reactions, onboarding, campaigns, events, and profile events are already instrumented enough to extend.
  • Shared design scope: the design module is the right place for product-grade primitives: card, poster, prompt, avatar stack, chips, menu sheet, composer shell, event controls, and profile media.
  • Feature flags: existing flag plumbing can gate incomplete surfaces and run A/B tests for onboarding, reveal pacing, palette, and event flows.

Dead-End Inventory

Dead endCurrent code signalFix direction
Start sends directly to chat during testing.StartScreen.kt has a TODO to route to onboarding.Route new users to onboarding, returning users to the daily cockpit, and hide debug chooser in release.
Campaign card actions do not navigate.CampaignScreen.kt open chat/card click TODOs.Wire current campaign card to chat and group detail; add a campaign detail route for deep state.
Discover join/detail are placeholders.DiscoverScreen.kt join/details TODOs.Add join intent state, confirmation, waitlist/matching copy, and detail preview sheet.
Private event actions are placeholders.PrivateEventsScreen.kt action/card TODOs.Route to event detail; add manage/message guests for host-owned events.
Create event lacks media picker.CreateEventScreen.kt image picker TODO.Add image selection, preview, validation, upload, and submit result.
Profile save is not wired.ProfileScreen.kt save TODO; create/edit routes are incomplete.Finish profile create/edit or remove route entry until backed by service endpoints.
Call action does nothing.ChatScreen.kt call TODO.Either hide call or replace with a plan/event CTA until voice/video is a committed feature.

Screen Recommendations

1. Start And First Impression

Problem

The start screen is mostly auth plus a typewriter visual. It does not yet make the next-generation social premise tangible before the user signs in.

Target

A cinematic but restrained welcome that shows the loop: small circle, daily reveal, shared prompt, real event, permanent friend.

  • Add a first-viewport brand scene with a live mini timeline: "Day 1: anonymous circle", "Day 4: plan unlocked", "Day 7: keep your people".
  • Replace raw impersonation avatars with a dev-only drawer or compile-time debug gate.
  • Use a custom Apple/Google sign-in treatment that respects platform rules but feels visually integrated with BestBuds.
  • Show privacy and trust microcopy before asking for profile/location/photo permissions.
  • Add a graceful returning-user transition: app logo resolves into the chat list, not a hard navigation jump.

2. Onboarding

Current onboarding is functionally sound but reads as a form. Market-quality onboarding should feel like building a social passport.

ImproveImplementation ideaWhy it matters
Context before questionsEach prompt gets a one-line "why we ask" note and a privacy icon.Trust-sensitive social apps need explainability before data collection.
Live profile previewShow a mini profile card that updates as interests/personality answers arrive.Users feel progress and understand output.
Richer controlsUse custom prompt cards, photo tiles, interest chips, and scale sliders with labels.Feels like product craft, not a survey.
Completion momentFinish with "Your first circle is being assembled" and a tasteful animation.Creates anticipation and frames the wait as matching intelligence.

3. Chat List

The chat list should be the daily command center. It currently has the right sections but still needs a stronger "what changed" layer.

  • Add composite avatars for group/campaign chats instead of a single entity image when the chat is a circle.
  • Bring back prototype cues: pinned chats, live dot, fresh/new label, day pill, unread count badge, and archived section.
  • Add top actions for search and new plan/chat. Keep the overflow menu for secondary destinations.
  • Make section headers uppercase, tiny, and editorial, matching the prototype's "Active circles" and "Permanent friends" feel.
  • For every circle row, show one next action: "answer prompt", "3 people typing", "event vote open", or "picks tonight".

4. Chat Thread

This is the screen with the highest retention leverage. It should feel better than Instagram DM for the specific purpose of building a real circle.

Composer

Keep the custom input, then add expandable actions: camera, voice note, location/event share, prompt answer, poll, and Budbot suggestion. The collapsed state should remain light and thumb-friendly.

Messages

Upgrade media with rounded photo cards, upload state, failed state, captions, sender color accents, grouped consecutive bubbles, and subtle send/reaction animations.

Circle context

Add the day reveal banner, next unlock card, Budbot insight panel, pinned plan, and member anonymity rules from the prototype.

  • Make tapping the group icon open a beautiful group profile preview sheet before full navigation: hero, stage, members, prompt, event, safety controls.
  • Add message edit/delete for own text messages and better copy feedback after long-press actions.
  • Add reply swipe hint and haptic feedback on threshold crossing.
  • Use typing and presence with restraint: "Priya is typing" is useful; "everyone is always online" is noisy.
  • Budbot should not be a generic chatbot. It should propose concrete social actions: "Ask this", "Plan this", "Invite these two", "Today unlocks neighborhoods".

5. Group Profile

The current group profile has a good hero and member list. It should become the memory and planning hub for a circle.

  • Add a stage timeline: Matched, Milestone, BestBuds, Wrapped.
  • Add pinned event/plan and RSVP status above the member list.
  • Add group prompt history and "best moments" cards.
  • Show member reveal level: anonymous, initial, name, bio, photo, permanent friend.
  • Add safety/admin controls behind a small menu: report, leave circle, mute, notification settings.

6. Personal And Friend Profiles

Profiles are the trust surface. The personal profile is visually stronger than the friend profile, but both need more human proof.

Profile areaNeeded improvement
HeroUse real photos when available, location/neighborhood, verification, age, and relationship source ("met in Tuesday Ramen Club").
PromptsAdd Hinge-style prompt cards: concise answers that invite conversation and can be reacted to.
PersonalityReplace generic progress bars with labeled scales, answer text, and "used for matching" explanation.
HistoryAdd past campaigns, mutual events, shared chats, and permanent-friend milestones.
Edit/createRemove empty states before release. Build full forms or hide the routes.

7. Campaigns And Discover

The campaign card language is promising. The missing piece is depth: why this group exists, what day it is, and what the user should do.

  • Add campaign detail route with hero, day schedule, Budbot insight, members, active prompt, suggested event, and picks preview.
  • For discover, add "why this circle" explanations: shared interest, neighborhood, age band, event intent, availability overlap.
  • Use a richer card stack with one large recommended campaign and smaller alternatives, rather than an undifferentiated list.
  • Make joining a campaign a stateful flow: intent, confirmation, waitlist/matchmaking, notification expectation.
  • Add quality controls: not interested, report, hide, and preference refinement.

8. Events

Events are where BestBuds becomes more than an app. They must look like something people want to send to friends.

  • Public events need poster-like cards, not only rows. Use venue image/color, date slab, attendee stack, source circle, and RSVP state.
  • Add event detail screen: poster hero, why suggested, who is going, comments/updates, map/address, schedule, RSVP controls, share link.
  • Private events should show host status, invited/going/maybe counts, and a clear "message guests" or "manage" path.
  • Create event needs image picker, date/time picker, location picker, privacy selector, invite selector, preview, validation, and submit result.
  • Floating add buttons should route to create event and then return into the new event detail.

9. Friends

The friends list should feel like earned social graph, not contacts.

  • Add relationship context: "from Coffee Crawl", "3 plans together", "last replied yesterday".
  • Add fast actions: message, plan again, invite to circle.
  • Add search and filters: recent, nearby, permanent, quiet, host-worthy.
  • Add empty state that explains how permanent friends are earned through campaigns.

10. Palette, Settings, Top Bar, And Navigation

The palette screen is useful internally and can be a delightful user setting if positioned as "App mood". For release, it should not expose unfinished design tooling language.

  • Rename "Palette" to "App mood" for consumers, or keep Palette behind dev tools.
  • Persist palette selection per user and sync it across sessions.
  • Replace default dropdown visuals with a custom menu sheet that matches the BestBuds card language.
  • Bottom navigation should use custom icon/action styling rather than raw Material navigation item language where possible.
  • Dev tab must be hidden for release users and all dev-only affordances must be inaccessible by accidental navigation.

Deep Screen Specs

These specs translate the audit into implementation-level expectations. Each surface lists the user job, the market-quality target, the components needed, the service dependency, and the tests that should prove the work.

Start, Auth, And Onboarding

SurfaceMarket targetComponentsData/serviceValidation
StartExplain small circles, timed reveal, and real-world plans before auth.Hero timeline, trust copy strip, social proof mini cards, custom sign-in cluster, debug gate.Feature flags, auth provider state, first-run flag.Maestro cold launch, login, returning user; screenshot check for no dev avatars in release.
OnboardingBuild a social passport with visible progress and profile preview.Question card, profile preview, answer chips, slider, photo tile, privacy explainer, completion reveal./onboarding/questions, /onboarding/responses, /onboarding/complete, profile draft cache.Answer, skip, resume, offline cache, validation, completion route.
Create profileFinish setup when onboarding is incomplete or auth profile is thin.Photo grid, prompt editor, interest chips, location permission card, preview sheet.Profile create/update endpoint; media upload endpoint.Create profile from empty state; deny permission; save and reopen profile.

Chat Cockpit

SurfaceMarket targetComponentsData/serviceValidation
Chat listShow what changed, who needs a reply, and the next real-world action.Composite avatar row, day/reveal pill, unread badge, pinned plan preview, filter chips, search, new plan action./topMessages plus chat metadata: unread, pinned plan, reveal day, next action, archived/muted.Maestro chat list scan; screenshot for active/permanent/archived sections; empty/offline states.
Chat threadBest-in-class social conversation for building a circle.Custom composer, media bubble, reply preview, reaction tray, voice note, event share card, poll card, Budbot panel, reveal banner.Existing /messages/{chatId}, WebSocket frames, plus new attachments, edit/delete, poll, receipts, event share.Send text/photo/sticker; reply; react; retry failed send; forward; typing/presence; pagination; attachment mode.
Group profile previewTapping group icon opens a beautiful, fast sheet before full navigation.Hero, stage timeline, member stack, pinned plan, active prompt, safety menu, full-profile CTA.Group detail endpoint or enriched /groups; campaign relationship; event summary.Tap icon from chat; open sheet; navigate full profile; report/mute/leave guarded paths.
BudbotSuggest context-aware social actions, not generic chatbot output.Insight card, prompt suggestion, plan suggestion, invite suggestion, dismiss/accept feedback.Bot endpoint, chat context, campaign stage, participant metadata, event inventory.Show suggestion; accept into composer/event; dismiss; analytics for usefulness.

Campaigns, Discover, And Matching

SurfaceMarket targetComponentsData/serviceValidation
Current campaignsMake the circle lifecycle feel alive and time-boxed.Stage card, reveal timeline, member lock states, active prompt, suggested event, CTA rail./currentCampaigns enriched with stage, day, reveal policy, prompt, plan, and member state.Open chat; open detail; locked/unlocked member state; stage transition visual.
Discover campaignsExplain why a recommendation exists and reduce join anxiety.Recommended hero card, filter chips, "why this circle" facts, trust badges, waitlist/join confirmation./discoverCampaigns, join intent/join endpoints, not-interested endpoint, preference refinement.Search; filter; join intent; confirmation; hide/not interested; empty local area.
Campaign detailTell the story of the group before the user commits.Poster hero, compatibility facts, day schedule, member silhouettes, rules, safety copy, join CTA.New campaign detail endpoint; analytics for card/detail/join conversion.Open from discover/current; join; back to discover; route deep link.

Events And Real-World Loop

SurfaceMarket targetComponentsData/serviceValidation
Public eventsDiscoverable local plans that look worth joining.Poster cards, date slab, venue image, attendee stack, saved/RSVP state, map filter, recommendation reason.Event list/search endpoint with location, time, capacity, attendees, source circle, saved state.Search; save/unsave; RSVP; empty city; image loading; map/list mode.
Private eventsManage plans created by a circle.Host card, guest list, going/maybe/waitlist counts, message guests, edit/cancel, reminder state.User event list endpoint; RSVP mutation; host permission fields.Host event; guest event; RSVP state change; manage path; notification reminder.
Create eventFast, beautiful, validated event creation with a shareable preview.Poster picker, date/time picker, venue picker, privacy selector, invite selector, preview, sticky submit.Event create endpoint, media upload, location search, group/friend invite list.Create with image; create without image; validation errors; upload failure; returns to detail.
Event detailThe canonical plan page before, during, and after the meetup.Poster hero, RSVP control, guest stack, comments, map, weather, playlist/photo memory, share link, post-event recap.Event detail, comments/updates, RSVP, media, reminders, calendar integration.Deep link; RSVP; comment; share; calendar; post-event photo upload.

Profiles, Friends, And Memory

SurfaceMarket targetComponentsData/serviceValidation
Personal profileFeels like identity, preferences, privacy, and social proof in one place.Photo grid, prompt cards, edit chips, privacy controls, palette/mood entry, campaign history./profile, profile update, media, preferences, privacy settings.Edit field; save; reopen; privacy controls; no placeholder route.
Friend profileTrust and continuity for a permanent friend.Relationship source, shared events, prompt reactions, plan-again CTA, message CTA, memory cards./friends/{friendId} enriched with history, mutual circles, shared plans, profile prompts.Open from friends and chat; message; plan again; report/block path.
Friends listEarned social graph with context and next actions.Search, filters, friend row, recent activity, plan-again chips, empty-state explainer./friends plus last interaction, source campaign, plan count, mute/favorite.Search; open friend; empty; plan again; offline cached list.
Group profileCircle hub with members, memory, events, prompts, and trust controls.Hero, reveal timeline, member grid, pinned event, memory wall, polls, safety/admin sheet./groups enriched or detail endpoint, group events, group prompts, memories, admin state.Open from chat; member tap; event tap; leave/mute/report; locked member state.

Data Contracts

Visual parity can be finished with current mock and cached data, but market parity needs richer contracts. The UI should not fake real states that the services cannot eventually support.

Current Contract Coverage

Service areaCurrent supportWhat it enablesMarket gap
Messaging/topMessages, /messages/{chatId}, send, bot, reactions, WebSocket payloads.Chat list, message thread, optimistic send, reply, reactions, typing, presence, cache-first thread.No formal edit/delete, receipts, voice notes, event cards, polls, pinned messages, schedule-send, or rich attachment lifecycle.
Social/friends, /groups, /currentCampaigns, /discoverCampaigns, /profile, /friends/{friendId}.Friends, group list, campaign cards, profile, friend profile.No join/leave campaign mutation, group detail, relationship memory, profile update/create, recommendation explanation, or safety action contract.
OnboardingQuestions, responses, completion endpoints.Question flow and matching setup.Needs draft resume, answer quality, profile preview, permission state, and "why we ask" metadata.
EventsUI screens exist, but app-level service contract is thin or absent in the scanned KMP layer.Static event exploration and saved-state UI.Needs event CRUD, RSVP, detail, comments, attendee list, share link, media, location, reminders, and post-event memory.
MediaSeparate media service exists in the worker topology.Profile/event/chat images can be backed by uploads.Needs typed attachment lifecycle, upload progress, moderation state, thumbnails, and fallback assets.

New Product Models To Add

ModelFields that matter for UIWhy it matters
CampaignRevealStateday, stage, lockedFields, nextUnlockAt, revealCopy, memberRevealLevels.Turns prototype reveal mechanics into deterministic app UI.
ChatAttachmenttype, uploadState, previewUrl, duration, pollOptions, eventId, location, failureReason.Lets one composer support image, voice, event, poll, location, and future objects cleanly.
EventDetailposter, venue, dateTime, host, sourceCircle, RSVP, capacity, guests, comments, map, weather, memoryAlbum.Events become the IRL conversion surface, not static rows.
RelationshipMemorysourceCampaign, firstMetAt, sharedEvents, mutualGroups, moments, lastInteraction, planAgainSuggestion.Friends feel earned and specific.
ProfilePromptquestion, answer, visibility, reactionCount, lastUpdated, matchingWeight.Profiles become conversational and explainable.
SafetyStatecanReport, canBlock, canMute, canLeave, moderationStatus, verifiedSignals, permissionRationale.Trust and safety must be visible and testable.
PlanningPollquestion, options, multiSelect, closesAt, voters, winningOption, sourceChatId.Bridges chat energy into real plans.

Analytics And Metrics

The current analytics layer is a useful start. The next pass should measure whether BestBuds is creating connection quality, not only screen traffic.

Already Instrumented

Screen views, onboarding started/answered/skipped/completed, search, campaign card/join intent, event save, chat open/message/reaction, friend profile, profile view, and profile field updates.

Missing Market Signals

First circle seen, reveal card viewed, prompt answered in chat, event shared from chat, RSVP conversion, plan created, friend converted, failed send retry, palette changed, safety actions, and Budbot accepted/dismissed.

North-Star Metrics

MetricDefinitionWhy it matters
First circle activationNew user completes onboarding and opens a matched circle/chat within the first session.Measures whether the premise becomes tangible quickly.
Meaningful reply ratePercent of active users who send or receive a reply in a circle within 24 hours of reveal/prompt.Stronger than message count because it measures mutual conversation.
Plan conversionChat or campaign sessions that produce event RSVP, plan poll, or accepted plan suggestion.Captures the real-world differentiation.
Show-up/memory rateEvents that receive post-event confirmation, comment, photo, or memory card.Measures whether events create lasting social graph value.
Permanent friend conversionCampaign participants who become friends or continue conversation after the campaign ends.Measures actual social value beyond one temporary group.
Trust frictionPermission denial, report, block, leave, mute, failed send, no-show, and churn after sensitive prompts.Finds safety or anxiety points before they become retention failures.

Instrumentation Additions

  • first_circle_viewed, circle_reveal_card_viewed, circle_next_action_clicked
  • chat_composer_mode_opened, chat_attachment_added, chat_message_failed, chat_message_retry
  • budbot_suggestion_viewed, budbot_suggestion_accepted, budbot_suggestion_dismissed
  • event_detail_viewed, event_rsvp_changed, event_shared, event_created_success, event_memory_added
  • profile_prompt_reacted, profile_save_success, friend_plan_again_clicked
  • safety_menu_opened, report_submitted, mute_changed, leave_circle_confirmed
  • palette_changed, with palette id and source screen.

Component System

The scoped component pattern is the correct direction. The next component pass should make default Material almost invisible at the product layer.

Component familyCurrent stateNext market-quality component
InputsCustom text field/search/composer now exist.Build multi-mode composer, date/time/location fields, chip input, photo picker field, prompt answer field, and validation/error states.
CardsSurface cards and campaign cards are reusable.Add poster cards, chat rows, profile prompt cards, plan cards, memory cards, and skeleton states.
AvatarsSingle avatar and initials exist.Add group composite avatars, reveal-locked avatars, status rings, avatar stacks, and verified/safety overlays.
ButtonsPrimary/secondary/join/action/floating/icon actions exist.Add destructive, loading, disabled with reason, split action, sticky bottom CTA, and reaction/action chips.
NavigationTop bar, tab row, bottom nav are functional.Add custom bottom nav shell, branded overflow sheet, animated route transitions, and screen-specific contextual top actions.
FeedbackLoading and empty states exist.Add toast/snackbar, copy confirmation, send status, upload progress, no network state, permission rationale, and retry cards.
Component quality rule: if a component appears on three screens, it belongs in modules/design. If it encodes product behavior or repository state, keep it in modules/app and compose shared primitives inside it.

Motion And Polish

BestBuds needs motion, but it should be social and tactile, not decorative. Follow Apple and Material guidance: motion should provide feedback, preserve spatial context, and guide attention.

First session

Soft launch animation, progressive onboarding card transitions, completion reveal, and first circle assembly state.

Chat

Send compression/release, reaction burst, reply swipe threshold, upload progress, message highlight, and bottom-sheet spring transitions.

Real-world loop

RSVP state transition, event poster expansion, calendar confirmation, and post-event memory/photo upload celebration.

Visual Polish Standards

  • Use a real font asset strategy instead of platform default serif/sans where licensing permits.
  • Use custom icon decisions for product concepts: reveal, circle, plan, trust, pick, prompt, event, safety.
  • Use photography and generated/curated poster imagery for events and profiles. Avoid generic blank cards where a person or venue should be visible.
  • Keep color palettes varied. The default warm palette should not collapse into beige-only UI.
  • All touch targets should feel intentionally sized, and state changes should have visual plus haptic feedback on mobile.

Visual QA Matrix

The UI is now broad enough that manual inspection is not sufficient. Market readiness should require visual regression, Maestro flow validation, accessibility checks, and performance gates across Android, iOS, desktop, and web/prototype where relevant.

Golden Screen Set

AreaGolden statesDevicesChecks
Start/authcold launch, signed out, returning user, debug hidden.iPhone small/large, Android small/large, desktop.No clipped hero, auth buttons readable, release build has no dev affordances.
Onboardingfirst question, multi-choice, slider, skipped answer, completion.iPhone, Android, desktop.Keyboard-safe, progress visible, privacy copy readable, controls have accessible names.
Chat listloading, active chats, unread, empty, offline, archived.iPhone, Android, desktop.Rows stable, avatars not distorted, unread/action labels do not overflow.
Chat threadtext, image, sticker, reply, reaction, failed send, typing, group profile sheet, composer expanded.iPhone small keyboard, Android keyboard, desktop wide.No keyboard overlap, composer stays usable, bubble grouping stable, sheet height correct.
Campaigns/discovercurrent, empty, recommended, search, join confirmation, detail.Mobile and desktop.Stage badges readable, member locks clear, CTA state obvious.
Eventspublic list, event detail, saved, RSVP, create form, validation error, image upload.Mobile and desktop.Poster aspect ratio stable, date/time fields legible, CTA sticky state correct.
Profiles/friendspersonal, edit, friend, group, empty friend list, relationship memory.Mobile and desktop.Photos crop correctly, prompt cards readable, safety menu reachable.
Palette/settingsdefault, alternate palette, dropdown/menu sheet, dev hidden.Mobile and desktop.Contrast passes in every palette; palette persistence works.

Release QA Gates

  • Maestro: Android and iOS flows must cover all market routes after migration: onboarding, chat list, chat, group profile, public/private/create events, discover/current campaigns, friends, personal/friend profiles, palette, and release-hidden dev routes.
  • Screenshot regression: store golden PNGs for the golden screen set and compare before merging major UI changes.
  • Accessibility: every icon-only button has a content description, text contrast passes for each palette, focus order is logical, and all touch targets are mobile-appropriate.
  • Keyboard and bottom sheets: chat composer, profile edit, onboarding, and create event forms must survive keyboard open/close on small screens.
  • Performance: chat list and chat thread scroll smoothly with 100+ rows, image placeholders prevent jumps, and opening composer/sheets does not stutter.
  • Offline and failure: cached chat/profile/campaign/friends screens open without network; failed sends, failed RSVP, failed profile save, and failed event create show recovery actions.

Market Readiness Checklist

GateAcceptance criteria
First impressionCold launch, login, and onboarding explain the product promise without external context. No dev-only avatars or debug controls are visible in release builds.
End-to-end flowA real user can sign in, complete onboarding, see chats/campaigns/events/friends/profile, send text/photo/sticker, create or join an event, and navigate profile/group surfaces without dead CTAs.
Visual completenessNo placeholder empty routes for create/edit profile. No raw generic Material controls on consumer-critical surfaces. All primary cards have loading, empty, failure, and offline states.
Trust and safetyReport, mute, leave, block, permission rationale, profile verification state, and data-use explanation are present where needed.
PerformanceChat list and chat thread scroll smoothly on target devices. Image loading uses placeholders and caching. Sheets and transitions do not jank during keyboard open/close.
TestingAndroid and iOS Maestro suites cover all migrated flows. Add screenshot regression for key screens and accessibility checks for labels/contrast/touch target size.
Store readinessStore screenshots show the actual release UI: onboarding, chat cockpit, event poster, group profile, and permanent friend profile. Privacy disclosures match app behavior.

Prioritized Backlog

This backlog is ordered by release risk and user-visible impact. The goal is not to add more surfaces; it is to make the existing graph feel complete, beautiful, and trustworthy.

P0 - Release Blockers

Work itemWhy it blocks market readinessPrimary files/contracts
Gate dev tools and debug impersonation.Consumer builds cannot expose test identities or dev navigation.StartScreen.kt, DevScreen.kt, navigation/menu components, feature flags.
Finish create/edit profile or remove routes.Empty profile routes break trust immediately.CreateProfileScreen.kt, EditProfileScreen.kt, ProfileScreen.kt, profile update/create endpoint.
Wire campaign and discover CTAs.Campaigns are the core concept; dead join/open actions make the product feel fake.CampaignScreen.kt, DiscoverScreen.kt, campaign detail/join APIs.
Build event detail and connect event actions.BestBuds differentiation depends on real-world conversion.PublicEventsScreen.kt, PrivateEventsScreen.kt, CreateEventScreen.kt, event service contract.
Complete chat group profile preview.The user specifically expects a beautiful variant when tapping the main group icon.ChatScreen.kt, GroupProfileScreen.kt, group detail data.
Run full Android and iOS Maestro after every blocker.The migration is only finished when tests validate the updated UI in real apps.tests/bestbudsAndroid, tests/bestbudsDarwin, app build scripts.

P1 - Impression And Retention

Work itemUser impactPrimary files/contracts
Daily chat cockpit polish.Users immediately know who replied, what changed, and what to do next.ChatsScreen.kt, ChatViews.kt, top message metadata.
Richer composer modes.Chat can produce photos, voice notes, polls, event shares, and prompts without feeling like a primitive input.ChatViews.kt, MessageView.kt, MessagingService.kt.
Event creation with poster preview.Users can turn conversation into a shareable plan.CreateEventScreen.kt, media service, event create endpoint.
Prompt-first profiles.Profiles become specific and conversation-worthy like high-quality social/dating products.Profile screens, UserProfile, new ProfilePrompt model.
Budbot action cards.AI becomes a social facilitator instead of a novelty.BotService.kt, ChatInteractor.kt, chat UI cards.

P2 - Market Differentiators

Work itemWhy it mattersPrimary files/contracts
Post-event memory system.Turns real-world plans into durable social graph value.Event detail, media, profile/group memory models.
Relationship memory on friend profiles.Permanent friends feel earned, contextual, and emotionally specific.FriendProfileScreen.kt, friend detail endpoint.
Availability and venue voting.Solves real coordination pain instead of only displaying event cards.Planning poll model, chat attachments, event service.
Palette as App mood.Can become a delightful personalization feature if polished and persisted.PaletteScreen.kt, theme persistence, account settings.
Store-ready visual asset pass.App Store and Play Store screenshots should show the actual differentiated product loop.All golden screens, event/profile/campaign imagery.

Execution Roadmap

Phase 1 - First Impression PackRelease blocker

Upgrade start/login, onboarding, profile creation, release gating for dev tools, and permission rationale. The first 30 seconds must sell the product.

Phase 2 - Chat CockpitRetention blocker

Add campaign reveal schedule, Budbot insight panel, pinned plan/event share, group profile preview sheet, voice/photo/event composer modes, and polished message states.

Phase 3 - Events And IRL LoopDifferentiation blocker

Build event detail, create event, RSVP states, guest visibility, updates, event share cards, map/location affordances, and post-event memory capture.

Phase 4 - Trust ProfilesSafety and conversion

Complete personal, friend, and group profiles with prompt cards, campaign history, verification, privacy controls, relationship source, and direct plan/message actions.

Phase 5 - Motion, Accessibility, Store PolishMarket finish

Apply motion system, haptics, contrast/touch QA, screenshot regression, store screenshots, launch icon polish, dark/mood palettes, and final Maestro validation.

Definition of done: the app should be demonstrably better than the prototype in every consumer path, while preserving the prototype's emotional intent. A user should remember the circle, the people, and the next real-world action after one session.