Results

Now that the development process has finished, it is time to look back at the requirements and see to what extent they have been accomplished. This section re-lists all requirements, together with a short description of how well they have been achieved.

Technical

  • The application must be written using a JavaScript meta-framework

    Fulfilled. The application was written using Next.Js

  • The application should be locally deployable, without depending on proprietary technologies

    Fulfilled. The application can be built and deployed using the instructions provided in the repository and is only dependent on open-source libraries.

  • The application should be available in a public repository under an open source license

    Fulfilled. The application is available on GitHub under the MIT license, a recognised open source license.

  • The application’s source should be well-documented

    Fulfilled. The source code is annotated with JSDoc comments to describe functionality. Documentation files in the repository describe usage of the application.

  • The application should be written in TypeScript (high-priority wish)

    Fulfilled. The entire application is type-annotated with TypeScript, and Prisma was used to make database operations type-safe.

  • The application should be horizontally scalable to support very large image repositories (low-priority wish)

    Unfulfilled. The app server itself itself is stateless, which means multiple instances can be spun op to deal with extra requests. However, all instances need access to the same database and iamge store, which are both difficult to scale.

  • The application should have an automated build and testing process (low-priority wish)

    Unfulfilled. Next.js has no documentation on how to publish a pre-built version. Adding tests and automating the builds proved too much work.

Interface

  • The application interface should be responsive

    Fulfilled. The interface shows data differently depending on the viewport size (whether it is viewed from a computer, phone, or something in between).

  • The application should display correctly in major modern browsers

    Fulfilled. The interface works as intended on recent versions of Chromium and Firefox (on Windows and Android). More testing would be needed to verify these results across platforms, but that is beyond the scope of this project.

  • The application should have a light and dark mode

    Fulfilled. The interface has both light and dark modes that switch depending on the system settings. However, there is no possibility to switch from the user-interface via a setting.

  • The interface should display in the user’s language (supporting English and Dutch) (low-priority wish)

    Unfulfilled. Was not attempted due to time limitations.

Organisation

  • Images should be organised into an album, which are viewable as one

    Fulfilled. Albums are the main organisational unit, and all images are part of a single album.

  • Images in an album should be sorted by their date

    Fulfilled. They are sorted by the date they are taken.

  • It should be possible to move images between albums

Unfulfilled. Due to time constraints, I have unfortunately not yet been able to implement this feature.

  • It should be possible to delete images from the system

    Fulfilled. It is possible to delete single images or entire albums.

  • Moving and deletion should be possible for multiple images at a time (high-priority wish)

    Unfulfilled. This was not attempted due to time constraints.

  • Users should be able to select individual photos as their favourite and show them together (high-priority wish)

    Unfulfilled. This was not attempted due to time constraints.

  • It should be possible to display images on a map view (low-priority wish)

    Unfulfilled. Was not attempted due to time constraints.

Photographs

  • It should be possible to upload regular (JPEG) images into the application

    Fulfilled. The application supports uploading of images in several common formats, including JPEG and HVIF.

  • It should be possible to download the original images back from the system

    Fulfilled. The system stores the originally uploaded picture and allows the user to download it back with the click of a button.

  • The application should extract basic metadata (date and time, camera settings) from the image

    Fulfilled. During uploading, the date, location, camera and settings are taken from the image metadata and stored. They are shown in the photo-viewing interface.

  • The application should employ techniques to allow for quick loading (such as creating thumbnails and lazy loading)

    Fulfilled. As part of the upload process, the app creates thumbnails and previews to show in the interface. In addition, it employs lazy loading, such that only images on screen are loaded.

  • Besides pictures, the application should support videos and motion images (low-priority wish)

    Unfulfilled. Was not attempted due to time constraints.

Users and sharing

  • It should be possible for users to authenticate themselves with a username and password

    Fulfilled. It is possible to create accounts and login with an email address and password.

  • Users should only be able to create albums when given the permission

    Fulfilled. There are separate permissions for admin, editor and viewer accounts. Only the first two can create albums.

  • Users should be able to give other users (precise) permissions to their albums

    Unfulfilled. Due to time constraints, I have unfortunately not yet been able to implement this feature.

  • It should be possible to give non-authenticated users permissions to an album using a link (high-priority wish)

    Unfulfilled. In line with the previous point, this feature has also not been implemented yet.

Conclusion

Over the span of several weeks, I have been able to fulfill many of the requirements of the product. However, it is also clear that I greatly underestimated the time necessary to implement these features. This left no time to implement most of the wishes, and even lead me to abandon two of the set requirements. Nevertheless, I believe that the application as it stands is a solid product and base for future improvements, starting with the unfulfilled requirements and wishes.