When styling an element for the new Passenger Docs, I immediately took to UIKit, and the will_paginate gem Mislav Marohnić, Application Engineer at GitHub, maintains.

Why UIKit? Because I wanted to try out a new library (and because we're no fans of Bootstrap, more on that later), and because I believe that backoffice tools that have seen some kind of polishing, are a joy to use.

The thing I was working on is a database of the feedback we collect from the Docs. Because no-one wants to scroll past rows and rows of feedback, losing sight of the sentiment of the most current entries, I wanted to add a simple navigation.

will_paginate is a pagination library that integrates with Ruby on Rails, Sinatra, Merb, DataMapper and Sequel. In order to combine the two - rendering a UIKit compatible pagination component for will_paginate - I wrote my own little library.

Why not use Bootstrap?

Generally we would (and do) use Bootstrap when adding some sort of frontend to a system that's only used internally. It would be overkill to task a designer with an elaborate UI when a library will just do the trick. Within Phusion we have a few strong opponents of Bootstrap and its limitations in terms of maintainability and adaptibility. Overwriting Bootstrap is a sure path to frustration.

While UIKit is only mildly better in this regard, I didn't want to invoke the wrath of these individuals. And UIKit seemed like my best option, comparing some of the better known alternatives.

And the feedback collection begins

We looked at pagination for the admin interface of the Docs. To say that the Docs count a lot of pages, would be an understatement. Each of those pages can have one or more feedback results. To avoid tables with endless rows, that hardly offer any insights, we needed a better sorting tool.

Otherwise, the 'feedback box' didn't pose that many challenges. In trying to avoid duplicate feedback, without collecting user data we don't strictly need, we generate a random identifier clientside to send with every vote. Those identifiers are collected in a database to verify if a vote is a duplicate. A measure that can be circumvented by using a different browser, or by disabling or emptying localstorage, but honestly who has the time for that?

We're looking forward to the insights the little feedback app will provide us with!