A comprehensive, enterprise-grade Point of Sale system built with .NET 8.0 and Windows Forms, providing complete retail management solutions including inventory control, sales processing, customer relationship management, invoicing, payment processing, and real-time analytics.
- Project Overview
- Key Features
- Technology Stack
- System Architecture
- Data Model
- Installation Guide
- Configuration
- Usage Instructions
- User Roles and Permissions
- Security Features
- Development Guidelines
- Contributing
- License
- Support
SYNCVERSE STUDIO is designed to streamline retail operations by providing an integrated solution for:
- Efficient point-of-sale transaction processing with modern interface
- Real-time inventory management and stock tracking
- Customer relationship management with purchase history and loyalty programs
- Comprehensive invoicing and multi-method payment processing
- Role-based access control for enhanced security
- Advanced analytics and business intelligence reporting
- Multi-payment method support including QR code generation for mobile payments
The application serves three primary user roles with distinct capabilities:
graph TD
A[SYNCVERSE STUDIO] --> B[Administrator]
A --> C[Cashier]
A --> D[Inventory Clerk]
B --> B1[User Management]
B --> B2[System Configuration]
B --> B3[Comprehensive Reporting]
B --> B4[Audit Logs]
B --> B5[Analytics Dashboard]
C --> C1[Point of Sale Operations]
C --> C2[Customer Management]
C --> C3[Transaction Processing]
C --> C4[Invoice Generation]
C --> C5[Payment Processing]
D --> D1[Product Management]
D --> D2[Category Management]
D --> D3[Supplier Management]
D --> D4[Stock Control]
D --> D5[Inventory Reports]
style A fill:#14B8A6,stroke:#0D9488,color:#fff
style B fill:#3B82F6,stroke:#2563EB,color:#fff
style C fill:#22C55E,stroke:#16A34A,color:#fff
style D fill:#A855F7,stroke:#9333EA,color:#fff
- Version: 1.0.0
- Status: Production Ready
- Last Updated: October 2025
- Framework: .NET 8.0
- Platform: Windows Desktop Application
- Modern, intuitive cashier interface with real-time dashboard
- Product search and filtering by category with image display
- Shopping cart with real-time calculations and stock validation
- Multiple payment methods: Cash, Card, Mobile/QR
- Automatic change calculation for cash transactions
- QR code generation for mobile and cryptocurrency payments
- Transaction hold and resume functionality
- Barcode scanning support with ZXing.Net integration
- Professional invoice printing with company branding
- Walk-in and registered customer support
- Complete product lifecycle management with CRUD operations
- Category and supplier management systems
- Stock level tracking with automated low-stock alerts
- Comprehensive inventory movement logging
- Product image management with upload and preview
- SKU and barcode support for product identification
- Cost and selling price tracking with profit margin calculations
- Bulk import and export capabilities
- Real-time stock updates during transactions
- Customer profile management with encrypted data storage
- Purchase history tracking and analytics
- Loyalty points system for customer retention
- Walk-in customer support for quick transactions
- Customer data encryption for privacy compliance
- Customer analytics and behavioral insights
- Repeat customer identification
- Customer lifetime value calculations
- Automated invoice generation with unique numbering system
- Professional invoice printing with customizable templates
- Multiple payment method support (Cash, Card, Mobile, Mixed)
- Partial payment tracking and balance management
- Payment link generation for remote payments
- Invoice status management (Active, Paid, Void, Overdue)
- Tax calculation with configurable rates
- Payment gateway integration ready
- Receipt delivery options (Print, Email, SMS)
- Real-time sales dashboard with key performance indicators
- Revenue and profit tracking with trend analysis
- Sales trend visualization with interactive charts
- Invoice status distribution analytics
- Product popularity analysis and rankings
- Inventory performance reports
- Staff performance metrics
- Comprehensive audit trail for all transactions
- Export capabilities (PDF, Excel, CSV)
- Role-based access control (RBAC) system
- BCrypt password hashing for secure authentication
- User authentication and session management
- Comprehensive audit logging for all operations
- Customer data encryption for privacy
- Permission-based feature access
- IP address tracking for security events
- Secure database connection management
| Technology | Version | Purpose | Documentation |
|---|---|---|---|
| .NET | 8.0 | Application framework | Microsoft Docs |
| C# | 12 | Programming language | C# Guide |
| Windows Forms | 8.0 | User interface framework | Windows Forms |
| Entity Framework Core | 8.0.0 | Object-relational mapping | EF Core Docs |
| Technology | Version | Purpose | Role |
|---|---|---|---|
| SQL Server | 2019+ | Primary database | Production database server |
| SQL Server LocalDB | Latest | Development database | Local development environment |
| T-SQL | - | Query language | Database operations and procedures |
| Package | Version | Purpose | License |
|---|---|---|---|
| Microsoft.EntityFrameworkCore | 8.0.0 | Data access layer | MIT |
| Microsoft.EntityFrameworkCore.SqlServer | 8.0.0 | SQL Server provider | MIT |
| Microsoft.EntityFrameworkCore.Tools | 8.0.0 | EF Core CLI tools | MIT |
| BCrypt.Net-Next | 4.0.3 | Password hashing | MIT |
| FontAwesome.Sharp | 6.3.0 | Icon library | MIT |
| MaterialSkin.2 | 2.1.0 | Material design UI | MIT |
| QRCoder | 1.7.0 | QR code generation | MIT |
| ZXing.Net | 0.16.9 | Barcode scanning | Apache 2.0 |
| QuestPDF | 2023.12.6 | PDF invoice generation | MIT |
| Newtonsoft.Json | 13.0.3 | JSON serialization | MIT |
| System.Drawing.Common | 8.0.0 | Image processing | MIT |
| System.Windows.Forms.DataVisualization | 1.0.0-prerelease | Charts and graphs | MIT |
- Visual Studio 2022 or later - Primary IDE
- SQL Server Management Studio (SSMS) - Database management
- .NET 8.0 SDK - Build and runtime environment
- Git - Version control system
- NuGet Package Manager - Dependency management
SYNCVERSE STUDIO follows a layered architecture with clear separation of concerns:
graph TB
subgraph "Presentation Layer"
A[Windows Forms Views]
A1[LoginForm]
A2[MainDashboard]
A3[EnhancedCashierDashboard]
A4[ProductManagement]
A5[AnalyticsView]
end
subgraph "Business Logic Layer"
B[Services]
B1[AuthenticationService]
B2[DatabaseInitializer]
end
subgraph "Data Access Layer"
C[Entity Framework Core]
C1[ApplicationDbContext]
C2[Migrations]
end
subgraph "Database Layer"
D[(SQL Server)]
D1[(POSDB)]
end
A --> B
B --> C
C --> D
style A fill:#3B82F6,stroke:#2563EB,color:#fff
style B fill:#22C55E,stroke:#16A34A,color:#fff
style C fill:#A855F7,stroke:#9333EA,color:#fff
style D fill:#EF4444,stroke:#DC2626,color:#fff
flowchart TD
Start([User Login]) --> Auth{Authentication}
Auth -->|Success| Role{User Role?}
Auth -->|Failure| Error[Display Error]
Error --> Start
Role -->|Administrator| AdminDash[Administrator Dashboard]
Role -->|Cashier| CashierDash[Cashier Dashboard]
Role -->|Inventory Clerk| InventoryDash[Inventory Clerk Dashboard]
AdminDash --> AdminFeatures[User Management<br/>System Config<br/>Reports & Analytics<br/>Audit Logs]
CashierDash --> CashierFeatures[Point of Sale<br/>Customer Management<br/>Sales History<br/>Real-time Metrics]
InventoryDash --> InventoryFeatures[Product Management<br/>Category Management<br/>Supplier Management<br/>Inventory Reports]
AdminFeatures --> AuditLog[(Audit Log)]
CashierFeatures --> AuditLog
InventoryFeatures --> AuditLog
style Start fill:#14B8A6,stroke:#0D9488,color:#fff
style Auth fill:#F97316,stroke:#EA580C,color:#fff
style Role fill:#A855F7,stroke:#9333EA,color:#fff
style AdminDash fill:#3B82F6,stroke:#2563EB,color:#fff
style CashierDash fill:#22C55E,stroke:#16A34A,color:#fff
style InventoryDash fill:#EC4899,stroke:#DB2777,color:#fff
style AuditLog fill:#6B7280,stroke:#4B5563,color:#fff
flowchart TD
Start([Start Transaction]) --> SelectProduct[Product Selection]
SelectProduct --> Search{Search/Filter}
Search -->|Category| FilterCat[Filter by Category]
Search -->|Name| SearchName[Search by Name]
Search -->|Barcode| ScanBarcode[Scan Barcode]
FilterCat --> AddCart[Add to Shopping Cart]
SearchName --> AddCart
ScanBarcode --> AddCart
AddCart --> ValidateStock{Stock Available?}
ValidateStock -->|No| StockError[Display Error]
ValidateStock -->|Yes| UpdateCart[Update Cart]
StockError --> SelectProduct
UpdateCart --> ReviewCart[Review Cart]
ReviewCart --> AdjustQty{Adjust Quantities?}
AdjustQty -->|Yes| UpdateCart
AdjustQty -->|No| ApplyTax[Apply Tax Rate]
ApplyTax --> SelectPayment{Select Payment Method}
SelectPayment -->|Cash| CashPayment[Enter Cash Amount]
SelectPayment -->|Card| CardPayment[Process Card]
SelectPayment -->|Mobile/QR| QRPayment[Generate QR Code]
CashPayment --> CalcChange[Calculate Change]
CardPayment --> ProcessCard[Card Transaction]
QRPayment --> ShowQR[Display QR Code]
CalcChange --> SelectCustomer
ProcessCard --> SelectCustomer
ShowQR --> SelectCustomer
SelectCustomer{Customer Type?} -->|Walk-in| WalkIn[Walk-in Customer]
SelectCustomer -->|Existing| ExistingCust[Select Customer]
SelectCustomer -->|New| NewCust[Create Customer]
WalkIn --> Complete[Complete Transaction]
ExistingCust --> Complete
NewCust --> Complete
Complete --> CreateSale[Create Sale Record]
CreateSale --> GenInvoice[Generate Invoice]
GenInvoice --> RecordPayment[Record Payment]
RecordPayment --> UpdateInventory[Update Inventory]
UpdateInventory --> AuditLog[(Create Audit Log)]
AuditLog --> Receipt{Receipt Option?}
Receipt -->|Print| PrintReceipt[Print Invoice]
Receipt -->|Email| EmailReceipt[Email Invoice]
Receipt -->|SMS| SMSReceipt[SMS Receipt]
Receipt -->|View| ViewReceipt[View on Screen]
PrintReceipt --> End([Transaction Complete])
EmailReceipt --> End
SMSReceipt --> End
ViewReceipt --> End
style Start fill:#14B8A6,stroke:#0D9488,color:#fff
style Complete fill:#22C55E,stroke:#16A34A,color:#fff
style End fill:#3B82F6,stroke:#2563EB,color:#fff
style StockError fill:#EF4444,stroke:#DC2626,color:#fff
erDiagram
User ||--o{ Sale : "processes"
User ||--o{ Invoice : "creates"
User ||--o{ Payment : "processes"
User ||--o{ InventoryMovement : "records"
User ||--o{ AuditLog : "generates"
User ||--o{ HeldTransaction : "holds"
User ||--o{ PaymentLink : "creates"
Category ||--o{ Product : "contains"
Supplier ||--o{ Product : "supplies"
Product ||--o{ SaleItem : "sold_in"
Product ||--o{ InvoiceItem : "invoiced_in"
Product ||--o{ InventoryMovement : "tracked_in"
Customer ||--o{ Sale : "purchases"
Customer ||--o{ Invoice : "receives"
Customer ||--o{ PaymentLink : "pays_via"
Customer ||--o{ HeldTransaction : "holds"
Sale ||--|{ SaleItem : "contains"
Sale ||--o| Invoice : "generates"
Sale ||--o{ Payment : "paid_by"
Invoice ||--|{ InvoiceItem : "contains"
Invoice ||--o{ Payment : "paid_by"
Invoice ||--o{ PaymentLink : "linked_to"
User {
int Id PK
string Username UK
string Password
string Email
string FirstName
string LastName
enum Role
bool IsActive
datetime CreatedAt
datetime UpdatedAt
}
Product {
int Id PK
string Name
string Description
string Barcode UK
string SKU UK
int CategoryId FK
int SupplierId FK
decimal CostPrice
decimal SellingPrice
int Quantity
int MinQuantity
string ImagePath
bool IsActive
bool IsSyncedToOnlineStore
datetime LastSyncedAt
string OnlineStoreProductId
}
Sale {
int Id PK
string InvoiceNumber UK
int CustomerId FK
int CashierId FK
decimal TotalAmount
decimal TaxAmount
decimal DiscountAmount
enum PaymentMethod
datetime SaleDate
enum Status
}
Invoice {
int Id PK
string InvoiceNumber UK
int CustomerId FK
int CreatedByUserId FK
decimal SubTotal
decimal TaxAmount
decimal DiscountAmount
decimal TotalAmount
decimal PaidAmount
decimal BalanceAmount
enum Status
datetime InvoiceDate
datetime DueDate
int SaleId FK
}
Payment {
int Id PK
string PaymentReference UK
int InvoiceId FK
int SaleId FK
decimal Amount
enum PaymentMethod
enum Status
string TransactionId
string PaymentGateway
int ProcessedByUserId FK
datetime PaymentDate
}
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique user identifier |
| Username | nvarchar(50) | Unique, Required | Login username |
| Password | nvarchar(255) | Required | BCrypt hashed password |
| nvarchar(100) | Required | User email address | |
| FirstName | nvarchar(50) | Required | User first name |
| LastName | nvarchar(50) | Required | User last name |
| Role | nvarchar(20) | Required | Administrator, Cashier, InventoryClerk |
| IsActive | bit | Default: 1 | Account status flag |
| CreatedAt | datetime2 | Default: GETDATE() | Account creation timestamp |
| UpdatedAt | datetime2 | Default: GETDATE() | Last update timestamp |
Relationships:
- One-to-Many with Sales (as Cashier)
- One-to-Many with Invoices (as Creator)
- One-to-Many with Payments (as Processor)
- One-to-Many with InventoryMovements
- One-to-Many with AuditLogs
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique product identifier |
| Name | nvarchar(100) | Required | Product name |
| Description | nvarchar(255) | Nullable | Product description |
| Barcode | nvarchar(50) | Unique, Nullable | Product barcode |
| SKU | nvarchar(50) | Unique, Nullable | Stock keeping unit |
| CategoryId | int | FK, Nullable | Reference to Category |
| SupplierId | int | FK, Nullable | Reference to Supplier |
| CostPrice | decimal(18,2) | Required | Purchase cost from supplier |
| SellingPrice | decimal(18,2) | Required | Retail selling price |
| Quantity | int | Default: 0 | Current stock level |
| MinQuantity | int | Default: 10 | Reorder threshold |
| ImagePath | nvarchar(255) | Nullable | Product image file path |
| IsActive | bit | Default: 1 | Product availability status |
| IsSyncedToOnlineStore | bit | Default: 0 | E-commerce sync status |
| LastSyncedAt | datetime2 | Nullable | Last sync timestamp |
| OnlineStoreProductId | nvarchar(100) | Nullable | External product ID |
| CreatedAt | datetime2 | Default: GETDATE() | Creation timestamp |
| UpdatedAt | datetime2 | Default: GETDATE() | Last update timestamp |
Relationships:
- Many-to-One with Category
- Many-to-One with Supplier
- One-to-Many with SaleItems
- One-to-Many with InvoiceItems
- One-to-Many with InventoryMovements
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique sale identifier |
| InvoiceNumber | nvarchar(20) | Unique, Required | Format: INV-YYYYMMDD-HHMMSS |
| CustomerId | int | FK, Nullable | Reference to Customer |
| CashierId | int | FK, Required | Reference to User (Cashier) |
| TotalAmount | decimal(18,2) | Required | Final transaction amount |
| TaxAmount | decimal(18,2) | Default: 0 | Calculated tax amount |
| DiscountAmount | decimal(18,2) | Default: 0 | Applied discount |
| PaymentMethod | nvarchar(20) | Required | Cash, Card, Mobile, Mixed |
| SaleDate | datetime2 | Default: GETDATE() | Transaction timestamp |
| Status | nvarchar(20) | Required | Pending, Completed, Cancelled, Returned |
Relationships:
- Many-to-One with Customer
- Many-to-One with User (Cashier)
- One-to-Many with SaleItems
- One-to-One with Invoice
- One-to-Many with Payments
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique invoice identifier |
| InvoiceNumber | nvarchar(20) | Unique, Required | Format: INV-YYYYMMDD-HHMMSS |
| CustomerId | int | FK, Nullable | Reference to Customer |
| CustomerName | nvarchar(100) | Nullable | Walk-in customer name |
| CreatedByUserId | int | FK, Required | User who created invoice |
| SubTotal | decimal(18,2) | Required | Sum of line items |
| TaxAmount | decimal(18,2) | Default: 0 | Calculated tax |
| DiscountAmount | decimal(18,2) | Default: 0 | Applied discount |
| TotalAmount | decimal(18,2) | Required | Final invoice amount |
| PaidAmount | decimal(18,2) | Default: 0 | Amount received |
| BalanceAmount | decimal(18,2) | Required | Remaining balance |
| Status | nvarchar(20) | Required | Active, Paid, Void, Overdue |
| InvoiceDate | datetime2 | Default: GETDATE() | Invoice creation date |
| DueDate | datetime2 | Nullable | Payment due date |
| Notes | nvarchar(500) | Nullable | Additional notes |
| VoidReason | nvarchar(500) | Nullable | Reason for voiding |
| VoidedAt | datetime2 | Nullable | Void timestamp |
| VoidedByUserId | int | FK, Nullable | User who voided invoice |
| SaleId | int | FK, Nullable | Linked sale transaction |
Relationships:
- Many-to-One with Customer
- Many-to-One with User (Creator)
- Many-to-One with User (Voider)
- One-to-One with Sale
- One-to-Many with InvoiceItems
- One-to-Many with Payments
- One-to-Many with PaymentLinks
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique payment identifier |
| PaymentReference | nvarchar(50) | Unique, Required | Unique payment reference code |
| InvoiceId | int | FK, Nullable | Reference to Invoice |
| SaleId | int | FK, Nullable | Reference to Sale |
| Amount | decimal(18,2) | Required | Payment amount |
| PaymentMethod | nvarchar(20) | Required | Cash, Card, Mobile, Online |
| Status | nvarchar(20) | Required | Pending, Completed, Failed, Refunded |
| TransactionId | nvarchar(100) | Nullable | External transaction ID |
| PaymentGateway | nvarchar(50) | Nullable | Payment gateway name |
| Notes | nvarchar(500) | Nullable | Payment notes |
| FailureReason | nvarchar(500) | Nullable | Reason for failure |
| ProcessedByUserId | int | FK, Required | User who processed payment |
| PaymentDate | datetime2 | Default: GETDATE() | Payment timestamp |
Relationships:
- Many-to-One with Invoice
- Many-to-One with Sale
- Many-to-One with User (Processor)
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique customer identifier |
| FirstName | nvarchar(50) | Nullable | Customer first name |
| LastName | nvarchar(50) | Nullable | Customer last name |
| Phone | nvarchar(20) | Nullable, Encrypted | Customer phone number |
| nvarchar(100) | Nullable, Encrypted | Customer email address | |
| Address | nvarchar(255) | Nullable | Customer address |
| LoyaltyPoints | int | Default: 0 | Accumulated loyalty points |
| CreatedAt | datetime2 | Default: GETDATE() | Registration timestamp |
Relationships:
- One-to-Many with Sales
- One-to-Many with Invoices
- One-to-Many with PaymentLinks
- One-to-Many with HeldTransactions
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique category identifier |
| Name | nvarchar(100) | Required | Category name |
| Description | nvarchar(255) | Nullable | Category description |
| IsActive | bit | Default: 1 | Category status |
| CreatedAt | datetime2 | Default: GETDATE() | Creation timestamp |
Relationships:
- One-to-Many with Products
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique supplier identifier |
| Name | nvarchar(100) | Required | Supplier company name |
| ContactPerson | nvarchar(100) | Nullable | Contact person name |
| Phone | nvarchar(20) | Nullable | Supplier phone number |
| nvarchar(100) | Nullable | Supplier email address | |
| Address | nvarchar(255) | Nullable | Supplier address |
| IsActive | bit | Default: 1 | Supplier status |
| CreatedAt | datetime2 | Default: GETDATE() | Registration timestamp |
Relationships:
- One-to-Many with Products
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique movement identifier |
| ProductId | int | FK, Required | Reference to Product |
| UserId | int | FK, Required | User who recorded movement |
| MovementType | nvarchar(20) | Required | Sale, Purchase, Adjustment, Transfer, Return |
| Quantity | int | Required | Quantity moved (positive or negative) |
| Reference | nvarchar(100) | Nullable | Reference document number |
| CreatedAt | datetime2 | Default: GETDATE() | Movement timestamp |
Relationships:
- Many-to-One with Product
- Many-to-One with User
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique log identifier |
| UserId | int | FK, Required | User who performed action |
| Action | nvarchar(100) | Required | Action description |
| TableName | nvarchar(50) | Nullable | Affected table name |
| RecordId | int | Nullable | Affected record ID |
| OldValues | nvarchar(MAX) | Nullable | Previous values (JSON) |
| NewValues | nvarchar(MAX) | Nullable | New values (JSON) |
| Timestamp | datetime2 | Default: GETDATE() | Action timestamp |
| IpAddress | nvarchar(45) | Nullable | User IP address |
Relationships:
- Many-to-One with User
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique transaction identifier |
| TransactionCode | nvarchar(50) | Unique, Required | Unique hold code |
| CustomerId | int | FK, Nullable | Reference to Customer |
| CustomerName | nvarchar(100) | Nullable | Walk-in customer name |
| HeldByUserId | int | FK, Required | User who held transaction |
| SubTotal | decimal(18,2) | Required | Cart subtotal |
| TaxAmount | decimal(18,2) | Default: 0 | Tax amount |
| DiscountAmount | decimal(18,2) | Default: 0 | Discount amount |
| TotalAmount | decimal(18,2) | Required | Total amount |
| CartItemsJson | nvarchar(MAX) | Required | Cart items (JSON) |
| Notes | nvarchar(500) | Nullable | Hold notes |
| HeldAt | datetime2 | Default: GETDATE() | Hold timestamp |
| ResumedAt | datetime2 | Nullable | Resume timestamp |
| IsCompleted | bit | Default: 0 | Completion status |
Relationships:
- Many-to-One with Customer
- Many-to-One with User (Holder)
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique link identifier |
| LinkCode | nvarchar(50) | Unique, Required | Unique payment link code |
| InvoiceId | int | FK, Nullable | Reference to Invoice |
| CustomerId | int | FK, Nullable | Reference to Customer |
| Amount | decimal(18,2) | Required | Payment amount |
| Description | nvarchar(200) | Nullable | Payment description |
| Status | nvarchar(20) | Required | Active, Paid, Expired, Cancelled |
| ExpiryDate | datetime2 | Required | Link expiration date |
| PaidAt | datetime2 | Nullable | Payment timestamp |
| PaymentId | int | FK, Nullable | Reference to Payment |
| CreatedByUserId | int | FK, Required | User who created link |
| CreatedAt | datetime2 | Default: GETDATE() | Creation timestamp |
Relationships:
- Many-to-One with Invoice
- Many-to-One with Customer
- Many-to-One with Payment
- Many-to-One with User (Creator)
| Column | Type | Constraints | Description |
|---|---|---|---|
| Id | int | PK, Identity | Unique integration identifier |
| StoreName | nvarchar(100) | Required | Online store name |
| Platform | nvarchar(50) | Required | Shopify, WooCommerce, Magento, Custom |
| ApiKey | nvarchar(500) | Nullable | API key (encrypted) |
| ApiSecret | nvarchar(500) | Nullable | API secret (encrypted) |
| StoreUrl | nvarchar(500) | Nullable | Store URL |
| WebhookUrl | nvarchar(500) | Nullable | Webhook endpoint |
| IsEnabled | bit | Default: 1 | Integration status |
| LastSyncDate | datetime2 | Nullable | Last sync timestamp |
| LastSyncStatus | nvarchar(20) | Required | Never, Success, Failed, InProgress |
| LastSyncMessage | nvarchar(500) | Nullable | Sync status message |
| CreatedAt | datetime2 | Default: GETDATE() | Creation timestamp |
| UpdatedAt | datetime2 | Default: GETDATE() | Last update timestamp |
Relationships:
- No direct relationships (configuration entity)
Before installing SYNCVERSE STUDIO, ensure your system meets the following requirements:
- Operating System: Windows 10 (version 1809 or later) or Windows 11
- Processor: Intel Core i3 or equivalent (i5 or higher recommended)
- RAM: 4 GB minimum (8 GB recommended)
- Storage: 500 MB for application + database space
- Display: 1366x768 minimum resolution (1920x1080 recommended)
- Network: Internet connection for initial setup and updates
-
.NET 8.0 Runtime (Desktop)
- Download: https://dotnet.microsoft.com/download/dotnet/8.0
- Install the Windows Desktop Runtime
-
SQL Server 2019 or later
-
Visual Studio 2022 (For Development)
- Download: https://visualstudio.microsoft.com/
- Required Workloads:
- .NET desktop development
- Data storage and processing
# Clone the repository
git clone https://github.com/yourusername/syncversestudio.git
# Navigate to project directory
cd syncversestudio# Restore all NuGet packages
dotnet restore syncversestudio/syncversestudio.csproj- Open
syncversestudio/Data/ApplicationDbContext.cs - Update the connection string in the
OnConfiguringmethod:
optionsBuilder.UseSqlServer("Data Source=YOUR_SERVER_NAME;Initial Catalog=POSDB;Integrated Security=True;Trust Server Certificate=True");Or update dbconfig.json in the root directory:
{
"ConnectionString": "Data Source=YOUR_SERVER_NAME;Initial Catalog=POSDB;Integrated Security=True;Trust Server Certificate=True"
}Option A: Using SQL Scripts (Recommended)
# Navigate to Database folder
cd Database
# Run the main database creation script
sqlcmd -S YOUR_SERVER_NAME -E -i CreateDatabase.sql
# Run the invoicing and payment tables migration
sqlcmd -S YOUR_SERVER_NAME -E -i AddInvoicingAndPaymentTables.sqlOption B: Using Entity Framework Migrations
# Create database and apply migrations
dotnet ef database update --project syncversestudio
# Verify database creation
sqlcmd -S YOUR_SERVER_NAME -E -Q "SELECT name FROM sys.databases WHERE name = 'POSDB'"# Clean previous builds
dotnet clean syncversestudio/syncversestudio.csproj
# Build in Release mode
dotnet build syncversestudio/syncversestudio.csproj --configuration Release
# Verify build success
# Expected output: Build succeeded. 0 Warning(s). 0 Error(s).# Run the application
dotnet run --project syncversestudio/syncversestudio.csprojOr double-click the executable:
syncversestudio/bin/Release/net8.0-windows/syncversestudio.exe
Use the default administrator credentials:
- Username:
vi - Password:
admin123(or as configured in seed data)
Important: Change the default password immediately after first login.
After installation, verify the following:
- Application launches without errors
- Login screen displays correctly
- Can login with default credentials
- Dashboard loads based on user role
- Database connection is successful
- Sample data is visible (categories, products)
- All menu items are accessible
- No error messages in application logs
Windows Authentication (Recommended for Development)
Data Source=YOUR_SERVER_NAME;Initial Catalog=POSDB;Integrated Security=True;Trust Server Certificate=True
SQL Server Authentication
Data Source=YOUR_SERVER_NAME;Initial Catalog=POSDB;User Id=YOUR_USERNAME;Password=YOUR_PASSWORD;Trust Server Certificate=True
LocalDB (Development)
Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=POSDB;Integrated Security=True;Trust Server Certificate=True
Default tax rate is set to 10%. To modify:
- Navigate to the POS interface
- Adjust the tax rate using the NumericUpDown control
- Tax is calculated as:
Tax = Subtotal Ă— (TaxRate / 100)
Invoices are automatically numbered using the format:
INV-YYYYMMDD-HHMMSS
Example: INV-20251027-143052
To customize the format, modify the invoice generation logic in the POS view.
Update company details for invoice printing:
- Open
syncversestudio/Views/CashierDashboard/ModernPOSView.cs - Locate the invoice generation method
- Update company name, address, phone, and email
// Company Information
var companyName = "SYNCVERSE STUDIO";
var companyAddress = "Your Address Here";
var companyPhone = "Your Phone Number";
var companyEmail = "[email protected]";Default password hashing uses BCrypt with work factor 11. To modify:
- Open
syncversestudio/Services/AuthenticationService.cs - Adjust the BCrypt work factor:
// Increase for stronger security (slower)
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(password, workFactor: 12);Configure session timeout in the authentication service:
// Set session timeout (in minutes)
private const int SessionTimeoutMinutes = 30;Create a SQL Server Agent job for automated backups:
-- Daily backup at 2 AM
BACKUP DATABASE POSDB
TO DISK = 'C:\Backups\POSDB_' + CONVERT(VARCHAR, GETDATE(), 112) + '.bak'
WITH FORMAT, COMPRESSION, STATS = 10;# Backup database
sqlcmd -S YOUR_SERVER_NAME -E -Q "BACKUP DATABASE POSDB TO DISK='C:\Backup\POSDB_backup.bak' WITH FORMAT"
# Restore database
sqlcmd -S YOUR_SERVER_NAME -E -Q "RESTORE DATABASE POSDB FROM DISK='C:\Backup\POSDB_backup.bak' WITH REPLACE"- Login as Administrator
- Navigate to User Management
- Click Add User to create new accounts
- Assign appropriate roles: Administrator, Cashier, or Inventory Clerk
- Set initial passwords (users should change on first login)
- Activate/deactivate user accounts as needed
- Access System Settings from the admin dashboard
- Configure:
- Tax rates
- Company information
- Invoice templates
- Backup schedules
- Security policies
- Navigate to Analytics from the main menu
- Select date range using the period filter
- View key metrics:
- Total sales
- Revenue
- Profit margins
- Transaction counts
- Top products
- Export reports in PDF, Excel, or CSV format
- Login with cashier credentials
- Click Cashier (POS) from the dashboard
- Select customer type:
- Walk-in Customer (default)
- Existing Customer (select from dropdown)
- New Customer (create profile)
- Add products to cart:
- Search by name or barcode
- Filter by category
- Click product to add
- Adjust quantities using +/- buttons
- Review cart and totals
- Click Pay button
- Select payment method:
- Cash: Enter amount, view change
- Card: Process card payment
- Mobile/QR: Display QR code for scanning
- Complete transaction
- Choose receipt option:
- SMS
- View on screen
- Navigate to Clients from the menu
- View customer list with purchase history
- Add new customers:
- Click Add Customer
- Enter customer details
- Save profile
- Edit existing customers
- View customer purchase history and loyalty points
- Navigate to Reports from the menu
- Filter by date range
- View transaction details
- Reprint invoices if needed
- Login with inventory clerk credentials
- Navigate to Products from the menu
- View product list with stock levels
- Add new products:
- Click Add Product
- Enter product details:
- Name, Description
- Barcode, SKU
- Category, Supplier
- Cost Price, Selling Price
- Initial Quantity
- Minimum Stock Level
- Upload product image
- Save product
- Edit existing products
- Monitor low-stock alerts
- Deactivate discontinued products
- Navigate to Categories
- View category list
- Add new categories:
- Click Add Category
- Enter name and description
- Save category
- Edit or deactivate categories
- Navigate to Suppliers
- View supplier list
- Add new suppliers:
- Click Add Supplier
- Enter company details
- Add contact information
- Save supplier
- Edit supplier information
- View products by supplier
- Navigate to Inventory Reports
- View stock levels
- Generate reports:
- Low stock items
- Stock movement history
- Product performance
- Supplier analysis
- Export reports for analysis
graph TD
A[User Roles] --> B[Administrator]
A --> C[Cashier]
A --> D[Inventory Clerk]
B --> B1[Full System Access]
B --> B2[User Management]
B --> B3[System Configuration]
B --> B4[All Reports]
B --> B5[Audit Logs]
C --> C1[POS Operations]
C --> C2[Customer Management]
C --> C3[Sales History]
C --> C4[Invoice Viewing]
D --> D1[Product Management]
D --> D2[Category Management]
D --> D3[Supplier Management]
D --> D4[Inventory Reports]
style B fill:#3B82F6,stroke:#2563EB,color:#fff
style C fill:#22C55E,stroke:#16A34A,color:#fff
style D fill:#A855F7,stroke:#9333EA,color:#fff
| Feature | Administrator | Cashier | Inventory Clerk |
|---|---|---|---|
| User Management | |||
| Create Users | ✅ | ❌ | ❌ |
| Edit Users | ✅ | ❌ | ❌ |
| Delete Users | ✅ | ❌ | ❌ |
| View Users | ✅ | ❌ | ❌ |
| Product Management | |||
| Create Products | ✅ | ❌ | ✅ |
| Edit Products | ✅ | ❌ | ✅ |
| Delete Products | ✅ | ❌ | ✅ |
| View Products | âś… | âś… | âś… |
| Sales Operations | |||
| Process Sales | ✅ | ✅ | ❌ |
| View Sales | ✅ | ✅ | ❌ |
| Void Sales | ✅ | ❌ | ❌ |
| Refund Sales | ✅ | ✅ | ❌ |
| Customer Management | |||
| Create Customers | ✅ | ✅ | ❌ |
| Edit Customers | ✅ | ✅ | ❌ |
| Delete Customers | ✅ | ❌ | ❌ |
| View Customers | ✅ | ✅ | ❌ |
| Inventory Management | |||
| Adjust Stock | ✅ | ❌ | ✅ |
| View Stock Levels | âś… | âś… | âś… |
| Stock Transfers | ✅ | ❌ | ✅ |
| Inventory Reports | ✅ | ❌ | ✅ |
| Reporting | |||
| Sales Reports | ✅ | ✅ | ❌ |
| Inventory Reports | ✅ | ❌ | ✅ |
| Financial Reports | ✅ | ❌ | ❌ |
| Analytics Dashboard | ✅ | ✅ | ❌ |
| System | |||
| System Configuration | ✅ | ❌ | ❌ |
| Audit Logs | ✅ | ❌ | ❌ |
| Backup/Restore | ✅ | ❌ | ❌ |
| Export Data | âś… | âś… | âś… |
- BCrypt Hashing: All passwords are hashed using BCrypt with work factor 11
- Salt Generation: Automatic salt generation for each password
- No Plain Text Storage: Passwords are never stored in plain text
- Password Complexity: Recommended minimum 8 characters with mixed case and numbers
- User Authentication: Required for all system access
- Role-Based Access: Permissions enforced at the application level
- Session Tracking: User sessions tracked with timestamps
- Automatic Logout: Configurable session timeout
- Customer Data: Phone numbers and email addresses are encrypted
- Payment Information: Sensitive payment data is protected
- API Keys: External API keys are encrypted in database
All critical operations are logged:
- User login/logout events
- Data modifications (Create, Update, Delete)
- Transaction processing
- Payment processing
- Inventory adjustments
- System configuration changes
Audit log includes:
- User ID and username
- Action performed
- Timestamp
- IP address
- Old and new values (for updates)
- Affected table and record ID
- SQL Injection Prevention: Parameterized queries via Entity Framework
- Connection Security: Encrypted database connections
- Trust Server Certificate: Configurable certificate validation
- Change Default Credentials: Immediately change default admin password
- Regular Backups: Schedule automated daily database backups
- User Access Review: Regularly review and update user permissions
- Audit Log Monitoring: Periodically review audit logs for suspicious activity
- Software Updates: Keep .NET runtime and SQL Server updated
- Strong Passwords: Enforce strong password policies for all users
- Least Privilege: Grant users minimum necessary permissions
- Data Retention: Implement data retention policies for audit logs
syncversestudio/
├── Data/ # Data access layer
│ ├── ApplicationDbContext.cs # EF Core DbContext
│ └── Migrations/ # Database migrations
├── Models/ # Domain entities
│ ├── User.cs
│ ├── Product.cs
│ ├── Sale.cs
│ └── ...
├── Services/ # Business logic
│ ├── AuthenticationService.cs
│ └── DatabaseInitializer.cs
├── Views/ # Presentation layer
│ ├── LoginForm.cs
│ ├── MainDashboard.cs
│ ├── CashierDashboard/
│ └── ...
├── Helpers/ # Utility classes
│ ├── ProductImageHelper.cs
│ └── BrandTheme.cs
├── Program.cs # Application entry point
└── syncversestudio.csproj # Project file
- Classes: PascalCase (e.g.,
ProductManagementView) - Methods: PascalCase (e.g.,
LoadProducts()) - Properties: PascalCase (e.g.,
ProductName) - Private Fields: camelCase with underscore prefix (e.g.,
_context) - Constants: UPPER_CASE (e.g.,
MAX_QUANTITY) - Async Methods: Suffix with
Async(e.g.,SaveProductAsync())
// Example class structure
public class ProductManagementView : Form
{
// Private fields
private readonly ApplicationDbContext _context;
private readonly AuthenticationService _authService;
// Constructor
public ProductManagementView(AuthenticationService authService)
{
InitializeComponent();
_authService = authService;
_context = new ApplicationDbContext();
SetupUI();
LoadProducts();
}
// UI Setup methods
private void SetupUI() { }
// Data loading methods
private async Task LoadProducts() { }
// Event handlers
private void btnAdd_Click(object sender, EventArgs e) { }
// Helper methods
private bool ValidateInput() { }
// Cleanup
protected override void Dispose(bool disposing)
{
if (disposing)
{
_context?.Dispose();
components?.Dispose();
}
base.Dispose(disposing);
}
}// Always use 'using' statement for DbContext
using (var context = new ApplicationDbContext())
{
// Query data
var products = await context.Products
.Include(p => p.Category)
.Include(p => p.Supplier)
.Where(p => p.IsActive)
.ToListAsync();
// Add new record
var product = new Product { Name = "New Product" };
context.Products.Add(product);
await context.SaveChangesAsync();
// Update record
var existing = await context.Products.FindAsync(id);
existing.Name = "Updated Name";
await context.SaveChangesAsync();
// Delete record
context.Products.Remove(existing);
await context.SaveChangesAsync();
}# Clean build artifacts
dotnet clean syncversestudio/syncversestudio.csproj
# Restore NuGet packages
dotnet restore syncversestudio/syncversestudio.csproj
# Build in Debug mode
dotnet build syncversestudio/syncversestudio.csproj --configuration Debug
# Build in Release mode
dotnet build syncversestudio/syncversestudio.csproj --configuration Release
# Run application
dotnet run --project syncversestudio/syncversestudio.csproj# Create new migration
dotnet ef migrations add MigrationName --project syncversestudio
# Apply migrations to database
dotnet ef database update --project syncversestudio
# Remove last migration (if not applied)
dotnet ef migrations remove --project syncversestudio
# Generate SQL script from migrations
dotnet ef migrations script --project syncversestudio --output migration.sql// Create page header
var header = BrandTheme.CreatePageHeader("Page Title", "Subtitle");
this.Controls.Add(header);
// Create button panel
var buttonPanel = BrandTheme.CreateButtonPanel(
("Add", "add", AddButton_Click),
("Edit", "edit", EditButton_Click),
("Delete", "delete", DeleteButton_Click),
("Refresh", "refresh", RefreshButton_Click)
);
this.Controls.Add(buttonPanel);
// Style DataGridView
BrandTheme.StyleDataGridView(dataGridView);
// Style individual button
BrandTheme.StyleButton(myButton, "add"); // green
BrandTheme.StyleButton(myButton, "edit"); // blue
BrandTheme.StyleButton(myButton, "delete"); // redtry
{
// Database operation
await context.SaveChangesAsync();
MessageBox.Show("Operation successful", "Success",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (DbUpdateException ex)
{
MessageBox.Show($"Database error: {ex.InnerException?.Message}",
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred: {ex.Message}",
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}- Use Async Operations: Prefer
async/awaitfor database operations - Include Related Data: Use
.Include()to avoid N+1 queries - Pagination: Implement pagination for large datasets
- Caching: Cache frequently accessed data
- Dispose Resources: Always dispose DbContext and other resources
- Index Database: Ensure proper database indexing
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Application_Start | Program.cs Main() | - | Initialize QuestPDF license, set culture |
| Form_Load | Form initialization | Form_Load() | Load initial data, setup UI |
| Form_Closing | Form closing | Form_Closing() | Cleanup resources, confirm exit |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Login_Attempt | Login button click | btnLogin_Click() | Validate credentials, create session |
| Login_Success | Successful authentication | - | Load role-based dashboard, log event |
| Login_Failure | Failed authentication | - | Display error, log attempt |
| Logout | Logout button click | btnLogout_Click() | End session, return to login |
| Session_Timeout | Inactivity period | - | Auto logout, clear session |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Product_Selected | Product card click | ProductCard_Click() | Add product to cart |
| Quantity_Changed | +/- button click | btnQuantity_Click() | Update cart quantity |
| Cart_Item_Removed | Remove button click | btnRemove_Click() | Remove item from cart |
| Tax_Rate_Changed | NumericUpDown value change | numTaxRate_ValueChanged() | Recalculate totals |
| Payment_Method_Selected | Payment button click | btnPayment_Click() | Open payment modal |
| Transaction_Completed | Payment confirmed | CompleteTransaction() | Create sale, invoice, update stock |
| Transaction_Held | Hold button click | btnHold_Click() | Save transaction for later |
| Transaction_Cancelled | Cancel button click | btnCancel_Click() | Clear cart, reset form |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Product_Added | Add product button | btnAddProduct_Click() | Create new product |
| Product_Updated | Save changes button | btnSaveProduct_Click() | Update product details |
| Product_Deleted | Delete button | btnDeleteProduct_Click() | Deactivate product |
| Stock_Adjusted | Stock adjustment | AdjustStock() | Update quantity, log movement |
| Low_Stock_Alert | Stock below minimum | CheckStockLevels() | Display alert, notify user |
| Image_Uploaded | Image browse button | btnBrowseImage_Click() | Upload product image |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Customer_Created | Add customer button | btnAddCustomer_Click() | Create customer profile |
| Customer_Updated | Save changes button | btnSaveCustomer_Click() | Update customer details |
| Customer_Selected | Customer dropdown change | cmbCustomer_SelectedIndexChanged() | Load customer data |
| Loyalty_Points_Updated | Transaction completion | UpdateLoyaltyPoints() | Add points to customer |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| Date_Range_Changed | Date picker change | dateFilter_ValueChanged() | Reload report data |
| Period_Selected | Period dropdown change | cmbPeriod_SelectedIndexChanged() | Set date range, reload data |
| Report_Generated | Generate button click | btnGenerate_Click() | Create report |
| Report_Exported | Export button click | btnExport_Click() | Export to PDF/Excel/CSV |
| Dashboard_Refresh | Timer tick (5 seconds) | timerRefresh_Tick() | Update dashboard metrics |
| Event | Trigger | Handler | Purpose |
|---|---|---|---|
| SaveChanges_Success | Successful save | - | Commit transaction, log audit |
| SaveChanges_Failure | Save exception | catch block | Rollback, display error |
| Connection_Opened | DbContext creation | OnConfiguring() | Establish database connection |
| Connection_Closed | DbContext disposal | Dispose() | Close connection, cleanup |
We welcome contributions to SYNCVERSE STUDIO. Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes
- Test thoroughly
- Commit with clear messages:
git commit -m "Add feature: description" - Push to your fork:
git push origin feature/your-feature-name - Submit a pull request
- Follow the established coding standards
- Write clear, self-documenting code
- Add comments for complex logic
- Ensure no compiler warnings
- Test all changes thoroughly
- Description: Provide clear description of changes
- Testing: Include test results and screenshots
- Documentation: Update relevant documentation
- Breaking Changes: Clearly mark any breaking changes
- Review: Address all review comments
<type>(<scope>): <subject>
<body>
<footer>
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting)refactor: Code refactoringtest: Adding testschore: Maintenance tasks
Example:
feat(pos): Add QR code payment support
Implemented QR code generation for mobile payments using QRCoder library.
Supports cryptocurrency wallet integration.
Closes #123
We welcome contributions in the following areas:
-
Features
- Barcode scanner hardware integration
- Receipt printer integration
- Email/SMS notification system
- Advanced reporting features
- Multi-language support
- Dark mode theme
-
Bug Fixes
- Report bugs via GitHub Issues
- Include steps to reproduce
- Provide system information
- Attach screenshots if applicable
-
Documentation
- Improve existing documentation
- Add code examples
- Create video tutorials
- Translate documentation
-
Testing
- Write unit tests
- Perform integration testing
- Test on different Windows versions
- Report compatibility issues
-
Performance
- Optimize database queries
- Improve UI responsiveness
- Reduce memory usage
- Enhance startup time
Before submitting a pull request, ensure:
- Code compiles without errors or warnings
- All existing tests pass
- New features include appropriate tests
- Code follows project style guidelines
- Documentation is updated
- Commit messages are clear and descriptive
- No sensitive data (passwords, keys) in code
- Database migrations are included if needed
- UI changes are consistent with brand theme
- Performance impact is acceptable
This project is licensed under the MIT License.
Copyright (c) 2025 SYNCVERSE STUDIO
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
This project uses the following open-source libraries:
- Entity Framework Core - MIT License
- BCrypt.Net-Next - MIT License
- FontAwesome.Sharp - MIT License
- MaterialSkin.2 - MIT License
- QRCoder - MIT License
- ZXing.Net - Apache License 2.0
- QuestPDF - MIT License (Community License)
- Newtonsoft.Json - MIT License
Comprehensive documentation is available in the GUIDE/ folder:
- Quick Start Guide:
GUIDE/QUICK_START.md - Technology Stack:
GUIDE/tech.md - Project Structure:
GUIDE/structure.md - Brand Theme Guide:
GUIDE/BRAND_THEME_GUIDE.md - Security Policy:
GUIDE/SECURITY.md - Deployment Checklist:
GUIDE/DEPLOYMENT_CHECKLIST.md - Migration Guide:
GUIDE/MIGRATION_GUIDE.md - Analytics Feature:
GUIDE/ANALYTICS_FEATURE.md - Enhanced POS Documentation:
GUIDE/ENHANCED_POS_SYSTEM_DOCUMENTATION.md
For bug reports and feature requests:
- Check existing issues first
- Create a new issue with detailed information
- Include:
- System information (OS, .NET version, SQL Server version)
- Steps to reproduce
- Expected vs actual behavior
- Screenshots or error messages
- Relevant log files
- Discussions: Use GitHub Discussions for questions
- Wiki: Check the project wiki for additional resources
- Email: Contact the development team
Issue: Application won't start
- Verify .NET 8.0 Runtime is installed
- Check database connection string
- Ensure SQL Server is running
- Review application logs
Issue: Database connection failed
- Verify SQL Server is accessible
- Check connection string format
- Ensure database exists
- Verify user permissions
Issue: Login fails with correct credentials
- Check if user account is active
- Verify password hasn't expired
- Review audit logs for details
- Ensure database is accessible
Issue: Products not displaying images
- Verify image files exist in specified path
- Check file permissions
- Ensure ImagePath is correctly stored
- Validate image file formats (JPG, PNG)
Issue: Reports not generating
- Check date range selection
- Verify data exists for selected period
- Ensure sufficient permissions
- Review error logs
Minimum vs Recommended
- Minimum specs may result in slower performance
- Recommended specs provide optimal experience
- Consider upgrading hardware for large datasets
- Monitor system resources during peak usage
- Barcode scanner hardware integration
- Receipt printer direct integration
- Email notification system
- SMS notification system
- Advanced chart visualizations
- PDF report generation
- Excel export functionality
- Multi-language support
- Dark mode theme
- Mobile companion app
- Cloud backup integration
- Advanced analytics dashboard
- Customer loyalty program enhancements
- Discount and promotion system
- E-commerce platform integration
- Multi-store support
- Franchise management
- Advanced inventory forecasting
- AI-powered sales predictions
- Customer behavior analytics
- Automated reordering system
- Supplier portal integration
- Cloud-based deployment option
- Real-time synchronization across locations
- Advanced business intelligence
- Machine learning for demand forecasting
- Integration with accounting software
- Mobile POS application
- Self-service kiosk mode
- API for third-party integrations
- Lead Developer: Vi
- Contributors:
PHA***NAK 100034879410842
pha******nn 100006581647309
Sa***Dy 100028267065321
CH****KLA 100074770834689
Ph****nna
100057666978328
- Microsoft for .NET Framework and Entity Framework Core
- The open-source community for excellent libraries
- All contributors and testers
- Users providing valuable feedback
Special thanks to the creators and maintainers of:
- Entity Framework Core
- Windows Forms
- BCrypt.Net
- FontAwesome
- MaterialSkin
- QRCoder
- ZXing.Net
- QuestPDF
- Newtonsoft.Json
pie title "Code Distribution by Layer"
"Presentation (Views)" : 45
"Data Access (EF Core)" : 25
"Business Logic (Services)" : 15
"Models (Entities)" : 10
"Helpers & Utilities" : 5
graph LR
A[SYNCVERSE STUDIO] --> B[Frontend]
A --> C[Backend]
A --> D[Database]
B --> B1[Windows Forms]
B --> B2[MaterialSkin UI]
B --> B3[FontAwesome Icons]
B --> B4[Custom Controls]
C --> C1[.NET 8.0]
C --> C2[C# 12]
C --> C3[Entity Framework Core]
C --> C4[BCrypt Security]
D --> D1[SQL Server]
D --> D2[T-SQL]
D --> D3[Stored Procedures]
D --> D4[Indexes]
style A fill:#14B8A6,stroke:#0D9488,color:#fff
style B fill:#3B82F6,stroke:#2563EB,color:#fff
style C fill:#22C55E,stroke:#16A34A,color:#fff
style D fill:#EF4444,stroke:#DC2626,color:#fff
- Repository: [https://github.com/EIRSVi/sync-verse-studio]
- Documentation: [Documentation URL]
- Issue Tracker: [https://github.com/EIRSVi/sync-verse-studio/actions]
- Discussions: [https://github.com/EIRSVi/sync-verse-studio/commits/master/]
- Email: support@****.com
- Website: www.*****.com
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and community support
Q: What operating systems are supported? A: SYNCVERSE STUDIO runs on Windows 10 (version 1809 or later) and Windows 11.
Q: Can I use this with SQL Server Express? A: Yes, SQL Server Express (free edition) is fully supported.
Q: Is there a cloud version available? A: Currently, SYNCVERSE STUDIO is a desktop application. Cloud deployment is planned for Version 2.0.
Q: Can I customize the invoice template? A: Yes, invoice templates can be customized by modifying the invoice generation code.
Q: Does it support multiple currencies? A: Currently, the system uses a single currency. Multi-currency support is planned for future releases.
Q: Can I integrate with my existing e-commerce platform? A: The system includes an OnlineStoreIntegration entity designed for future e-commerce integration. Custom integration can be developed.
Q: How do I backup my data? A: Use SQL Server backup tools or the provided backup scripts. Automated backups can be scheduled via SQL Server Agent.
Q: Can I run this on a network with multiple terminals? A: Yes, multiple instances can connect to the same SQL Server database. Ensure proper network configuration and database permissions.
Q: Is barcode scanning supported? A: Yes, the system includes ZXing.Net library for barcode scanning. Hardware scanner integration requires additional configuration.
Q: Can I export data to Excel? A: Excel export functionality is planned for Version 1.1. Currently, data can be exported via SQL Server tools.
Q: How are passwords stored? A: All passwords are hashed using BCrypt with a work factor of 11. Plain text passwords are never stored.
Q: Is customer data encrypted? A: Yes, sensitive customer data (phone numbers and email addresses) are encrypted in the database.
Q: Can I track user activities? A: Yes, the system includes comprehensive audit logging that tracks all user activities, including login/logout, data modifications, and transactions.
Q: How do I reset a forgotten password? A: Administrators can reset user passwords through the User Management interface.
Q: Is the database connection secure? A: Yes, database connections use encrypted channels and support certificate validation.
| Operation | Average Time | Notes |
|---|---|---|
| Application Startup | 2-3 seconds | First launch may take longer |
| User Login | < 1 second | BCrypt verification |
| Dashboard Load | 1-2 seconds | With 1000+ transactions |
| Product Search | < 500ms | With 10,000+ products |
| Add to Cart | < 100ms | Real-time calculation |
| Complete Transaction | 1-2 seconds | Including database writes |
| Invoice Generation | < 1 second | Including PDF creation |
| Report Generation | 2-5 seconds | Depends on date range |
| Database Query | 100-500ms | Optimized with indexes |
- Products: Tested with 50,000+ products
- Transactions: Handles 100,000+ transactions
- Customers: Supports 10,000+ customer records
- Concurrent Users: 5-10 simultaneous users (network deployment)
- Database Size: Efficient up to 10 GB
- Regular database maintenance (index rebuilding)
- Archive old transactions periodically
- Optimize images (compress product images)
- Use SSD for database storage
- Allocate sufficient RAM (8 GB recommended)
- Keep SQL Server updated
- Monitor and tune SQL Server performance
graph TD
A[Single PC] --> B[SYNCVERSE STUDIO]
B --> C[Local SQL Server]
C --> D[(POSDB)]
style A fill:#3B82F6,stroke:#2563EB,color:#fff
style B fill:#22C55E,stroke:#16A34A,color:#fff
style C fill:#A855F7,stroke:#9333EA,color:#fff
style D fill:#EF4444,stroke:#DC2626,color:#fff
Use Case: Small retail store with single point of sale Requirements: Single Windows PC with SQL Server LocalDB or Express
graph TD
A[Terminal 1] --> D[Network]
B[Terminal 2] --> D
C[Terminal 3] --> D
D --> E[SQL Server]
E --> F[(POSDB)]
style A fill:#3B82F6,stroke:#2563EB,color:#fff
style B fill:#3B82F6,stroke:#2563EB,color:#fff
style C fill:#3B82F6,stroke:#2563EB,color:#fff
style D fill:#22C55E,stroke:#16A34A,color:#fff
style E fill:#A855F7,stroke:#9333EA,color:#fff
style F fill:#EF4444,stroke:#DC2626,color:#fff
Use Case: Medium to large retail store with multiple POS terminals Requirements: Network infrastructure, dedicated SQL Server, multiple Windows PCs
graph TD
A[Store 1 Terminals] --> B[Local Network]
C[Store 2 Terminals] --> D[Local Network]
E[Store 3 Terminals] --> F[Local Network]
B --> G[Central SQL Server]
D --> G
F --> G
G --> H[(Central Database)]
G --> I[Backup Server]
I --> J[(Backup Database)]
style G fill:#3B82F6,stroke:#2563EB,color:#fff
style H fill:#EF4444,stroke:#DC2626,color:#fff
style I fill:#A855F7,stroke:#9333EA,color:#fff
style J fill:#EF4444,stroke:#DC2626,color:#fff
Use Case: Multi-location retail chain with centralized management Requirements: Enterprise SQL Server, VPN or secure network, backup infrastructure
- Regular Backups: Schedule daily automated backups
- User Management: Review user accounts quarterly
- Audit Logs: Monitor audit logs weekly for suspicious activity
- Password Policy: Enforce strong passwords, change every 90 days
- Software Updates: Keep system and dependencies updated
- Data Retention: Archive old data annually
- Performance Monitoring: Monitor database performance monthly
- Security Review: Conduct security audits quarterly
- Transaction Accuracy: Double-check cart items before payment
- Customer Information: Verify customer details for registered customers
- Payment Verification: Confirm payment amount before processing
- Receipt Delivery: Offer receipt options to customers
- Cash Handling: Count cash carefully, verify change
- Transaction Hold: Use hold feature for interrupted transactions
- Logout: Always logout when leaving terminal
- Report Issues: Immediately report system issues to administrator
- Stock Accuracy: Conduct regular physical inventory counts
- Product Information: Ensure complete and accurate product data
- Image Quality: Use high-quality product images
- Low Stock Monitoring: Check low-stock alerts daily
- Supplier Management: Keep supplier information updated
- Category Organization: Maintain logical category structure
- Price Updates: Review and update prices regularly
- Discontinued Items: Deactivate rather than delete products
- Code Quality: Follow coding standards consistently
- Testing: Test thoroughly before committing changes
- Documentation: Document all changes and new features
- Version Control: Use meaningful commit messages
- Database Changes: Always create migrations for schema changes
- Error Handling: Implement comprehensive error handling
- Performance: Optimize database queries and UI responsiveness
- Security: Never commit sensitive data or credentials
| Term | Definition |
|---|---|
| BCrypt | Password hashing algorithm used for secure password storage |
| DbContext | Entity Framework Core class representing database session |
| Entity | Domain model class representing database table |
| EF Core | Entity Framework Core, object-relational mapper (ORM) |
| LINQ | Language Integrated Query, query syntax for .NET |
| Migration | Database schema version control mechanism |
| POS | Point of Sale, system for processing retail transactions |
| RBAC | Role-Based Access Control, permission system based on user roles |
| SKU | Stock Keeping Unit, unique product identifier |
| T-SQL | Transact-SQL, Microsoft's SQL Server query language |
| UX | User Experience, overall experience of using the application |
| UI | User Interface, visual elements users interact with |
| Acronym | Full Form |
|---|---|
| API | Application Programming Interface |
| CRUD | Create, Read, Update, Delete |
| CSV | Comma-Separated Values |
| FK | Foreign Key |
| GUI | Graphical User Interface |
| IDE | Integrated Development Environment |
| JSON | JavaScript Object Notation |
| KPI | Key Performance Indicator |
| ORM | Object-Relational Mapping |
| Portable Document Format | |
| PK | Primary Key |
| QR | Quick Response (code) |
| SSMS | SQL Server Management Studio |
| UI | User Interface |
| UK | Unique Key |
| UX | User Experience |
- .NET Documentation
- Entity Framework Core Documentation
- SQL Server Documentation
- Windows Forms Documentation
SYNCVERSE STUDIO provides a comprehensive, production-ready point of sale and inventory management solution for retail businesses. With its modern architecture, robust security features, and intuitive user interface, it streamlines retail operations while providing valuable business insights through advanced analytics.
The system is designed to grow with your business, supporting everything from single-store operations to multi-location enterprises. Its modular architecture and extensive documentation make it easy to customize and extend to meet specific business requirements.
We welcome contributions from the community and are committed to continuous improvement and feature enhancement. Thank you for choosing SYNCVERSE STUDIO.
- Installation Guide
- User Roles and Permissions
- Point of Sale Transaction Flow
- Data Model
- Contributing
- Support
SYNCVERSE STUDIO - Empowering Retail Excellence
Version 1.0.0 | October 2025