Storage Boxx PHP Inventory System (With QR & NFC Scanner)

Storage Boxx is an open-source PHP Inventory Management System. With a built-in webcam QR scanner, NFC scanner, passwordless login, and an optional experimental AI assistant.





First, here are the download links for the impatient folks who don’t want to read through everything.



  • Apache Mod Rewrite
  • PHP MYSQL PDO Extension
  • PHP OpenSSL Extension
  • At least PHP 8.0
  • Take note – Webcam, NFC and Passwordless (Web Authentication) support depends on the user’s device and browser.



GitHub | GitHub – AI Assistant | SourceForge

Storage Boxx is released under the MIT License. You are free to use it for personal and commercial projects, and modify it as you see fit. On the condition that the software is provided “as-is”. There are no warranties provided and “no strings attached”. Code Boxx and the authors are not liable for any claims, damages, or liabilities.



  • Download from GitHub/Sourceforge into your HTTP folder.
  • Access in the browser and walk through the installer.



But someone has to pay the bills, and sponsors are paying for it. I insist on not turning Code Boxx into a "paid scripts" business, and I don't "block people with Adblock". Every little bit of support helps.

Buy Me A Coffee Code Boxx eBooks




So far so good? Let us now go through a quick crash course on how to use Storage Boxx.





  • Webcam – If you are using a desktop without a webcam, a simple one only costs about $20~30.
  • USB QR Code scanner – Alternatively, a “dedicated barcode scanner” will cost about $30~40 bucks.
  • NFC tags – 10 pieces of Ntag213 only cost 2-3 bucks. Buy them in bulk, and one piece will only cost a few cents.
  • Fingerprint sensors – These are kind of expensive… But I got lucky with a $25 “Made in China” that works just fine.
  • Label printer – Print your QR codes. There are Bluetooth ones that can pair with smartphones.




This section is for the developers, with a couple of development notes for customization.



“AJAX error”? Migrating to another domain? NFC “not working”? Check out the FAQ section.






So, you may have noticed that the AI Assistant is “missing” or “not working” out of the box. It’s a long story.




  • Python – Yes, Python. Not PHP. Version 3.9 to 3.10 seems to work fine at the time of writing.
  • Microsoft C++ Build Tools
  • CMake
  • Nvidia CUDA Toolkit – If you have an Nvidia graphics card.
  • An Nvidia graphics card with at least 8GB VRAM is highly recommended. You can TRY to run on CPU, but it is painfully slow and practically useless.




  • Copy/unzip this module into your existing Storage Boxx folder.
  • I have tried multiple AI models, codellama-7b-instruct.Q5_K_M.gguf is the only one that produced decent(ish) results – Download that into chatbot/models or choose a better/larger/smarter model on your own.
  • Edit chatbot/, change the model_name to your own.
  • BE WARNED, GIGABYTES WORTH OF DOWNLOAD! – 0-setup.bat (Windows) (Linux).



  • Run 1-bot.bat (Windows) (Linux/Mac), this will deploy the bot at
  • Just access (must be signed in).

59 thoughts on “Storage Boxx PHP Inventory System (With QR & NFC Scanner)”

  1. According to Installation guide on github, it’s not working

    {“status”:0,”message”:”Unable to create the key”,”data”:{“code”:0,”file”:”C:\\xampp\\htdocs\\stock\\lib\\webpush\\web-token\\jwt-core\\Util\\ECKey.php”,”line”:98,”trace”:”#0 C:\\xampp\\htdocs\\stock\\lib\\webpush\\web-token\\jwt-core\\Util\\ECKey.php(72): Jose\\Component\\Core\\Util\\ECKey::createECKeyUsingOpenSSL(‘P-256’)\n#1 C:\\xampp\\htdocs\\stock\\lib\\webpush\\web-token\\jwt-key-mgmt\\JWKFactory.php(69): Jose\\Component\\Core\\Util\\ECKey::createECKey(‘P-256’, Array)\n#2 C:\\xampp\\htdocs\\stock\\lib\\webpush\\minishlink\\web-push\\src\\VAPID.php(165): Jose\\Component\\KeyManagement\\JWKFactory::createECKey(‘P-256’)\n#3 C:\\xampp\\htdocs\\stock\\lib\\CORE-Install-HTML.php(14): Minishlink\\WebPush\\VAPID::createVapidKeys()\n#4 C:\\xampp\\htdocs\\stock\\lib\\LIB-Install.php(90): require(‘C:\\\\xampp\\\\htdocs…’)\n#5 C:\\xampp\\htdocs\\stock\\lib\\CORE-Install.php(13): Install->D()\n#6 C:\\xampp\\htdocs\\stock\\index.php(2): require(‘C:\\\\xampp\\\\htdocs…’)\n#7 {main}”},”more”:null,”page”:null}

    And While creating the init.php file it shows following error

    {“status”:0,”message”:”Call to a member function init() on null”,”data”:{“code”:0,”file”:”C:\\xampp\\htdocs\\stock\\init.php”,”line”:4,”trace”:”#0 {main}”},”more”:null,”page”:null}

    1. 1) Quick fix for Call to a member function init() on null – Just add $_CORE->load("Route");.
      2) As for “unable to create key”, it is originating from the web push library –
      3) You can try to update it. Delete lib/webpushcomposer require minishlink/web-push – Rename vendor to lib/webpush.
      4) Otherwise, I cannot replicate the error on my server. It is most likely an OpenSSL issue on your end.
      5) See “Unable to generate VAPID keys”.

    2. It’s working now.. without changing or editing anything.. I just download the latest Version and added OPENSSL path and it worked.
      THANKS !!!

  2. Receiving this error:
    {“status”:0,”message”:”Unable to create the key”,”data”:{“code”:0,”file”

    DB is created succesfully, Apache Mod Rewrite, PHP MYSQL PDO Extension, PHP OpenSSL Extension and PHP 8.0 are ok.
    Can you give me a hand pleasee

    1. Sorry, can’t help much with a quarter error message. As far as I can remember, it can be any one of these keys:

      1) lib/CORE-Config.php – Push Notification. See “UNABLE TO GENERATE PUSH NOTIFICATION VAPID KEYS”
      2) lib/CORE-Config.php – JWT_SECRET. Unlikely, you can put in any random string as the JWT secret key.
      3) lib/JWT – Compatibility issues with PHP-JWT library – Can’t help much. You can try to run the example snippet on their Github page and see if the library throw errors.
      4) lib/webpush –
      5) Database tables – Manually create another dummy database and import SQL-Storage-Boxx-0.sql. See if MYSQL throw errors.

Leave a Comment

Your email address will not be published. Required fields are marked *