Tweets from the Desktop
On a chilly Friday night in Tokyo, I sat down in an attempt to solve a simple problem of mine: Why can’t I tweet from my system tray? It was obviously very specific, but I had recently migrated back to Windows 10 (thanks to a friend) and was missing the action on macOS, where by using Twitter’s OS integration, you could compose a Tweet anywhere from the Desktop.
Give or take a few months of work and finally I had little app running on my laptop named Tweet Tray. Here’s the original tweet sent out asking for help to test the alpha version.
Introducing Tweet Tray! 🎉— Jonathon Toon (@jonathontoon) January 27, 2018
A little helper app which lets you tweet from the desktop, but nothing more. Supports Images 📷(GIFs!) as well as Night Mode 🌃. Built with Electron, React/Redux and Styled Components.
DM me if you'd like to help me test it really soon. ✌️ pic.twitter.com/GDTqT9glLE
Within a month of releasing it open source on Github Tweet Tray saw over 2,000 downloads, was the #3 Product of the Day over on Product Hunt and was graciously written about on both Windows Central and Windows Forest.
Naturally the postive response was a happy moment, if not a slightly overwhelming one. More importantly though it helped greatly to validate some mental constraints of mine which were crucial to the project from the very start.
Know your scope
One thing in the past I had been incredibly guilty of was coming up with a pretty decent idea and then over-scoping it into oblivion such that it either becomes so complex that it’s no longer interesting or rather it’s own complexity takes priority rather than ensuring the original idea is actually executed on faithfully. Thankfully, Tweet Tray was different.
I could’ve gotten overly invested and built an entire grandious Twitter client, i.e. better than Twitter or [insert third party Twitter app here]. Had I done it well I’m sure it would’ve been well received since at the time of start development Twitter had just deprecated their own macOS client. In the end though what helped was starting with a “do X with/from Y”-type statement, as opposed to “do X but faster/better than Z”, which kept the goal pretty objective from the start. Allow the user to send a Tweet, yup, that’s it.
Pick your battles (technically)
Electron was great as it allowed me to build a pseudo-native experience fast. It was perfect really, I was able to iterate at very little extra development cost. The framework may have issues such as bundle size and memory usage, but they weren’t enough to compromise the convenience, as again, my focus was on delivering and executing. Semantic arguments could wait.
Embrace open source
I’d never really thought much about open source software before Tweet Tray and don’t really have a profound reason why I decided to start caring about it here. However, I’m sure glad I did. Not only is free software important for inclusivity but it helps give others an outlet to build something that can easily benefit a wider audience. This was a good lesson for myself to learn as it forced me to take breaks, step back from the work to be done and understand that sharing helps foster much greater ideas.
By taking this back seat many folks in the community eventually helped to contribute localization strings, which was never one of my original features but it became clear that this project wouldn’t be complete without being more accessible to those around the world. Thanks to the input of others, as of the latest release, Tweet Tray supports 8 languages and is still open to more contributions.
It’d be almost criminal to not individually mention Riomar Mccartney for his extensive contributions to Tweet Tray. Specifically for providing a wicked set of app icons (below) which helped to give Tweet Tray some of it’s own personality. Emlyn Hughes also, who was a huge help in fixing a lot of Linux specific issues and added proxy support for those in countries who don’t have easy access to Twitter.
With a final note on open source the decision to pursue it also allowed me the opportunity to learn about test driven development and build pipelines. CircleCI it turned out had a free tier for their integration service which meant there were basically zero barriers for me to set up and run unit test checks via Github. Zero barriers other than time of course, but at this point it felt like a worthwhile investment.
Hopefully putting down my thoughts on the page in some way inspires you to finally execute on an idea which has been rattling around in your head. Feel free to get in touch if you have any questions about this project, Electron or something else.