feat:(#145) add start chat FAB #152

Merged
hodlbod merged 4 commits from Prat_09/flotilla:145-startChat-FAB into dev 2026-04-07 17:02:41 +00:00
Contributor

Improves accessibility of the "Start Chat" action by introducing a Floating Action Button (FAB), making it more accessible and aligned with common messaging UI patterns.

Changes:

  • Added a floating "Start Chat" button (FAB) at bottom-right
  • Removed "Start Chat" from overflow menu
  • Implemented for both desktop and mobile layouts

Implementation:

  • New FAB Component: Built a reusable, reactive Svelte 5 component.
  • Design Parity: Punch-out chat bubble icon with plus symbol aligning with proposed Figma design.
  • Multi-Platform: Added a persistent sidebar button for desktop and mobile.
  • Flow Cleanup: Removed redundant "Start Chat" action button from menu options.

Checks:
pnpm run format - pass
pnpm run lint - pass
pnpm run check - 0 errors and 0 warnings

Mobile Chat List Screen (Before) Mobile Chat List Screen (After with Start Chat FAB)
BeforeFAB(Mobile).png Mobile-StartChat-FAB.png
Desktop Chat List Screen (Before) Desktop Chat List Screen (After with Start Chat FAB)
BeforeFAB(Desktop).png Desktop-StartChat-FAB.png

Fixes #145

Improves accessibility of the "Start Chat" action by introducing a Floating Action Button (FAB), making it more accessible and aligned with common messaging UI patterns. **Changes:** - Added a floating "Start Chat" button (FAB) at bottom-right - Removed "Start Chat" from overflow menu - Implemented for both desktop and mobile layouts **Implementation:** - New FAB Component: Built a reusable, reactive Svelte 5 component. - Design Parity: Punch-out chat bubble icon with plus symbol aligning with proposed Figma design. - Multi-Platform: Added a persistent sidebar button for desktop and mobile. - Flow Cleanup: Removed redundant "Start Chat" action button from menu options. **Checks:** pnpm run format - pass pnpm run lint - pass pnpm run check - 0 errors and 0 warnings | Mobile Chat List Screen (Before) | Mobile Chat List Screen (After with Start Chat FAB) | | :--: | :--: | |![BeforeFAB(Mobile).png](/attachments/707f7339-c67e-493a-843d-838d905bb77f) | ![Mobile-StartChat-FAB.png](/attachments/385e6691-eaa9-45aa-a785-edf1c057d597)| | Desktop Chat List Screen (Before) | Desktop Chat List Screen (After with Start Chat FAB)| | :--: | :--: | |![BeforeFAB(Desktop).png](/attachments/9b8d165a-ce5f-4bab-af41-e2944631550e)| ![Desktop-StartChat-FAB.png](/attachments/81941e22-6741-452b-8240-78a3b220c763)| Fixes #145
hodlbod reviewed 2026-04-04 15:02:11 +00:00
hodlbod left a comment
Owner

Thanks for the PR! A couple comments, and one other thing — we should make sure the FAB is aligned on mobile with the user's avatar.

Thanks for the PR! A couple comments, and one other thing — we should make sure the FAB is aligned on mobile with the user's avatar.
@@ -0,0 +42,4 @@
style="width: {plusSize}px; height: {plusSize}px;">
<line x1="12" y1="5" x2="12" y2="19" />
<line x1="5" y1="12" x2="19" y2="12" />
</svg>
Owner

The SVGs shouldn't be hard-coded in here. Instead, include a children snippet in props and use the Icon component with one of the icons already included in the project.

The SVGs shouldn't be hard-coded in here. Instead, include a `children` snippet in props and use the `Icon` component with one of the icons already included in the project.
@@ -29,1 +31,4 @@
const startChat = () => pushModal(ChatStart)
let term = $state("")
let isClient = $state(false)
Owner

We don't do SSR, so there's no need to add this check

We don't do SSR, so there's no need to add this check
hodlbod marked this conversation as resolved
@@ -63,0 +69,4 @@
{#if isClient}
<div class="absolute bottom-10 right-4 hidden md:block">
<FAB onclick={startChat} size={44} className="!static !m-0" />
</div>
Owner

We shouldn't need a wrapper and important overrides. I think it would make sense to show the FAB on the bottom right of the screen on desktop, rather than in the secondary nav.

We shouldn't need a wrapper and important overrides. I think it would make sense to show the FAB on the bottom right of the screen on desktop, rather than in the secondary nav.
Author
Contributor

Thanks for the feedback @hodlbod ! I’ll refactor the FAB to use the Icon component and clean up the SSR-related logic.

Regarding FAB placement, I noticed that having it fixed at the bottom-right works well generally, but in desktop during an active conversation it can overlap message content or interfere with interactions near the input area.

Would it make sense to:

  • Show the FAB as a floating button (bottom-right) when the user is not inside a conversation, and
  • Place it in the secondary nav when inside an active conversation to avoid overlap?

This keeps the action easily accessible while adapting to the context. Happy to implement this if it aligns with your vision.

Thanks for the feedback @hodlbod ! I’ll refactor the FAB to use the Icon component and clean up the SSR-related logic. Regarding FAB placement, I noticed that having it fixed at the bottom-right works well generally, but in desktop during an active conversation it can overlap message content or interfere with interactions near the input area. Would it make sense to: * Show the FAB as a floating button (bottom-right) when the user is not inside a conversation, and * Place it in the secondary nav when inside an active conversation to avoid overlap? This keeps the action easily accessible while adapting to the context. Happy to implement this if it aligns with your vision.
@@ -16,0 +19,4 @@
onMount(() => {
isClient = true
})
Owner

No need to include this

No need to include this
Owner

in desktop during an active conversation it can overlap message content or interfere with interactions near the input area.

That's a very good point, I think maybe the correct solution would be to add a full-width button to the bottom of the side nav rather than a FAB similar to the connection status button on the rooms menu. How does that sound?

> in desktop during an active conversation it can overlap message content or interfere with interactions near the input area. That's a very good point, I think maybe the correct solution would be to add a full-width button to the bottom of the side nav rather than a FAB similar to the connection status button on the rooms menu. How does that sound?
Author
Contributor

@hodlbod

That makes sense - especially from a consistency and non-intrusive UX perspective, and aligning with the existing side nav patterns like the connection status button.

I explored both approaches (FAB and full-width CTA) and created the prototypes for each approach in both desktop & mobile version, and while the full-width CTA feels more stable within the current layout, the FAB felt more subtle and visually lightweight, without adding extra density to the side nav.

Mobile - https://www.figma.com/proto/SO2fPukHeKC120ZqZQ9kSh/Flotilla-SOB26?node-id=0-1&t=IkaFDeThh7zAbAUX-1
Desktop - https://www.figma.com/proto/SO2fPukHeKC120ZqZQ9kSh/Flotilla-SOB26?node-id=103-2068&t=IkaFDeThh7zAbAUX-1

Mobile FAB) Mobile Full-width CTA
Mobile_FAB.png Mobile_Full-width_CTA.png
Desktop FAB Desktop Full-width CTA
Desktop_FAB.png Desktop_Full-widthCTA.png
Desktop FAB Active Conversation Desktop Full-width CTA Active Conversation
FAB_Desktop_Active_Conversation.png Desktop_Full_WidthCTA_Active_Conversation.png
Upon opening a conversation the FAB shifts to the side nav bar Persistent CTA
@hodlbod That makes sense - especially from a consistency and non-intrusive UX perspective, and aligning with the existing side nav patterns like the connection status button. I explored both approaches (FAB and full-width CTA) and created the prototypes for each approach in both desktop & mobile version, and while the full-width CTA feels more stable within the current layout, the FAB felt more subtle and visually lightweight, without adding extra density to the side nav. Mobile - [https://www.figma.com/proto/SO2fPukHeKC120ZqZQ9kSh/Flotilla-SOB26?node-id=0-1&t=IkaFDeThh7zAbAUX-1](url) Desktop - [https://www.figma.com/proto/SO2fPukHeKC120ZqZQ9kSh/Flotilla-SOB26?node-id=103-2068&t=IkaFDeThh7zAbAUX-1](url) | Mobile FAB) | Mobile Full-width CTA | | :--: | :--: | | ![Mobile_FAB.png](/attachments/ff1eb5a2-e3e8-47d7-b57d-3cc63bd670d4) | ![Mobile_Full-width_CTA.png](/attachments/dbd62960-dd9e-4d52-bd71-37e1e09e33d0)| | Desktop FAB | Desktop Full-width CTA| | :--: | :--: | |![Desktop_FAB.png](/attachments/ea321110-3d11-436c-bdce-baeb70c257d8)|![Desktop_Full-widthCTA.png](/attachments/6f6b2efd-b6f9-418a-a2ff-60d94023b678)| | Desktop FAB Active Conversation | Desktop Full-width CTA Active Conversation| | :--: | :--: | |![FAB_Desktop_Active_Conversation.png](/attachments/1d4c1779-b21a-41cf-a8b3-07520a1f505d) | ![Desktop_Full_WidthCTA_Active_Conversation.png](/attachments/58af9756-297b-4440-be89-3e07666a1c1a)| |Upon opening a conversation the FAB shifts to the side nav bar | Persistent CTA|
Collaborator

Just sharing a small suggestion: the full-width CTA doesn’t seem like the best fit for mobile and desktop. A standard floating CTA at the bottom-right as already implemented feels cleaner.

For desktop, we could also consider placing the button in the sidebar, check the empty white box in the attached image

Screenshot 2026-04-05 at 12.45.14 PM.png
Just sharing a small suggestion: the full-width CTA doesn’t seem like the best fit for mobile and desktop. A standard floating CTA at the bottom-right as already implemented feels cleaner. **For desktop, we could also consider placing the button in the sidebar, check the empty white box in the attached image** <img width="1437" alt="Screenshot 2026-04-05 at 12.45.14 PM.png" src="attachments/18182ad4-b27a-4f18-86b9-cef7c1928211">
Owner

I don't think putting it in the primary nav would make sense from an IA perspective; users just wouldn't look there.

What about this: instead of the three-dots overflow menu, show that button as well as a "plus chat" button next to each other similar to how we show both the search and info icons at the top of a room?

I don't think putting it in the primary nav would make sense from an IA perspective; users just wouldn't look there. What about this: instead of the three-dots overflow menu, show that button as well as a "plus chat" button next to each other similar to how we show both the search and info icons at the top of a room?
Author
Contributor

@hodlbod

I’ve shared a detailed comparison in this comment: #152 (comment) including prototypes for both the FAB and full-width CTA approaches.

From a UX perspective, I feel the FAB works well for the “Start Chat” action since it represents a primary action on the chat screen. It’s easy to discover without requiring users to explore the interface, and it keeps the layout visually clean and less cluttered.

@hodlbod I’ve shared a detailed comparison in this comment: https://gitea.coracle.social/coracle/flotilla/pulls/152#issuecomment-1361 including prototypes for both the FAB and full-width CTA approaches. From a UX perspective, I feel the FAB works well for the “Start Chat” action since it represents a primary action on the chat screen. It’s easy to discover without requiring users to explore the interface, and it keeps the layout visually clean and less cluttered.
Collaborator

I don't think putting it in the primary nav would make sense from an IA perspective; users just wouldn't look there.

Makes sense, users typically wouldn't look for the add chat button there.

What about this: instead of the three-dots overflow menu, show that button as well as a "plus chat" button next to each other similar to how we show both the search and info icons at the top of a room?

Seems better, as it will keep the design language consistence, and will help users get used to the pattern.

> I don't think putting it in the primary nav would make sense from an IA perspective; users just wouldn't look there. Makes sense, users typically wouldn't look for the add chat button there. > What about this: instead of the three-dots overflow menu, show that button as well as a "plus chat" button next to each other similar to how we show both the search and info icons at the top of a room? Seems better, as it will keep the design language consistence, and will help users get used to the pattern.
Collaborator

From a UX perspective, I feel the FAB works well for the “Start Chat” action since it represents a primary action on the chat screen. It’s easy to discover without requiring users to explore the interface, and it keeps the layout visually clean and less cluttered.

The FAB works well for the mobile layout, but from a desktop perspective it feels a bit redundant (see attached image). Also, in the active conversation state, that button looks a bit confusing.

Screenshot 2026-04-06 at 11.16.33 PM.png
> From a UX perspective, I feel the FAB works well for the “Start Chat” action since it represents a primary action on the chat screen. It’s easy to discover without requiring users to explore the interface, and it keeps the layout visually clean and less cluttered. The FAB works well for the mobile layout, but from a desktop perspective it feels a bit redundant (**see attached image**). Also, in the active conversation state, that button looks a bit confusing. <img width="1058" alt="Screenshot 2026-04-06 at 11.16.33 PM.png" src="attachments/a66f743b-cceb-4bc6-9c6f-61ef7f984e52">
Prat_09 closed this pull request 2026-04-06 17:40:04 +00:00
Prat_09 reopened this pull request 2026-04-06 17:42:13 +00:00
Author
Contributor

@userAdityaa

That’s a fair point - I agree that the FAB can feel slightly redundant on desktop when the user is not in an active conversation.

However, one scenario where it adds value is when a user is already inside a conversation and wants to quickly initiate another chat. In that context, having a clear and readily accessible action helps avoid additional navigation or friction.

@userAdityaa That’s a fair point - I agree that the FAB can feel slightly redundant on desktop when the user is not in an active conversation. However, one scenario where it adds value is when a user is already inside a conversation and wants to quickly initiate another chat. In that context, having a clear and readily accessible action helps avoid additional navigation or friction.
Owner

However, one scenario where it adds value is when a user is already inside a conversation and wants to quickly initiate another chat.

I don't know how frequently this would be the case, and anyway on desktop that would be possible anyway with the full width action button in the sidebar, or the small button in the sidebar header. I'd still like to see what that might look like. Maybe something like I've attached.

> However, one scenario where it adds value is when a user is already inside a conversation and wants to quickly initiate another chat. I don't know how frequently this would be the case, and anyway on desktop that would be possible anyway with the full width action button in the sidebar, or the small button in the sidebar header. I'd still like to see what that might look like. Maybe something like I've attached.
Author
Contributor

Makes sense, I have attached two versions of full-width Start Chat action buttons for desktop interface.

Top CTA Bottom CTA
image.png image.png

Also, wanted to know - are we thinking of keeping FAB on mobile interfaces while full-width CTA on desktop?

Makes sense, I have attached two versions of full-width Start Chat action buttons for desktop interface. |Top CTA|Bottom CTA| |:--:|:--: |![image.png](/attachments/868a867d-8842-4209-8567-ed72aa1a1436) | ![image.png](/attachments/b961a088-e7bf-423e-a493-3221a1b0536e)|. Also, wanted to know - are we thinking of keeping FAB on mobile interfaces while full-width CTA on desktop?
131 KiB
131 KiB
Owner

Thanks, I think the Top CTA looks pretty good. And yes — let's do a FAB on mobile and a full-width CTA on desktop.

Thanks, I think the Top CTA looks pretty good. And yes — let's do a FAB on mobile and a full-width CTA on desktop.
Author
Contributor

Sure, on it.

Sure, on it.
Author
Contributor

@hodlbod

Changes:

  • Added a floating "Start Chat" (FAB) at bottom-right for mobile interfaces
  • Added a full-width "Start Chat" (CTA) at the top of the secondary nav for desktop interfaces
  • Removed "Start Chat" from overflow menu

Implementation:

  • Responsive behavior: The "Start Chat" action adapts across mobile and desktop, aligned with the proposed Figma designs
  • Flow Cleanup: Removed redundant "Start Chat" action button from menu options.

Checks:

  • pnpm run format - pass
  • pnpm run lint - pass
  • pnpm run check - 0 errors and 0 warnings

Mobile interface with FAB:
FAB(Mobile).png

Desktop interface with full-width CTA:
Full_width_CTA(Desktop).png

@hodlbod **Changes:** - Added a floating "Start Chat" (FAB) at bottom-right for mobile interfaces - Added a full-width "Start Chat" (CTA) at the top of the secondary nav for desktop interfaces - Removed "Start Chat" from overflow menu **Implementation:** - Responsive behavior: The "Start Chat" action adapts across mobile and desktop, aligned with the proposed Figma designs - Flow Cleanup: Removed redundant "Start Chat" action button from menu options. **Checks:** - pnpm run format - pass - pnpm run lint - pass - pnpm run check - 0 errors and 0 warnings **Mobile interface with FAB:** ![FAB(Mobile).png](/attachments/102f2cdb-8836-43ab-8c3a-7f77368b7af3) **Desktop interface with full-width CTA:** ![Full_width_CTA(Desktop).png](/attachments/13faa6e4-e6bf-4095-bb6b-b2468c3c5271)
hodlbod added 4 commits 2026-04-07 17:02:25 +00:00
hodlbod force-pushed 145-startChat-FAB from 9c368b94bd to 9cbdc5415a 2026-04-07 17:02:25 +00:00 Compare
hodlbod merged commit 613cad31c0 into dev 2026-04-07 17:02:41 +00:00
hodlbod deleted branch 145-startChat-FAB 2026-04-07 17:02:41 +00:00
hodlbod referenced this issue from a commit 2026-04-07 17:02:42 +00:00
Sign in to join this conversation.