Skip to content
Vinay0825Public

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

14 Commits

Folders and files

Repository files navigation



πŸ›’ ShopEase

Inventory & Retail Analytics, Built for the Indian Kirana Shop

Most inventory apps assume every product comes in a barcoded package. Real Indian retail doesn't work that way β€” a huge share of daily sales is loose rice, grain, sugar, and other commodities sold by weight, with no barcode to scan.

ShopEase handles both: packaged products via standard barcode scanning, and loose/unpackaged items via shop-generated barcodes with decimal-quantity tracking β€” so a shopkeeper can run their entire inventory from one phone.

πŸ† 1st Prize, LTCE Mumbai Mini Project Competition (2026)

πŸ“² Features Β· πŸ—οΈ Architecture Β· πŸ—„οΈ Firebase Schema Β· πŸš€ Getting Started Β· πŸ“Έ Screenshots


✨ Features

πŸ“¦ Product & Loose Item Management

  • Add, edit, and view products with full details (name, category, price, stock, barcode)
  • Loose item support β€” shopkeepers generate their own barcodes for unpackaged goods (grain, rice, sugar, pulses) and track stock in decimal weight, not just whole units
  • Barcode scanning via CameraX + ML Kit β€” instant, on-device
  • Barcode generation (ZXing) for both packaged products and shop-created loose item labels
  • Product images stored as compressed Base64 β€” no separate storage service needed

πŸ›οΈ Sell & Restock

  • Fast point-of-sale flow for both packaged and loose items
  • Offline-first β€” sales and restocks queue locally and sync automatically when connectivity returns
  • Stock updates in real time across staff devices
  • Void incorrect sales or restocks directly from history

πŸ“‹ History & Filters

  • Full sales and restock history with Today / This Week / This Month / All Time filters
  • Clean, scannable transaction timeline

πŸ“Š Analytics Dashboard

  • πŸ† Best Sellers β€” top-performing products by revenue and quantity
  • 🐒 Slow Movers β€” surfaces dead stock before it ties up capital
  • πŸ—‚οΈ Category Breakdown β€” revenue by category
  • πŸ“ˆ Trend Chart β€” sales over time, filterable by range
  • Insights exportable straight to Excel

πŸ”” Alerts & Reminders

  • Low-stock alerts, tuned per product
  • Daily end-of-day stock check reminders

βš™οΈ Account & Settings

  • Change password or log out from a dedicated settings screen
  • Light/dark theme with persistent preference
  • Configurable shop profile (name, type)

πŸ“€ Excel Export

  • Sales and restock records export to .xlsx (Apache POI) β€” a format shop owners and accountants already trust

πŸ—οΈ Architecture

MVVM with a unidirectional data flow, offline-first by design:

Fragment (UI)
    β”‚
    β–Ό
ViewModel  ←────────────── LiveData
    β”‚
    β–Ό
Repository
    β”‚
    β”œβ”€β”€β–Ά Firebase Firestore  (remote source of truth)
    └──▢ Local optimistic state (works offline, syncs when online)

🧱 Tech Stack

Layer Technology
Language Java
UI XML Layouts + ViewBinding
Navigation Android Navigation Component
Architecture MVVM (Fragment β†’ ViewModel β†’ Repository)
Database Firebase Firestore
Authentication Firebase Auth
Barcode Scanning CameraX + ML Kit
Barcode Generation ZXing (CODE_128)
Image Storage Compressed Base64 in Firestore
Excel Export Apache POI
Background Tasks WorkManager
Min SDK 24 (Android 7.0)

πŸ“ Project Structure

ShopEase/
β”œβ”€β”€ app/
β”‚   └── src/main/
β”‚       β”œβ”€β”€ java/com/example/inventory/
β”‚       β”‚   β”œβ”€β”€ model/          # Product, Sale, Restock, Analytics
β”‚       β”‚   β”œβ”€β”€ repository/     # ProductRepository, SalesRepository, AnalyticsRepository
β”‚       β”‚   β”œβ”€β”€ viewmodel/      # ProductViewModel, SalesViewModel, DashboardViewModel
β”‚       β”‚   β”œβ”€β”€ ui/
β”‚       β”‚   β”‚   β”œβ”€β”€ auth/           # Login, Register, Splash
β”‚       β”‚   β”‚   β”œβ”€β”€ dashboard/      # DashboardFragment
β”‚       β”‚   β”‚   β”œβ”€β”€ product/        # Product list/detail/add/edit + loose item entry
β”‚       β”‚   β”‚   β”œβ”€β”€ sales/          # Sell, Restock, Sales & Restock history
β”‚       β”‚   β”‚   β”œβ”€β”€ analytics/      # AnalyticsFragment
β”‚       β”‚   β”‚   β”œβ”€β”€ alerts/         # Low stock alerts
β”‚       β”‚   β”‚   β”œβ”€β”€ settings/       # Account & app settings
β”‚       β”‚   β”‚   └── scanner/        # Barcode scanning
β”‚       β”‚   β”œβ”€β”€ notifications/  # Low stock + daily reminder workers
β”‚       β”‚   └── utils/          # Category, date, stock-rules helpers
β”‚       └── res/
β”‚           β”œβ”€β”€ layout/ navigation/ values/ drawable/
β”œβ”€β”€ google-services.json            # ⚠️ NOT committed β€” add your own
└── build.gradle

πŸ—„οΈ Firebase Schema

Firestore
└── users/
    └── {userId}/
        β”œβ”€β”€ settings/
        β”‚   └── shopInfo              # { shopName, shopType, theme }
        β”œβ”€β”€ products/
        β”‚   └── {barcode}             # { name, category, price, stock,
        β”‚                             #   unit, lowStockThreshold, image }
        β”œβ”€β”€ sales/
        β”‚   └── {saleId}              # { barcode, productName, quantity,
        β”‚                             #   totalAmount, timestamp, voided }
        β”œβ”€β”€ restocks/
        β”‚   └── {restockId}           # { barcode, productName, quantity,
        β”‚                             #   timestamp, voided }
        └── analytics/
            └── {barcode}             # { totalUnitsSold, totalRevenue,
                                      #   salesCount, dailySales }

Product images are stored as compressed Base64 strings directly in Firestore β€” no separate storage service required.


πŸš€ Getting Started

Prerequisites

  • Android Studio Hedgehog or later
  • JDK 17+
  • A Firebase project with Firestore and Authentication enabled
  • A physical Android device (barcode scanning needs a real rear camera β€” most emulators won't work)

1. Clone the Repository

git clone https://github.com/Vinay0825/ShopEase.git
cd ShopEase

2. Set Up Firebase

  1. Create a project in the Firebase Console, add an Android app with package name com.example.inventory.
  2. Download google-services.json and place it in app/.
  3. Enable Authentication (Email/Password) and Cloud Firestore.

3. Firestore Security Rules

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/{document=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

4. Build & Run

./gradlew assembleDebug

⚠️ Barcode scanning requires a physical device with a rear camera.


πŸ“Έ Screenshots

Home Product List Add Product
Home Product List Add Product
Product Detail Loose Item Barcode History
Product Detail Loose Item Barcode History
Analytics Low Stock Alert
Analytics Low Stock Alert

Excel Export Samples

Sales Report Restock Report
Sales Export Restock Export

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature-name
  3. Commit your changes
  4. Open a Pull Request, keeping the existing MVVM structure and conventions

πŸ“„ License

MIT License β€” see LICENSE for details.

⭐ Star this repo if you found it useful!

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages