Conversation Journal
Alex | Last updated: June 24, 2023
Conversation Journal is an application that allows you to talk with your self (or your selves). It differs from conventional messaging applications where you can message yourself in that you can create new users to represent different parts of your self and swap between said users to simulate a conversation with yourself.
At the moment, the application is a high-fidelity prototype. I designed and built the mobile application and its accompanying product landing page from scratch in a month.
The technologies I used include:
- React Native and Expo—I am very familiar with React, and Expo made configuration much easier than if I were to use bare React Native.
- Redux—for global and complex state management
- MongoDB Realm—I wanted to build an offline-first application with the option to sync to the web, and Realm was the perfect tool for this. It was a bit of a challenge configuring and implementing Local to Online Sync and vice versa from scratch using React, as there was no built-in function/solution for this.
- Node.js—I use Node for writing/calling Cloud functions and writing my own API as an interface between the frontend or backend.
- RevenueCat—This was the fastest way to build and configure payments, very easy!
- Firebase Auth—This was the fastest way to build and configure user authentication, including email verification, in a way that felt secure.
- Google Firebase Storage—“Premium users” can upload photos and videos to their conversations.
Technical Challenges
To be expanded on in the ~~future~~...
- Migration between a Local-Only Realm App and Sync-Enabled Realm App
- I had to implement from scratch data migration on a user’s device between a local Realm and a sync-enabled Realm using React, as there was no out-of-the-box built-in solution for this problem.
- Database Schema design and changes—these require migrations in MongoDB, unlike with Firebase
- Connecting Firebase Auth, MongoDB Realm Auth, and RevenueCat payment IDs.
Origins
I’d unknowingly discovered something called “Parts therapy” back in 2016. Parts therapy considers a person’s self to be made up of different pats, each jostling for attention and competing for energy—motivated by the belief that their version of what’s best for the individual is what is actually the best for the individual. At the time, I started having internal conversations with myself as a way to process events in my life and make big decisions.
I was inspired to build the application in 2019 after having an internal conversation with myself about whether or not I was qualified for a job—I talked myself into applying and landed the role!
Conversation Journal is based off this paradigm of the self and encourages users to have conversations with themselves.
Even Earlier Prototypes: Desktop
I used this concept—building an application where you could talk to yourself—at first as a way to learn so many different technologies.
I built desktop prototypes using Love2D (Lua), Godot (GDScript), and React (integrating with Electron), and I remember having to learn about and implement features such as:
- A scrollbar in Lua because Love2D did not take care of that for me.
- Filesystem configuration and access in Electron for opening and saving conversations as JSONs—this was a pain in the neck with Electron’s security configurations.
- JSON file schemas and parsing using GDScript and JavaScript to load and write to files.
After learning more about application development, I dove into building a full prototype.
Roadmap
At the moment, development of the application is paused given other priorities in my life—full-time work and self-studying data science.
But the priorities once I hop back on this project would be:
- Design updates to improve the look and feel of the application and website
- Maintenance to ensure the services I rely on are not deprecated (e.g. RevenueCat/Firebase updates)
Longterm, I would like to get this application on Android (Google Play) and Desktop.