J
John Castelo

Point of Sale Design System

MudBlazor POS with product catalog and cart built from MudBlazor components, using MudGrid and Bootstrap utility classes for layout and responsive behavior.

LIVE DEMO
Generated using Instruct UI - An AI for Blazor UI Generation
## What's implemented - Product catalog grid with search box and category filter buttons. - Product cards (image, name, category, price, "Popular" badge) and Add button. - Right-side cart implemented with MudTable showing item, quantity controls, unit price and line total. - Cart calculations: subtotal, tax (configurable TaxRate), and total. - Checkout actions: Pay & Print Receipt and Hold Order (stubs that clear cart and increment OpenOrdersCount). - Sample in-memory data seeded in OnInitialized (GetSampleProducts). ## Key components - MudAppBar, MudContainer, MudGrid, MudItem, MudPaper - MudTextField (@bind-Value SearchTerm), MudButton, MudText - MudCard, MudCardMedia, MudCardContent, MudCardActions - MudTable<T> with HeaderContent and RowTemplate (CartItemModel) - MudIconButton for row delete; use of @bind and @onclick-style handlers ## How it works - Products is an in-memory List<ProductModel> populated on initialization; FilteredProducts is an IEnumerable computed from SearchTerm and SelectedCategory. - Search uses @bind-Value on MudTextField; category buttons call OnCategorySelected to update SelectedCategory. - AddToCart finds or creates a CartItemModel and updates Quantity; Increment/Decrement adjust quantities or remove empty items. - Subtotal, TaxAmount and Total are computed properties based on CartItems and TaxRate. - Event handlers (HandlePay, HoldOrder) are placeholders; they clear CartItems and increment OpenOrdersCount. ## Styling - Primary UI uses MudBlazor components and theme tokens (Color, Typo, Variant). - Layout uses MudGrid breakpoints (xs, md, lg) for responsive columns. - Additional layout/spacing uses Bootstrap-like utility classes present in markup (d-flex, flex-column, gap-*, mb-*, px-*, py-*). ## Reuse steps 1. Add MudBlazor NuGet and register services: builder.Services.AddMudServices(); and include MudBlazor styles in index.html/_Host. 2. Import namespaces (using MudBlazor) in the component or _Imports.razor. 3. Copy ProductModel and CartItemModel or adapt existing domain models. 4. Place PosMainPage.razor in Pages and wire real product service instead of GetSampleProducts(). 5. Implement persistence/payments: replace HandlePay/HoldOrder with calls to backend APIs, printer service, or POS middleware. ## Limitations & next steps - Page uses in-memory sample data; no backend service, data persistence, or authentication is wired. - Payment processing, receipt printing, and hold-order persistence are TODOs in code comments. - Large catalogs may require paging or virtualization (MudVirtualize) for performance. - Consider accessibility/keyboard shortcuts for POS workflows and integration with hardware (cash drawer, barcode scanner). - Add server-side validation, error handling, and optimistic UI updates when wiring services.