Dogfish Head Craft BreweryDogfish Head Craft Brewery, located in Milton, Delaware, is one of the 25 largest microbrewers in North America. Starting in 1995, Dogfish Head went from a backroom operation of three little kegs with propane burners underneath to a full-fledged brewery and bottling powerhouse. They ship and sell beer in over 30 states, are currently expanding their brewery, branching out with restaurant franchises, and continue to grow.

The Dogfish Head brand prides itself on a ‘do it yourself’, ‘off-centered’, grassroots style work ethic. When it came time for them to choose a company to build their website, they chose another ‘off-centered’ company, Inclind Inc, not too far from the brewery.

Challenge

The first site was completed by Inclind in 2005 on an in-house Coldfusion powered system. But the demand and popularity of the Dogfish Head brand fast outpaced the technology and in 2007 planning began for a new content management system. We needed the system to be scalable, modular, and able to quickly develop solutions to implement features upon request. It also needed to cater to the Dogfish Head community and allow them to submit content, participate in discussions and contribute to an interactive ‘Fish Finder’ map.

Their new CMS system would also have to support ecommerce, and integrate with Dogfish Head’s Microsoft Dynamics server, an inventory/assets management system which tracks merchandise information, among other things.

Inclind evaluated three potential solutions:

  • Build another in-house Coldfusion CMS system
  • Use Drupal as a base platform
  • Use Joomla as a base platform

It was determined that building another in-house system would take far too much time to develop. The evaluation of Joomla did not prove that it had the ease of extensibility and reliability that we need in a web application, and Drupal did. Thus, Drupal was chosen and development began.

Why Drupal?

  • PHP is cheaper to host and less resource intensive than Coldfusion, and no licensing fees apply.
  • The LAMP stack is fast, efficient, and easy to work with.
  • Large, competent developer community to provide assistance and solutions
  • Drupal allows for easy overriding of theme elements for quick implementation of changes
  • Drupal’s hook system allowed Inclind to rapidly build modules to develop custom features
  • Drupal’s backend was easy to understand for the client for adding content

Design, Content & Theming

Dogfish Head wanted their site to reflect the art and print found on their labels and products, appear rough around the edges and project the style of the culture in the business. Inclind’s graphic designer worked closely with the vice president of Dogfish Head on the design for three months to bring the design ideas to life.

We used taxonomy in conjunction with Node Auto Term (NAT) module to take advantage of the menu system. We also created a custom module to work behind the scenes on a node to create the relations between taxonomy structure and the menu structure. The end result is a breadcrumb for any path that is in the menu system, which is clearer for the end user where they are in the site. When a node is created and placed in the menu, NAT picks up the path and creates the term and trees, which is fed to the menu to create the breadcrumb. Our custom module ties all that together behind the scenes, so all the user has to do is place a node in the menu. Pathauto creates friendly URLs based on the menu path to keep things clean.

Part of the website is dedicated to Q&A from users, a forum, and a community powered map. Users can register for the site, and are allowed to create content. The content is submitted and queued for approval, with exception of the forum section. Staff log into the backend and review Ask Dogfish question nodes, and choose which ones to answer. The ‘Fish Finder’ map is powered by the Location module and lets users input locations of where they bought or were served Dogfish Head beer. This helps other fans of the beer know where to find it in their area. The map itself is its own theme, so we could strip out all elements to have the map load in the entire browser window. ThemeKey module was used to change the theme based on the path of the map.

To make content creation easy for general users, we made use of a few custom modules to remove a lot of elements from the node form and auto populate the values depending on the content type. All we wanted to present to the user was the Body field, and not have them see anything they did not need to see.

Hosting

The theme is pretty graphic intensive with lots of html elements and images. With the combined application load of panels, views, menu and the theme per page, we needed to serve pages as static files to take the stress off of the server. The Boost module provided a good starting point for us to server static html files, but did not give us enough performance results that we wanted. Using Amazon S3, we offloaded all theme files to S3 and kept them in sync with the web server. We improved response times by loading from Amazon instead of loading elements from the application server. Currently we’re hosting on one 2GB server provided by Slicehost, a great hosting company who hosts all of our websites. It’s held up well and has helped reduce hosting costs versus having multiple servers and databases trying to serve up all the data necessary to power each page.

