Self-Checkout Software Stack

None profit organisations/clubs/associations often do provide their members various goods; not free of charge, but free of withdrawal. E.g.: a fridge is filled with all kinds of soft-drinks and the organisation’s members are allowed to consume at any time. Payment happens either directly into a cash register or via tally sheet. Either way, there are various issues with this approach:

  • Who/When/What has been consumed
  • Wrong amount has been paid or
  • Payment has been forgotten at all

A software solution doesn’t prevent people from consuming goods without payment, but it does help regarding organisation and consumption overview. Moreover, members have a clear insight about their balance and won’t be surprised at the end of the accounting period.

How it works – Consumer Side

A Tablet/Notebook/PC will be placed next to the fridge/kitchen equipped with an NFC reader. Club members can link as many NFC tags as they desire to their personal account. E.g.: ATM card, Smartphone or any other arbitrary NFC tag. Before a member physically withdrawals a product, they select their desired goods and checkout via NFC.

How it works – Management Side

A second (web-) application is capable of managing different kinds of categories and products, which will be synchronized to the software running on the self-checkout terminal. Since the member’s NFC tags don’t hold any real cash, the self-checkout terminal does only decrease the coupled account’s balance. Therefore, the management is able to increase/decrease someones balance directly through the management application.

Managing Account-Balance

The software stack itself doesn’t prescribe a fixed way of account-balance management. Two possible solutions may be:

  • Similar to a pre-paid system, a member transfers money to the organisation’s accounting book-keeper. After the deposit, the book-keeper will sign in into the management application and increases the member’s account balance.
  • Each member will start with an arbitrary but fixed account balance. E.g.: 100$. After each accounting period the book-keeper will simply subtract the member’s account balance from the original 100$. Hence, the debt is easy calculable. After sending out the debt notification, the account balance will be reset to 100$.

Client Features

  • Add products from different categories to the cart (Incl. stacking)
  • Removing products from the cart
  • Adding NFC tags to the user’s account
  • Requesting account balance

Management Features

  • Lock user from using the client self-checkout
  • Adding/Removing Categories
  • Adding/Removing Products (Name + Price + Unit)
  • De/Activate Categories and Products
  • Modify account balance
  • Delete NFC tags
  • Query transaction logs

System Requirements


  • Arbitrary Tablet/Notebook/PC – App has been optimised for touch input 😉
  • Operating System >= Windows 8
  • .NET Framework 4.7.2
  • ACR122U NFC Reader


  • Windows/Linux
  • .NET Framework 5.0
  • Syncfusion Blazor Software License
  • Active Directory within the same network

System Architecture

  • Client: .NET 4.7.2 WPF Application coupled to ACR122U NFC reader
  • REST Service: .NET 5.0 API, Optional DynDNS SSL cert (Let’s encrypt) refresh
  • Management App: .NET 5.0 Blazor Server-Side with Syncfusion Blazor

Setup + Configuration

Client – settings.json

   // REST API Endpoint
   "ServerName": "",
   "ServerProtocol": "http",
   "ServerPort": 4000

REST API – appsettings.json

   "Logging": {
     "LogLevel": {
       "Default": "Information",
       "Microsoft": "Warning",
       "Microsoft.Hosting.Lifetime": "Information"
   "AllowedHosts": "*",
   "Settings": {
     "Bindings": [
         // disable TLS by removing the whole section
         // if you don't disable TLS, provide LettuceEncrypt settings
         "Protocol": "https",
         "Address": "",
         "Port": 4001
         "Protocol": "http",
         "Address": "",
         "Port": 4000
     "DynDNS": {
       "EnableDynDNS": false,
       "Username": "",
       "Password": "",
       "DNS": ""
     "CipherKey": "somerandomkeyfortheaes256"
   "LettuceEncrypt": {
     "AcceptTermsOfService": true,
     "DomainNames": [ "" ],
     "EmailAddress": ""

Configure the active directory path within the Database.db. Ensure to deploy the Database.db file alongside with the REST API binaries.

Management Application – appsettings.json

   "Settings": {
     // management application endpoint
     "Address": "",
     "Protocol": "http",
     "Port": 80,
     "RestApiEndpoint": "",
     "SyncfusionLicense": ""

Add an administrator account

After the configuration and deployment of all applications, add an NFC tag on the self-checkout terminal. After successful identification, your active directory user will be added to the SQLite Database. Manually open the database and flag your user as ‘IsAdmin’. You can now log into the management web-application with your active directory credentials.


The application stack has been developed free of charge for a none-profit organisation. Feel free to use and modify the sourcecode for your specific scenario. However, the software does contain several images/logos and organisation related terms (e.g.: WAG, West Austria Gaming,…) which must be replaced or removed completely. Moreover, the web-application does require a syncfusion license. (Hint: Syncfusion does offer a free license if certain conditions are met)

You may not

  • Re-Distribute/sell the sourcecode nor the binaries, even after modifications
  • Use pre-shipped images/logos or organisation related terms in your compiled/running version or elsewhere
  • Use the product for commercial or enterprise purposes
0 0 votes
Article Rating
Notify of
Inline Feedbacks
View all comments