An app that looks similar to the Google Photos landing page (photostream), but with better abilities to manage albums, i.e. display which photos are in albums, filter photos not in albums, display album names in nested hierarchy when adding a photo to album. It will require independent storage for data describing (i) which photos belong to which albums, and (ii) a custom nested hierarchy of albums and categories.
1. Landing page: Similar to current [login to view URL]: displays your photostream
2. Button to rotate images clockwise
3. Button to rotate images counter-clockwise
4. Button to archive a photo
5. Ability to both (a) click individual photos and (b) click and drag to select multiple photos (same as existing Google Photos)
6. Button to add selected photos to an album (similar to existing '+' button that appears when you select photos)
7. List of albums must be arranged in a nested hierarchy (not a flat list), along with user-created categories. See appendix A in separate file. The selected view must remain the same each time the dialog is opened (i.e. which subsections are expanded, how far down the list, etc). This makes it easier for the user to select an album when there are hundreds of different albums.
8. User must be able to arrange the album hierarchy according to their preferences. See appendix B in separate file. The arrangement must be saved permanently to disk, so that it persists after the app is restarted.
9. A filter button to display only photos from the photostream that are NOT also in albums. This makes it easy for the user to organise their unsorted photos into albums.
10. If a photo in the photostream is part of an album, it must have an icon in the bottom-left corner, and along the bottom of the photo must be displayed the title(s) of the album(s). Google Photos API cannot tell you which albums a photo is in, so this data needs to be stored to disk independently by the application. It is expected to take some time to read every album to build up this data "once only".
11. Normal operation (after the initial album data download) must be fast. i.e. Must feel responsive.
12. Operations that connect to Google Photos must be non-blocking, i.e. user may continue working with the app while API calls/uploads are happening.
13. Code must be clearly written, well factored, with descriptive variable names, in English.
- Tagging. Easy (one-click jira-style) tagging. Stored as text in the EXIF comment field, but maybe you have a better idea.
- Unit tests and/or integration tests
- It only needs to work in Chrome desktop
- It must work using the Google Photos API, no other photo service
- Please use industry standard techniques
- Polished graphical design is not required