← All case studies

Mobile

Shree Arham Gold & Ratnesh Gold

Shree Arham Gold & Ratnesh Gold Mobile Application .

Designed and engineered a production-grade dual-brand luxury jewelry mobile application serving wholesalers, retailers, administrators, staff, and end customers.

Timeline 1 month Team 1 engineer Stack Flutter, Dart, GetX, Firebase Cloud Messaging, fl_chart, mobile_scanner, flutter_secure_storage, pdf

The client operated a jewelry business with several overlapping operational challenges: fragile architecture with API calls directly from UI widgets, device security gaps with plaintext token storage, poor catalog navigation, incomplete UI implementation, and manual product sharing via WhatsApp with no branding, consistency, or control. The business needed an elegant and extra secure e-commerce application that also automated some business operations for admin.

Before writing a single feature, I restructured the entire codebase with a Repository Pattern and Constants Architecture. Then I overhauled security with encrypted token storage, screenshot protection, build hardening, and environment security. Finally, I built core business modules including a dynamic gold rate engine, professional PDF catalog sharing, multi-role access control, push notifications, barcode scanning, and a multimedia carousel.

The project represents the full spectrum of mobile engineering: security architecture, business domain modeling, performance optimization, and design systems. Replacing manual, informal business processes (handwritten price calculations, WhatsApp catalog sharing, paper-based custom order tracking) with structured, accountable digital workflows demonstrated that thoughtful software engineering creates direct, measurable business value.

I designed and engineered a production-grade mobile application for a dual-brand luxury jewelry business operating under the names Shree Arham Gold and Ratnesh Gold. The end product is a comprehensive, full-featured business platform serving wholesalers, retailers, administrators, staff, and end customers.

The project demanded simultaneous mastery of mobile architecture, security engineering, UI/UX design, performance optimization, and business domain knowledge across jewelry pricing, custom manufacturing workflows, and B2B distribution.

The Problem

The client operated a jewelry business with several overlapping operational challenges:

  • Fragile architecture: API calls were made directly from UI widgets, making the codebase nearly impossible to maintain or scale
  • Device security gaps: authentication tokens were stored in plaintext SharedPreferences, creating serious vulnerabilities
  • Poor Catalog Navigation: bad UI/UX of showcasing and navigating through the collections.
  • Incomplete UI implementation: many UI elements required by the client were not implemented.
  • Manual products sharing: they were manually sharing products via WhatsApp, with no branding, no consistency, and no control

My Approach

Phase 1: Architectural Foundation

Before writing a single feature, I restructured the entire codebase. The original project had no clear separation between data, business logic, and presentation. My first priority was establishing an architecture that could support the complexity ahead.

I introduced a Repository Pattern with a dedicated data/repositories/ layer, separating all API communication from controllers and UI. This meant that every domain (authentication, products, orders, gold rates, notifications, carousels) had its own isolated repository class. Controllers became pure state managers. Screens became pure presentation layers.

I also formalized a Constants Architecture: endpoint strings were consolidated into ApiUrlConstants, timeout configurations into AppTimeouts, karat-to-purity mappings into KaratConstants, and image compression rules into ImageCompressionConstants. This eliminated the "magic numbers" problem that plagued the original codebase and made future modifications predictable and safe.

Phase 2: Security Overhaul

The security posture of the original application was inadequate. I addressed this at multiple layers:

Token Storage: Migrated completely from SharedPreferences to FlutterSecureStorage, ensuring all authentication tokens and sensitive user data are stored in the device's secure enclave (Keychain on iOS, EncryptedSharedPreferences on Android).

Screenshot Protection: Implemented app-wide screenshot prevention using the no_screenshot plugin, with an admin-controlled override mechanism. Admins can disable protection for a configurable duration (30 minutes, 2 hours, etc.) for troubleshooting, after which it automatically re-enables. This prevents unauthorized capture of sensitive pricing data and customer information.

I implemented the Flutter client for the handset change approval workflow, including request submission, approval status tracking, and secure session handling.

Build Hardening: Configured ProGuard for release builds with rules protecting Firebase, Flutter engine, and Google Play Services classes. Established proper Android signing configuration with credentials managed outside the repository via a key.properties file.

