Learning Journal: Creating an App for my wedding party
Tags: aws, typescript
Published: 2023-11-03 08:45:48

I created an application for my wedding party.
[The repository](https://github.com/hitohata/welcomeBoard.git)

## Objective

To host a wedding party, it's necessary to communicate with the guests regarding details such as the date, venue address, and more.
While we've created invitations on paper, it's not very convenient for checking and sharing updated information.

In Japan, there's a tradition of writing messages to guests on the back of place cards.
However, it can be challenging for me because physical cards lack an "undo" button.

To address these issues, I've developed an application.

## Considerations

### Interface

The top priority of the interface is to ensure that it doesn't inconvenience our guests. Therefore, I opted for [Line](https://line.me/en/), a chat application. This application is widely used and installed on everyone's phone.  

The Line has [a webhook](https://developers.line.biz/en/services/messaging-api/) feature, and I've implemented communication using it.

### Message delivery

Messages to guests must be delivered to the specific guests only. To achieve this, I opted to employ a combination of the user's ID and unique keyword for verifying guest inputs. These IDs are generated on Line and are transmitted via webhook, which I utilized. 
The keyword essentially functions as a "password" shared with my wife or me and the respective guest, similar to a security question used when resetting a password.
We've written a question or an abstract image on the back of each place card to convey these secrets.
For instance, I've used the notation →↓↘+P, and the answer is "Shoryuken". This is intended for my guest who is a fan of Street Fighter.

This approach ensures that messages are delivered exclusively to the intended recipients.

### Application hosting

I've set up the backend infrastructure on AWS, and the application's data is encrypted and stored in the database.

### Input messages

We needed to compose messages for the guests.
While it was feasible to write them using the AWS-managed console, it wasn't very convenient for my wife.
Consequently, I developed a web page for crafting messages.
I designed a simple and cost-effective user interface (UI) solely for our use.
To safeguard the database, I made it mandatory to log in before accessing it.

![cheap UI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/10pjnsmw7yhsb85xpixi.png)

## Features

### 1. Static Information

The Line application provides ["rich menus"](https://developers.line.biz/en/docs/messaging-api/using-rich-menus/).
It is like a keyboard that can be assigned to arbitrary commands.
I created a "rich menus" with frequently asked questions assigned.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/heqt0zulpenwgisroo84.png)
from top left: date time, venue, menu, groom profile, bride profile, seat


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vlykuh9h5zyw0m7ldo12.png)
pushed: date time, venue

### 2. Message from Guests

When guests send a message, it's forwarded to the host's account.
In the host's account, the message format appears as follows: "{username} > {input message}".
This format allows us to easily identify who wrote what, facilitating the handling of any issues or inquiries that may arise.

Fortunately, we didn't encounter big trouble.


![host-image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j673svgvr0bq0e2rmyt9.png)

On the wedding day, this function served as the means of delivering messages to the guests.

### 3. Message from Hosts

When hosts send a message to the host's account, it is also broadcast to all guests.
This feature enables us to effortlessly inform all guests about any updates or important information.

## For Entertain

All of the requirements have been met by the [features](#features).
Additionally, I've incorporated some extra features designed to entertain the guests.

### Easter Egg Messages

This feature is quite similar to the messaging feature, but it's intended for sending messages to multiple guests.
The messages sent here are very informal and casual in nature.
For instance: IF guests send "Frozen", they get the answer "The season of the film is summer".

### Images and Videos

This application supports images and videos.
When guests send images or videos to the application, the data is stored in AWS S3 storage.
Additionally, as a fun feature, guests sending data have a one-tenth chance of receiving an image that someone else uploaded
This feature was added for entertainment purposes and encouraged guests to share more images in the hopes of receiving images from others.

Thanks to this functionality, we were able to easily download all the images and videos the day after the wedding party, making it a convenient way to collect and share memories.

## Summary

Due to the nature of this application, I couldn't receive feedback beforehand, which made me skeptical about whether it would meet the guests' expectations.
However, after the party, I'm convinced that this application greatly assisted both the guests and my wife.