NHCS — Mobile UX Assessment

Prepared for National Health Care Solutions, LLC

June 5, 2026 | Rails 8 + Hotwire + Optics design system

Executive Summary

60×36
Pixels — required First Name input on a phone
2.6×
Times the viewport — width of the Add-Shift table
21%
Of mobile screen consumed by the sidebar rail
NHCS works. It has worked for years, and the team has been disciplined about the things that usually slip — design tokens, semantic HTML, a clean component system. None of that is in question. What is in question is what happens when a Health Care Professional opens the same product on the phone in their car between shifts. The application renders as a shrunk-down desktop view rather than a mobile experience. Inputs become smaller than the keyboard keys typing into them, modals contain tables wider than the phone itself, and the half-dozen mobile-native conveniences HCPs see in every other app they use — push notifications, install-to-home-screen, tap-to-navigate addresses — are missing. The fixes are surprisingly small in surface area, and the highest-leverage one is a single CSS media query.
If you only do one thing: add a single mobile media query to the form layout in components/form.scss. It restacks every multi-column form into a single column, bumps inputs to a thumb-friendly 44 px, and stops iOS from auto-zooming on focus. It is the smallest change in the audit and the one your HCPs will feel the most.

Then

Real strengths in the product as it stands today.

Now

Expectations on mobile have moved. Here is what we observed on a 375 px phone, by theme.

1
Experience Gaps

Moments where the product asks the user to work harder than they should on a phone. These are not bugs in the desktop view — they are visible only on mobile, which is exactly why they have stayed hidden.

What We Saw
NHCS sign-in screen on a 375px viewport. The 'Sign in' button is cut off the right edge.
What This Means

The sign-in card clips off the right edge of the phone. The card has a fixed 450 px width and the phone is 375 px wide, so the "Sign in" button is partially sliced and the logo and footer overflow horizontally. This is the very first thing an HCP sees on their phone — a broken card before they can even authenticate.

The error alert sits floating top-center, far from the inputs and the keyboard, so users do not see it without scrolling up after submitting.

Critical first impression
What We Saw
The Add-Shift modal on mobile showing the start of a wide table. The same modal scrolled fully to the right, revealing the additional hidden columns.
What This Means

The Add-Shift modal contains a 990 px-wide table inside a 375 px viewport. The form has 10 columns — Start Date, HCP, Facility, Department, Shift, Start Time, End Time, EC, FC, Delete — and renders as a horizontally-scrolling table even on mobile.

To enter one shift, a user has to swipe 637 px sideways inside the modal. The "Please select…" labels are truncated to "Please" because the column is too narrow. "HCP Confirmed" and "Facility Confirmed" abbreviate to "EC" and "FC" because there is no horizontal room. This is the single highest-leverage mobile fix in the audit — collapsing the row to a stacked card under $breakpoint-small.

Critical workflow blocker
What We Saw
The admin calendar on a 375px viewport with a persistent left rail consuming 80px of horizontal space.
What This Means

The sidebar rail never collapses for admin users on mobile. About 80 px (21% of horizontal viewport) is permanently lost to a navigation rail that ought to be hidden behind a drawer toggle. HCPs get a proper drawer pattern — admins do not, even though admins also use the platform on phones.

The hamburger toggle is in the top-right corner, opposite the standard iOS/Android convention. Users will reach for the top-left out of habit.

Navigation
Help tooltips never appear on touch devices.
Colored shift-status pills on the calendar (Booked, Available, Unavailable, Unassigned) rely on :hover tooltips for their meaning. On a phone there is no hover state, so the colors are unexplained. This also fails WCAG 1.4.1 (color-only status), regardless of device.
Color-only status
The shift-status pills themselves are 22 px tall.
Half the WCAG / iOS 44×44 px touch-target floor. For an HCP scrolling their schedule with a thumb, mistapping the wrong shift is easy — and tapping the wrong shift opens a different modal entirely.
Touch targets
2
Density & Form Layout on Mobile

