Illustrations for the onboarding experience in Mellonn Speak

Photo Credit: Joakim Rosenfeldt

Joakim Rosenfeldt Pedersen

Updated July 1, 2022

I'm back again!

Yeah some time has gone since the last time I wrote a blog post, how long I don't know as of writing this, but nearly a month (again, as of writing this)... I just know I want this to come out in this month, wether it's now or the end of the month, I don't really know. As you could probably figure out, this blog post will be written over multiple days, that's both to give myself a chance of remembering everything, and to fill it with as much juicy content as possible!

A lot have happened since last post and now, although mostly on the personal side of things might I say. I would've liked to have done more work, but I simply haven't had the time, so it's a slow process, but progress is still happening don't worry. But let's try and take a look at what's happening!

Just a note from future me (after I've written this post), it's the longest post I've written to date, so sit back and enjoy...

These last weeks' (or more) progress

Well when looking back at what I've done, over the last month (as of writing this), I must confess it's a bit depressing. But let's take a look at it, starting from the last blog post!

I left the last blog post on a high, because I had just gotten a new job, and made a lot of progress on the web-app. I hoped to get most features done "within the next couple of weeks", and here we are more than a month later. But I did as I promised, began working on the payment system, or implementing Stripe.

Payment system

This... It took a long time, for me to actually understand how this works. The time it took, isn't a critique of Stripe's docs, no it's more of a critique of my lack of motivation in that period of three to four weeks. Actually implementing Stripe in a web app, is really not that hard, and if I did it again today, I could have done it in a couple of days!

I really had a feeling that it would be much easier, to implement Stripe on a web page, rather than a Flutter app, and oh boy I was right. Not just creating the payment part of it, that part took probably a couple of hours to actually implement. But I not only wanted simple payment to be a feature, I also wanted user to be able to save their payment methods. And Stripe definitely makes this task both easy to implement, but also very secure! It also means that I have had to create a lot of API's for the web-app. And that's something that came as a surprise to me at first, that implementing a payment solution is mostly backend work, and not much frontend. After doing it, and learning a lot (ish) about it, I've learned that there's a good reasoning behind it. The way I've done it now, is by giving the users the choice of adding a card (or multiple), to their "wallet". On the profile page they can add/remove their cards, while they also have a choice of adding a new card, while uploading a recording. If they don't want to have a card associated with their account, which is the default option, they will just have to type their information every time. I personally want to make my users feel safe, when trusting me with their information, this means that I will always make it something they have to opt-in to give me, instead of forcing it on them. The users' personal data brings us to the next thing I've done.

Data management and privacy

Data management and privacy I do believe is very important, and I'm very sure that a lot of people share that opinion. Right now, as a very small company, I can definitely say that I care about this, but It's of course going to get harder, as the company (hopefully) grows. But this will always be a priority. To make sure that all users, always have full control of their own data, I'm giving them the option to delete their data. This has been an option in the mobile app, and now it is too on the web. What this button does, is from the client delete ALL the data associated with the account, when this is done it will delete the account and sign the user out. This feature makes sure, that the user is in full control, if they want their data deleted. Earlier I have said that I want Mellonn to develop our own AI, to transcribe and do other things. When we begin doing this, I will most definitely have to use the user's recordings and transcriptions as data for training an AI. But this is something I will make sure the users actually get a clear choice about, and not just something that's part of the terms of service and privacy policy. I want Mellonn to be as transparent as possible.

API and security

Since the last blog post, I've done a lot of work on API's for both the web and mobile app. Who knew you would be needing a LOT of API callable functions, when creating a web app? Just to give you an idea of how many API's I've added since the last blog post: the total number of API functions in the backend, have grown from 5 to 16. Now that's a lot of functions! It's really not, but it's a lot of growth. But where does the security come in now? The security have to do with some updates I've made to the mobile app, by moving most API's from being called with an HTTP-request, to using the built in Amplify functionality. Why I haven't done this before, don't ask me, but now It's done, and this means that no endpoints or keys have to be stored in the app files. Making the API's more secure, and less likely to be called by someone else. As you probably could've guessed, it isn't a good thing if others can call the API's. For example this could be used to creating bank payments with Stripe, as told earlier pretty much everything done through Stripe is using API's.

New promotion system

Speaking of API's, I've also redone a lot of the promotion system... Or I should probably say, I've built a lot of feature onto the existing system, so it's definitely more of a full fletched system now. What I've added to the system, you may ask... I've made a system for referring other people to Mellonn, and also what I call refer groups. I can't remember how much I've talked about the existing system, but to quickly get you up to speed here's the features that was before:

  • You can create a promo code.
  • This promo code could have three different types.
    • Credits: this just gives the user a given amount of credits.
    • Benefit: this makes the user's account a benefit account, and can also give the user credits, if defined. A benefit account gives the user 40% on all purchases.
    • Developer: this makes the user's account a developer account, which makes everything free.
  • When making a promotion, you can specify a date it should be active until.
  • When a user gets a promotion, their account is registered in a list, so they can't user the same promo code twice.

As you can see this system is very bare bones, but it has worked for what it was intended to do, but it have had its limitations. And I wanted to make it all much better, for when I intend to go all in, this next semester. This upgrade I was thinking of, included referrers and refer groups. I don't think it's hard to figure out what those two things mean, but just to be sure, here's my explanation. Think of the referrer as an ambassador, or an affiliate code. It's a code for an individual, who can give it to their friends, and then their friends get some credits, and they themselves get some kind of kickback, when their friends makes a purchase. The refer groups is for the student associations, like Studenterlauget, to give their members when they sign up. This code can of course give the user some free credits, but it will also give them a benefit account. But when a user is a part of a refer group, the refer group admin can always remove them again, giving them the ability to administrate who their members is.

Some other small changes I've made, is giving users the ability, to use a promo code when signing up. To do this, I had to separate getting the promotion and applying it into two different API functions. I'm hoping that all this will give a better experience, for both the users and the student association. By giving them more control and better ways to give their members some good discounts, when using Mellonn.

Other new stuff

Here comes some shorter explanations of some of the new thing I've done. Let's just start...

  • Upgraded the App to use Flutter 3.0. This should give some marginally better performance across the board, and comes with some other features. You can read more about what is new in Flutter 3.0 here. What’s new in Flutter 3. Deep dive into our latest release… | by Kevin Jamaul Chisholm | Flutter | May, 2022 | Medium
  • I’ve created an onboarding experience for new users, when opening the app the first time. They will be presented with 7 pages, that explains the different features and tools of the app. I hope this will make it easier to use the app, when starting off!
  • I've upgraded to use Amplify Flutter 0.5, which has brought the delete account functionality to Android too. Earlier I had made it so the delete account on Android, would send me a mail, so I could go and do this manually.
  • Settings are now synced to the cloud. This means that you have the same settings, no matter if you use the mobile- og web app. The settings are synced with DataStore, and is of course private for the user only.
  • Tidied up the upload process on the mobile app. In the near future, I will be looking at doing this a new way, but for now I've just tidied up the code, used for uploading a recording. This also makes the app more efficient, and using less space.
  • All audio in the app is now streamed, instead of being downloaded as a whole. With Amplify Flutter 0.5, they brought the option to create a URL, instead of downloading files from the cloud storage. This means I can just create a URL, and then give the audio player this URL. The audio will then be streamed to the device, as you listen. This makes the load times of some transcriptions MUCH faster, some goes from taking 10+ seconds to load, to taking under half a second.
  • Created the full sign in/sign up experience for the web app. So now all of the things you should be able to do when signing in, you can. This also includes a forgot password page.
  • Added a resend confirmation code, for account creation. Does this need more explanation?

I hope this gave a pretty good overview of what has happened, to both the mobile- and web app.

What's next?

From quite a few weeks of absence, I don't I will be making a new blog post before the end of July or start of August, but who knows maybe I'll surprise you. But having most, if not all main features built on the web app, my next goal is to get everything ready for giving my everything, this next semester. This means not only doing some more work on the mobile app, but also making the company ready. So in the next couple of months, I will also try and get in contact, with even more student associations throughout Denmark. By doing this I'll hope to get my product out to even more students, and hopefully help them save a lot of time. I will also have to do something about the user onboarding experience, to make sure all new users know what they can do with the tools I've given them. The thing I will be pushing as my main product now, Is the web app. This is because I myself think this is the better working product, and of course because I'm more in control of how it works. A smaller (ish) reason, is of course that I also am making more of the money spent on it.

See you again at some point!

Yeah, I don't know when, but these blog posts are here to stay. I feel like they're a good way for me to keep track of what I've done, and I'd like to think you like to keep track of it too...

But I'll be seeing you again, sooner or later.

Btw I resigned from the job I got, wasn't for me, at all.