Personal Project
Offline General POS System
Offline-first Windows point-of-sale system with inventory, sales, credit management, and reporting.
- C#
- .NET
- WPF
- SQL (local database)
- MVVM
Overview
A desktop point-of-sale system designed for small retail shops where internet connectivity cannot be assumed. Everything — products, inventory, sales, customers, and credit ledgers — lives in a local database, so the shop keeps running even when the network doesn't.
The problem
Many small retailers operate in environments with unreliable connectivity, yet most modern POS products are cloud-first and stop working offline. These shops also rely heavily on informal credit (udhar), which paper ledgers track poorly.
The solution
A Windows desktop application built with C# and WPF over a local database. The architecture is offline-first by design: all operations complete locally with immediate persistence. A dedicated credit module models customer ledgers with running balances, turning informal udhar records into queryable, reportable data.
System architecture
WPF UI (MVVM)
Keyboard-first sales and management screens
View Models
State, validation, and command bindings
Domain Services
Sales, inventory, and ledger rules
Repository Layer
Local data access abstraction
Local Database
On-disk relational store, transactional writes
Architecture
Layered desktop architecture: WPF views bound to view models (MVVM), a service layer owning business rules, and a local relational database accessed through a repository layer — no network dependency in any critical path.
Key features
- Product catalog and category management
- Inventory tracking with stock adjustments
- Fast keyboard-friendly sales screen
- Customer records and purchase history
- Cash drawer session management
- Credit / udhar ledger with running balances
- Daily, weekly, and monthly sales reports
- Fully offline-first local architecture
My contribution
- Designed the offline-first architecture and local data model
- Built the sales, inventory, and credit ledger modules
- Implemented cash drawer sessions and reporting
- Designed the keyboard-driven UI for fast counter use
Technical challenges
Correctness without a server
With no backend to double-check anything, the local database is the only line of defense. Transactional writes around every sale and ledger entry ensure a crash mid-operation never leaves stock or balances inconsistent.
Modeling informal credit
Udhar is fluid — partial payments, mixed cash-and-credit sales, corrections. An append-only ledger of signed entries with computed running balances handles every case without ever editing history.
Outcome
A working demonstration that solid engineering applies beyond the web: transactional integrity, layered architecture, and thoughtful UX in a fully offline desktop environment.