The application’s form system uses horizontal grids that look balanced on a 1200 px screen but proportionally shrink on a phone — instead of restacking. Every form in the app inherits this. This single architectural choice is the source of most of the form pain.

What We Saw
The New HCP form on mobile with a row of five tiny side-by-side inputs for Prefix, First Name, Middle Name, Last Name, and Suffix.
What This Means

The New HCP form puts five name fields in a single horizontal row on a 375 px phone. Measured live:

  • Prefix — 36 × 36 px  (below the 44×44 floor)
  • * First Name — 60 × 36 px
  • Middle Name — 60 × 36 px
  • * Last Name — 60 × 36 px
  • Suffix — 36 × 36 px

For comparison, an iOS keyboard key is roughly 32×42 px. The required "First Name" input is narrower than the spacebar typing into it.

The next row crams Date of Birth, Gender, and SSN into three columns at 98 px each. SSN, nine digits, gets the same width as the (already-cramped) middle-name field.

Form usability
What We Saw
The HCPs index page showing a horizontally-scrolling data table with columns running off the right edge.
What This Means

Data tables across the app are horizontally scrollable on mobile. The HCPs index, the timesheets index, the reports — all share the same desktop table layout and require the user to swipe sideways to see Name, License, Email, Phone, and Actions.

The filter chips above ("Active", "All Licen…", "Search…") wrap awkwardly and truncate their own labels. A list-of-cards pattern under $breakpoint-small would let the same data live full-width and thumb-readable.

Data tables
Inputs are 36 px tall everywhere.
An iOS keyboard row is ~50 px tall. The fields users tap into are shorter than the keys they tap with. Bumping inputs to 44 px minimum and using 16 px font size also stops iOS from auto-zooming the page when an input gains focus — a separate undocumented pain point.
Touch targets
Required-field asterisks rely on a hover tooltip.
The small * next to required labels uses an <abbr> with hover-only "required" text. On a phone the asterisk is visible but its meaning is invisible. A visible "(required)" label or a clear visual treatment lands the same information without the tooltip dependency.
Form clarity
3
Modernization Moments

Table-stakes mobile platform features that exist on every comparable healthcare staffing app (Clipboard Health, ShiftKey, ShiftMed) and on every consumer app the HCPs already use (Uber, DoorDash). These are not stretch goals — they are the conventions of 2026.

Date pickers bypass the native iOS / Android wheel.
The date_input_controller overlays the flatpickr library on top of the Rails type="date" field. On desktop this adds a nice calendar grid; on mobile it replaces the native scroll-wheel date picker — which is the picker iOS users prefer. The fix is one media query: skip the controller on (pointer: coarse) devices.
Native inputs
Time entry uses a custom hour : minute text widget.
Every shift entry asks the user to type four digits into two small text inputs. type="time" gives them the native picker on mobile, with AM/PM and scroll affordances. The custom widget is great on desktop where users type fast; on mobile it is slower and more error-prone than the platform native.
Native inputs
No "Add to Home Screen" install.
There is an apple-touch-icon.png in /public but no manifest.webmanifest and no service worker. Add to Home Screen produces a chrome-less web page with no app feel. Adding a manifest is one file, ~50 lines, and immediately gives HCPs a real-looking app icon plus a splash screen plus standalone mode.
PWA
No web push notifications.
ActionCable is already configured (it powers Turbo Streams), and an in-app notification model already exists. Bridging that to the Web Push API would let "Shift confirmed", "Facility canceled", "New shift available Saturday" land on the HCP's lock screen — the single highest-engagement lever available on the platform. This is what staffing-app competitors lead with.
PWA
Drawer opens only via tap, not swipe-from-edge.
The HCP shell already animates a CSS drawer in and out. Adding edge-swipe-to-open and swipe-to-close is a small Stimulus controller on top of the existing animation. Users will try this gesture instinctively because every other drawer on their phone supports it.
Gestures
No pull-to-refresh on the schedule view.
The HCP calendar is the most-revisited page in the product. Pull-to-refresh is the universal "did anything change?" gesture and is one library away from working. Without it, the only way to refresh is to scroll up and reload the browser tab — a desktop pattern.
Gestures
4
Strategic Opportunities

