FAST-CASH-

Kotlin Jetpack Compose Material 3 Android Architecture

Fast Official Sri Lanka β€” Android Cashier Application

An Android cashier / transaction management application built with Kotlin and Jetpack Compose.
Designed for local transaction management, deposit/withdrawal workflows, transaction history, administrative review UI, and a multilingual user experience.

[!WARNING]

Production Notice

This repository is the Android client application only. For production financial/transaction processing, a trusted backend, authentication, authorization, server-side validation, transaction integrity, audit logging, and secure data storage are mandatory. The Android client must not be used as the source of truth for the backend/database.


πŸ“‹ Table of Contents


πŸ“Œ Project Overview

The primary goals of this application:


✨ Key Features

⚑ Deposit Management

Supported status values:

PENDING β†’ APPROVED | REJECTED | CANCELLED

πŸ’Έ Withdrawal Management

Supported status values:

PENDING β†’ APPROVED | COMPLETED | REJECTED | CANCELLED

πŸŒ™ Dark & Light Theme

🌐 Multilingual UI

The application architecture supports:

Flag Language
πŸ‡±πŸ‡° Sinhala
πŸ‡¬πŸ‡§ English
πŸ‡±πŸ‡° Tamil

πŸ“± Transaction History

Users can review locally stored transaction records and their current local state.

πŸ” Administrative Interface

The project contains an administrative UI for reviewing pending transactions.

[!IMPORTANT] Client-side admin authentication is only a local safeguard. Production authorization MUST be performed by a trusted backend.

❓ User Guide & FAQ

The application includes user guidance and FAQ-style UI components for explaining transaction workflows.


πŸ› οΈ Technology Stack

Component Technology
Language Kotlin
UI Jetpack Compose
Design System Material 3
Architecture MVVM / Clean Architecture style
Database Room
Database Processing KSP
Async Kotlin Coroutines
Reactive State Flow / StateFlow
Networking Retrofit
HTTP Client OkHttp
JSON Moshi
Dependency Injection Hilt
Navigation Navigation Compose
Image Loading Coil
Security AndroidX Security / SQLCipher integration
Build Gradle Kotlin DSL
Minification R8 / ProGuard
Minimum Android API 24
Target Android API 36
Compile SDK API 36

πŸ—οΈ Architecture

The application follows a layered Android architecture:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Jetpack Compose             β”‚
β”‚              UI / Screens                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              ViewModel Layer             β”‚
β”‚          CashierViewModel / State        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚             Repository Layer             β”‚
β”‚           CashierRepository              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚                  β”‚
                β–Ό                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Local Data       β”‚   β”‚      Remote API      β”‚
β”‚                      β”‚   β”‚                      β”‚
β”‚ Room / DAO / Entity  β”‚   β”‚  Retrofit / OkHttp   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚                          β”‚
           β–Ό                          β–Ό
     Local Database              Backend API

Data Flow

UI
 ↓
ViewModel
 ↓
Use case / Repository
 ↓
Local database / Remote API
 ↓
Result
 ↓
StateFlow
 ↓
Compose UI

πŸ“‚ Project Structure

FAST-CASH-/
β”‚
β”œβ”€β”€ app/
β”‚   └── src/
β”‚       β”œβ”€β”€ main/
β”‚       β”‚   β”œβ”€β”€ java/
β”‚       β”‚   β”‚   └── com/example/
β”‚       β”‚   β”‚       β”œβ”€β”€ data/
β”‚       β”‚   β”‚       β”‚   β”œβ”€β”€ CashierRepository.kt
β”‚       β”‚   β”‚       β”‚   └── local/
β”‚       β”‚   β”‚       β”‚       β”œβ”€β”€ AppDatabase.kt
β”‚       β”‚   β”‚       β”‚       β”œβ”€β”€ dao/
β”‚       β”‚   β”‚       β”‚       └── entity/
β”‚       β”‚   β”‚       β”‚
β”‚       β”‚   β”‚       └── ui/
β”‚       β”‚   β”‚           β”œβ”€β”€ components/
β”‚       β”‚   β”‚           β”œβ”€β”€ screens/
β”‚       β”‚   β”‚           β”œβ”€β”€ theme/
β”‚       β”‚   β”‚           └── viewmodel/
β”‚       β”‚   β”‚
β”‚       β”‚   └── res/
β”‚       β”‚
β”‚       └── test/
β”‚
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ README.md
β”‚   β”œβ”€β”€ INSTALLATION_GUIDE.md
β”‚   β”œβ”€β”€ DEPLOYMENT_GUIDE.md
β”‚   β”œβ”€β”€ ENVIRONMENT_VARIABLES.md
β”‚   β”œβ”€β”€ API_DOCUMENTATION.md
β”‚   β”œβ”€β”€ ADMIN_MANUAL.md
β”‚   β”œβ”€β”€ USER_MANUAL.md
β”‚   β”œβ”€β”€ BACKUP_GUIDE.md
β”‚   β”œβ”€β”€ SECURITY_CHECKLIST.md
β”‚   β”œβ”€β”€ TESTING_CHECKLIST.md
β”‚   └── PRODUCTION_CHECKLIST.md
β”‚
β”œβ”€β”€ gradle/
β”œβ”€β”€ .github/
β”œβ”€β”€ .env.example
β”œβ”€β”€ .gitignore
β”œβ”€β”€ build.gradle.kts
β”œβ”€β”€ settings.gradle.kts
β”œβ”€β”€ gradle.properties
└── README.md

