Analysis
To come to a design and requirements for the Photo Gallery, I will take a look at a few alternatives. This includes the cloud options Google Photos (targetting consumers), Flickr (targetting amateurs) and SmugMug (targeting professionals); although these are not direct alternatives to my product, they are a good representation of what most people use. In addition, I will look at PhotoPrism, an open source solution that can be self-hosted and could be considered a direct alternative to my photo gallery. Lastly, I will take a brief look at two local options: Google Gallery for phone and Windows Photos for pc.
Interface
When opening the various applications, the differences in colour schema become immediatebly clear. Although changeable dark modes have become increasingly popular, only the local apps can change colour on demand. The other options have static colours: Google Photos and Flickr boast a light theme, while SmugMug and PhotoPrism use a darker theme (although the latter’s can be changed by the administrator). As dark mode seems to be quite a controversial topic when it comes to people’s preference, I will provide a switchable option for my app.
Another thing that jumps to the eye is the fluid kind of layout most overviews use: images are not aligned into a rigid grid, but are layed out in varying sizes to show them without dcropping and yet fill the available space. Notably, PhotoPrism and Google Gallery don’t use this layout, and the other apps often use grids for some more advanced features. Although I think it gives a nice look to the page, the implementation of it seems rather complicated. For my photo gallery, I will stick with the good old grid view.

Figure: A fluid image layout in Google Photos
One aspect in which all options align, are their responsive layouts: they are made to work well on displays of different sizes, from mobile phones to desktop monitors. For modern applications, this is very much essential, and it will also be important for my photo gallery.
Organisation
Each piece of software can organise the photographs in some kind of collection. For the local options, these are equivalent to directories on the filesystem, meaning pictures can only be part of one folder at once. Online solutions are less strict, and photographs can often be part of multiple albums at the same time (PhotoPrism has both variations alongside each other, which is just confusing). Because it simplifies permissions and other logic, my photo gallery won’t allow this behaviour, and photos will be part of only one album instead.
Besides albums, most tools have support for storing pictures as favourites, which is a nice addition that I wish to add. Some have a trash can where deleted items are stored for some time before being permanently deleted. Flickr, SmugMug and PhotoPrism have features that allow users to organise albums further in a structure. Google Photos has a great explore page that automatically detects shared features across all images, and allows for searching by them. However, I believe these features are too much for the initial version of the photo gallery, and they won’t be added during this projet.
Photographs
All photo services allow the user to upload and store photos in their original quality, although Google also offers a feature for storing reduced-quality photos, in order to save on storage space. These full-quality pictures can be downloaded again; in addition, some services let the user download down-scaled versions. I believe uploading and downloading full-size versions are an essential part of the app, and will implement it during this project.
The software extract a varying set of metadata to show to the user. Generally, there is a set of basic metadata that is shown in a more prominent place in the interface. These include: size, date taken, location taken (if applicable), camera model, and the exposure settings of the image (aperture size, shutter speed, and ISO value). In addition to these, the services more geared towards professionals (Flickr and SmugMug) can show some more advanced information taken from the image. Although most are for viewing only, Flickr and Google Photos allow for changing the date information, and in PhotoPrism almost all metadata can be changed from the interface. During this project, I will implement basic metadata extraction to provide some information about the photos, but will keep away from any editing.

Figure: Basic and extended metadata in SmugMug
Besides image formats, the applications also offer support for varying types of video files. In addition, PhotoPrism, Google Photos and the local applications support motion (or live) images, which are a hybrid format type that combine pictures with a short video taken at the same time. Although support for these formats is quite important for the user experience, videos are much more resource-intensive to process. Therefore, these format’s won’t have priority.
Users and sharing
Each of the online options has their own user system for authentication and sharing (the offline apps are single-user only) and require authentication to create albums to upload photos into. For my gallery, I will also use a built-in user database instead of relying on users of an external service.
Most solutions have some way of sharing collections with other users, by inviting them to view the album. In some cases, Google Photos being the most advanced, this can also include collaboration permissions, which means other users can add their own photos to the album. Sharing with other users is an important part of the concept of my photo gallery, and should be implemented during this project.
Besides sharing with other users, the applications also support making collections available to the public. For Flickr, this results in it showing up through the search features of the site, but generally, it gives the user a public link to share with other people. Although not a priority, I hope to also implement such an option.