The Portfolio of Derek Brooks

Ruby on Rails

I started programming with Ruby on Rails in 2007. It was really my first time being forced into using MVC principles and it was one of the best things that has happened to me as a programmer. The way that Ruby on Rails pushes good development principles really strengthened me. Since starting with Rails, even my PHP apps became much cleaner and more concise.

Here are 37 projects that I've worked on tagged Ruby on Rails.

Voter Registration SaaS

Screenshot of Voter Registration SaaS
Voter Registration SaaS was a thin, skinnable, multi-lingual, voter registration web application built on top of the DNC's Voter Registration API. This app lived in several places - most notably at the hilariously named gottaregister.com, which was mentioned by President Obama in several speeches, on television, within social media and even on reddit. In most states, this application basically acted as a fancy PDF filler that the user could print and mail in. However, it also allowed us to capture their information so that we could follow up and target that potential voter in the future. I inherited this application early-on and was in charge of making sure it was both stable and scalable while overseeing implementation of the campaign's evolving feature requests. It was one of the most interesting applications to scale because it rarely received organic traffic. It would get absolutely slammed when the president or some celebrity mentioned or linked to the application in speeches, on air, or in social media. This was addressed by extensive caching, limiting dynamic content on landing pages, and queueing API requests in the event of API downtime or latency. The queueing backup that I implemented (using Amazon's SQS) saved us thousands of voter registrations alone. We also made this application embeddable and eventually open sourced the core of it.

Call Tool

Screenshot of Call Tool
Call Tool is a phone canvassing web application used by both Obama for America and the DNC. In its simplest form, it provided volunteers with a potential voter to call and a relevant script to read. The volunteer could then record the answers from the potential voter, which were used to learn more about how the campaign should be operating or targeting individuals. Underneath its shell, Call Tool had a fairly complex architecture that proxied all of its data through our Narwhal API and interfaced with a Voter Checkout Service API and synced with 2 of the campaign's vendors. I architected and built the Call Tool web application and its communication with the Narwhal API from the ground up. I also extended several parts of the Voter Checkout Service to make it more performant, tighten protection against fraudulent callers, and better integrate with our vendors. As I took on other tasks on the campaign, I worked with other engineers and oversaw all development on the application.

Voting Location Lookup

Screenshot of Voting Location Lookup
The 2012 Obama Re-election campaign was a firm believer in that the more voters who turn-out to vote the more likely Democrats are to win the election. With that, the campaign put a huge effort into cataloging voting locations and making sure voters had the tools they needed to find these locations. As the lead engineer of voter contact I architected and built the data layers, integration tools, and APIs to allow client applications to get at the data. I worked very closely with our data team, the DNC, voting location experts, and our front-end team. Despite the incredible challenges that came with the constantly evolving, incomplete/disorganized data and different laws/rules in each state, we built a comprehensive, nation-wide election day lookup tool. In addition to that, we built the first ever nation-wide "early vote" lookup tools. Not only was this data available via online lookup tools, it also integrated with DNC applications and allowed our phone canvassing applications to automatically display relevant voting locations for the canvassed voter.

Debate Watch

Screenshot of Debate Watch
Debate Watch was a web application loosely based on Planned Parenthood's "Pledge a Protestor" program. The basic idea is that you make your opposition pay for negative actions by allowing your supporters to pledge money each time the opposition attempts slander. With Debate Watch, we took some of the Republican candidates' favorite demeaning terms and promoted them on our site along with some fact checking. Obama supporters could then pledge to donate a certain amount of money each time a given word was said during the debate, and of course put a max cap on their donation in case something got out of control. We had a team of word trackers stuffed in a room listening to the debate and tallying the terms in real-time. On the website's front-end the words would then re-arrange and scale in real-time as our pledgers watched. I built the entire back-end of the application along with the word tracker and a small JSON API for consumption by our front-end team. This application was built primarily as an experiment to test some of our scaling and payment infrastructure but managed to be quite fun and also earned us tens of thousands of dollars early on.

Tweet your Rep

Screenshot of Tweet your Rep
Tweet Your Rep was a simple application that allowed supporters to easily post tweets to their state representatives based on current issues. It allowed Obama For America to create a promotional campaign, select the chambers and parties to target, and then add some pre-built tweets templates for supporters to use. I architected and built the API layer and basic CMS as well as integrated it with the Twitter and the Sunlight Labs Congress APIs.

Debate Quotes

Debate Quotes was my first assignments after joining Obama for America, and my re-introduction to Rails after not using it in over a year. It was built to keep track of, call out, and fact check quotes during the early Republican debates. Technically, it was a basic CRUD Rails application that exposed both normal views and a JSON based API for use by the front-end. We had this application in production 72 hours after I joined the campaign and iterated on it for another debate a few weeks later.

Perficut

Screenshot of Perficut
Perficut is one of the leading landscaping and lawn service companies in Des Moines, IA. They came to our company, Red Five seeking a more serious web presence along with some custom tools. In addition to a complete redesign built around our CMS, I also built a large custom irrigation and service scheduler for Perficut and their clients. This scheduler allowed Perficut to define a season, serviceable neighborhoods, average appointment times, the number of crews available, and other small details. From here, the tool allowed Perficut to assign crews to neighborhoods (based on stats from the previous season). Once this was all set up, customers could visit Perficut's site to schedule sprinkler system startups, shutdowns, and service. On top of this custom tool, I was also in charge of integrating this site into our SiteMan CMS and deploying the site.

Philadelphia Marketplace

Screenshot of Philadelphia Marketplace
Philadelphia Marketplace is the shopping center located within Philadelphia International Airport. They hired Red Five to update their site, give them a content management system and also set up interactive maps for their shopping center. This was a pretty simple project from an engineering perspective. I was in charge of integrating the design into our CMS, writing a bit of javascript for the front-end, and finally, deploying the site.

Valley West Mall

Screenshot of Valley West Mall
Valley West Mall is a long time Red Five client and was sort of a guinea pig to test out the latest version of our SiteMan CMS and the brand new javascript/HTML5 based SVG map UI that we'd built. Rebuilding the Valley West Mall site with our new technology was a great learning experience. We greatly improved our CMS, made things much more efficient and moved from Prototype to jQuery. Rendering maps with javascript rather than flash meant they could be viewed on mobile devices, iPads, etc. In addition to these great new features, Valley West requested to be integrated with their Twitter account. This allowed me to build a twitter plugin for the SiteMan CMS which would allow the mall to easily post tweets as well as monitor mentions and replies.

Bix Produce

Screenshot of Bix Produce
Bix Produce is a produce distributor based in Minnesota. They became interested in my company, Red Five after seeing the produce site that we built for Loffredo. I was in charge of integrating the design we came up with into our SiteMan CMS, and also deploying the site for Bix.

Holiday eCards

Screenshot of Holiday eCards
This is a microsite that I built as a marketing tool for malls owned by PREIT. It allowed people to customize and send flash-based cards to friends and family. It was also built so that a campaign could be coupled with a contest. For example, all cards sent to moms on mothers day could be eligible for a mall gift card. For delivering the cards, I wrote a small script using the WhatCounts.com API. This little application was a lot of fun to work on and a huge success for the associated malls.

v2 - latest version

The Holiday eCard microsite was brought back to life for the winter holidays in 2009. Only this time instead of supporting only 3 malls, it was to support ~40 malls. That said, there were many performance improvements and generalizing of the codebase. The site was a great success receiving several hundred cards.

Letters to Santa

Screenshot of Letters to Santa
"Letters to Santa" was a micro site that we built for participating malls owned by PREIT. The site allowed kids to write letters to Santa and Santa would eventually reply. Santa had a handful of random responses that he sent back to the kids (via CRON job) just before going to bed. This was a fun little microsite to build. I modeled and handled all of the dynamic functionality, storing the kids' letters, and writing the scripts to help Santa reply in a timely manner.

v2 - latest version

The second version of this site supported around 40 malls rather than the few malls it supported the first year. With that, I was able to clean up and generalize a lot of the code. I also changed the email functionality to use the WhatCounts.com API to help Santa send emails back to kids.

Countryside Motorsports

Screenshot of Countryside Motorsports
Countryside Motorsports is an interesting little site that I was able to crank out pretty quickly in 2008. However, we got it done right when our client got super busy, so it sat unlaunched for about a year until we were able to resurrect, update, and launch the site. It was a pretty basic marketing/inventory viewing site for an ATV, Snowmobile dealer in Iowa. I modeled and built a custom admin for managing inventory, specials, and homepage banners.

TowRate

Screenshot of TowRate
TowRate was a startup that offered a custom service to towing companies. The site allowed subscribed companies to manage their assets, map routes, and calculate profit margins for every tow. It was built in a way that allowed the towing companies to quickly run these calculations while on the phone, so they could figure out the most profitable way to charge for each tow. On this project, I was in charge of pretty much everything except for the initial design. My job involved data modeling, loads of calculations, back-end development, front-end development, form design, and deployment. TowRate was a very javascript heavy application, using plenty of asynchronous calls for things like sorting, calculating rates on the fly, and grabbing map data from the Google Maps API. The Maps API was used to help determine mileage and time for each tow. From there, the app used extensive math and formulas to help find the best price for each call. Companies were able subscribe to TowRate on a monthly or yearly basis. I integrated PayPal's Web Payments Pro to handle these subscriptions; let users join, autorenew, enter discount codes, cancel accounts, etc. Subscribed companies could also manage their trucks (as well as truck expenses), users, tow rates, tax areas, routes, etc. It provided an all around fleet management solution to any towing company.

West Bank

Screenshot of West Bank
West Bank is an Iowa based bank that my company, Red 5 Interactive, had been working with for years. When they came to us for a redesign, my assignments were to integrate our in-house CMS, build a couple plugins, and build functionality to capture a user's zipcode and display the appropriate location-based content. The plugins I built were based on previous functionality they had and wanted to retain: current loan/savings rates, alerts, and custom newsletters.

Iowa Alcoholic Beverages Division

Screenshot of Iowa Alcoholic Beverages Division
Iowa Alcoholic Beverages Division is responsible for the regulation and control of all alcohol and tobacco in the state of Iowa. The division has generated hundreds of millions of dollars for the state of Iowa. Our company, Red 5 Interactive had hosted IABD for years. Up until this rebuild, they were one of the very last Java based sites running on an ancient server stuck in a closet in the back of our office. As time went on, it became scarier and scarier to let their site remain live. Once showing IABD the physical server they were running on, talking them into a complete rebuild was no challenge at all. One of the most daunting parts of this rebuild was the task of migrating all their content. I heavily modified our internal Site Spider to accomplish this task. The client had around 400 pages and 700 files that were linked to (mostly PDF press releases). I had to completely crawl their site, import everything into our CMS and fix every link to work correctly. Given the fact that they had FTP access to the old server, things were a mess, and this was not a simple task. I'm talking about some serious site scraping madness! Being such a large site, this client came up with all kinds of awesome ideas for our CMS, which I was able to add-on and commit back to the repository for our other clients. After setting up our internal CMS and importing their hundreds of pages/files, I had to build a Javascript Fund counter to display on their homepage. Basically, the client takes their projected income, enters it into a custom tool that I built in SiteMan, and my JS did the math to determine how much money was being transferred to the state every second. It then dynamically animated a count-up on the homepage. I also built some fancy, custom (and totally dynamic) javascript dropdown navigation. Finally, I had to model and build a custom plugin to allow IABD to import CSV files of their alcohol products, stores, and tobacco compliance data. Then, I built functionality to browse and search all of this data on the front-end. At the time, Iowa Alcoholic Beverages Division was basically a test of all my skills. Sys admin, back-end development, front-end development, scraping, importing, and finally deployment.

Loffredo Fresh Produce

Screenshot of Loffredo Fresh Produce
Loffredo is a high-end produce company serving much of the Mid West. When our company was hired to rebuild their site, my assignments were to integrate our in-house SiteMan CMS, create some plugins, build in a fancy javascript fruit carousel, and of course deploy the site to our production server. The plugin I built for this site simply allowed Loffredo to manage branches and employees and allow site visitors to contact them. The fruit carousel I mentioned was a custom javascript animation that cycles through various fruits on the homepage.

Michael Annett

Screenshot of Michael Annett
Michael Annett was an upcoming race car driver from Des Moines, IA. We didn't build his site from scratch, but when his site development/hosting company stopped providing good service, we were asked to take over. The former host of michaelannett.com was not very cooperative in the site transition - so we had an interesting time getting Michael's content for him. To get Michael's site, we wrote an internal app called Site Spider to crawl his existing site, save all the pages, their images, stylesheets, javascripts, etc - all while preserving the links and folder structure. Once I successfully crawled and downloaded this site, I put this app into our internal Content Management application, SiteMan. I also built a couple custom SiteMan plugins, which included a photo gallery and online store management. The store they wanted was fairly small, however, no matter the size, building an online store is quite an effort. After launch, Michael was able to easily update news, photo galleries, results, schedules, general web page content at anytime, and could sell his gear online.

FTTHCAP Conference

Screenshot of FTTHCAP Conference
Fibre To The Home Council Asian Pacific (FTTHCAP) is a non-profit organization aiming to promote and accelerate Fibre To The Home - obviously in the Asian Pacific. FTTHCAP hired our company to build an easily manageable site to help promote and provide information on their 4th annual conference. Once the design had been built out, my job was to stick everything into our internal CMS application, SiteMan, and get it deployed ASAP. This was our first installment of SiteMan on a single site system, so it was a great trial run. Despite a couple "gotchas," I was able to push this site out with our SiteMan CMS very rapidly. During this launch I was also able to fix up some loose-ends that I found in SiteMan, thus enhancing our internal application even further. After the launch, FTTH was able to easily edit any and all content via WYSIWYG editors.

Site Spider

Site Spider is an internal application that we wrote at Red 5 Interactive. Its purpose was to crawl an entire website and save everything (pages, stylesheets, javascripts and images) locally. We originally wrote the app when a client's previous web host was unwilling to surrender their data. It was incredibly useful for our company to scoop up new business from uncooperative providers at the time.

S & C Automotive

Screenshot of S & C Automotive
S & C Automotive is a company that provides vehicle warranties and protections to local car dealerships. If you bought a car from any of several dealerships in Iowa, you'd be offered a set of warranties - paint protection, rust protection, etc. These protections were all sold to the dealerships by S & C. I built a web application to allow S & C to manage these protections and offer them to dealerships. The dealerships had their own accounts and could log in and select each protection that they sell. Then, S & C could view, process, ship, and bill for these registrations.

PREIT Malls

Screenshot of PREIT Malls
PREIT (Pennsylvania Real Estate Investment Trust) invests in shopping malls in the eastern United States. PREIT is one of the primary consumers of our internal CMS project, SiteMan. We successfully deployed SiteMan to allow PREIT to manage over 40 of their mall websites - all from 1 location. One challenge we faced with this project was PREIT's constant seasonal marketing campaigns and presentation layer redesigns. As such, we built SiteMan so that new presentation packages could easily be added into SiteMan for each of these campaigns. We also allowed for mobile designs to be appended to each of these presentation packages for easy mobile browsing.

SiteMan

Screenshot of SiteMan
SiteMan is a Content Management System that we built at Red 5 Interactive. It was originally built so that mall property owners could manage each of their mall property's websites. However, once we realized how powerful our system was, we decided to generalize the app so that we could deploy it for all of our clients. We rebuilt SiteMan to allow our clients to easily manage a single website or a group of websites. This way, a parent company could edit any of their child company websites, while employees of the child companies would only be able to see and manage their respective site. The front-ends of the sites managed by SiteMan were also completely extracted from SiteMan itself, which was great for 2 reasons. First of all, it allowed us to more easily keep all of our clients' systems up-to-date in that we were just updating SiteMan and not touching their presentation layer. Secondly, it also allowed us to launch new campaigns and designs for clients very quickly without touching the content management system. When we deployed SiteMan for a client it came with a core group of tools like user management, web page editing, file management, audit logs, etc. From there, custom tools could be added as plugins. These tools included functionality like, announcements, events, careers, photo galleries, stores, social networking, etc. We also built SiteMan in a way that allowed users to customize their tool layout. Any user could pick which tools they used the most and arrange them in a way to get a quick snapshot of the exact data that they were interested in. Tools could be added, removed, or sorted at any time - and everything remained just as they left it on their next visit. This application was very Javascript heavy, making extensive use AJAX, dialog windows, and WYSIWYG editing. As such, we had minimal page loads which provided a very streamlined experience for our clients. I am very proud and excited to have worked with such a great team on this app. It was so versatile and simple to keep pushing forward.

NAPA Sales Driver

Screenshot of NAPA Sales Driver
Edwards Graphics Arts (a partner to NAPA) hired our company to build a web application for distributing posters and flyers to NAPA's retail stores. Each store could purchase any of several different promotional products. This is a process that NAPA and it's 3rd party designers had previously handled over the phone. I built a web application to help streamline this process and eliminate phone ordering. This app allowed Edwards Graphic Arts to upload and edit designs for the stores to order. Retail store managers could then visit the site and order promotional products that fit their demographic. This site was very javascript heavy with a lot of asynchronous calls to provide a quick user experience. I also integrated it with PayPal's Pay Flow Pro to allow for online payment.

TMC Transportation

Screenshot of TMC Transportation
TMC, a local trucking company with some of the most beautiful trucks that I've ever seen, hired us to rebuild their website and enhance their web presence. I was in charge of modeling and building a system to manage employees, sales reps, and news. The sales rep data was fed to flash maps via XML. The careers page was built by consuming a remote XML feed.

Monroe Marketplace

Screenshot of Monroe Marketplace
Monroe Marketplace is a shopping center located in central Pennsylvania. Their parent company, PREIT hired us to build a promotional website during the development of the shopping center. My primary tasks were to build a blog, calendar, polling, and a job posting system. Each of these tasks were fairly trivial in that I've done them several times, but it was my first opportunity to write a polling system and I thoroughly enjoyed that.

Signs Plus

Screenshot of Signs Plus
Signs Plus is a Des Moines area company who is responsible for some of Iowa's most impressive signage. They hired my company, Red 5 Interactive, to completely rebuild and rebrand their site. They wanted something that was loud, colorful, and gets their products right in front of the customer. Our designer took care of the visual aspects, while I was in charge of modeling and content management. The major function of the admin panel was to allow Signs Plus to upload photos of their work. The images were dynamically resized in several ways to fit the flash-based home page, as the rest of the site. Being that the homepage was flash, I also built some dynamic XML endpoints to feed data to power the animations. Shortly after release, we received emails from Signs Plus saying that they were already getting new business based on the quality of their site.

Keokuk County State Bank

Screenshot of Keokuk County State Bank
Keokuk came to us with a redesign in mind and also wanted the ability to easily update loan rates, add news articles, and attach rich media to those news articles. Keokuk's website wasn't too programmatically intensive, but it did give me an opportunity to try out some new Rails ideas. While building this app, I found a Rails plugin called ActiveScaffold, which made a standard CRUD scaffold that was very javascript heavy with a lot of asynchronous calls and very few page loads. It was a fun plugin to play with and after a bit of modifying and extending, it seemed to fit the bill for this project.

Adium Status Plugin

Screenshot of Adium Status Plugin
Adium was a multi-protocol chat client for Mac OS. I enjoyed it because it let me connect to AIM, Google Talk, ICQ, and other popular chat clients from the early/mid-2000s. Shortly after getting Adium I installed a TwitterAdium plugin (aka Xtra) that would set my current status to whatever my most recent tweet was. The problem that I had with this plugin was that I had too many apps hooked to my Twitter account and was running into rate limiting issues on their API. I had derek.broox.com, Facebook, MySpace, and Adium all hitting Twitter, which made them sad. Since derek.broox.com grabbed and cached my Twitter status, I decided to be nicer to Twitter and write an Adium plugin to grab my status from derek.broox.com. I built the plugin with Ruby and made it configurable via YAML. I simply defined the url and duration in the included YAML file and set my Adium status to %_RemoteStatus. That would then periodically hit my website to fetch my status and allow all of my chat contacts to follow what I was doing while I was on the go.

Cownie For State House

Screenshot of Cownie For State House
Iowa Republican Peter Cownie hired our company to build a promotional website during the 2008 election. He wanted a pretty standard, informational site with a blog, and some photos. Since so many of our clients wanted blog-like functionality, I built a Rails blog plugin (named Bee-Log) and this site was the first to make use of it. I also integrated this site with the Flickr API to display photos from Peter's Flickr account. P.S. Peter Cownie won. Probably because of this website.

Justin Marks Racing

Screenshot of Justin Marks Racing
The company I work for, Red 5 Interactive was hired to build a site for NASCAR truck driver, Justin Marks. Our basic guideline from the driver was to "make it like Bam Margera's site." He really enjoyed moving elements, photos, and of course - a music player. My job was to integrate the site with Justin Marks' Flickr account, build XML feeds to power our flash app, and also build a non-flash version of the site.

Glimcher

Screenshot of Glimcher
Glimcher is a premier real estate investment trust that manages malls and shopping centers across the United States. They came to my company, Red 5 Interactive, seeking a corporate website. My company had already built and launched this site by the time I began working on it, so my job was simply to enhance some features on both the admin and the front-end. Glimcher wanted a near real-time display of their stock price on the homepage. However, there weren't any great services to grab this information at the time, so I built a CRON scheduled script to scrape a couple quote sites and grab their stock price. Whenever the price was successfully grabbed, the price was written to a local file that was read by the website. Glimcher also wanted real-time stats on their leasing informational pages, so I added some functionality to display updates on leasable square feet, property count, etc. Finally, they wanted to be able to quickly show/hide all dynamic content on their website. I added some simple toggling as well as drag/drop sorting to any and all data in the CMS.

Team 46

Screenshot of Team 46
Team 46 is a group of service and avionics specialists working at the Des Moines Flying Service (DMFS). They hired our company, Red 5 Interactive, to make a micro-site for their technicians. The Team 46 micro site was pretty straight forward. They needed a way to blog, manage case studies, take service requests, and upload photos. For the blog, I simply installed an internal blog plugin that I'd previously built. Everything else in the CMS was custom programmed. There was nothing crazy about this app, but everything was built and deployed very smoothly.

The Bellevue

Screenshot of The Bellevue
The Bellevue is a building located in downtown Philadelphia that houses restaurants, shops, and a hotel. They hired my company, Red 5 Interactive to build an informational site for them. I built a small, custom content management system for this site allowing Bellevue to manage events and photo galleries. The photo galleries could be organized and sorted via drag and drop.

Audit Trail

Screenshot of Audit Trail
The Audit Trail is an internal application that I built for Red 5 interactive. When we built sites for clients, it was often helpful to track all administrative actions that took place in their content management systems. This allowed us to easily troubleshoot content issues - accidentally deleted data, bad actors, security breaches, etc. We were duplicating much of this functionality for several clients, so I whipped up an Audit Trail app. I built it so that it could be deployed in 2 separate ways. The first, and most commonly used way was for our client applications to call a centrally hosted Audit Trail as a service. With most of our clients hitting the same service, we could keep a close eye on what all of our clients were doing. The second way was to install the Audit Trail as a separate app for any given client. We generally only did this if we anticipated a large amount of logs, or if we had a client that managed several sites. The app and service was incredibly useful. Our clients really enjoyed being able to easily see what was being updated and who did the updating.

Countryside RV

Screenshot of Countryside RV
Countryside RV was my first complete Ruby on Rails site. I was the main programmer for this project while working with Red 5 Interactive. Our designer and front end developer took care of most of the design and html build-out. I was in charge of modeling and building the actual application and content management system. The primary function of the site was to display all of Countryside's current RV inventory. Countryside could add a large amount of detail as well as upload multiple photos of a given RV. We've also implemented a "Buyers Gallery" that allowed some visible interaction with Countryside's user base. When someone bought an RV from Countryside, they'd be featured on the website with their new camper.

BRT Realty

Screenshot of BRT Realty
BRT Realty is a commercial real estate company who my company, Red 5 Interactive hosted. I came into this project a bit late, so I didn't have a whole lot to do with the overall buildout. However, I did build most of the forms for collecting visitor information. I also handled some dynamic content display, etc.