WFH.Ninja, a quotable site for all your excuses

Check out the live demo or the Github repo

Christina Ng
3 min readJul 26, 2015

Genesis

The inspiration for WFH.Ninja came when my roommates and I were playing Blizzard’s Heroes of the Storm game one night. It was late, but we were not ready for bed. We started coming up with reasons why we should “work from home” the next day. That would mean we could go to bed later and wake up later. As we brainstormed for reasons, we discussed the best excuses given by our coworkers, and quantified the likelihood of success. Hence, the idea of WFH.ninja was born.

Many companies in the bay area have a flexible work from home policy. In most cases, the flexible hours is great for maintaining work-life balance. However, there are also cases of employees abusing the system.

The Project

WFH.Ninja is a parody of the reasons people provide for working from home. Some of these reasons may sound ridiculous, while others trivial. The interface is simple and displays one excuse at a time in a single-page app. On each excuse, visitors can vote up or down on whether they believe “it will fly” with the management. Users can also submit other excuses, which will show up once they are approved.

I built WFH.Ninja because it was a good exercise for me to work on some front-end programming. Previously, I built a Python Smarthome API. I also dabbled a little in iOS programming by building a native iOS app for my house using the API. WFH.Ninja was the perfect opportunity for me to learn how to build web apps.

WFH.Ninja is built using a Python Flask backend, relying on Postgres as the datastore. The frontend is built using React, Bootstrap and JQuery.

Future developments

For re-usability purposes, WFH.Ninja is built as a generic single page app. There is also an admin panel allowing registered moderators to approve/delete user submitted quotes. The repo is open-source, and I’m happy to accept pull requests for additional features. Some possible ideas are:

1. Conditional excuses

The current model for the Quote object provides for a conditions variable. The variable accepts (in JSON format) a special set of conditions for each quote. For instance, an excuse about being snowed in is only valid in winter. Similarly, an excuse about the Caltrain is only valid in the San Francisco Bay Area. There should be a client side check to ensure that all the conditions are fulfilled before the quote is displayed. This method is not implemented yet.

2. Mobile/ Wearable app with one-click action

On mobile/ wearables, we can enable the swiping gesture for votes, tinder style! We can also request for specific information about the user, such as their location, local weather, etc. This provides the necessary information to check that the quote conditions are satisfied. (See #1 above)

The app can also send notification to the user at times, e.g. when the morning alarm rings. I’m exploring a possible integration with Google Now so that a card shows up with the Quote of the day. Users should be able to send the quote to their intended recipients with one click.

Mockup for one-click integration

3. Excuse generator for other context

Of course, you can also fork the repo and build other similar sites, such as Programmer excuse or Homework excuse. The possibilities are endless! :)

Acknowledgements

Check out the live demo or the Github repo now!

--

--

Christina Ng

Product @dynamic_signal. Previously @VSee, @Crowdbooster, @Mashape.