The website receives about 80,000 hits and gets 480,000 pageviews a month.

Ecommerce with Ubercart

Another issue we had to tackle was bringing in the ecommerce portion of their existing website. Before, they used two administrative interfaces to control their content and their ecommerce store. It was confusing and complicated to administrate for their staff, so the replacement needed to be easier to use and consistent with their backend. The folks at Dogfish Head also utilize Microsoft Dynamics application server for inventory management which would need to be integrated.

Microsoft Dynamics would be the master source for merchandise, SKUs, pricing and attributes. After a week, we had re-architected how products were stored in Dynamics to make it consistent and uniform so that it would be easier to bring them into Ubercart. Once that was complete, we constructed a module to automate importing from Dynamics when cron runs. It talks to Ubercart and determines what products are in the system. If there is a new product, it adds it, and based on the SKU it creates the attributes and options (color, size, etc). If the product exists, it will only update the price (if it’s different from Dynamics records). This allowed us to get the store started a lot faster than having someone bring in each product manually.

This data sync alleviated their staff from needing to administrate the products directly and maintain two sets of data. They can just make changes in the Dynamics system, and Ubercart receives the updates. All they have to do is go in and add the images and description for a product.

Dogfish Head regularly conducts brewery tours at their Milton, DE location. At the end of the tour, attendees have an opportunity to purchase Dogfish Head merch (including beer!). Inclind setup two terminals running an Ubercart point of sales system so they could checkout people right in the brewery. Using the Framework theme, it was easy to build a point and click interface for Dogfish Head.

At the end of the day, there are a handful of reports using Views that they can filter out and obtain the data they need, such as End of Day Sales and Cash vs Credit purchases.

Modules Used

Over 100 modules were used. Here are some of the crucial ones we employed:

  • CCK
  • Views 2
  • Panels
  • Ubercart
  • Pathauto
  • Location / Gmap
  • Admin Menu
  • NAT
  • Webform
  • Menu Block
  • Boost
  • Nice Menus
  • Wysiwyg
  • Better Formats
  • ThemeKey

Custom Modules

Menu Taxonomy – Creates taxonomy tree structure based on the nodes menu placement

Dynamics Import – Imports data from Microsoft Dynamics and syncs Ubercart products

Dogfish Map – Powers the Fish Finder product map in conjunction with Location

Form Automation – Determines default values per node type if the user does not have permission to certain elements

Error – Provides better error reporting, assisted with dBug.php

CDN – Syncs local filesystem with Amazon S3 account and automates rewriting of file paths and URIs based on file existing in S3 or not and ensures file availability.

Map Views – Provides intelligent defaults for the Fish Finder map so the user does not have to perform a search before seeing the view result when they get to the page. Also provides a default result if no result is found, with a pop up notification. This prevents the map from going away if view result is 0.

Banner – Allows staff to upload images into a gallery, then embed that gallery into a block for placement. Cycles through images using cycle.js and can be clickable to a site or page.

About the Developers

Inclind Inc is a Georgetown, Delaware based web development firm specializing in PHP and Coldfusion applications, Drupal consulting, Drupal development webdesign and systems integration. For more information on how Inclind can help you, please visit www.inclind.com.

Comments

Drupalized’s picture

Nice project and good looking site congratulations

mikeytown2’s picture

Glad to see you guys are using the boost module. Front page is a whopping 1.5mb download, and as you figured out, boost can only help so much when dealing with media rich websites. Optimizing Apache can get you a lot; switching to nginx might get your further. You also might consider using Pressflow Drupal. Great job btw!

kevinquillen’s picture

Yeah we worked a lot of nights optimizing the Drupal core, tweaking the server and offloading all media to Amazon S3 to reduce load times. It will do wonders, but authorized users don't get the benefits of Boost/caching. Does anyone know how to make logged in experience as smooth as anonymous?

===========
read my thoughts

mikeytown2’s picture

Explain in detail your setup, diagrams help. Test to find & ID the slow queries on your site. Use APC & memcache to help PHP & MySQL.

