This week, I has not been able to replicate last week's great progress. I have managed to push a couple of things forward.
Functionality
On the UI side, I have managed to a Markdown Rich Text Editor. After evaluating different options, I eventually settled on using tui.editor.
Another small change, that the default theme changed from dark to normal light. This was a required change as many emails are formatted in a way that does not support dark background. After the change, reading emails is a much more pleasant experience.
In the second half of the week, I started working on the address book functionality that is simply called contacts. On the functional side, I decided to implement a contact store that is decoupled from the History Items. A Contact will have multiple addresses, like e-mail address, LinkedIn identifier, Jira identifier, etc. The Contacts can also be marked as Participant on Activities. As part of the discovery, I spent a significant amount of time on checking if a great search experience could be applied, but eventually settled on NOT supporting it in the first version.
So the following items are still not addressed:
- The recipients can't be selected, their address needs to be typed in
- No way to distinguish recipients if they should be addressed or they should only get a carbon copy (CC)
Technology
Fixed the transactional issue. The problem is that TypeORM is connecting to SQLite database via a single connection. This connection is being used concurrently by all queries. Thanks to the asynchronous nature, even with a single thread we can get to concurrent execution of transactions. So even though I added transactions, those didn't work as expected as transactions were overlapping. The interim solution was to serialize all operations hitting the backend. Later this serialization should be backed by some annotation instead of applying it to everything.
Things left for next week:
- Email sending:
- Recipient selection (To, CC, Bcc) - Address book
- History
- pull on scroll - when scroll reaches top or bottom of the currently loaded page.
What comes next?
My plan currently to continue:
- Add Archived state, so the history items can get hid.
- Support Read state
- add read state to the system
- sync read state back to Gmail
- open history at the last read item
- ⏫ Reply functionality on History Items
- 🔽 Address book - easy way to select recipients (and Activity participants)
- 🔽 Better error handling (probably with i18n support)
Changes
- New item in backlog: Reply functionality After using the prototype, I realized that Reply-ing to History Items is key. Otherwise, it's very inconvenient to use the system.