Phase 3: Core Business Modules

With a solid foundation in place, I built the business-critical modules systematically.

Key Technical Achievements

Dynamic Gold Rate Engine

I implemented the mobile gold rate management experience, including administrative interfaces for updating rates, historical charts, and a reusable pricing engine that consumed backend APIs. On the admin side, administrators can update the live rate and view historical data. On the user-facing side, a GoldRateDetailScreen presents:

  • Live current rate in a styled card
  • A line chart (built with fl_chart) showing historical price trends
  • Statistical summary (minimum, maximum, average, and percentage change)
  • Period filters spanning Day, Week, Month, Year, and custom date ranges

Most critically, I implemented a static GoldRateController.calculatePrice() method that computes retail pricing from first principles: fine weight × current rate, plus labor and GST. Labor and GST percentage is configurable in admin panel. This calculation propagates consistently across the cart, product detail pages, and PDF generation.

Professional Catalog Sharing System

I built a complete content sharing infrastructure that replaced the informal WhatsApp photo sharing process.

Architecture: A dedicated ShareService class handles all sharing logic. PDF generation runs in a background isolate using compute(), keeping the UI thread responsive even when processing large catalogs.

Capabilities:

  • Administrators select products or product categories and generate branded PDF catalogs or image collections
  • PDFs carry full brand identity: dual logos ("Shree Arham Gold & Ratnesh Gold"), a gold/dark color scheme, and professional headers and footers
  • Layout options include single-product full-page or 4-product grid formats
  • Cart enquiries and individual order details can be exported as PDFs on demand
  • Files are saved directly to the device's Downloads folder via a custom Method Channel implementation on both Android (MainActivity.kt) and iOS (AppDelegate.swift)

This transformed the sales process. Representatives now share professional, branded materials instead of informal photographs.

Multi-Role Access Control

I implemented an RBAC system to the UI for four roles: SUPERADMIN, ADMIN, STAFF, and USER.

Each role gets a tailored interface:

  • Superadmin has access to user management including creating new admin accounts, toggling retailer status, and resetting passwords
  • Admin sees the full management panel: users, orders, categories, products, carousel, gold rates, notifications, handset requests, ancillary content, and screenshot controls
  • Staff sees a curated subset: orders, products, categories, carousel, gold rates, and ancillary data
  • Users see their personal profile, order history, and informational content

The system handles the retailer designation with specific business logic. Retailers see net weight-based pricing calculated from gold rates, while regular users see standard catalog pricing.

Category System Rearchitecture

The original category system made multiple API calls per karat level, creating cascading network requests that degraded performance as the catalog grew.

I refactored this to consume a consolidated category-tree endpoint that returns the complete three-level category tree in one request. Client-side caching (level3Cache) provides instant access to level-3 data without additional network calls. The admin category manager was rebuilt as a drill-down interface (Level 2 → Level 3), replacing a flat filtered list that became unwieldy at scale.

Push Notification Infrastructure

I built a dual-layer notification system combining Firebase Cloud Messaging with local notifications:

  • FCM handles server-initiated notifications for order status changes, gold rate updates, and admin broadcasts
  • Local notifications fire independently for in-app events
  • Graceful degradation: If Firebase is not configured, the app starts normally with local notifications intact and logs a warning
  • Topic subscriptions are managed on login/logout: regular users subscribe to all_users, admins to admin_notifications
  • Admins can compose and broadcast targeted notifications through a NotificationManagerScreen with a history view showing recipient counts

Barcode Scanner Integration

I implemented a production-quality barcode scanner using mobile_scanner, featuring:

  • Full-screen scanning overlay with visual guides
  • Torch toggle for low-light environments
  • Front/rear camera switching
  • Duplicate scan prevention to avoid processing the same code twice in rapid succession

This enables staff to quickly look up products by scanning tag barcodes rather than manual search.

The home page carousel was rebuilt to support video content alongside images:

  • A _CarouselMediaItem widget handles video playback with a three-tier fallback strategy: network stream → local download → cached file
  • Videos display play/pause overlay controls and generate thumbnails using video_thumbnail
  • Media is preloaded in batches to reduce stuttering during swipe transitions
  • Shimmer states animate loading indicators, preventing layout jumps
  • The system degrades gracefully when media fails to load

