5 min read
🏦 MACH Android App Clone - UI Implementation

Overview

An in-depth implementation of the MACH banking application, showcasing modern Android development practices, clean architecture principles, and robust state management. This project serves as a practical exploration of financial application architecture and UI/UX patterns.

πŸ› οΈ Technical Stack

  • UI & Composition

    • Jetpack Compose with Material 3 design system
    • Accompanist System UI Controller for seamless system bar handling
    • Custom animations and transitions
    • Responsive layouts for various screen sizes
  • Architecture & Design Patterns

    • Clean Architecture with clear separation of concerns
    • MVVM pattern for presentation layer
    • Dependency Injection using Dagger Hilt
    • Navigation Component for screen management
  • Network & Data Layer

    • Retrofit2 with OkHttp3 for API communication
    • Gson converter for JSON parsing
    • Kotlin Coroutines for asynchronous operations

🚧 Project Structure

πŸ“ mach
β”œβ”€β”€ πŸ“„ MachApp.kt
β”œβ”€β”€ πŸ“„ MainActivity.kt
β”œβ”€β”€ πŸ“„ SharedViewModel.kt
β”œβ”€β”€ πŸ“ core
β”‚   β”œβ”€β”€ πŸ“ di
β”‚   β”‚   └── πŸ“„ NetworkModule.kt
β”‚   └── πŸ“ navigation
β”‚       β”œβ”€β”€ πŸ“„ BottomNavigationMenu.kt
β”‚       β”œβ”€β”€ πŸ“„ BottonSheetController.kt
β”‚       β”œβ”€β”€ πŸ“„ NavComposable.kt
β”‚       └── πŸ“„ NavigationController.kt
β”œβ”€β”€ πŸ“ feature
β”‚   β”œβ”€β”€ πŸ“ inicio
β”‚   β”‚   β”œβ”€β”€ πŸ“ data
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ mapper
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ UserDataDtoMapper.kt
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ remote
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ api
β”‚   β”‚   β”‚   β”‚   β”‚   └── πŸ“„ UserDataApi.kt
β”‚   β”‚   β”‚   β”‚   └── πŸ“ dto
β”‚   β”‚   β”‚   β”‚       └── πŸ“„ UserDataDto.kt
β”‚   β”‚   β”‚   └── πŸ“ repository
β”‚   β”‚   β”‚       └── πŸ“„ UserDataRepositoryImpl.kt
β”‚   β”‚   β”œβ”€β”€ πŸ“ di
β”‚   β”‚   β”‚   └── πŸ“„ InicioModule.kt
β”‚   β”‚   β”œβ”€β”€ πŸ“ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ model
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ UserData.kt
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“ repository
β”‚   β”‚   β”‚   β”‚   └── πŸ“„ UserDataRepository.kt
β”‚   β”‚   β”‚   └── πŸ“ usecase
β”‚   β”‚   β”‚       └── πŸ“„ GetUserDataUseCase.kt
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       β”œβ”€β”€ πŸ“„ InicioScreen.kt
β”‚   β”‚       └── πŸ“„ InicioViewModel.kt
β”‚   β”œβ”€β”€ πŸ“ inversiones
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       └── πŸ“„ InversionesScreen.kt
β”‚   β”œβ”€β”€ πŸ“ pin
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       └── πŸ“„ PinScreen.kt
β”‚   β”œβ”€β”€ πŸ“ splash
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       └── πŸ“„ SplashScreen.kt
β”‚   β”œβ”€β”€ πŸ“ tarjetas
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       └── πŸ“„ TarjetasScreen.kt
β”‚   β”œβ”€β”€ πŸ“ transferencia
β”‚   β”‚   └── πŸ“ ui
β”‚   β”‚       └── πŸ“„ TransferenciaScreen.kt
β”‚   └── πŸ“ voucher
β”‚       └── πŸ“ ui
β”‚           └── πŸ“„ VoucherScreen.kt
β”œβ”€β”€ πŸ“ splash
β”‚   β”œβ”€β”€ πŸ“„ SplashActivity.kt
β”‚   β”œβ”€β”€ πŸ“ navigation
β”‚   β”‚   β”œβ”€β”€ πŸ“„ NavComposable.kt
β”‚   β”‚   └── πŸ“„ NavigationController.kt
β”‚   └── πŸ“ ui
β”‚       └── πŸ“ theme
β”‚           β”œβ”€β”€ πŸ“„ Color.kt
β”‚           β”œβ”€β”€ πŸ“„ Theme.kt
β”‚           └── πŸ“„ Type.kt
└── πŸ“ ui
    β”œβ”€β”€ πŸ“ composable
    β”‚   β”œβ”€β”€ πŸ“„ AccountCard.kt
    β”‚   β”œβ”€β”€ πŸ“„ BottonSheet.kt
    β”‚   β”œβ”€β”€ πŸ“„ CardAccount.kt
    β”‚   β”œβ”€β”€ πŸ“„ CustomLista.kt
    β”‚   β”œβ”€β”€ πŸ“„ EvolveAccount.kt
    β”‚   β”œβ”€β”€ πŸ“„ HomeCardSection.kt
    β”‚   β”œβ”€β”€ πŸ“„ MeetMachCard.kt
    β”‚   β”œβ”€β”€ πŸ“„ OptionInvestCard.kt
    β”‚   β”œβ”€β”€ πŸ“„ RectangleCard.kt
    β”‚   β”œβ”€β”€ πŸ“„ ScrollAccounts.kt
    β”‚   β”œβ”€β”€ πŸ“„ ScrollImages.kt
    β”‚   β”œβ”€β”€ πŸ“„ ScrollInvest.kt
    β”‚   β”œβ”€β”€ πŸ“„ ShowMore.kt
    β”‚   β”œβ”€β”€ πŸ“„ SquareCard.kt
    β”‚   β”œβ”€β”€ πŸ“„ Topbar.kt
    β”‚   └── πŸ“„ WhatToDoTodaySection.kt
    └── πŸ“ theme
        β”œβ”€β”€ πŸ“„ Color.kt
        β”œβ”€β”€ πŸ“„ Theme.kt
        └── πŸ“„ Type.kt

⭐ Key Features

  • Comprehensive banking dashboard implementation
  • Transaction history visualization
  • Real-time balance updates
  • Smooth transitions and micro-interactions
  • Error handling and loading states

πŸ—οΈ Architecture Overview

The project follows Clean Architecture principles with three main layers:

  • Presentation Layer: MVVM pattern with Compose UI and ViewModels
  • Domain Layer: Business logic and use cases
  • Data Layer: Repository pattern with remote data sources

πŸ“± UI Showcase


Vista 1 Vista 2

Vista 1 Vista 2

Vista 1 Vista 2

Vista 1 Vista 2

πŸ” Technical Highlights

  • Implementation of reactive UI patterns with Kotlin Flows
  • Custom composables for reusable banking components
  • Secure local data management
  • Efficient state management using ViewModels
  • Integration of material design components
  • Custom theming system for consistent banking UI

πŸ“š Key Learnings

  • Implementation of Clean Architecture in a banking context
  • State management patterns for financial applications
  • Performance optimization techniques for complex UIs
  • Implementation of modern Android development practices

πŸ› οΈ Development Practices

  • Modular architecture for better scalability
  • Code quality maintenance with static analysis tools