πŸ“š Documentation

Complete project documentation is available under docs/.

Installation & Deployment

API & Operations

Security & Reliability


πŸš€ Installation

Requirements

Recommended development environment:

Clone

git clone https://github.com/Lakmal2078/FAST-CASH-.git
cd FAST-CASH-

Open in Android Studio

Open the repository root:

FAST-CASH-/

Allow Gradle synchronization to complete.

Build Debug APK

Linux / macOS / Termux:

./gradlew assembleDebug

Windows:

gradlew.bat assembleDebug

APK output:

app/build/outputs/apk/debug/app-debug.apk

Run Tests

./gradlew test

For connected Android tests:

./gradlew connectedAndroidTest

πŸ“¦ Release Build

Before creating a production build:

./gradlew clean
./gradlew test
./gradlew assembleRelease

For Play distribution:

./gradlew bundleRelease

Expected outputs:

app/build/outputs/apk/release/app-release.apk
app/build/outputs/bundle/release/app-release.aab

[!IMPORTANT] Production release signing must use a protected release keystore.


βš™οΈ Environment Configuration

The project uses environment/secret configuration for sensitive build values.

Example: .env.example

Potential signing-related values include:

KEYSTORE_PATH=
STORE_PASSWORD=
KEY_PASSWORD=
ADMIN_PIN_HASH=

[!WARNING]

Security rule

Never commit:

Use CI/CD secret storage for production credentials.

See: Environment Variables Guide


🌐 API Architecture

The Android client contains a Retrofit-based remote API layer. Conceptually:

Android App
    β”‚
    β”‚ HTTPS
    β–Ό
Production API
    β”‚
    β”œβ”€β”€ Authentication
    β”œβ”€β”€ Authorization
    β”œβ”€β”€ Validation
    β”œβ”€β”€ Transaction processing
    β”œβ”€β”€ Audit logging
    └── Database

[!IMPORTANT] The API endpoint contained in the source is currently a placeholder/example endpoint and must not be treated as a production service.

Before Production

See: API Documentation


πŸ” Security

[!NOTE] Security is a production requirement, not an optional feature.

Current Security Considerations

The application contains:

However, the current client implementation alone is not sufficient for production-grade transaction authorization.

Authentication

Production requires:

User
 ↓
Authentication Service
 ↓
Short-lived access token
 ↓
Android secure storage
 ↓
HTTPS API

Authorization

Never trust:

The backend must independently validate and authorize every sensitive operation.

Admin Security

The client-side admin PIN mechanism is only a local safeguard. Production administration should use:

Secrets

Never hard-code:


πŸ—„οΈ Data & Transaction Integrity

The Android Room database is intended for local application persistence. For production transaction processing:

Backend Database
       ↑
  Source of Truth
       ↑
  Android Client
       ↑
  Local Cache / UX

[!WARNING] The Android database must not be treated as the authoritative financial ledger.

Production backend operations should use:


πŸ“Ž Receipt / File Handling

The Android client can work with receipt URIs. For a production architecture, avoid sending private files through an unrestricted multipart endpoint.

Recommended flow:

Android Client
    β”‚
    β”‚ Request upload authorization
    β–Ό
Backend API
    β”‚
    β”‚ Presigned upload URL
    β–Ό
Object Storage
    β”‚
    β”‚ Verified metadata
    β–Ό
Backend Transaction Record

The backend should enforce:


πŸ§ͺ Testing

Run:

./gradlew test

and:

./gradlew connectedAndroidTest

Important test categories:

See: Testing Checklist


πŸ”„ CI/CD

The repository contains GitHub Actions configuration under:

.github/workflows/

Recommended production pipeline:

Git Push
  ↓
GitHub Actions
  ↓
Compile
  ↓
Unit Tests
  ↓
Static Analysis
  ↓
Security / Dependency Scan
  ↓
Release Build
  ↓
Artifact Verification
  ↓
Controlled Deployment

[!IMPORTANT] Production signing credentials must be stored as protected GitHub Actions secrets and must never be committed to the repository.


