Inspiration and Significance

Eighty-five percent of the world still spend at least one-third of their day doing something they don’t even like. Despite this statistic, workers have become more conscious about how their work affects their mental health.

Lori Clark the VP of Customer Experience at Upright Labs & Neatoscan commented, "We’re now in an era where we are privileged enough to think about more than our physical needs and safety. We can actually consider self-fulfillment."

With this increased focus on mental health, why do we still find ourselves in these situations?

It’s because even after we obtain our perfect job, we aren’t creating our perfect lifestyle. We’re still making the same mistakes by not organising our day in a way that gives us energy because the tools to do so aren't available to us.

This is where Thrive comes in, the only app that makes room for your drive.

Thrive is an all-in-one gratitude journal, mood tracker and scheduling assistant built using NextJS and Node with machine learning.

We have three simple beliefs:

  1. We believe that emotions are energy and your emotions are important.
  2. We help you figure out what drains and energises you.
  3. Finally, we fix your day by organising it in an energising way.

About the App

We prioritise having a simple user interface that minimises the time users spend on our app, allowing them to focus on their busy workday while also maximising the benefits they can obtain by doing most of our work in the background.

Users first register their account, and then authorise access to their google calendar. Through their google calendar, we are able to see their schedule and relate it to their logged moods.

We realise that while compromising is important for scheduling, it’s not always possible. Thrive needs a method to distinguish non-negotiable events from negotiable events. Rescheduling can be a solution but it’s also something we’d like to minimise. Thrive identifies which events are compulsory by seeing the user’s response (yes meaning non-negotiable and maybe and no meaning negotiable).

Users can then begin logging. Users are encouraged to log their entries at the end of each day. We do this by sending a daily push notification at the default time of 9pm (which is also customisable should they wish to change it).

Logging only takes 10 seconds! The user first selects their mood, and then chooses the activities we've imported from their schedule that they find draining or energising. This user feedback is then processed by our ML backend to help future predictions with rescheduling.

What are our use cases?

Thrive helps its users in three different ways.

One. The preventative approach. We normally schedule events until our calendars are completely full, but Thrive allows us to consider how much energy we would have left. When a user receives a calendar invite on a day when they have very low energy, Thrive sends a push notification to inform them that they should likely reschedule the event.

Two. The reflective approach. We normally have a tiring day and then we forget about it. Thrive allows us to learn from our scheduling mistakes by keeping a history of our moods and energy levels, and using that data to give scheduling recommendations for the future.

Three. Gratitude gives energy. At its most basic, Thrive is a gratitude journal, allowing you to increase your daily energy levels.

That’s Thrive, the app that makes room for your drive.

How we built it

Thrive is a mobile first web app with a frontend and backend.

Frontend Stack:

  • Next.js (React but spicy)
  • twin.macro for styling
  • Tailwind + stitches for development speed
  • Interacting with backend using react-query with trpc (fast)

Github repo for the frontend: https://github.com/zaxutic/shack-2023

Backend:

Using a copora to train a Naive Bayes Classifier, we distinguish between the different events the user puts and this gives us some sort of objectivity in making our decision. The classifier is trained on over 10k words and we chose this ML model because our problem is a class decision problem and it yielded better results than a support vector machine. Since scikit learn is pretty large, we ended up using a cross validation method to improve on our train test split for our model.

Furthermore, with this data, we weigh out what the user actually feels on certain events, and prioritise the non-negotiables to prevent unnecessary rescheduling. Since recommendation algorithms are basically 2-sat problem, we tackled this by weighting out the objectives.

So far our algorithm swaps out behaviour that is destructive with positive behaviours ie. in this schedule we see that:

  • POST 12 - 8 Sleep
  • POST 9 - 10 Meeting mood off
  • POST 11 - 12 Work
  • POST 12 - 13 Lunch
  • POST 13 - 17 Work
  • POST 18 - 19 Gym
  • POST 19 - 20 Dinner
  • POST 20 - 21 Doom scroll
  • POST 19 - 29 Socialise
  • GET New Request

The Sleep, meeting, work, lunch and the work after, as well as dinner are all non-negotiable with varying weightings. The gym, "doom scroll" (social media time) and social events are negotiable.

Our algorithm looks at the "doom scroll" and gives it a negative weighting because it is an activity that does not give our user energy nor is it required, and both events were of the same duration of time. It decides to swap out doom scroll for socialising to help create a more balanced and energy-giving day.

[
    {
        "end": "Mon, 28 Aug 2023 08:00:00 GMT",
        "mood": 2,
        "name": "Sleep",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 00:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 10:00:00 GMT",
        "mood": -1,
        "name": "Meeting",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 09:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 12:00:00 GMT",
        "mood": 1,
        "name": "Work",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 11:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 17:00:00 GMT",
        "mood": -1,
        "name": "Work",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 13:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 19:00:00 GMT",
        "mood": 2,
        "name": "Gym",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 18:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 20:00:00 GMT",
        "mood": 2,
        "name": "Dinner",
        "negotiable": false,
        "start": "Mon, 28 Aug 2023 19:00:00 GMT"
    },
    {
        "end": "Mon, 28 Aug 2023 21:00:00 GMT",
        "mood": 2,
        "name": "Socialise",
        "negotiable": true,
        "start": "Mon, 28 Aug 2023 20:00:00 GMT"
    }
]

Github repo for backend: https://github.com/Rayahhhmed/cal-rec

Challenges we ran into

It was difficult figuring out how to plan our algorithm. Some questions we needed to answer were:

  • How do we minimise rescheduling events?
  • How do we determine how much energy an event gives a user?
  • How do we distinguish between a negotiable and non-negotiable event with minimal help from the user?
  • How do we get maximum feedback from the user with the minimum possible amount of time from them?

Accomplishments that we're proud of

  • Implementing machine learning to improve our application
  • Finishing our full-stack application
  • Learning to use new tools and technology (Adobe Premiere Pro, Stitches, Tailwind, twin.macro, NextJS etc. just to name a few)

What's next for Thrive - Your Perfect Scheduling Assistant (by PlasTech)

  1. Integration with Microsoft Outlook and other popular calendars.
  2. We would also love to target the professional market besides the personal ones and have businesses purchase subscriptions for our application.
  3. Entering the Android and Apple app stores as a mobile app rather than just a web app

Thanks for taking the time to check us out, we really appreciate it!

References:

FE:

  1. https://nextjs.org/
  2. https://jotai.org/
  3. https://github.com/ben-rogerson/twin.macro
  4. https://tailwindcss.com/
  5. https://stitches.dev/
  6. https://headlessui.com/
  7. https://chakra-ui.com/
  8. https://react-hot-toast.com/
  9. https://github.com/aliakbarazizi/headless-datepicker
  10. https://heroicons.com/
  11. https://day.js.org/

Videos and Music:

  1. American Psycho (piano music and clip)
  2. Stock Videos
  3. The Rock Rap

Built With

+ 11 more
Share this project:

Updates

Submission history