At some point in our lives, we all have kept a journal or documentation of our experiences either through social media platforms such as Instagram or more old-fashioned platforms such as a diary or a scrapbook. Putting our experiences on paper or a website doesn’t do them much justice; not only could you easily lose this documentation but also reading from books and seeing dusty pictures doesn’t do much to relive the documented experience.
What it does
Journify is an iOS app that enhances our experiences of reflecting on past experiences by adding another dimension, real 3D space. In other words, Journify is your must-have augmented reality journal app. The steps are simple. First, you can register with your email and log into the app. Upon logging in, a custom ARSceneView will open up with three buttons, a Log Out button, an Add Entry button, and a Profile Button. Tapping on the Add Entry button opens a pop up that allows you to compose your journal entry. You can add an event title, event description, and an image of the event that occurred in your current position. When you post the event, the current date will be automatically logged into the entry. Upon posting, a message bubble will appear right above your current position that holds your journal entry in an organized and aesthetic fashion. This message bubble will remain in that position in the augmented reality “journal” while you are logged in. You can add as many entries as you want per day. Tapping on the Profile button allows you to access your journaling statistics such as the total number of entries and total number of days when you posted at least one event. You also have access to a map view that is annotated in locations where you have posted your events. Tapping on Log Out immediately logs you out from the app.
How I built it
I used Firebase to manage user authentication of Journify. I also incorporated a library called ARCL, which mushes Apple’s CoreLocation framework and ARKit to give each AR object a set of geographic coordinates. Using this library allowed me to track the exact geographic location of each journal entry in augmented reality, which not only minimized the random movement of AR objects but also allowed me to develop the 2D map that presents the location of each journal entry in a user-friendly manner. In using ARCL, I developed an algorithm that assigns each journal entry an exact set of geographic coordinates and stabilizes its position when the user decides to post it. Simultaneously, the algorithm also efficiently transferred user-inputted data for each journal entry into a neatly designed AR object. The AR object was created in three steps. First, I used a delegate method that allowed my AR view controller to communicate with the pop up view that gathers the user’s input. Second, a custom view with all of the data was created. Third, the updated view was rendered into an UIImage programmatically; this resulting image became my custom AR journal entry that would be presented in real space.
Challenges I ran into
- When user logs out and then logs back in, the reloaded journal entry nodes that were added before glitched out and moved in random positions.
- Understanding the ARCL library: the library was filled with complex code that dealt with a concept that I was not very familiar with: augmented reality. Being able to incorporate this code into the context of my project took up the bulk of my time.
- Understanding AR: AR is a very difficult concept to familiarize with in iOS development. In building the project, I had to go out of my comfort zone, filling in gaps of my knowledge about how scene nodes work and how to stabilize their positions.
- Creating the journal entry: My plan was to present journal information inputted by the user into a custom UIView. Unfortunately, UIViews cannot be AR objects. I tried various ways of presenting UIViews into AR objects before I realized this painful truth. I later overcame this problem by rendering the updated UIView into a UIImage.
Accomplishments that I'm proud of
Before building this project, AR was one of my weakest fields in iOS development. Objects often moved and shifted in random places, and testing AR apps made me a little dizzy from having to move around digital objects so much. I am so relieved that I was able to build a functional product that applies AR in a very practical fashion given my lack of experience with AR. Moreover, seeing my journal entries in both the 2D context (map view) and the 3D (AR Scene View) really blew myself away because we often document in 2D platforms but never knew the potential of documenting in 3D.
What I learned
- Converting UIViews to AR Objects
What's next for Journify
- Minimize the glitching in reloaded journal entries when user logs back into the app
- Enable users to change their profile picture and username (which is currently set to their email)
- Enable users to document more in a single entry (such as a collection view of images)
- Friends Feature: Our plan is to enable users to share their journal entries selectively by implementing a friends system. Users can browse other users and their profiles and request them to be friends.
- Ability to delete journal entries