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.
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 stage | What the app must make obvious | Primary screens | Current gap |
|---|---|---|---|
| Enter | BestBuds creates small, time-boxed circles for real-world connection. | Start, onboarding | Login is functional, but the value proposition is mostly hidden behind auth. |
| Reveal | Trust grows over days, with identities and context unlocking progressively. | Chat, group profile, campaign | The prototype has reveal schedule and lock cards; the real app has only light stage language. |
| Bond | Conversation should have prompts, reactions, replies, photos, stickers, and social context. | Chat, chat list | Chat is much improved, but Budbot and group context need more presence. |
| Meet | The app should convert conversation energy into plans and events. | Public events, private events, create event | Events look better, but add/create/join flows are mostly placeholders. |
| Keep | Good connections become permanent friends with memory and continuity. | Friends, profiles, campaign history | Friends 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.
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 area | Relevant finding | BestBuds design implication |
|---|---|---|
| Social connection as health infrastructure | The 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 frequency | Pew'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 tradeoff | Pew'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 systems | OutWithFriendz 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 products | Products 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 communities | Strava 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. |
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.
| Reference | What to study | BestBuds application |
|---|---|---|
| Hinge | Profiles 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 Friends | Friend 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. |
| Partiful | Events 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 Invites | Events 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. |
| Meetup | Interest-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 DMs | Messaging 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. |
| Discord | Communities 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. |
| Geneva | Group 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 / Plandra | Social 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. |
| Strava | Real-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 BeReal | Close-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. |
| CRED | Premium 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.
| Area | Files scanned | Current quality | Market risk |
|---|---|---|---|
| Start / login | StartScreen.kt | Functional 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. |
| Onboarding | OnboardingScreen.kt, OnboardingViews.kt | Question flow works with custom controls. | Too questionnaire-like. Needs profile preview, trust copy, privacy explanations, and completion reward. |
| Chat list | ChatsScreen.kt, ChatViews.kt | Good 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 thread | ChatScreen.kt, ChatViews.kt, MessageView.kt | Best 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. |
| Campaigns | CampaignScreen.kt, CampaignComponents.kt | Stage 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. |
| Discover | DiscoverScreen.kt | Search and campaign cards are present. | Needs recommendation explanation, map/local context, filters, "why this circle", and join confirmation. |
| Events | PublicEventsScreen.kt, PrivateEventsScreen.kt, CreateEventScreen.kt | Public 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. |
| Friends | FriendsScreen.kt | Simple permanent friends list with profile navigation. | Needs search, groups, relationship memory, recent activity, and "plan again" actions. |
| Profiles | ProfileScreen.kt, FriendProfileScreen.kt, GroupProfileScreen.kt | Personal 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 / navigation | PaletteScreen.kt, BestBudsTopBar.kt, BestBudsContainers.kt | Palette 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.
Route Graph Reality
| Route | Consumer meaning | Release implication |
|---|---|---|
/ | Start/auth entry. | Must become the premium first impression and hide debug impersonation in release. |
/onboarding | Profile and matching setup. | Must become a social passport builder, not a form sequence. |
/home | Main 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/edit | Personal identity and setup. | Create/edit cannot remain empty or placeholder; either finish the flow or remove from release nav. |
/campaigns/current, /campaigns/discover | Circle lifecycle and discovery. | Needs detail route, join state, recommendation explanations, and route-to-chat/profile wiring. |
/events/private, /events/public, /events | IRL 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, /dev | Design/user mood and internal tooling. | Palette can be an "App mood" feature; dev must be release-gated. |
Implementation Leverage Already Present
- Cache-first repositories:
MessageRepositoryandSocialRepositorycan 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 end | Current code signal | Fix 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.
| Improve | Implementation idea | Why it matters |
|---|---|---|
| Context before questions | Each prompt gets a one-line "why we ask" note and a privacy icon. | Trust-sensitive social apps need explainability before data collection. |
| Live profile preview | Show a mini profile card that updates as interests/personality answers arrive. | Users feel progress and understand output. |
| Richer controls | Use custom prompt cards, photo tiles, interest chips, and scale sliders with labels. | Feels like product craft, not a survey. |
| Completion moment | Finish 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 area | Needed improvement |
|---|---|
| Hero | Use real photos when available, location/neighborhood, verification, age, and relationship source ("met in Tuesday Ramen Club"). |
| Prompts | Add Hinge-style prompt cards: concise answers that invite conversation and can be reacted to. |
| Personality | Replace generic progress bars with labeled scales, answer text, and "used for matching" explanation. |
| History | Add past campaigns, mutual events, shared chats, and permanent-friend milestones. |
| Edit/create | Remove 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
| Surface | Market target | Components | Data/service | Validation |
|---|---|---|---|---|
| Start | Explain 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. |
| Onboarding | Build 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 profile | Finish 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
| Surface | Market target | Components | Data/service | Validation |
|---|---|---|---|---|
| Chat list | Show 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 thread | Best-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 preview | Tapping 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. |
| Budbot | Suggest 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
| Surface | Market target | Components | Data/service | Validation |
|---|---|---|---|---|
| Current campaigns | Make 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 campaigns | Explain 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 detail | Tell 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
| Surface | Market target | Components | Data/service | Validation |
|---|---|---|---|---|
| Public events | Discoverable 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 events | Manage 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 event | Fast, 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 detail | The 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
| Surface | Market target | Components | Data/service | Validation |
|---|---|---|---|---|
| Personal profile | Feels 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 profile | Trust 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 list | Earned 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 profile | Circle 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 area | Current support | What it enables | Market 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. |
| Onboarding | Questions, responses, completion endpoints. | Question flow and matching setup. | Needs draft resume, answer quality, profile preview, permission state, and "why we ask" metadata. |
| Events | UI 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. |
| Media | Separate 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
| Model | Fields that matter for UI | Why it matters |
|---|---|---|
CampaignRevealState | day, stage, lockedFields, nextUnlockAt, revealCopy, memberRevealLevels. | Turns prototype reveal mechanics into deterministic app UI. |
ChatAttachment | type, uploadState, previewUrl, duration, pollOptions, eventId, location, failureReason. | Lets one composer support image, voice, event, poll, location, and future objects cleanly. |
EventDetail | poster, venue, dateTime, host, sourceCircle, RSVP, capacity, guests, comments, map, weather, memoryAlbum. | Events become the IRL conversion surface, not static rows. |
RelationshipMemory | sourceCampaign, firstMetAt, sharedEvents, mutualGroups, moments, lastInteraction, planAgainSuggestion. | Friends feel earned and specific. |
ProfilePrompt | question, answer, visibility, reactionCount, lastUpdated, matchingWeight. | Profiles become conversational and explainable. |
SafetyState | canReport, canBlock, canMute, canLeave, moderationStatus, verifiedSignals, permissionRationale. | Trust and safety must be visible and testable. |
PlanningPoll | question, 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
| Metric | Definition | Why it matters |
|---|---|---|
| First circle activation | New user completes onboarding and opens a matched circle/chat within the first session. | Measures whether the premise becomes tangible quickly. |
| Meaningful reply rate | Percent 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 conversion | Chat or campaign sessions that produce event RSVP, plan poll, or accepted plan suggestion. | Captures the real-world differentiation. |
| Show-up/memory rate | Events that receive post-event confirmation, comment, photo, or memory card. | Measures whether events create lasting social graph value. |
| Permanent friend conversion | Campaign participants who become friends or continue conversation after the campaign ends. | Measures actual social value beyond one temporary group. |
| Trust friction | Permission 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_clickedchat_composer_mode_opened,chat_attachment_added,chat_message_failed,chat_message_retrybudbot_suggestion_viewed,budbot_suggestion_accepted,budbot_suggestion_dismissedevent_detail_viewed,event_rsvp_changed,event_shared,event_created_success,event_memory_addedprofile_prompt_reacted,profile_save_success,friend_plan_again_clickedsafety_menu_opened,report_submitted,mute_changed,leave_circle_confirmedpalette_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 family | Current state | Next market-quality component |
|---|---|---|
| Inputs | Custom 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. |
| Cards | Surface cards and campaign cards are reusable. | Add poster cards, chat rows, profile prompt cards, plan cards, memory cards, and skeleton states. |
| Avatars | Single avatar and initials exist. | Add group composite avatars, reveal-locked avatars, status rings, avatar stacks, and verified/safety overlays. |
| Buttons | Primary/secondary/join/action/floating/icon actions exist. | Add destructive, loading, disabled with reason, split action, sticky bottom CTA, and reaction/action chips. |
| Navigation | Top bar, tab row, bottom nav are functional. | Add custom bottom nav shell, branded overflow sheet, animated route transitions, and screen-specific contextual top actions. |
| Feedback | Loading and empty states exist. | Add toast/snackbar, copy confirmation, send status, upload progress, no network state, permission rationale, and retry cards. |
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
| Area | Golden states | Devices | Checks |
|---|---|---|---|
| Start/auth | cold 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. |
| Onboarding | first question, multi-choice, slider, skipped answer, completion. | iPhone, Android, desktop. | Keyboard-safe, progress visible, privacy copy readable, controls have accessible names. |
| Chat list | loading, active chats, unread, empty, offline, archived. | iPhone, Android, desktop. | Rows stable, avatars not distorted, unread/action labels do not overflow. |
| Chat thread | text, 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/discover | current, empty, recommended, search, join confirmation, detail. | Mobile and desktop. | Stage badges readable, member locks clear, CTA state obvious. |
| Events | public 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/friends | personal, edit, friend, group, empty friend list, relationship memory. | Mobile and desktop. | Photos crop correctly, prompt cards readable, safety menu reachable. |
| Palette/settings | default, 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
| Gate | Acceptance criteria |
|---|---|
| First impression | Cold 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 flow | A 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 completeness | No 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 safety | Report, mute, leave, block, permission rationale, profile verification state, and data-use explanation are present where needed. |
| Performance | Chat 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. |
| Testing | Android and iOS Maestro suites cover all migrated flows. Add screenshot regression for key screens and accessibility checks for labels/contrast/touch target size. |
| Store readiness | Store 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 item | Why it blocks market readiness | Primary 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 item | User impact | Primary 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 item | Why it matters | Primary 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
Upgrade start/login, onboarding, profile creation, release gating for dev tools, and permission rationale. The first 30 seconds must sell the product.
Add campaign reveal schedule, Budbot insight panel, pinned plan/event share, group profile preview sheet, voice/photo/event composer modes, and polished message states.
Build event detail, create event, RSVP states, guest visibility, updates, event share cards, map/location affordances, and post-event memory capture.
Complete personal, friend, and group profiles with prompt cards, campaign history, verification, privacy controls, relationship source, and direct plan/message actions.
Apply motion system, haptics, contrast/touch QA, screenshot regression, store screenshots, launch icon polish, dark/mood palettes, and final Maestro validation.
Sources
External references used for product and interaction comparison.
- Hinge Help - profile prompts
- Hinge Help - Roses and Standouts interaction
- Bumble Support - BFF transition and group friendship positioning
- Bumble For Friends - Plans
- Partiful - event invitation product reference
- Partiful Help - RSVP, text blasts, and event memories
- Apple Newsroom - Apple Invites
- Meetup App Store - local groups and events
- Meta - Instagram messaging features
- Discord Support - Polls
- Discord Support - Scheduled Events
- Geneva - group chat, events, polls, rooms, and group coordination
- Let's - group planning, voting, and calendar coordination
- Plandra - group planning and memory features
- OutWithFriendz research - group event scheduling
- Strava Support - group challenges and route/activity features
- Strava Support - feeds, challenges, clubs, and privacy considerations
- Locket Widget App Store - close friends photo sharing reference
- CRED Design - NeoPOP design language
- U.S. Surgeon General Advisory - Social Connection and Community
- Pew Research Center - Teens and Social Media Fact Sheet
- Pew Research Center - Connection, Creativity and Drama: Teen Life on Social Media
- Apple Human Interface Guidelines - Motion
- Material Design - Motion