Ironclad POS is an in-house Point of Sale (POS) management platform built with Django, developed exclusively for the clients of Foolad Nourd Atieh Company.
This platform enables organizations to efficiently handle their sales operations and inventory management in an integrated manner.
🔗 The system is deployed on a local server or device, and other devices within the internal network (LAN) can access it.
This repository does not contain the final production version of the system.
The final versions are proprietary to Foolad Nourd Atieh Company and are not publicly available.
This repository only contains a limited version that has been authorized for publication on GitHub.
Foolad Nourd Atieh began its operations in 1993 (1372 in the Persian calendar) with the establishment of Active Sanat Cooperative Company in Damghan, initially focusing on the production of agricultural tools.
The company’s reliance on raw materials—primarily steel and iron products—led to extensive connections with professionals in the steel industry. These collaborations opened new opportunities and paved the way for the company’s expansion into broader industrial fields.
Over the years, Foolad Nourd Atieh has grown into a recognized player in the Iranian steel industry, building on decades of experience, knowledge, and trusted partnerships.
This platform was developed as an internal project at Foolad Nourd Atieh Company.
My specific responsibility in this project was Back-End Development.
- Project Introduction
- About Foolad Nourd Atieh Company
- Table of Contents
- Prerequisites
- Quick Start
- Configuration
- Initial Setup
- Usage
- Docker
- Screenshots
- Features
- License
- Language Switch
Before running the project, make sure the following tools are installed on your system:
-
Python 3.9+
Required to run the Django application and manage dependencies. -
Docker (optional)
Recommended for quick setup and containerized deployment. -
Database
- Default: SQLite
- Supported: PostgreSQL and MySQL (can be configured via
.envfile)
git clone https://github.com/PeakPy/IroncladPOS.git
cd IroncladPOS
pip install -r requirements.txt- Download the project as a ZIP file and extract it:
cd IroncladPOS
pip install -r requirements.txt- cart/ → Shopping cart and transaction handling
- inventory/ → Inventory and product management
- transaction/ → Sales transactions and receipts
- onlineretailpos/ → Core settings, static files, and templates
- images4display/ → Images for the customer display slideshow
- screenshots/ → Project and company logos, plus demo screenshots
- manage.py → Django command-line utility
- dockerfile → Docker image definition
- docker-compose.yml → Local Docker setup with services
- requirements.txt → Python dependencies
- .env.sample → Sample environment configuration
- LICENSE → Project license
- Create a
.envfile in the project root. - Use the
.env.samplefile as a reference. - Below are the main environment variables:
# Select environment: devlopement | production
SETTINGS = "ironcladpos.settings.devlopement"
# Django secret keys
SECRET_KEY_DEV = "django_dev_secret_key"
SECRET_KEY_PROD = "django_prod_secret_key"# Store information for receipts
RECEIPT_CHAR_COUNT = 32
STORE_NAME = "STORE NAME"
STORE_ADDRESS = "STORE ADDRESS"
STORE_PHONE = ""
Include_Phone_In_Heading = "False"
# Additional receipt content
RECEIPT_ADDITIONAL_HEADING = ""
RECEIPT_FOOTER = "Thank You"PRINTER_VENDOR_ID = "Vendor_ID"
PRINTER_PRODUCT_ID = "Product_ID"
PRINT_RECEIPT = False
CASH_DRAWER = False# Database engine: sqlite | postgres | mysql
NAME_OF_DATABASE = "sqlite"
DB_NAME = "IroncladPOS"
DB_USERNAME = "DB_USER_NAME"
DB_PASSWORD = "DB_USER_PASS"
DB_HOST = "YOUR_DB_HOST"
DB_PORT = "YOUR_DB_HOST_PORT"# Only needed if your database provider requires SSH tunneling
SSH_HOST = ""
SSH_USERNAME = ""
SSH_PASSWORD = ""
SSH_DB_HOST = ""- By default, the system runs with SQLite.
- To use PostgreSQL or MySQL, update the
.envfile accordingly. - In Docker setups, the
.envfile can be mounted or environment variables can be passed directly. - If using a cloud database, SSH tunneling may be required depending on your provider.
After installing dependencies and configuring the .env file, follow these steps:
cd IroncladPOSpython manage.py makemigrations
python manage.py migrateTo access the Django Admin panel, create a superuser account:
python manage.py createsuperuser- Superuser → Full access to the system (can manage everything).
- Staff User → Users with access to the admin panel (e.g., add products, manage departments).
- Normal User → Regular POS operators (can process sales but cannot modify inventory data).
✅ After completing these steps, the system is ready to run.
Start the Django server with:
python manage.py runserver 0.0.0.0:8000- Stop the server with
Ctrl + Cin the terminal.
-
On the same machine:
http://127.0.0.1:8000 -
On other devices in the same LAN:
http://<SERVER_IP>:8000
⚠️ Note: LAN access may require firewall or network adjustments.
- Works only on the device where the POS printer is connected.
- Make sure
PRINTER_VENDOR_IDandPRINTER_PRODUCT_IDare correctly set in the.envfile. - If the printer supports ESCPOS, receipts will be printed automatically.
- Requires a dual-monitor setup on the device running the system.
- The folder
images4display/contains images used for the customer-facing slideshow. - Any images placed in this folder will be automatically included in the display rotation.
A prebuilt image of the project is available on GitHub Container Registry.
docker pull ghcr.io/PeakPy/ironcladpos:latestdocker run ghcr.io/PeakPy/ironcladpos:latest- By default, it runs with SQLite.
- For better customization, pass a
.envfile to the container:
docker run --env-file=/path/to/.env ghcr.io/PeakPy/ironcladpos:latestOr pass environment variables directly:
docker run -e "SECRET_KEY=your_key" -e "DB_NAME=your_db" ghcr.io/PeakPy/ironcladpos:latestIf you want to run the system together with a database (e.g., PostgreSQL), use the provided docker-compose.yml file.
docker compose builddocker compose up
⚠️ Before running, update the values ofDBUSER,DBPASS, andSECRET_KEY_DEVin thedocker-compose.ymlfile.
- If you face errors during
docker compose up, stop withCtrl + Cand run it again. - You can customize the code and rebuild the Docker image by re-running:
docker compose build![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
-
Inventory & Product Management
Add, edit, and remove products with detailed information. -
Sales Transaction Processing
Record customer purchases and handle payment operations. -
Receipt Printing (ESCPOS)
If a POS printer is connected to the server or local device, receipts can be automatically printed.
Requires proper configuration ofPRINTER_VENDOR_IDandPRINTER_PRODUCT_IDin the.envfile. -
Multi-device LAN Access
Multiple devices on the same network can access the system using the server’s IP address. -
Customer Display
A dual-monitor setup allows a slideshow of promotional or informational images from theimages4display/folder. -
Touchscreen Ready
Optimized for usage on tablets and touchscreen PCs. -
Flexible Deployment Options
- Run locally with Python/Django
- Run with a prebuilt Docker Image
- Run with Docker Compose alongside a database
This project is licensed under the MIT License.
For more details, please refer to the LICENSE file.
This README is written in English.
To view the Persian version, click the button below:











