Could you introduce your app in a few sentences?
Enlighten is an evidence-based personal trainer for your wellbeing and mental health.
Upon downloading the app, users complete an intake questionnaire. The answers from this are then used to create a personalized track that provides each user with a couple activities to do each day based on his or her specific needs. Each activity has a body of scientific research supporting its efficacy in improving mental health conditions and/or making people happier in general. Because of this, anyone can use Enlighten and benefit from it—everyone could stand to be happier and healthier, improve their relationships, and find more meaning in their lives. Users can also do any of these activities—meditation, deep breathing, gratitude journaling, and more—whenever they want in the app. And Enlighten provides users the ability to track their mood and habits over time and see how they relate to one another.
Enlighten is different from apps in the meditation sector in that it offers a much more comprehensive take on wellbeing and a more personalized, guided experience. It’s not a meditation app, but it offers meditation. Another big difference is that the platform is constantly improving and adapting over time as users engage with it more. For example, if it sees that a user is struggling to complete their daily activities, it will dial back the load to, say, just one activity per day until a user has mastery of that, and then scale it back up to continue to give them a fitting challenge.
Enlighten is available for iOS on the App Store right now, and will be hitting the Play Store in the coming months
What made you decide to use/switch to React Native?
My path to using React Native was a lot different from that of most developers, I think. I’m a solo founder, and year or so ago when I started working on Enlighten, I was non-technical. My degrees were in Philosophy and Psychology, so I had no formal technical training. I had always been really interested in programming but had never really gotten into it, so that interest coupled with a lack of any real alternatives led me to decide to just teach myself how to code from scratch.
For better or for worse, I have strong perfectionistic inclinations, and had React Native’s accessibility come at a cost, I couldn’t have brought myself to use it. I’m not sure where that would have left me today but I’m happy I don’t have to think about it. The cross-platform functionality was a cherry on top.
How did you transition to React Native?
I graduated college last year and at first wanted to travel for a while using money I had saved up from running a small landscaping/lawn mowing operation with a friend throughout our high school and college years. I did a two week sampler trip of sorts right after graduation, and for a variety of reasons came to the immediate conclusion that the traveling idea would not be happening. I always knew that I wanted to start my own company, and was especially interested in tech companies, but at that time I didn’t have a specific idea in mind. So I spent that summer back home trying to figure out what I wanted to do, kicked around a few ideas, and eventually started to develop the idea for Enlighten. I spent a while researching and fleshing out the idea, but then the time came to actually build something.
Have your tried other cross platform technologies before using React Native?
I have not. I don’t really have much of value to add here since my programming experience outside of React Native is so limited.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
Unfortunately I don’t really have anything to benchmark it against, given my lack of native development experience. But I can say that I think Enlighten performs well and feels native.
How has adopting React Native affected developer productivity?
Again, my case is an oddity because I have no prior experience to compare it to. That being said, I am quite certain that I would not have been able to do what I’ve done with React Native using another development environment. I feel that anytime I’m building new features, the vast majority of the work really feels like I’m working on the meat of the feature and that there’s relatively little boilerplate. Someone with a broader range of experience may disagree but my perception of how it impacts my workflow is largely positive. And I haven’t even built for Android yet! I’m at once interested, excited, and nervous about what starting working on the Android version will be like. But of course an incredible amount of time is going to be saved compared to if I had to start from scratch for Android. I’m very happy with what it’s enabled me to do. Especially now that I’m up and running with it it’s a pretty frictionless experience.
Which tools, libraries and frameworks are part of your development process with React Native?
Xcode is my sole IDE since I haven’t built for Android yet. I write in VSCode, which I like a lot. I use Chrome developer tools for debugging. I started working on Enlighten in Expo and ejected after a little while in order to use packages that require linking. But to be honest I was so unexperienced at the time that the functions I ejected for may have been things I could’ve accomplished in Expo. I don’t really know and have no real reason to look into it, because post-eject development has been fine. I have four different build configurations which can be a bit tricky. react-native-schemes-manager helps with this. It basically automates the process of configuring your dependencies for each build scheme. Redux is pretty great for state management. Clean and simple once you learn the ropes.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
What are some things that you don’t like about React Native or that need to be improved?
The open-source nature of the React Native ecosystem is at once its greatest strength and a major weakness. The ability to use third-party packages enables so much functionality and really is wonderful. It also means that you have to deal with making sure your package versions are compatible when updating React Native or other dependencies. And packages are liable to be abandoned at any time. Bugs pile up and sometimes maintainers disappear, and you’ve integrated this package into the fabric of your app and are now stuck with code you didn’t write trying to figure out what’s going wrong. And the fact that this is all non-native means that edge cases will pop up where a module fails to handle what less complicated native code could have gotten done. Having experience in Objective-C would definitely be helpful for a React Native developer, because it means that if a package is giving you trouble or you want to add functionality, or you need to write some native code, you can just dive in and solve the problem yourself.
Anything else you would like to mention?
Improving Enlighten to better serve people in the pursuit of meaningful, joy-filled lives is my ultimate goal. I’d love for anyone reading this to download and check it out if they can. If you have any feedback, I seriously want to hear it, so please email me at firstname.lastname@example.org.