peterx’s picture

You have a js file of 39kb that looks to be jquery with comments. jquery provide files without comments and there is a program to remove the comments. You can also shrink CSS with similar tricks.

After that, I would look at delayed loading of some image files. Those images that jump around could be loaded after the rest of the page loads.

100 modules. There are a few writeups of modules that chew up the database. Use the database show sql to see what each access does. Look for things like access counts. "read 655 times". If you can get that type of module to performs the counts in background using cron then the individual pages can show cached stats instead of counting 655 rows for every page access.

kevinquillen’s picture

Thanks, I'll look into that.

===========
read my thoughts

kevinquillen’s picture

Reading your comment I just realized to mention we also employed APC and memcache.

===========
read my thoughts

skullcap’s picture

Nice site, thanks for the great write up.. lots of graphics on the front page.

rszrama’s picture

I tweeted before and I'll say it again... hooray for Ubercart on a good beer site. : )

skyredwang’s picture

That's just one brewer on Drupal. This http://greatbrewers.com represents more than 90% of all the brewers, and they are on Drupal, too.

held69’s picture

A very nice and goog looking site.

Is the search engine on the fishfinder page

http://www.dogfish.com/community/fish-findin.htm?type=Distributor&countr...

a custom made module as well?

kevinquillen’s picture

ThemeKey + Gmap View + Custom Theme + views hooks + exposed view form

===========
read my thoughts

Daniel Saltman’s picture

nice

mimetic2’s picture

Link is broken on the bottom.

If you click on store on the footer, its broken.

kevinquillen’s picture

Thank you. I am adjusting that. They pointed to the old store which we needed to keep propped up as data was moved into the new one.

===========
read my thoughts

creed’s picture

From a former visitor, and on that wishes you sold your beer here, congrats on your new site. Very nicely done!

Cant' wait to be back in DE to sample their wares. :D

kevinquillen’s picture

Unfortunately they cannot sell beer online. We learned a lot about ATF, state, county and local laws regarding alcohol over the course of this website for sure. But they do have a lot of beer at the brewery ready to buy. People travel from all over to take a tour! They are remodelling the brewing facility and expanding their offices. In 2010/2011 they will have a cafe in the facility as well.

===========
read my thoughts

Finbarr’s picture

Reading posts like this makes me realise how inadequate a drupal developer I am.

AshokanKid’s picture

While reading this interesting write up about TWO of my FAVORITE things (Drupal and BEER!) I had a similar feeling, that, WOW, I have DEF got to get up to speed more here. LOLOL

But, it's all good. Remember, we all have our own talents and capabilities and beyond that we have this GREAT Drupal Community. Soooo, if THEY can do it., then you and I can do it~! :-)

(And look at all of these wonderful people here on Drupal who are just wanting to help us!)

rszrama’s picture

"we all have our own talents and capabilities"

hehe - they're good at making beer, I'm good at enjoying it. : )

kevinquillen’s picture

I don't think 120 Minute is sold in stores... but it's a party in a bottle for sure.

===========
read my thoughts

alien73’s picture

I live not to far from Dogfish Head.. Congrads on the cool site!

yaacovtp’s picture

Whole Foods in NYC carries a ton of their bottles including the 120 minute. My favorite by far is the Indian Brown.

dave703’s picture

You can pick up bottles of 120 IPA at Total Wine in Chantilly in northern va. August 18 the new dogfish is opening in chantilly!!

lhugg’s picture

Love to see Drupal projects being done that don't look like Drupal projects -- nice theming job!
Also love to see Drupal get the projects over Jooooooooomla. It's the better tool.

kevinquillen’s picture

Yeah. I have tried Joomla a couple of times, but was more familiar with it when it was known as Mambo. Can't say the impressions left on me were favorable. To each his own though.

===========
read my thoughts

annatech’s picture

