The Great Performances Catering website is most definitely a work in progress but there have been a number of 'little projects' that were, to say the least, challenging.
I say challenging not because they were particularly hard to code or difficult to design but because I had to fight Expression Engine the entire time. The site was originally setup by another company. I had no access to the database, no license receipts for all the plugins that they purchased (and, thus, no support access,) and no documentation.
So I dove into this one cold -- real cold.
I don't even remember what the old registry was like, was it even finished? Who knows. I do remember that, right at the beginning of the sales funnel was a telephone number. No cart, no saving of products in lists, no sharing, nothing.
What they have now is a true category based product browser that allows registered users to save products and quantities into custom registry lists.
The system allows users to save email contacts and share their registry lists with those contacts. It will even track whether a share has already been sent to a specific person.
Sales are tracked and quantities decremented. Should someone attempt to add an additional item to their cart (that is, after the full requested quantity has been purchased,) there is an on-screen message warning the customer.
Not bad. It works.
Uug! This one.
So, Great Performances Catering had a simple press page that seemed to work, the posts were there and the filtering / search system was clunky as all get-out, but it seemed to work.
Until post 162!
Somehow the entry of a new post, number 162, broke the entire thing. Remove post 162 and everything was fine again. Simple, I thought, there must be a special character or something in post 162 -- NOPE.
Okay, fine, maybe 161 is the offender...NOPE.
After sifting through 161 posts and finding no issues with the content I went on the Google. NOPE, no mention of anything.
The page was originally build using a Matrix (a plugin for Expression Engine,) so, assuming that it was a Matrix problem and, having no access to the database, I rebuilt it and we repopulated it with all the posts.
Well, lo and behold: NOPE. Insert post 162 (a different post, by the way, totally different content.) Why 162? What is 162?! it's not even a multiple of 8! 128 or 192 I could understand but 162? How random.
Well, back to the Google. And: NOPE.
Aaa, screw it. New database -- completely isolated from Expression Engine. A custom CMS. An EE Channel that allowed me to connect to the external database via AJAX. Add a few features and WOOHOO!
Oh, Expression Engine, you so silly.
The original layout was headline only, category based, and took (at the very least,) 4 page loads to get to what you wanted to see. That is, if you knew it was there. Combine that with the slowest hosting ever by Lunar Pages and you have a recipe for (yaaaaaaaawn, oh, excuse me,) boredom.
Meanwhile, back at the ranch, we'd been discussing the new mobile first redesign -- the current site is fixed-width.
Well, I figured that if I were going to build a new blog from the ground-up, might as well build it for mobile and save the client some rebuild cost. And that's what I did.
Now we've got a responsive, grid post layout with a tagging system that allows category filtering. I added an internal 'like' feature, rebuilt the post layout and the comments system.
And we move on to...
Hooooo-Weeeee-Dawgee. This one was fun.
What Great Performances Catering wanted here was a true search and filtering system that allowed users to select neighbourhoods, amenities, aesthetics, and capacities and get a filtered list of venues that fit the criteria.
We came up with a few other requirements:
- Users should be able to save venues to a 'favourites' list.
- Users should be able to print the current list of venues (filtered, favourites, or both,) details and images included.
- The system should remember the last set of filters entered so that, when they come back, they start from the same place they were.
Okay, there's a laundry list. Certainly one that is simple enough to do with the right server-side code, database fields, and AJAX structure.
Aaah -- but I didn't have the right server-side code, database fields, and AJAX structure did I? Noo-ooo. I had prebuilt Expression Engine and a mystery database full of venues that contained data that was not usable for filtering.
So, what-to-do? Ooo! Ooo! I know!
First, add the capacities, neighbourhoods, amenities, and aesthetic attributes to each of the venues (a labour intensive job indeed.) Then load the entire list of venues to the page right away and assign each attribute to the venues as CSS classes. Then simply process the user-selected attributes as a jQuery class filter.
When the user clicks on a venue to see the details, save the current filter list to session storage or cookies and viola!
Fine, it turned out to be more difficult than that. But that was the gist and that's the way we get'er done.