Version: 1.0.0
Release Notes (v1.0.0) — includes screenshots of key features
An easy-to-use Wholesale Management System (WMS) for Windows desktops (FREE / open-source edition). Manage products, customers, invoices, receipts, users, backups, and view an activity log for auditing. Offline, self‑contained.
- Product: Tradia
- Developer: Ebenezer Fuachie
- Year: 2025
- Email: fuachiee717@gmail.com
- Phone: +233 548253251
| Feature | Status |
|---|---|
| Products & Customers | ✅ |
| Invoices & Receipts | ✅ |
| User Roles & Secure Login | ✅ |
| Forced First-Time Admin Password Reset | ✅ |
| Activity Log / Auditing | ✅ |
| Manual + Automatic Backups | ✅ |
| Backup Retention & Custom Location | ✅ |
| PDF / Export (fpdf, reportlab, openpyxl) | ✅ |
| Offline (No Internet Needed) | ✅ |
| License / Activation | ❌ (Removed in free edition) |
This repository now represents the free, fully unlocked edition. Prior trial / activation mechanics were removed for simplicity and openness.
- Windows 10 / 11 (64‑bit recommended)
- RAM: 4 GB minimum
- Disk: < 200 MB (plus data growth)
- No external database or internet required
- Obtain the installer or portable ZIP release.
- If installer: Run it and follow prompts.
- If ZIP: Extract to a writable folder (e.g.
C:\tradia). - Launch
tradia.exe. - First launch shows a temporary Admin password (one‑time) — sign in and you will be forced to set a new secure password.
- Begin adding Products, then Customers, then create Invoices.
- Portable: Delete the folder to remove (retain your data in
Documents/tradia/data/wholesale.dbunless you overrode the location). - Installed: Use Windows “Add or Remove Programs”.
- Current edition: Free & open-source (Apache 2.0). No activation, trial, or product pins.
- All data is local; you may redistribute compiled binaries consistent with the license.
- Legacy documentation references to 14‑day trial / activation pins are deprecated and removed from code.
| Mode | How |
|---|---|
| Manual | Settings → Backup Now |
| Automatic | On app exit if > 24h since last backup |
- Default location (if none set):
Documents/tradia/backups - Filenames:
backup_YYYYmmdd_HHMMSS.db - Retention: Only the most recent N backups (configurable) are kept. Lowering the retention value prunes older backups next time a new backup is created.
- Restore: Close app → (Optional: copy current DB) → Replace it with selected backup → Reopen.
- Keep periodic off‑machine backups (USB / cloud sync) for disaster recovery.
Backups are plain SQLite database copies (not encrypted). Secure the directory if data is sensitive.
- Launch app → Change temporary Admin password.
- Add initial Products (stock quantity validated).
- Add Customers.
- Create an Invoice (line items, discount, tax optional).
- View / reprint Receipts or export data.
- Configure backup directory + retention in Settings.
- Review Activity Log (Admin) for auditing if needed.
- Passwords stored hashed using PBKDF2-HMAC-SHA256.
- Hash format:
iterations$salt$hash(current iterations: 100000). Older hashes are auto‑migrated to the new format on successful login.
- Hash format:
- Password policy: minimum 6 characters, must include at least one letter and one digit.
- During tests/demos you can temporarily relax policy by setting
TRADIA_RELAXED_PASSWORD_POLICY=1before launching.
- During tests/demos you can temporarily relax policy by setting
- Login hardening: repeated failures are throttled and temporarily locked.
- After 5 failed attempts for a username, further attempts are soft‑locked for ~30 seconds. The UI shows a "Temporarily Locked" message with the remaining wait time.
- All failed attempts are recorded in the Activity Log with action
LOGIN_FAIL(includes running counter). Successful legacy hash upgrades log asPASS_HASH_UPGRADE.
- Forced first login password change for the seeded Admin account.
- Backups & DB are unencrypted; apply OS / physical security as appropriate.
- Make a Manual Backup first.
- Replace old executable/folder or run new installer.
- Existing database auto-migrates if schema changes occur (see Migrations).
- Default main data file:
Documents/tradia/data/wholesale.db(auto-created).
Override with envWMS_DB_NAME(full path) or setTRADIA_DATA_DIRto move the folder. - Backups: user-configured directory.
- Backup data if needed.
- Remove installation folder or uninstall via Control Panel.
- Optionally archive/delete backup directory.
| Issue | Resolution |
|---|---|
| App does not start | Re-download, ensure antivirus did not quarantine, run as standard user. |
| Cannot save backup | Pick a writable directory in Settings (avoid Program Files). |
| Login role mismatch | Select the correct role (Admin/Manager/etc.) before authenticating. |
| Missing recent data | Restore from latest backup (close app first). |
| "Temporarily Locked" on login | Wait up to 30 seconds and try again, or contact an Admin to reset your password. |
Support: Email or call the contacts in Author section.
- All data local. No telemetry or external network calls.
(Skip if you only use the packaged executable.)
python -m venv .venv
.venv\Scripts\activate
pip install -e .[dev]
python -m main
Or (after install):
tradia
pytest -q
coverage run -m pytest && coverage report
ruff check .
ruff format .
mypy .
- Squashed baseline migration (schema version 1) creates all current tables including: products, customers, invoices, invoice_items, users, settings, activity_log, schema_version.
- License / activation tables were intentionally removed in this free edition.
- Add future forward-only migrations by: (1) creating a new
_migration_N, (2) bumpingCURRENT_SCHEMA_VERSION, (3) implementing idempotent changes.
Recommended: use the provided spec for reproducible builds.
pyinstaller tradia.spec
This bundles the assets folder and handles common hidden imports.
- WMS_DB_NAME – override DB path (testing / multi-instance)
- TRADIA_DATA_DIR – change the default data directory (where wholesale.db lives)
- SKIP_GUI_TESTS=1 – skip GUI test execution in CI/headless environments
- TRADIA_RELAXED_PASSWORD_POLICY=1 – relax password policy and throttling in test/demo environments
- 1.0.0: Initial public free release (baseline schema v1, activity log added, removed legacy trial/licensing code, consolidated settings, backup retention, forced admin password change). Updated default DB path to user Documents and added PyInstaller spec.
- Permission matrix refinements (granular per-action control)
- Optional encrypted backups
- Rich analytics / dashboards
- Internationalization & accessibility
- Optional modular plugin or (future) hosted API backend for multi-user concurrent access
The previous multi-phase web/SaaS migration plan is deferred; focus is on stabilizing core desktop features first.
Apache License 2.0 (see LICENSE file).
Provided “as‑is” without warranty. Assess legal/regulatory suitability before production use.
- PyQt6, SQLite, pandas, reportlab, fpdf, matplotlib contributors.
© 2025 Ebenezer Fuachie