{"id":22419472,"url":"https://github.com/dunkelstern/inventory","last_synced_at":"2025-10-15T22:30:31.790Z","repository":{"id":142590515,"uuid":"284839278","full_name":"dunkelstern/inventory","owner":"dunkelstern","description":"Visual inventory management system for small parts","archived":false,"fork":false,"pushed_at":"2025-01-19T17:42:26.000Z","size":4263,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-19T18:37:21.395Z","etag":null,"topics":["django","electronic-components","inventory","python","small-parts"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dunkelstern.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-04T00:43:13.000Z","updated_at":"2025-01-11T03:34:07.000Z","dependencies_parsed_at":"2023-12-26T00:29:29.968Z","dependency_job_id":"70ab98c2-f8ae-4dfe-b06c-771973a0b9a2","html_url":"https://github.com/dunkelstern/inventory","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunkelstern%2Finventory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunkelstern%2Finventory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunkelstern%2Finventory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunkelstern%2Finventory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dunkelstern","download_url":"https://codeload.github.com/dunkelstern/inventory/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236646138,"owners_count":19182602,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","electronic-components","inventory","python","small-parts"],"created_at":"2024-12-05T16:15:51.796Z","updated_at":"2025-10-15T22:30:26.342Z","avatar_url":"https://github.com/dunkelstern.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Small parts inventory management\n\nThis project is a small parts inventory management system. It is thought out to\nbe a flexible parts database which keeps all relevant information as well as\ndatasheets, prices and a visual representation where you stored the part.\n\nThe idea is that the system may tell you in which compartment of which box in\nwhat area of your workshop you have to search for to find the part you\ncurrently need. It has been optimized to store information for electronics\nparts and small other hardware like screws, nuts and bolts.\n\n### Prerequisites for manual install or docker Standalone\n\nAs configured by default you will need the following:\n\n- A postgres database named `inventory` with a postgres user `inventory` that\n  may connect without password or by default with the password `inventory`\n\n### Installation (manual)\n\nYou will need:\n- Python \u003e 3.10\n- Poetry to install requirements and create a virtualenv\n\nThis is a standard Django 5.1 application, if you know how to deploy those the\nfollowing might sound familiar:\n\n1. Checkout repository:\n   - Github `git clone https://github.com/dunkelstern/inventory.git`\n   - ForgeJo: `git clone https://git.dunkelstern.de/dunkelstern/inventory.git`\n2. Change to checkout: `cd inventory`\n3. Install virtualenv and dependencies:\n   ```\n   poetry install --no-root\n   ```\n4. If you want to use the system in another language than the default english set it\n   up in the `inventory_project/settings.py`:\n   ```python\n   LANGUAGE_CODE = 'en-us' # or something like 'de-de'\n   ```\n   see the settings file for defined languages.\n5. If you changed the language rebuild the translation files:\n   ```\n   poetry run python manage.py compilemessages\n   ```\n6. Migrate the Database:\n   ```\n   poetry run python manage.py migrate\n   ```\n7. Optionally create an admin user. If not done manually the application will prompt you on first run.\n   ```\n   poetry run python manage.py createsuperuser\n   ```\n8. Run the server\n  - Development server (not for deployment!): `poetry run python manage.py runserver`\n  - Deployment via `gunicorn` on port 8000: `poetry run gunicorn inventory_project.wsgi -b 0.0.0.0:8000`\n\nThen login on `http://localhost:8000/admin/` for the Django admin interface or\ngo to `http://localhost:8000` to enter the inventory management system directly\n\n### Installation (Standalone Docker)\n\n#### Building yourself\n\n1. Checkout repository:\n   - Github `git clone https://github.com/dunkelstern/inventory.git`\n   - ForgeJo: `git clone https://git.dunkelstern.de/dunkelstern/inventory.git`\n2. Change to checkout: `cd inventory`\n3. Build Docker image: `docker build -t 'dunkelstern/inventory:latest' .`\n\nnext steps below\n\n#### Pulling from docker hub\n\n1. Pull Docker image: `docker pull 'dunkelstern/inventory:latest'`\n\nnext steps below\n\n#### Next steps\n\n1. Install a PostgreSQL DB somewhere and create a user and DB.\n2. Setup environment (put everything in a `.env` file):\n   ```\n   INVENTORY_DB_HOST=\n   INVENTORY_DB_NAME=\n   INVENTORY_DB_USER=\n   INVENTORY_DB_PASSWORD=\n\n   INVENTORY_SECRET_KEY=\n   INVENTORY_EXTERNAL_URL=http://localhost:8000\n   INVENTORY_DEBUG=FALSE\n\n   INVENTORY_LANGUAGE=en-us\n   INVENTORY_TIMEZONE=UTC\n\n   INVENTORY_PAGE_SIZE=25\n   ```\n3. Create a media directory for uploaded files: `mkdir -p media`\n4. Run the container:\n   ```\n   docker run \\\n     --name inventory \\\n     -d \\\n     --restart=always \\\n     --env-file=.env \\\n     -p 8000:8000 \\\n     --volume ./media:/media \\\n     dunkelstern/inventory:latest \n   ```\n5. The onboarding process will start on first call of the application and prompt to create an admin user.\n\n### Installation (Docker compose)\n\n1. Checkout repository:\n   - Github `git clone https://github.com/dunkelstern/inventory.git`\n   - ForgeJo: `git clone https://git.dunkelstern.de/dunkelstern/inventory.git`\n2. Change to checkout: `cd inventory`\n3. Copy `default.env` to `override.env` and check settings. Use a long random string for `INVENTORY_SECRET_KEY`!\n4. Build the stack: `docker-compose up --build -d`\n5. You can reach the application on port 8000\n6. The onboarding process will start on first call of the application and prompt to create an admin user.\n\nThe compose stack will create two volumes:\n\n- `inventory_dbdata` which contains the PostgreSQL database directory\n- `inventory_mediafiles` which will contain any uploaded file\n\n### Additional information\n\n1. The initial DB migration pre-populates the database with some useful defaults\n  and some pre-defined distributors and form-factors usable for electronics\n  inventories as well as a \"Default Workshop\" to be able to navigate everything.\n2. For editing parts the Django admin interface is used, so edit-links will only\n  appear if the currently logged in user is a `staff` user (set the checkbox\n  in the admin area).\n3. If you want to change the default number of items on paginated views you can\n  set the page size in the settings by providing a parameter `PAGE_SIZE`\n4. If you want to run this as a systemd service see the\n  [the service file](inventory.service) in the root of this repository for an\n  example.\n\n### Changelog\n\n#### 1.1\n\n- Part count can be configured to be available in settings\n- Currency can be configured in settings\n- Complete system is translateable (English and German are provided)\n- Onboarding process so you do not have to create a superuser on the command line\n- Docker and Docker-Compose files\n\n![Settings](docs/settings.jpeg)\n\n### Screenshots\n\n#### Login\n\nTo be able to list all parts you'll need to login. You basically have three\nlevels of permissions:\n\n- Normal Users\n- Staff Users\n- Admin Users\n\nNormal users can view all parts and search, Staff users may edit in addition.\nAdmin users can create Users and do everything (like adding new layouts, etc.).\n\n![Login page](docs/login.jpeg)\n\n#### Overview Page\n\nhere we have a layer of containers, you may nest multiple containers into each\nother, for example to define a cupboard which contains multiple boxes of parts,\nor multiple rooms in your workshop that contain cupboards, etc.\n\n![Overview](docs/main_area.jpeg)\n\n#### Box View\n\nThis is a container that contains parts. You may define your layouts (number of\ncompartments, number of items per compartment and layout of compartments\nthemselves) all by yourself in the admin backend, by default the database comes\nwith an assortment of Ikea and Raaco sorter boxes.\n\n![Box view 1](docs/smd_box.jpeg)\n\n![Box view 2](docs/smd_box_marker.jpeg)\n\nThe Overview and Box views are designed to be used on a touch-screen and the HTML,\nCSS and Javascript are designed to work on older Hardware (Apple iOS 9 has been\ntested at lowest, so this works from iPad 2 up to the newest pro).\n\n#### Part detail view\n\nThis is the detail view of a part, this is useful to find all parts by manufacturer\nor distributor, or when a part has multiple datasheets.\n\n![Detail view](docs/part.jpeg)\n\n#### Part edit view\n\nEditing is done on the standard Django admin interface, so all users that have no\n*staff* privileges only can view all parts, all with *staff* privileges have access\nto the django admin backend and can edit parts too.\n\n![Edit view](docs/edit_part.jpeg)\n\n#### Search function\n\nIf you click on the loupe symbol on top you'll get a popup searchbox for a fulltext\nsearch through all parts.\n\n![Search view](docs/search.jpeg)\n\nThe search results contain a link to the container the object is stored in and if\nyou click that link the compartment will be hilighted so you can find the part faster:\n\n![Search view hilight](docs/search_hilight.jpeg)\n\nYou can also reach the first datasheet directly from the search results by clicking\non the icon in front of the description text.\n\n#### Tag cloud\n\nIf you select the tag icon in the header bar you will get a dynamically searchable\ntag cloud if you do not know a search term exactly or if you need a group of parts\n(e.g. give me all transistors of any type).\n\n![Tag cloud](docs/tags.jpeg)\n\nThe detail view of a tag will list all items with that tag, as well as all containers\nor footprints that have been assigned this tag:\n\n![Tag detail](docs/tag_detail.jpeg)\n\nEditing is in Django backend:\n\n![Tag editing](docs/edit_tag.jpeg)\n\n#### Other options\n\nYou can browse your parts inventory by distributor or part manufacturer if you want:\n\n![Manufacturer list](docs/manufacturer.jpeg)\n\n![Manufacturer detail](docs/manufacturer_detail.jpeg)\n\n![Manufacturer edit](docs/edit_manufacturer.jpeg)\n\nThe distributor views have a convenient search box if a parametrized search link has\nbeen set up in the backend.\n\nThis link will be used to link to a part directly if a part has a distributor part\nnumber saved.\n\n![Distributor list](docs/distributor.jpeg)\n\n![Distributor detail](docs/distributor_detail.jpeg)\n\n![Distributor edit](docs/edit_distributor.jpeg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdunkelstern%2Finventory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdunkelstern%2Finventory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdunkelstern%2Finventory/lists"}