Skip to content

feat: Mobile UI for web#835

Open
Pecacheu wants to merge 34 commits into
stoatchat:mainfrom
Pecacheu:phoneui
Open

feat: Mobile UI for web#835
Pecacheu wants to merge 34 commits into
stoatchat:mainfrom
Pecacheu:phoneui

Conversation

@Pecacheu

@Pecacheu Pecacheu commented Feb 19, 2026

Copy link
Copy Markdown
Contributor

Prerequisites

Why this is important

One of the most consistent reasons I hear stopping/making folks hesitate from joining Stoat is the borked mobile app situation. A lot of people in my generation spend much of our time on our phones, plus when it comes to keeping in touch at work, it's all you have access to.

Unfortunately, the current state of affairs is that the Android beta app is missing a ton of features and doesn't work right, and the iOS one isn't currently available. The best thing we've been telling these people is "use the web app in your browser instead," but the trouble is, well you get an experience like this (these are screenshots from real users in the Stoat server who are asking for this, as well as one of my friends testing this fork.)

Responsive mobile UI layout

Phone Example (S25 Ultra)

The most important UI change is the slide gesture to open and close panels instead of showing them side-by-side. I've done some work to refine this to make it feel as natural as possible, eg. taking into account inertia of the finger to "snap" the panel open and shut.

Swipe.mp4

I've un-rounded the corners to increase usable space under a certain display size (opinions welcome on this). I also added code to make the panel slide over automatically when tapping a DM/channel. Lastly, the "channel collapse" button is replaced with a "back" button that returns to the channels view.

Tablet Example (iPad Mini)

When the screen is big enough, however, the UI dynamically changes back to the traditional layout. However, the "server members" panel on the right is collapsed by default in this case, as we found it was creating some confusion among testers. One user also suggests allowing a swipe gesture to open that on tablets, but open to thoughts on that.

Other enhancements for touch users

  • Enable autocapitalize and autocorrect on message box (these can be configured as desired in the user's OS keyboard settings, but not enabling them here prevents them from working regardless of that setting.)
  • Change keyboard shortcuts so that Ctrl + Enter sends on mobile instead of Enter, enabling newlines on touch-keyboard without sending.
  • Disable right-click/long-press context menu when editing a message, so that spell-check suggestions can actually be clicked on.
  • Don't trigger floating tooltops or message toolbar on touchscreens, otherwise they get stuck due to no mouse events.
    • Added "React" button to context menu to still allow reacts on mobile.
  • Skip User Card preview when tapping user icon on mobile and go straight to full User Profile.
  • Adjust margins and min sizes on modals, invite previews, and some other UI elements to improve the mobile experience.

Linked Issues

Fixes #850
Fixes #883
Fixes #887
Fixes #924
Fixes #998
Fixes #1005
Fixes #1023
Fixes #1033

TODO

  • Remember last SlideDrawer state (open/closed) when rotating to landscape then back to portrait. Don't necessarily need to persist this in the data store.
  • Auto-hide touch keyboard when swiping from messages view to channels view.
  • Search icon instead of input box in header on mobile (phone & tablet layouts).
  • Make channel name ellipsis truncated to ensure header buttons fit.
  • When dragging finger over top of a channel/DM and sliding the drawer, the channel/DM button can get visually stuck in the 'hovered' state.
  • Hold-and-drag to reorder server sidebar and channel bar doesn't work good on touchscreens.
  • Settings menu will be moving to a full-screen modal, which may necessitate code changes.
    • Likely still using SlideDrawer for navigation in settings?
  • Use a full-screen modal for search and members panel on mobile instead of the sidebar.
  • Appearance menu needs... something, idk. Maybe use dropdowns instead in mobile layout?

Test live at https://forestfire.net:420

Btw, quick thanks to everyone who's helped test this so far on lots of different devices and helped fix lots of bugs!

@Pecacheu

Copy link
Copy Markdown
Contributor Author

Okay I'm going to attempt to fix the DCO check and i18n again while pushing some commits. If I don't come back, play Porter Robinson at my funeral.

Pecacheu added 28 commits June 11, 2026 21:25
- I swear this is the last time lol. Now using classes for everything instead of just some of it, will also help with changes for phone view
- Change threshold for tablet view to 900px

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Phone UI triggers at < 600px width
- Animated, swipable drawer slider, inspired by Discord app

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Inertia-based snapping for SlideDrawer! We mustelids are experts in speed so this was inevitable
- Fix bug that could cause a SlideDrawer race condition if openning and closing settings menu super fast
- Add appDrawer to app state to update things when the state of the UI changes between mobile/non-mobile
- Don't trigger floating tooltops when input is touched, otherwise they get stuck in a showing state on touchscreens
- Reset layout to member sidebar being hidden when mobile view is shown (otherwise how to close it seems to cause some confusion among those who helped test so far)
- Replace primary sidebar collapse button with a "back" button for mobie view

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…al velocity at end

- Fix message context menu appearing in editor
- Enable PWA for dev build for testing

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…ehavior

- On mobile, skip UserCard preview (which doesn't look right on small displays) when tapping user icon and go straight to full UserProfile modal

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…for ID

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Fix stoatchat#883 text overflow out of dialog modals
- Remove old "error" type modal
- Fix invite embed going past edge of screen on mobile

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…spellcheck suggestions

- Remove debug print from SlideDrawer

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…ipated

- Also streamlined the Media Picker menu in the process, should now be much more efficent by generating a lot less stray DOM elements, and using only one Media Picker instance per message
- Only show member sidebar when in server or group DM, because it's blank in normal DMs which causes confusion

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Fix missing reactPicker in AppearanceMenu

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Don't autofocus search input in GIF/emoji picker on mobile because it causes unwanted touch keyboard deployment
- Shrink GIF/emoji picker when screen is too small (dynamically reduces row count for emoji picker or GIF size for GIF picker)
- Prevent GIF/emoji picker from overflowing screen width/height (approach for this is a bit messy, could be improved)
- Fix different sized margin on left vs right side of message box (if you had OCD you'd understand)
- Fix overflow hidden clipping emoji autocorrect dropdown when editing a message
- Fix message box buttons/send button not firing when touch keyboard is open on Chrome (testing needed on Firefox/Safari mobile)
- Fix vite config not allowing rotate to landscape

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Fix 'scrollTo undefined' error in Message
- Fix 'computations will never be disposed' warning in Container
- Add excluded generated dirs from eslint config to vscode config

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…patible

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Addresses stoatchat#1005

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
… mobile

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…r PRs

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Start SlideState enum at 1 so that ! can be used to check for undefined

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
- Auto-hide touch keyboard when swiping from messages view to channels view
- Search icon instead of input box in header on mobile

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
…reen edge

Signed-off-by: Pecacheu <3608878+Pecacheu@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ux review This needs UX review

Projects

None yet

4 participants