...but to many developers out there, it is not necessarily the "better tool". All the requirements listed in the article are easily met by Joomla 1.5.x. There are many CMS which, like Drupal, can utilize PHP on LAMP stacks and WAMP stacks. Joomla, like Drupal and any other PHP-based CMS can be coded to communicate via LDAP, XMLRPC, SOAP/WSDL. Since the previous post brought up Joomla, I should remind the Drupal community that a robust Joomla framework, leveraging OO programing in an MVC architecture makes for a remarkably capable, flexible and easily-visually-customizable web development platform. The component/module/plugin logic serves the purpose of making it obvious to end-users how the CMS functions, and organizing a developers approach to extending the CMS (not to mention that it facilitates a markeplace for extending the CMS, which also appeals to end users).

I don't mean to downplay the strengths of Drupal, of which they are many, nor would I argue against the statement that Drupal is the most overall "capable" open source CMS, but given the poor economy and companies' desire to cut costs, the comparatively higher development time and cost may encourage them to look for more affordable alternatives. Joomla, in its current and forthcoming form, is poised to offer just that with little-to-no compromise.

peterx’s picture

How do the D7 changes stack up against Joomla? Do they lessen the OO differences? What is Joomla developing for 2010? If Dogfish were building this site in 2010 using D7 against the current Joomla or whatever will be released this year, how would your comparison change?

kevinquillen’s picture

At this point, a year later, we made the correct choice in using Drupal. If I had to do it again, I'd pick Drupal any day of the week.

===========
read my thoughts

torgosPizza’s picture

Great beer, great site, and a great CMS to use for it all ;) Nice work!

Have I helped you? Consider buying me a beer.

syh’s picture

Nice site congrats & thank you

nutrix’s picture

Congratulations, TEAM. Love the theme. The shopping cart is sweet. Wanted to find out if you'd think of an object drag and drop to their cart?

Cheers

timonweb’s picture

Only 80 000 hits per MONTH and you're using S3 and dedicated server for such a low traffic! Man, what a resource hog you've created guys?!

kevinquillen’s picture

It's not dedicated, its shared. Using all the stuff we are using together, before any optimization, the site couldn't hold 20 people at the same time without bringing the server down. Now it can handle 300-400 at the same general time. I believe we made the right decision.

===========
read my thoughts

5dayapp’s picture

100K hits and 400 users are in the same ball park. I've had hundreds of thousands of people visit my site per month, offloaded zero, and all worked fine. But, I didn't have 400 users actively on my site at the same time. Membership use isn't the same animal as pop in and leave traffic. You have to track those sorts of things in transitions and bandwidth/downloads per minute at peak use.

[Side note: I'd love to chat with you about your S3 experience. I am curious as to why that's better than a dedicated server. I assume it's cheaper. Just curious what that does to speed and production, vs. a dedicated image server.]

mymixerringtones’s picture

This is awesome!

Aaron Stanush’s picture

I'm totally jealous of you having this client. Dogfish is my favorite craft brewer and having them as a client would definitely make for some enjoyable visits to the "offices" in Delaware. Congratulations, the site looks great. Whatever it takes to keep Dogfish in business and spreading their delicious brews to the masses. Prost!

isabel2020’s picture

Great job on the site, very intuitive and interative - but I just noticed a broken link at the bottom of the page with the Site Map.

Dogfish Head is one of my favorite breweries!

Fish Finder’s picture

Love your fish finder map -- you'll get to my area before long. This is really a cool site. I don't know about all the behind the scenes stuff that's being discussed here but it is really a fun site. I love things that keep changing and updating. Nice pictures and lots of activities featured. Great work!!

kevinquillen’s picture

Thanks!

===========
read my thoughts

kevinquillen’s picture

The Fish Finder map has been 'upgraded' to connect directly into a large distribution database for a much better / real-time product search.

===========
read my thoughts

isaac.niebeling’s picture

Realizing this is a year down the road and it's possible no one's looking at this anymore, is there any chance that you guys would consider releasing the Dynamics module to the community?

kevinquillen’s picture

We have often thought about it, but the implementations of GP is most likely different for each company, thus making the import code/methods we have not really useful for release since they are very specific to the project.

However, we are taking part in a Drupal webinar reviewing how we achieved this.

http://www.acquia.com/resources/acquia-tv/conference/drupal-and-microsof...

===========
read my thoughts