A glimpse of what this product could do that it does not today. These ideas come from the actual workflow — HCPs in the field, picking up shifts between drives, calling facilities, navigating to addresses.

Tap-to-navigate facility addresses.
Today, an HCP's address is plain text. Wrapping it in maps:// on iOS or a generic geo: URL means one tap opens turn-by-turn directions to the facility. For a workforce that drives between shifts, this is the most-requested integration in every adjacent app.
Tap-to-navigate
Bottom tab bar for the HCP shell.
The HCP sidebar has only three items: Schedule, Demographics, Documents. Three items do not need a hidden drawer on mobile — they belong in a bottom tab bar, where the thumb naturally rests. The current top-left burger is a desktop convention used on phones.
Mobile-native shell
Modals as bottom sheets on mobile.
The current modal pattern is a centered card with the page behind it greyed out. On mobile this wastes ~20% of vertical space on the backdrop. Promoting the modal to a bottom sheet (the iOS / Android convention) with a drag handle gives the content more room and feels native. The same component can render as a centered modal on desktop with one breakpoint switch.
Component pattern
Offline schedule cache.
Healthcare facilities are notorious dead zones. A service worker caching the next 7 days of the HCP's schedule means they can pull it up in the parking lot at a hospital with no signal. Strategically, this is also the foundation for "offline shift confirmation" — accepting a shift even when the data connection comes back later.
Offline

Next

Three paths forward, sized to match different appetites and timelines.

Phased Modernization

3–6 weeks
Mobile-app capabilities, without the App Store.
  • PWA manifest + install-to-home-screen
  • Service worker caching the HCP’s schedule for offline view
  • Web Push notifications bridged to the existing notification model
  • Tap-to-navigate addresses (maps:// / geo:)
  • Pull-to-refresh on the HCP schedule
  • Swipe-to-open drawer for the HCP shell
What clients feel: "They built an app." No App Store submission, no native rewrite.

Comprehensive Refresh

8–12 weeks
Re-imagine the HCP-side experience for mobile-first.
  • Bottom tab bar for HCPs (Schedule / Documents / Profile)
  • Redesigned shift-add and shift-edit flow as a guided wizard
  • Visible shift-status legend; color-plus-icon status indicators
  • Inline edit + undo for timesheet rows
  • Full audit of every form in the app for mobile-first stacking
  • Offline shift confirmation (queue-and-sync)
What clients feel: A product their HCPs actively recommend to peers.

Component Opportunities

Modal (centered card)
→
BottomSheet on mobile
Data table
→
Stacked card list on mobile
flatpickr date input
→
Native type="date" on touch
Custom hour:min widget
→
Native type="time" on touch
Side drawer (tap-only)
→
Swipe-to-open + bottom tabs (HCP)
Hover tooltip
→
Visible legend / inline label

What’s Next

This audit gives us a shared picture of where NHCS lives on the phone today and where it can go. Every recommendation here is incremental, ships on the existing Rails stack, and can be validated with HCPs in the field along the way. Nothing here is a rewrite or a new platform.

A few questions worth exploring together:

  • Which HCP segment uses the phone most heavily today — agency-managed nurses, per-diem, or both? That shapes which “quick win” lands first.
  • Is there appetite for a small pilot — Quick Win shipped to a single facility’s HCPs for two weeks, measured by shift-pickup speed and HCP-reported friction?
  • Would push notifications drive measurable engagement (shift fill rate, time-to-confirm) in a way the team can A/B test?
  • What is the existing case for offline support — how often do HCPs report dead zones at facilities?