A comprehensive REST API for inventory management built with Django and Wagtail CMS. Manage products, stock levels, warehouses, purchases, sales, and reporting through a powerful headless API.
This is the backend API only. For the frontend UI, see the-inventory-ui.
- π¦ Inventory Management β Products, categories, stock locations, and movements
- π Procurement β Suppliers, purchase orders, goods received notes
- π³ Sales β Customers, sales orders, dispatch tracking
- π Reporting β Stock valuation, movement history, analytics
- π Multi-Tenancy β Support multiple organizations on one deployment
- π Security β JWT authentication, RBAC, audit logging
- π REST API β Comprehensive API with OpenAPI documentation
- π Internationalization β Support for multiple languages
| Layer | Technology |
|---|---|
| Language | Python 3.12+ |
| Web Framework | Django 6.0 |
| API | Django REST Framework |
| Admin UI | Wagtail 7.3 |
| Database | SQLite (dev) / PostgreSQL (production) |
| Search | Wagtail search backend |
| Containerization | Docker |
For detailed setup instructions, see the Getting Started Guide.
- Python 3.12 or later
- Git
# Clone repository
git clone https://github.com/Ndevu12/the_inventory.git
cd the_inventory
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Navigate to backend
cd src
# Run migrations
python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Start development server
python manage.py runserver- API Root: http://localhost:8000/api/v1/
- API Documentation: http://localhost:8000/api/schema/swagger/
- Wagtail Admin: http://localhost:8000/admin/
| Guide | Purpose |
|---|---|
| Getting Started | Installation and first steps |
| Features | What this API provides |
| API Reference | REST API endpoints and examples |
| Deployment | Production deployment (Docker, Render, K8s) |
| Integration | How to integrate with frontend |
| Development | For contributors |
| Operations | For platform operators |
| Security | Security best practices |
| Troubleshooting | Common issues and solutions |
| FAQ | Frequently asked questions |
| Architecture | Technical design |
| Environment Variables | Configuration reference |
| Roadmap | Development roadmap |
src/
βββ manage.py # Django entry point
βββ the_inventory/ # Project configuration
β βββ settings/ # base, dev, production
β βββ urls.py # URL routing
β βββ wsgi.py # WSGI application
βββ api/ # REST API
βββ inventory/ # Core inventory app
βββ procurement/ # Procurement app
βββ sales/ # Sales app
βββ reports/ # Reporting app
βββ tenants/ # Multi-tenancy
βββ locale/ # Translations
seeders/ # Database seeding
tests/ # Test suite
docs/ # Documentation
See Architecture for the full technical design.
Build and run with Docker:
# Build image
docker build -t the_inventory .
# Run container
docker run -p 8000:8000 \
-e SECRET_KEY="your-secret-key" \
-e DATABASE_URL="postgresql://user:pass@db:5432/inventory" \
the_inventoryFor complete deployment instructions, see Deployment Guide.
cd src
# Run all tests (seeders excluded)
python manage.py test
# Run specific test module
python manage.py test tests.api
# Run with coverage
coverage run --source='.' manage.py test
coverage reportSee Development Guide for more testing details.
Contributions are welcome! Please read our Contributing Guide before submitting a pull request.
This project follows the Contributor Covenant Code of Conduct.
The official frontend is a separate repository:
the-inventory-ui β Next.js UI for The Inventory
You can also build your own frontend using any framework (React, Vue, Angular, etc.) by consuming this REST API.
This project is licensed under the BSD 3-Clause License β see the LICENSE file for details.
Copyright (c) 2026, Jean Paul Elisa NIYOKWIZERWA.
- π Documentation: See docs/
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
- π§ Email: support@example.com
See Roadmap for planned features and development phases.
See Changelog for release notes and version history.