πŸ’Ύ Backup & Disaster Recovery

[!WARNING] Local Android data should not be considered the production backup source.

Production infrastructure should provide:

The release signing keystore must also have a secure backup.

See: Backup Guide


πŸ“‹ Production Readiness

Before production deployment, verify:

Full checklist: Production Checklist


πŸ›‘οΈ Security Checklist

Before release:

Control Requirement Status
Authentication Server-side ☐
Authorization Server-side ☐
Admin Access RBAC + MFA ☐
API HTTPS ☐
Validation Server-side ☐
Transactions Atomic + Idempotent ☐
Audit Logs Enabled ☐
Secrets Protected ☐
Database Backups ☐
Receipts Secure Storage ☐
Release Signing Protected ☐
R8/ProGuard Verified ☐
Testing Passed ☐
Monitoring Enabled ☐
Incident Response Ready ☐

Full checklist: Security Checklist


πŸ‘¨β€πŸ’» Development Guidelines

When contributing:


🧹 Git & Secret Hygiene

Before committing:

git status

Check for accidental secrets:

git diff --cached

Never commit:

[!CAUTION] If a secret has already been committed, removing it from the latest commit is not sufficient. Rotate/revoke the exposed credential and clean repository history as appropriate.


πŸ“± Android Compatibility

Current project configuration targets:

Property Value
Minimum SDK 24
Compile SDK 36
Target SDK 36

Recommended test matrix:


🧭 Documentation Map

docs/
β”‚
β”œβ”€β”€ README.md
β”‚
β”œβ”€β”€ INSTALLATION_GUIDE.md
β”‚   └── Development setup and installation
β”‚
β”œβ”€β”€ DEPLOYMENT_GUIDE.md
β”‚   └── Release and deployment process
β”‚
β”œβ”€β”€ ENVIRONMENT_VARIABLES.md
β”‚   └── Build and secret configuration
β”‚
β”œβ”€β”€ API_DOCUMENTATION.md
β”‚   └── API contract and production requirements
β”‚
β”œβ”€β”€ ADMIN_MANUAL.md
β”‚   └── Administrative interface
β”‚
β”œβ”€β”€ USER_MANUAL.md
β”‚   └── Application user guide
β”‚
β”œβ”€β”€ BACKUP_GUIDE.md
β”‚   └── Backup and recovery
β”‚
β”œβ”€β”€ SECURITY_CHECKLIST.md
β”‚   └── Security controls
β”‚
β”œβ”€β”€ TESTING_CHECKLIST.md
β”‚   └── QA and testing
β”‚
└── PRODUCTION_CHECKLIST.md
    └── Production readiness

                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚   Android App    β”‚
                 β”‚ Kotlin / Compose β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                      HTTPS/TLS
                          β”‚
                          β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚   API Gateway    β”‚
                 β”‚  Rate Limiting   β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                          β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ Backend Service  β”‚
                 β”‚ Auth / RBAC      β”‚
                 β”‚ Validation       β”‚
                 β”‚ Idempotency      β”‚
                 β”‚ Audit            β”‚
                 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                        β”‚     β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     └─────────┐
              β–Ό                         β–Ό
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚ Production DB   β”‚       β”‚ Object Storage  β”‚
     β”‚ Transactions    β”‚       β”‚ Receipts        β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              β”‚
              β–Ό
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚  Backup / DR    β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

⚠️ Production Limitations

The Android source code should not be considered a complete production financial platform by itself. Before production deployment, the following must be implemented and verified:

  1. Trusted backend/API
  2. Real authentication
  3. Server-side authorization
  4. Secure administrator authentication
  5. Transaction concurrency protection
  6. Idempotent transaction APIs
  7. Server-side validation
  8. Secure receipt storage
  9. Audit logging
  10. Monitoring and alerting
  11. Database backup and disaster recovery
  12. Secure production secret management

[!CAUTION] Do not use a client-side PIN, local Room database, or client-side transaction status as the sole security authority for real transactions.


πŸ“„ License

No explicit open-source license was identified in the supplied project documentation. Before public distribution or accepting external contributions, add an appropriate LICENSE file and clearly define the project’s ownership and usage terms.


πŸ“ž Support

For development or repository issues, use the project’s GitHub repository and issue-tracking workflow.

Repository: Lakmal2078/FAST-CASH-


πŸ“Œ Project Status

Aspect Detail
Application Android cashier/transaction client
Architecture Kotlin + Jetpack Compose + MVVM/Clean Architecture style
Database Room
Networking Retrofit / OkHttp
Build Gradle Kotlin DSL
Production Status ⚠️ Backend/security hardening required before production use

Β© 2026 Fast Official Sri Lanka. All rights reserved.