< Kabir />
Please wait while we prepare your content
Please wait while we prepare your content

GrainX is a cross-platform mobile marketplace connecting Australian grain farmers, buyers, and agents for direct peer-to-peer grain trading. The app enables farmers to post grain offers, buyers to place bids, and both parties to negotiate prices through counter-bids and counter-offers — all without a middleman. It features a multi-step transaction lifecycle (from sale confirmation through platform fee payment, ownership transfer, and commodity receipt), role-based dashboards with real-time stats, a live market feed with search and filtering, urgent action alerts, agent-mediated trading with commission tracking, NGR/ABN identity verification, bank account management, push notifications via OneSignal, and Firebase-powered analytics and crash reporting. The app supports three distinct user roles (Farmer, Buyer, Agent), each with tailored navigation, home screens, and workflows.
Three distinct user roles (Farmer, Buyer, Agent) required completely different navigation structures, home screens, tab bars, and workflows within a single app.
Implemented role-based conditional rendering using Expo Router's Tabs.Protected guards, role-specific home screens (home-farmer, home-buyer, home-agent), and a Zustand auth store that drives UI branching throughout the entire app.
Each user role gets a fully tailored experience without code duplication, while maintaining a single codebase and deployment pipeline.
The multi-step transaction lifecycle (8 distinct steps from confirmation to commodity receipt) required complex state tracking and real-time updates for both buyer and seller simultaneously.
Built a visual ProgressTracker component rendering dynamic step cards based on server-driven confirmation steps, with TanStack React Query for cache invalidation and optimistic updates on each step completion.
Both parties have a clear, guided transaction flow with real-time status sync, reducing confusion and support tickets during the settlement process.
The negotiation system (counter-bids/counter-offers) needed to handle complex threading, quantity validation, configurable limits, and multiple concurrent negotiations per offer/bid.
Implemented a threaded negotiation model with server-enforced max counter limits, modal-based counter forms with Zod validation and React Hook Form, and alert dialogs for accept/reject with predefined rejection reasons.
Smooth, transparent negotiation experience that prevents abuse while keeping the deal-making process flexible and fair.
The agent system required a complex consent-based authorization model where agents trade on behalf of farmers, with commission tracking, profile edit requests, and connection management.
Built a full agent-farmer relationship lifecycle: registration with KYC, farmer onboarding (new + existing), consent review flows, profile edit request/approval system, and per-trade commission calculation visible to all parties.
Agents can efficiently manage multiple farmers while farmers retain full control over their accounts and authorization, building trust in the platform.
Managing data freshness across 50+ API endpoints with infinite scroll pagination, search, filtering, and cross-screen invalidation was complex and error-prone.
Adopted TanStack React Query with a structured query key factory pattern, infinite query options for all paginated lists, smart stale time configuration for dropdowns, and cross-cutting invalidation on mutations using query key hierarchies.
Consistent data freshness across all screens, reduced redundant API calls, and simplified developer experience for adding new data-fetching features.
3 Tailored Dashboards
8-Step Guided Flow
50+ via TanStack Query
iOS + Android + Web