Requirements
A combination of my own wishes for the product, the short analysis performed in the previous section and the learning goals of this project in its entirety lead to the following list of requirements for the product, which are divided into “hard” requirements, as well as wishes of varying priority.
Technical
- The application must be written using a JavaScript meta-framework
- The application should be locally deployable, without depending on proprietary technologies
- The application should be available in a public repository under an open source license
- The application’s source should be well-documented
- The application should be written in TypeScript (high-priority wish)
- The application should be horizontally scalable to support very large image repositories (low-priority wish)
- The application should have an automated build and testing process (low-priority wish)
Interface
- The application interface should be responsive
- The application should display correctly in major modern browsers
- The application should have a light and dark mode
- The interface should display in the user’s language (supporting English and Dutch) (low-priority wish)
Organisation
- Images should be organised into an album, which are viewable as one
- Images in an album should be sorted by their date
- It should be possible to move images between albums
- It should be possible to delete images from the system
- Moving and deletion should be possible for multiple images at a time (high-priority wish)
- Users should be able to select individual photos as their favourite and show them together (high-priority wish)
- It should be possible to display images on a map view (low-priority wish)
Photographs
- It should be possible to upload regular (JPEG) images into the application
- It should be possible to download the original images back from the system
- The application should extract basic metadata (date and time, camera settings) from the image
- The application should employ techniques to allow for quick loading (such as creating thumbnails and lazy loading)
- Besides pictures, the application should support videos and motion images (low-priority wish)
Users and sharing
- It should be possible for users to authenticate themselves with a username and password
- Users should only be able to create albums when given the permission
- Users should be able to give other users (precise) permissions to their albums
- It should be possible to give non-authenticated users permissions to an album using a link (high-priority wish)