Skip to content

Technology

Backend

logo HTML
  • The backend runs on Node.js and Express.
  • Cloudinary (free tier) is used for image storage.
  • Images are uploaded using the signed-uploads method of the Cloudinary upload widget.
  • Image transformations are performed using the Cloudinary SDK for Node.js direct URL building helper method.
  • The database for all image and album data is hosted on MongoDB Atlas (free tier). The database serves as the single point of truth.

Frontend

logos of HTML, CSS, EJS, and Masonry library

Deployment

The app is hosted on AWS using Elastic Beanstalk on a custom domain with SSL.

Components

The app has four main components. Please refer to the Features section for visuals of the app.

  1. Welcome page: Only shown when no albums exist.
  2. NavBar Menu: Visible on all pages.
  3. Landing Page: Shows cards of existing albums.
  4. View Album Page: Shows images inside the album in a masonry layout (resize the window to see the magic).

Please refer to the Features section for visuals of the app.

Welcome Page

This is the first page that shows when the app is opened. It contains a short description of the app and an action prompt button to create the first album.

:::[tip Did you know?] After an album is created, this page is not shown again. You can use the View Welcome Page link in the footer to go to this page. :::

The navbar menu is the heart of this app. Almost all actions can be performed here.

ActionNavBar Menu (all pages)Landing Page CardsView Album Page
List of albumsxx
Count of images inside albumxx
Click album name to view albumxx
Create new albumx
Upload image(s)x
Delete albumx
Delete imagex
User-set album cover imagex

Landing Page

  • If no albums exist, the ‘welcome page’ is shown instead.
  • The landing page shows existing albums displayed as cards.
  • The album cards show the album cover image, the name of the album, and the count of images inside the album.
    • Each card is clickable to go to the particular view album page.
    • The album name is overlaid using Cloudinary text transformation.
    • The count of images inside the album is overlaid using EJS and CSS.
    • The cover image is, by default, the first image uploaded to the album. The user can change this by clicking the radio button on the image in the view album page.

View Album Page

  • Shows all images inside the album in a beautiful masonry layout (resize the window to see the magic).
  • Each image has a radio button to set it as the album cover image.
  • Each image has a button to delete it.
  • Each image is clickable to open the full-size image.
  • Each image has a caption overlaid using Cloudinary text transformation.

Process Flows

:::[tip Finished is better than perfect] The unreadable, low-quality images below will soon be replaced with high-quality images. :::

Create New Album

process flow create new album

Image Upload Widget

Image uploads can be triggered in two ways:

  1. During the ‘Create new album’ process.
  2. By clicking on the ‘add images’ icon on an existing album.

1. Image Upload from Create New Album

The flow below is started immediately after creating a new album, i.e., it is the last part of the create new album process. Signature options are prepared in advance and then wait for the user to click ‘Add Images To Album xyz’ to open the widget. No delay is experienced when opening the widget. Signature pre-loading is possible because we already know the album name at this point.

process flow of image upload from create new album

2. Image Upload for Existing Album

In the flow below, there is a noticeable delay before the widget opens. This is because the signature options are not prepared in advance. Currently, we cannot pre-load the signature because the folder name must be known in advance. In this flow, we only know the album name when the user clicks on it.

process flow of image upload from any existing album in navbar

Set Cover Image

By default, the first image uploaded to an album is set as the album cover image. The user can change this by clicking the radio button on the image in the view album page. The flow below shows the process.

process flow of default set cover image process flow of user set cover image

Delete Image

process flow delete image

Delete Album

process flow delete album