| ← All Docs Mobile UX

Mobile UX

Last updated Sep 2026 Primary platform · 80%+ users on mobile

Layout

The mobile interface is anchored by a bottom navigation bar, visible on all screens below the 1024px breakpoint. It provides single-tap access to the five primary sections of the app.

Bottom Navigation Bar

Five items arranged horizontally across the bottom of the viewport:

The nav bar uses env(safe-area-inset-bottom) via the content-safe-bottom utility to avoid overlap with the iOS home indicator. It is hidden on desktop (≥1024px).

Billing Flow — Mobile

Mobile billing is a 3-step wizard, each step on its own screen with a progress indicator at the top.

1

Items

Product selection via category cards (Feed / Medicine) that open a modal sheet. Users can search within a category and tap a product to add it to the cart.

The cart is displayed inline below the category selector with editable quantity and price per item. A running subtotal is shown at the bottom of the item list.

2

Payment

Payment type selection: Credit Cash Partial. Amount input field appears for cash and partial payments with auto-calculated balance due. A date picker allows setting the bill date.

3

Review

Full bill summary showing all line items, quantities, prices, and totals. A canvas-based signature pad accepts touch input for the farmer's signature.

A sticky "Create Bill" button sits at the bottom of the screen. After creation, the user is offered the option to send the bill via WhatsApp.

Responsive Strategy

PatternImplementation
Mobile-firstDefault styles target mobile. Desktop overrides use the lg: prefix (1024px breakpoint).
Layout togglinglg:hidden / hidden lg:flex to render separate mobile and desktop blocks.
DashboardSeparate mobile and desktop layout components loaded per breakpoint.
SpacingFluid gutter: --page-gutter: clamp(1rem, 3vw, 1.5rem)
TabletNo tablet-specific breakpoint. 768–1024px receives the mobile layout.
TablesHorizontal scroll on mobile via the .tw wrapper.
ModalsSlide-up sheet on mobile; scale-in centered dialog on desktop.

Touch Targets

Gestures & Interactions

GestureWhereBehavior
Date swipeDaily Book pageSwipe left/right to navigate between dates.
Pull-to-refreshList viewsTriggers a React Query refetch of the current data.
Tap-holdNot usedAvoided for simplicity; no long-press actions.
Quantity +/−Cart itemsTap to increment/decrement. Hold for rapid change.
Swipe to dismissNot usedStandard back navigation is used instead.

Performance Considerations

Mobile Performance Notes

Navigation Patterns