Skip to content
All projects

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.

Role
Design and development
Year
2026
Type
Inventory and point-of-sale system
Stack
Python · Flask · SQLite · JavaScript · HTML · CSS
Screenshot of Voorraadbeheer Screenshot of Voorraadbeheer

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

  1. 01

    Live dashboard

    Key figures, stock value, today's revenue and everything that was just scanned, without refreshing.

  2. 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.

  3. 03

    Checkout

    Scan or search products, pay by card or cash, change included, and get a receipt. Stock goes down automatically.

  4. 04

    Price history

    Every price change is kept and charted, with selling price, purchase price and margin.

  5. 05

    Labels

    Products without a barcode get their own EAN-13 code. Print labels on an A4 sticker sheet or with a label printer.

  6. 06

    Stock log

    Every change in stock is logged with its reason: a sale, a delivery or a stock count.

DScreens

Product page with price history, margin and its own barcode. Product page with price history, margin and its own barcode.
01Product page with price history, margin and its own barcode.
On the phone: dashboard and scanner, with navigation within thumb reach. On the phone: dashboard and scanner, with navigation within thumb reach.
On the phone: dashboard and scanner, with navigation within thumb reach. On the phone: dashboard and scanner, with navigation within thumb reach.
02On the phone: dashboard and scanner, with navigation within thumb reach.
Choosing and printing labels on a sticker sheet or a label printer. Choosing and printing labels on a sticker sheet or a label printer.
03Choosing and printing labels on a sticker sheet or a label printer.

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

Need something similar?

Tell me briefly what you need. You'll get your own portal right away, where we chat, share files and you can follow your project's progress.

Start a project
  • Usually a reply within two working days
  • No strings attached: a request costs nothing
  • Chat, files and status in one place