Blanket Boss

Blanket Boss

Blan­ket Boss was a side project I ini­ti­at­ed dur­ing my time at Bit­mak­er (GA Toron­to)—and added to after com­ple­tion of the course—allowing eques­tri­ans to man­age a col­lec­tion of horse blan­kets.

Blanket Boss viewsScreenshots of Blanket Boss on various devices.

The Story

After our first com­plete build of a Rails app (an Imgur clone), I decid­ed to repeat the entire process myself for extra prac­tice. While con­sid­er­ing what kinds of “thing” I could use as the object of basic CRUD oper­a­tions (cre­ate, read, update, & delete), I thought of my friend Mea­gan.

Mea­gan oper­ates a rid­ing sta­ble, home of many of her own and clients’ hors­es. All of these 35+ hors­es will wear one type of blan­ket or anoth­er at some point in the year, and the rest of the time all of those blan­kets need to be cleaned, washed, repaired, and stored—all things which are part of the ser­vice offered at the sta­bles. One spring, the staff (myself includ­ed) were tasked with cre­at­ing an inven­to­ry of all these items as they were stored, which became a tedious chore involv­ing paper notes and online spread­sheets.

pile of horse blankets next to screenshot of Blanket Boss
From dis­or­dered col­lec­tion of horse blan­kets, to per­fect­ly orga­nized inven­to­ry, with the help of Blan­ket Boss.

Apps are sup­posed to solve prob­lems, right? (At least they should.) I knew this was a prob­lem a very sim­ple blan­ket man­age­ment app could help her solve. And then my imag­i­na­tion ran away with me…

The Process

The ini­tial process was a very straight­for­ward build of a Rails app, with a sin­gle mod­el: blan­kets. This went smooth­ly as I fol­lowed our assign­ment guide, and I felt like a rock star.

An early look at the Blanket Boss app.
An ear­ly look at the Blan­ket Boss app, with its orig­i­nal colour scheme.

Then I got this crazy idea of blan­ket sta­tus­es, a sort of tag­ging sys­tem so that each blan­ket could be marked with var­i­ous con­di­tions. The trou­ble was these might be grad­ed, and would not be mutu­al­ly exclusive—a blan­ket could be in good repair, in use, and need wash­ing at the same time—but I didn’t want to have sep­a­rate inputs and con­trols for each. I tried explain­ing all of this to an instruc­tor to get some help on solv­ing this issue, but our dis­cus­sions were not fruit­ful, and the prob­lem lin­gered. Any free time I had avail­able between com­plet­ing oth­er assign­ments, I ded­i­cat­ed to por­ing through the Rails guides and API. Dur­ing this time, we cov­ered data mod­el­ling and asso­ci­a­tions. At some point this new knowl­edge coin­cid­ed with my search and I fig­ured out how to solve this mat­ter with a has_and_­be­longs_­to_­many asso­ci­a­tion, a join table, and col­lec­tion_s­e­lect, among oth­er things. I felt like a rock star.

My next chal­lenge was cre­at­ing the abil­i­ty to view cus­tom lists, based on blan­ket attrib­ut­es. I con­fused anoth­er instruc­tor as I tried to explain what I want­ed to achieve, and how I was approach­ing it. This fea­ture remained book­marked for quite some time, until I found this arti­cle and learned about scop­ing. It took sev­er­al rounds of error logs, head scratch­ing, mas­sag­ing code, and small vic­to­ries before it final­ly worked as intend­ed. Rock star.

There are a world of fea­tures and exten­sions I have in mind for this app, some of which I’ve been able to imple­ment fol­low­ing the end of the course, and some which remain on a to-do list. I’m hap­py to say that the app is at least usable at the moment, and now I have a com­plete inven­to­ry of my own mare’s clothes: a mod­est wardrobe of 10 blan­kets and cool­ers. Yes, 10. For one horse. Wow.

Tools & Tech

  • Ruby on Rails
  • Post­greSQL
  • thought­bot Bour­bon suite
  • Car­ri­er­Wave
  • AWS S3
  • jQuery
  • FontAwe­some
  • animate.css
  • AJAX
  • Sumo Select

Lessons learned

  • Com­mu­ni­ca­tion is SO impor­tant in co-oper­a­tive prob­lem solv­ing. It’s great to get help from expe­ri­enced coders and peers, but it can be chal­leng­ing to explain and describe a prob­lem and a desired res­o­lu­tion. Is it bet­ter to abstract the idea and get an vague, hypo­thet­i­cal solu­tion that might be bent to fit your case, or does it help to real­ly take some­one down into the specifics of a sit­u­a­tion for a par­tic­u­lar user in an unfa­mil­iar indus­try to get a tai­lored answer? I don’t have the answer to that yet (unless “it depends” counts).
  • Expe­ri­enced coders don’t always have the answers you need, but if you per­sist and keep look­ing, a suit­able solu­tion can be found.
  • Design and devel­op­ment are two sep­a­rate process­es. I know this, and I always lose myself in the first. This time was no dif­fer­ent. [I don’t know if this counts as learn­ing, but if not, it’s one more strike to pound that notion home.]
  • Using thoughtbot’s Neat (grid), Bour­bon, Refills, & Emp­ties was inter­est­ing. Com­pared to pre­vi­ous work with Boot­strap and Foun­da­tion, it was nice to have some­thing more light­weight and mod­u­lar to work with. I still don’t think I took full advan­tage of some of it, but that may be because much of Bour­bon is marked as dep­re­cat­ed in antic­i­pa­tion of a new release, so there wasn’t much left to dive into.

See it

Live site Source