A full-stack convenience store mobile application built with Android (Java) and a serverless Spring Boot backend on AWS Lambda.
MetroMini is a mobile e-commerce application designed for convenience store shopping. It provides users with a seamless experience to browse products, manage their cart, apply vouchers, checkout with multiple payment methods, and track their order history — all from their Android device.
The project follows a client-server architecture with:
- A native Android front-end written in Java
- A Spring Boot 3 REST API back-end deployed as a serverless function on AWS Lambda via SAM
- User registration with email verification (OTP)
- Login with email/password
- Google Sign-In integration
- Password recovery via email OTP
- Profile management (avatar, name, phone, password)
- Browse products by category (Vegetables, Fruits, Beverages, Snacks)
- View featured/hot products on the home screen
- Product detail pages with images, descriptions, and pricing
- Search products by keyword
- Add products to favorites/wishlist
- Add/remove products with quantity controls
- Apply voucher/discount codes
- View subtotal, discount, and total breakdown
- Multiple payment methods: MoMo, ZaloPay, Cash
- View product reviews and star ratings
- Submit reviews with star rating and text comments
- Full order history with payment method indicators
- Detailed order view with itemized breakdown
- Order status tracking
MetroMini/
├── android-app/ # Android client (Java, View Binding)
│ └── app/
│ └── src/main/
│ ├── java/com/example/convenient/
│ │ ├── Activity/ # All Activity & Fragment classes
│ │ ├── adapters/ # RecyclerView adapters
│ │ ├── models/ # Data models (Product, Cart, Order, etc.)
│ │ └── Utils/ # Helpers (HTTP, SharedPrefs, Cookies)
│ └── res/ # Layouts, drawables, values
├── back-end/ # Spring Boot 3 serverless API
│ └── src/main/java/org/convenient/
│ ├── controller/ # MVC controllers
│ ├── rest_controller/ # REST API endpoints
│ ├── models/ # JPA entity models
│ ├── repository/ # Spring Data JPA repositories
│ ├── services/ # Business logic layer
│ ├── security/ # JWT auth & Spring Security config
│ ├── dto/ # Data transfer objects
│ └── config/ # App configuration
└── screenshots/ # App UI screenshots
| Layer | Technology |
|---|---|
| Language | Java 11 |
| Min SDK | 24 (Android 7.0) |
| Target SDK | 35 |
| UI | View Binding, Material Design Components |
| Networking | OkHttp 4, Volley |
| Image Loading | Glide 4.16 |
| Navigation | Jetpack Navigation Component |
| Auth | Google Play Services Auth |
| JSON | Gson |
| Layer | Technology |
|---|---|
| Framework | Spring Boot 3.4.4 |
| Language | Java 21 |
| Runtime | AWS Lambda (via SAM) |
| Database | MySQL |
| Auth | Spring Security + JWT (jjwt 0.11.5) |
| Caching | Caffeine (for OTP storage) |
| Spring Boot Starter Mail | |
| Storage | AWS S3 (product images, avatars) |
| Monitoring | Spring Boot Actuator |
- Android Studio (latest stable)
- JDK 21
- Maven
- AWS CLI (configured with credentials)
- SAM CLI
- A running MySQL instance
-
Clone the repository
git clone https://github.com/piracyiskey/Android.git cd Android/back-end -
Configure the database
Update
src/main/resources/application.properties(orapplication.yml) with your MySQL connection details. -
Build with SAM
sam build
-
Run locally
sam local start-apiThe API will be available at
http://127.0.0.1:3000. -
Deploy to AWS
sam deploy --guided
-
Open the project in Android Studio:
File → Open → select the android-app/ directory -
Update the API base URL
Point the app's HTTP client to your deployed (or local) backend URL.
-
Sync Gradle and Run on an emulator or physical device (min API 24).
This project was developed for educational purposes.
Made with ❤️ by the MetroMini team

.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)