Point of Sale System — Complete Source Code
A production-ready point of sale application to run fast checkout, manage cashier sessions, products, payments, and receipts. Built with .NET 10, ASP.NET Core, Blazor Server, MudBlazor, Vertical Slice Architecture, and CQRS handlers wired to Minimal API endpoints.

Retail and counter-based businesses struggle with slow manual checkout, invisible sales performance, and fragmented payment records — leading to long queues, lost revenue, and unreliable reporting.
Cashiers type prices manually, search printed price lists, and customers queue at the counter. Blazor POS gives you a fast barcode-driven POS terminal with instant product search, cart management, and Hold/Parked sales.
Store owners only see yesterday's totals after closing and cannot react during the day. Blazor POS includes a real-time sales dashboard with revenue KPIs, transaction counts, top products, and payment breakdowns.
Cash, cards, e-wallets, and QR codes end up recorded in different places that never reconcile. Blazor POS handles Cash, Card, E-Wallet, and QR payments in one checkout flow with complete payment records.
Paper receipts get lost and manual bookkeeping makes disputes impossible to resolve. Blazor POS prints or exports every receipt to PDF and stores every sale inside a searchable sales session.
Complete end-to-end point of sale features — every module is a complete vertical slice with Blazor pages and components, a CQRS handler, a FluentValidation validator, a Minimal API endpoint, and EF Core queries.
Barcode scan, instant product search, cart, quantity control, Hold/Parked sales
Open a cashier session, hold and resume sales, close with a full summary
Product, Product Group, pricing, barcode, and unit measure
Cash, Card, E-Wallet, QR — change calculation and payment records
Professional receipt with print and PDF export after every sale
Real-time revenue, transaction counts, top products, payment breakdowns
Every create/update/delete logged with user ID and timestamp
Built-in task management for daily store operations
Users, Currencies, Auto Number, appsettings.json inspection
Blazor POS is built on the modern .NET ecosystem with production-grade libraries and tools.
| Layer | Technology |
|---|---|
| Framework | .NET 10 |
| Web Framework | ASP.NET Core 10 |
| UI Rendering | Blazor Web App — Interactive Server render mode (SignalR circuit) |
| UI Component Library | MudBlazor (Material Design components for Blazor) |
| UI Assets | SheetJS (Excel export), jsPDF (PDF receipt/report), ECharts (dashboards) |
| Architecture Pattern | Vertical Slice Architecture (VSA) via ASP.NET Core Areas + CQRS plain handlers (no MediatR) |
| API Style | Per-feature Minimal API groups (/api/{entity}) with Swagger/OpenAPI |
| Data Access | Entity Framework Core 10 — code-first, auto-create on startup, DataTable paging/search/sort helpers |
| Database | InMemory (zero-config) / SQL Server / PostgreSQL — toggle IsUsed in appsettings.json |
| Validation | FluentValidation |
| Authentication | ASP.NET Core Identity + JWT access/refresh token rotation + Firebase SSO (Google) |
| Authorization | Role-Based (Guest / Member / Admin / AI) + rate-limited endpoint policies |
| Real-Time | SignalR circuit (Blazor Web App interactive server mode) |
| Background Jobs | Hangfire — dashboard at /hangfire, recurring jobs (daily log cleanup) |
| MailKit — SendGrid / Mailgun / SMTP / Mailjet (switch via appsettings.json) | |
| Logging | Serilog — rolling files, optional database sink and Seq, 3-day auto cleanup |
| Observability | Health checks (/health/live, /health/ready) + Admin Ops metrics dashboard + OpenTelemetry (OTLP) |
| AI Chat | Optional AI assistant — ChatGPT / Claude / Gemini / DeepSeek (provider + API key) |
Blazor POS uses Vertical Slice Architecture (VSA) with plain CQRS handlers wired directly into per-feature Minimal API endpoints — the modern, maintainable approach to building .NET applications.
Each feature (POS Terminal, Product, Sales, Sales Session, etc.) lives in its own folder under ASP.NET Core Areas with its Blazor pages, feature components, CQRS handlers, validators, and Minimal API endpoint all in one place. Zero coupling between features. Add a feature without touching unrelated code.
Folder structure: Areas/Main/POSTerminal/ contains Pages/, Components/, Cqrs/, and Endpoints/ — everything for that feature.
Commands (writes) and queries (reads) are separated into single-purpose handler classes — CreateSalesHandler, GetProductListHandler, GetSalesExportHandler. Every handler exposes one HandleAsync() method and returns ApiResponse<T>. There is no MediatR dependency and no pipeline magic: Minimal API endpoints inject the handler directly, while Blazor pages call the same handler through HandlerInvoker with a fresh DI scope per call. Read-only dashboards use EF Core AsNoTracking().
Example: GetSalesListHandler receives a DataTableRequest (paging, search, sort) and returns ApiResponse<T>; CreateSalesHandler validates with FluentValidation then saves via EF Core.
The entire application — Blazor UI, REST API, business logic, data access, and authentication — lives in one .NET 10 project. No distributed complexity, no microservice overhead. Single F5 to run. Deploy as one unit to Azure, IIS, or Docker. Perfect for teams that value simplicity and velocity.
Indotalent/
├── Areas/
│ ├── Main/ # POS features (Admin + Member roles)
│ │ ├── POSScreen/ # POS checkout page + payment/receipt dialogs
│ │ ├── POSDashboard/ # real-time sales dashboard (ECharts)
│ │ ├── POSTerminal/ # POS terminal master data
│ │ ├── Product/ ProductGroup/ PaymentMethod/
│ │ ├── Sales/ # sales, parked sales, receipt
│ │ ├── SalesSession/ # cashier sessions
│ │ └── Todo/ TodoDashboard/
│ ├── Admin/ # User, Role, Tax, Currency, Country, Company,
│ │ │ # AutoNumberSequence, logs, System File
│ ├── AI/Chat/ # multi-provider AI chat (ChatGPT/Claude/Gemini/DeepSeek)
│ ├── Identity/ # Account pages (Login, Register, Manage)
│ ├── Public/ # Home + built-in Documentation
│ └── Blazor/ # App shell, layouts, HandlerInvoker, circuit services
├── Infrastructures/ # Auth, database, email, jobs, logging, OTel, rate limiting
├── Data/ # Entities, enums, seeders, Identity migration
├── Shared/ # ApiResponse, DataTable helpers, pagination
└── Program.cs # Single entry point with full configuration
Areas/Main/POSTerminal/ # Feature folder convention (VSA)
├── Pages/ # Index / Create / Edit / Detail (.razor)
├── Components/ # feature-local dialogs and forms
├── Cqrs/ # GetList/GetById/Create/Update/Delete handlers + validators
└── Endpoints/ # POSTerminalEndpoint.cs -> /api/postterminal
Security is baked into the architecture from the ground up — not bolted on as an afterthought.
Blazor POS ships with a fully configured authentication and authorization system. ASP.NET Core Identity manages users and roles with secure password hashing. JWT access tokens (with SHA-256 hashed refresh tokens and rotation) protect the REST API, Identity cookies authenticate the Blazor UI circuit, and Firebase SSO (Google) is included as an optional single sign-on.
Role-based access control (RBAC) ships with four roles — Guest, Member, Admin, and AI. Areas and API groups declare their required roles (POS checkout allows Admin or Member; AI Chat allows Admin or AI), and every API group runs behind rate-limiting policies (global, authenticated, write, admin).
With Blazor Server, source code and connection strings never leave the server. All data access happens server-side via SignalR — zero exposure of database credentials or business logic to the client.
Blazor POS exposes a complete REST Web API for all entities — ready for mobile apps, third-party integrations, and external systems.
Every feature registers one Minimal API endpoint group. All endpoints are JWT-protected, role-authorized, rate-limited, and return an ApiResponse<T> envelope.
The same pattern applies to every entity: product, productgroup, paymentmethod, posterminal, salessession, todo, posdashboard — plus /export, /{id}/items, and /{lookup}-lookup routes.
/swagger/export endpoints feed client-side .xlsx download via SheetJSThree database providers, a one-line switch, and a built-in demo seeder — ready to run in under 60 seconds.
Explore the Blazor POS interface — POS terminal, dashboard, payments, receipts, and more.
Test every feature before you buy. No registration required.
IsUsed toggle in appsettings.json. The database is auto-created and seeded on startup with DatabaseSeeder and Demo Mode — no manual migration step required.Complete, unrestricted C# source code. Single .NET 10 project.
or
Secure checkout via PayPal or LemonSqueezy. No subscription.
MVC EDevKit Basic is the MVC implementation of Vertical Slice Architecture — every feature lives in one self-contained folder with Controllers, CQRS handlers, per-feature Endpoints, and Razor Views.
