Home Freezer Inventory Management System to be used by my wife and I. This is the desktop client component (described below).
My wife and I have two freezers - one is the typical small freezer integrated into our refrigerator, and the second is a large chest freezer we keep in our basement. We have difficulty managing everything we keep in these freezers: what do we have, which freezer is it in, how long has it been there, how much do we have, when does it expire, etc. It wouldn't be a problem in need of an involved solution if we only kept a small number of items, but this is not the case. We keep a significant amount of food such that both freezers are ready to burst! For this reason, and to have some fun, I decided to develop a system we could use to better manage our inventory.
My intent is to develop a system comprised of four major components:
- Desktop Client: This will run on a small, low power computer mounted to some wall studs next to the freezer in the basement. It will be designed to require only a keyboard and a monitor. It will host the full set of features I plan to develop.
- Mobile Client: This will be application designed to run on our phones and comes at request of my wife. In order to prevent needing to make a trip to the basement to simply check what is in the freezer, the ideal solution would be the ability to access this system from her phone. This will be optimized for small touchscreens and will thus be graphically different from the desktop client - stylistic continuity is not of importance. The mobile client will, at first, feature a more limited set of features however it can eventually support everything the desktop client does. This will be developed for Android, because that is what my wife and I use, however if any friends or family would like access to this and have the misfortune of using an iPhone I will consider porting it to iOS.
- Server Application: This is pretty straightforward - it is the backend system for the whole thing. It will handle communications between the clients and the database. This will run on a small low power computer in my house acting as a server.
- Database: This is also straightforward - all the data will be stored in a MySQL database hosted on the same server as the backend application.
- Java
- This is the language we primarily use at work, therefore it is quite fresh in my mind at all times
- It is easy to get working on virtually any platform
- The Android client will use Java as well, which will hopefully allow for some direct code sharing
- Eclipse
- This is the IDE I have the most experience with, and since Java is a pain without an IDE it was a nobrainer
- Lanterna
- As I mentioned above this is intended to be used with only a keyboard so it seemed only natural to use a text based interface
- I have plenty of experience with ncurses and C so I was very excited to try my hand at doing something similar in Java
- After plenty of research I determined Lanterna was the best choice
- Add item to inventory
- An item will have a name, quantity + units, date added (autofilled to today, but editable to a past date), expiration date
- Remove item from inventory
- Edit certain item information
- Only add date and expire date will be editable. If a mistake is made on the other fields it will require a remove + add to correct.
- I might change this policy in the future
- Add / Edit / Remove user
- The concept of a user exists soley to allow for transaction logging for accountability
- This is not important now but will be when we have children in the future
- Add / Edit / Remove tag
- The concept of 'tags' is not fully flushed out, but the idea is items can be tagged for searching and filtering
- Assign / Unassign tag
- Assign tags to items (expire when the item is removed). Example: "Turkey: tagged with 'for thanksgiving'"
- Assign persistent tags to item types (automatically added to every item of a certain type) "Turkey: tagged with 'meat'"
- Inventory "At A Glance"
- Act as a dashboard for quickly accessing the most important dashboard information
- View entire inventory alphabetically
- View items expiring soon (within 90 days) sorted and color coded by expiration date
- View items grouped by item type, sorted alphabetically, showing the number of items of that type and soonest expiration date
- Example: Inventory contains "Chicken, 1 pound, added 1/1/2019, expires 5/5/2020" and "Chicken, 200 grams, added 3/1/2019, expires 7/5/2020" would result in an entry of "Chicken, 2, 5/5/2020" because we have 2 separate instances of chicken and the earliest expiration is on 5/5/2020
- Detailed Inventory View
- This will allow for a plethora of sorting and filtering options
- This functionality is still being designed and flushed out
- Introduce concept of 'item type' as an object
- Differentiate between permanent and instance(item) tags
- Rework tag assignment/unassignment to account for tag types
- Filter detailed inventory view by field
- Filter detailed inventory view by tag
- Keep logs of all CSV file transactions
- Ensure documentation is up to a reasonable standard
- Interface with server application / database for inventory items
- Interface with server application / database for users
- Interface with server application / database for tags
- Keep logs of all database transactions
- Other things I forgot about :)
- Integrate with digital recipe management system (another project I have planned to help my wife out)
This gets updated whenever the "Now" section above is completed. When that happens those items move here, along with a completion (push) date and then everything is re-prioritized. These records are mostly for my own sake/interest. I enjoy looking back on the progression of my personal projects. ####'Now' Priorities Iteration 1, Completed 4/1/19
- Read test data from a randomly generated CSV file: Completed 3/20/19
- Read data on application launch; data is not updated Completed 3/20/19
- Inventory "at-a-glance" Alphabetical View Completed 3/20/19
- Inventory "at-a-glance" Expiring Soon View Completed 3/20/19
- Inventory "at-a-glance" Grouped Item Type Count View Completed 3/20/19
- Detailed inventory view with sorting, no filtering Completed 3/24/19
- Add item and save it to CSV Completed 3/27/19
- Edit item Completed 4/1/19
- Remove item Completed 4/1/19
- Data updates from CSV after add Completed 3/28/19
- Data updates from CSV after edit Completed 4/1/19
- Data updates from CSV after remove Completed 4/1/19 ####'Now' Priorities Iteration 2, Completed 4/12/19
- Differentiate between freezers (basement vs kitchen) Completed 4/2/19
- Add tag Completed 4/3/19
- Edit tag Completed 4/3/19
- Remove tag Completed 4/4/19
- Associate items with tags by tag Completed 4/4/19
- Associate items with tags by item Completed 4/5/19
- Show tags in item summary Completed 4/9/19
- Add user Completed 4/11/19
- Edit user Completed 4/11/19
- Remove user Completed 4/11/19
- Sort user table Completed 4/11/19
- Assign permissions to a user Completed 4/11/19
- Unassign permissions from a user Completed 4/11/19 ####'Now' Priorities Iteration 3, Completed 4/30/19
- Ability to manage expired items Completed 4/12/19
- Require users to log in Completed 4/23/19
- Give users a password Completed 4/23/19
- Allow switching users Completed 4/24/19
- Make permissions actually do something Completed 4/30/19
- If the current user does not have permissions, allow temporary permission for one specific action granted by someone with permission Completed 4/29/19