Case 01 — Inventory and point-of-sale system
Voorraadbeheer
An inventory and point-of-sale system for a small shop or storeroom. Scan with your phone or a handheld scanner and watch it appear live on the dashboard.

AThe challenge
Small businesses often track stock in a spreadsheet or on paper. That always lags behind: what just sold, what came in and what is running low only shows up once someone types it over. The goal was one system for receiving, selling and keeping track, working with what is already at hand: a phone or an inexpensive barcode scanner.
BThe approach
A Flask app on an SQLite database, with a JSON API for the interactive pages. Every stock change is stored with its reason, every price change goes into a history. Mobile first: on a phone the navigation sits at the bottom within thumb reach, on a large screen in a sidebar.
CWhat it does
-
01
Live dashboard
Key figures, stock value, today's revenue and everything that was just scanned, without refreshing.
-
02
Scanning
With your phone's camera or a USB or Bluetooth scanner. An unknown barcode can be linked to a product on the spot.
-
03
Checkout
Scan or search products, pay by card or cash, change included, and get a receipt. Stock goes down automatically.
-
04
Price history
Every price change is kept and charted, with selling price, purchase price and margin.
-
05
Labels
Products without a barcode get their own EAN-13 code. Print labels on an A4 sticker sheet or with a label printer.
-
06
Stock log
Every change in stock is logged with its reason: a sale, a delivery or a stock count.
DScreens




EUnder the hood
- 01HTTPS on your own network
- Browsers only allow camera access over a secure connection. On first start the app creates its own certificate, so scanning with your phone works on your own Wi-Fi.
- 02Its own barcodes
- Internal EAN-13 codes start with a 2, the range reserved for internal use, and get a correctly calculated check digit. They are drawn as SVG, sharp at any size.
- 03Live without websockets
- Every two seconds the dashboard only asks for scans newer than the last one it knows, and pauses while the tab is hidden.
- 04Stock that adds up
- Checkout and stock updates happen in a single database transaction. If one line fails, nothing is written.
- 05Charts without a library
- The revenue and price charts are drawn with plain JavaScript, no external chart library.
FBy the numbers
- lines of code
- 4,356
- database tables
- 7
- ways to scan
- 3
- chart libraries
- 0