Keeping track of current level of happiness
Branch: master
Clone or download
KrauseFx Merge pull request #11 from KrauseFx/stats
Add more stats (7d and 30d avg)
Latest commit 5aa7be8 Feb 19, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
views Add initial storing of values & basic output Feb 1, 2018
.gitignore Update .gitignore Feb 1, 2018
.ruby-version Specify Ruby version to use Dec 14, 2018
Gemfile Specify Ruby version to use Dec 14, 2018
Gemfile.lock Update ruby dependencies Feb 19, 2019
LICENSE Initial commit Feb 1, 2018
Procfile Add info to README on how to get the chat ID Dec 14, 2018
Rakefile Implement Telegram API Feb 2, 2018
database.rb Add support for appending notes Sep 19, 2018
server.rb Add JSON API to receive current mood Mar 11, 2018
telegram_handler.rb Add more stats (7d and 30d avg) Feb 19, 2019
worker.rb Add JSON API to receive current mood Mar 11, 2018


If today were the last day of my life, would I want to do what I am about to do today?" And whenever the answer has been "No" for too many days in a row, I know I need to change something.

Steve Jobs


I've been a heavy user of 1 Second Everyday, where I created a very personal video of the full year for the last 730 days. (Check out a public sample video here)

One thing I noticed is that I associate the mood and happiness when seeing the videos, however, I know that this will slowly fade away as time passes.

I wanted a way to track my overall happiness and excitement in my life, allowing me to monitor, analyze and react to it. As Steve Jobs said, if you notice a downwards trend, it might be time to apply some changes to your life.

How it works

It's a simple Telegram Bot that will send you a message 3 times a day:

  • One in the morning (I'd never reply to the bot before showering)
  • One after lunch
  • One when going to bed

You can always just text your bot a number, however, I know I'd forget it. That's why the bot sends you those reminders.

It then pulls up this really nice, optimized keyboard in Telegram, with a short description of what each number means.

If you forget to track a day, that's no big deal at all. The database is simple, it looks like this:

@_db.create_table :moods do
  primary_key :id
  DateTime :time
  Integer :value

I decided not to store the information about breakfast, lunch and dinner, as it would make time zones more complex, as I'm traveling quite a bit.



I want a nice visualization page & dashboard for this. Maybe even just send a weekly and monthly summary via Telegram?

Right now, just send /graph to your bot to get your historic mood as a simple graph.


I want my bot to alert me when it detects a downwards trends. Similar to the stock trading approach, I was thinking of using the 7d average (7 days, 3 times a day => 21 data points). It's all relative, so if there is a downwards trends for 2 weeks, there probably is something bothering you

Integration into 1SE

I usually edit the 1SE videos slightly to have "subtitles" for some of the important life events. Additionally, I throw in the classic Every day of my life music.

Additionally, with that data, I want to overlay my happiness level somehow, probably in the form of a graph, a bar, or a wave. Not sure yet, but I got 11 months to figure that out.

How to use it

You'll have to setup a few things

  • Create a Telegram bot using @BotFather and get the API key, and message ID with you
  • Provide those values using TELEGRAM_TOKEN and TELEGRAM_CHAT_ID
    • To get the TELEGRAM_CHAT_ID, send a message to your bot and then access the following URL in your browser[TELEGRAM_TOKEN]/getUpdates. You'll see a message, and within that, the Chat ID to use
  • And host it on any server, like Heroku, and use the Heroku scheduler feature to call rake morning, rake noon and rake evening
  • Make sure to enable the Heroku worker is enabled