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.
The primary goals of this application:
Supported status values:
PENDING β APPROVED | REJECTED | CANCELLED
Supported status values:
PENDING β APPROVED | COMPLETED | REJECTED | CANCELLED
The application architecture supports:
| Flag | Language |
|---|---|
| π±π° | Sinhala |
| π¬π§ | English |
| π±π° | Tamil |
Users can review locally stored transaction records and their current local state.
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.
The application includes user guidance and FAQ-style UI components for explaining transaction workflows.
| 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 |
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
UI
β
ViewModel
β
Use case / Repository
β
Local database / Remote API
β
Result
β
StateFlow
β
Compose UI
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
Complete project documentation is available under docs/.
Recommended development environment:
git clone https://github.com/Lakmal2078/FAST-CASH-.git
cd FAST-CASH-
Open the repository root:
FAST-CASH-/
Allow Gradle synchronization to complete.
Linux / macOS / Termux:
./gradlew assembleDebug
Windows:
gradlew.bat assembleDebug
APK output:
app/build/outputs/apk/debug/app-debug.apk
./gradlew test
For connected Android tests:
./gradlew connectedAndroidTest
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.
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:
.env*.jks*.keystore- private keys
- production passwords
- API secrets
- authentication tokens
Use CI/CD secret storage for production credentials.
See: Environment Variables Guide
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.
See: API Documentation
[!NOTE] Security is a production requirement, not an optional feature.
The application contains:
However, the current client implementation alone is not sufficient for production-grade transaction authorization.
Production requires:
User
β
Authentication Service
β
Short-lived access token
β
Android secure storage
β
HTTPS API
Never trust:
The backend must independently validate and authorize every sensitive operation.
The client-side admin PIN mechanism is only a local safeguard. Production administration should use:
Never hard-code:
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:
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:
Run:
./gradlew test
and:
./gradlew connectedAndroidTest
Important test categories:
See: Testing Checklist
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.
[!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
Before production deployment, verify:
Full checklist: Production 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
When contributing:
Before committing:
git status
Check for accidental secrets:
git diff --cached
Never commit:
.env*.jks*.keystorelocal.properties[!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.
Current project configuration targets:
| Property | Value |
|---|---|
| Minimum SDK | 24 |
| Compile SDK | 36 |
| Target SDK | 36 |
Recommended test matrix:
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 β
βββββββββββββββββββ
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:
[!CAUTION] Do not use a client-side PIN, local Room database, or client-side transaction status as the sole security authority for real transactions.
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.
For development or repository issues, use the projectβs GitHub repository and issue-tracking workflow.
Repository: Lakmal2078/FAST-CASH-
| 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.