Snatch was the first program I ever wrote, back when I was a child playing around with AppleScripts. Since then it has served as a personal 'Hello World'.
Snatch is a simple concept. It adds whichever song is currently playing on a user's Spotify to a designated playlist.
I wrote it initially because I am always listening to music in the background while performing other tasks (everything from coding to cooking). Making a record of a song I like can be disruptive, it might only take 10 seconds to access Spotify find an appropriate playlist and add the song but that is long enough to lose one's train of thought and that is assuming one is working somewhere with Spotify easily accessible.
My solution to this problem was to write something that would perform this task (once set up) with a single command.
Since I first wrote Snatch I have used it consistently so whenever I encounter a new environment I rework it as a learning experience, an A/B comparison of environments and in order to improve it or make it more accessible.
In order for Snatch to function it has to include several ubiquitous components:
AppleScript: Not a true version of Snatch but included here for context. Written in AppleScript for iTunes when I was a child but used regularly for years before I (and the market majority) moved over to Spotify.
Ruby Script: Ruby was the first OOP I learnt when I first started programming. My implementation was clumsy but it proved a useful context for learning the ropes and served as a personal benchmark for the subsequent version.
Rails: Once I had the business logic it was time to roll out a web app. I was really impressed by the convenience of the Rails framework and the ease of rolling it out with Heroku but I found the lack of flexibility frustrating and the for such a simple application there was a huge amount of bloat that I could not strip.
Rack: I took everything I liked from Rails and wrote my own rack framework from the ground up including it's own ORM which provided a great insight into what was going on under the hood of rails and any other web app. I hosted it on a Raspberry Pi and served it thorough my personal IP address which had plenty of it's own shortcomings but again proved an invaluable learning experience.
Golang: While I appreciate the universal ease of use that web apps offer they come with a huge amount of extraneous material which really isn't required for Snatch so I returned to a client-side executable, this time in Go. Working with Go requires an understanding of exactly what goes in within all the utility functions of Ruby that one could otherwise remain oblivious to. Between that and the idiosyncratic 'Go way of doing things' provided a steep learning curve but has been my most enjoyable learning experience to date and fostered a real interest in Go, including contributing to the language itself.
Android: Once I settled on client-side executables the issue of mobile accessibility returned. So I picked up Java and Android. This project is ongoing but once complete I intend to release it on the Play Store.