UI/UX Engineering

Responsive Design System

I built a comprehensive responsive design system from scratch. ContextExtensions.dart was expanded with responsiveWidth, responsiveFont, gridColumns, widthPercent, heightPercent, and related helpers. Every screen was retrofitted to use these utilities instead of hardcoded pixel values, ensuring consistent appearance across phones, foldables, and tablets.

Custom Widget Library

I developed a library of reusable, design-system-aligned components:

  • FilterBottomSheet: modular, supporting karat, category, stock status, weight range, size, active status, and price filters
  • CategoryPickerSheet: a multi-select modal for category assignment
  • DateRangePickerSheet: full date range selection with presets, month/year pickers, and arbitrary custom ranges
  • StatusBorderCard & StatusBadge: color-coded status indicators used consistently across orders, requests, and approvals
  • ImageActionSheet: a standardized edit/upload/remove action pattern for image fields
  • StatCard: admin dashboard statistics display

Bottom Navigation Redesign

I rebuilt the bottom navigation bar using the picons icon set for a premium aesthetic. Key additions:

  • A 5th "Catalog" tab: a circular branded icon opening the full category listing
  • Animated icon/label transitions on tab change
  • A notification badge on the Home tab reflecting unread count
  • Separate navigation structures for admin and user roles
  • Dynamic height calculation via NavBarSpacer to prevent content being obscured

Performance Engineering

Image Caching: Increased painting.ImageCache maximumSizeBytes to 50MB and implemented explicit cache clearing on didHaveMemoryPressure callbacks, preventing OOM crashes on image-heavy product listings.

Isolated Processing: PDF generation runs in a separate isolate via compute(). Image compression for uploads uses ImageCompressionConstants to set appropriate quality and maximum dimensions per context (category images, product images, share content, PDFs) preventing unnecessarily large payloads while maintaining visual quality.

Error Resilience: The BaseHttpService automatically retries on 502, 503, and 504 HTTP errors. runZonedGuarded in main.dart catches all uncaught exceptions and logs them via Logger. Every list and detail screen has proper shimmer loading states.

Memory Management: Controllers are explicitly disposed on navigation tab changes using onClose overrides and Get.delete<T>() calls, preventing the accumulation of zombie controllers across navigation events.

Production Configuration

I handled the complete production configuration for both platforms:

Android: Package ID migration (com.example.ratnesh_gold_appcom.shreearhamgold.ratneshgold), release signing configuration, ProGuard rules, Firebase integration, camera permissions, and portrait orientation lock.

iOS: Bundle ID migration, push notification entitlements (Runner.entitlements), UNUserNotificationCenterDelegate compliance in AppDelegate.swift, camera usage permissions, background modes configuration (fetch, remote-notification), portrait orientation lock, and platform target update to iOS 13.0.

Results & Impact

Area Before After
Architecture API calls in UI widgets Repository → Controller → View separation
Token Security Plaintext SharedPreferences Encrypted secure storage
Catalog Sharing WhatsApp photos Branded PDF catalogs with professional layout
Gold Pricing Manual calculation Automatic rate-driven pricing across all surfaces
Custom Orders WhatsApp/paper notes Structured digital workflow with craftsman assignment
Category API Multiple requests per karat Single tree fetch with client-side cache
Notifications None FCM + local, with admin broadcast tools
Screenshot Security None App-wide protection with admin-controlled override
Device Security No binding Formal handset change approval workflow
Roles Single user type Superadmin / Admin / Staff / User with tailored UIs

Reflection

This project represents the full spectrum of mobile engineering: security architecture, business domain modeling, performance optimization, and design systems. The most technically satisfying aspect was building systems that are invisible to the end user but fundamentally change the reliability and trustworthiness of the product.

The most strategically satisfying was replacing manual, informal business processes (handwritten price calculations, WhatsApp catalog sharing, paper-based custom order tracking) with structured, accountable digital workflows. This demonstrates that thoughtful software engineering creates direct, measurable business value.

Want results like this?

Get in touch →