July 28, 2014

New Content on our YouTube Channel

by Marcus Neto

July 9, 2014

What CRM did we choose for our Web Studio

by Marcus Neto

June 24, 2014

We Like Sketch but You Don’t Have to

by Keaton Taylor

June 16, 2014

An Exhaustive List of CRMs and other thoughts on Sales Process

by Marcus Neto

May 27, 2014

Redesigning Show-EE

by Keaton Taylor

May 7, 2014

Walk Through ExpressionEngine: Blue Fish

by Marcus Neto

April 30, 2014

You Can See it in our Proverbial Shoes

by Keaton Taylor

April 24, 2014

ExpressionEngine Tutorial: How to create a sitemap for Google

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

March 25, 2014

That blog that you feel guilty about needs some brain vomit

by Marcus Neto

March 24, 2014

Information about SEO that every small business owner in Mobile, Alabama should know

by Marcus Neto

February 28, 2014

Our website sucks

by Marcus Neto

February 5, 2014

Huntsville Alabama’s Startup Scene

by Marcus Neto

January 15, 2014

The results are in… Responsive works

by Marcus Neto

January 13, 2014

Growing Pains: Project Management

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

January 9, 2014

Intern’s Corner: Jab, Jab, Jab, Right Hook

by Jared Darby

January 7, 2014

Statamic Tutorial: How to Create a Restaurant Menu

by Tad Ward

January 6, 2014

Show-ee // a showcase for ExpressionEngine sites and developers

by Marcus Neto

December 11, 2013

Image Carouslidagigs

by Keaton Taylor

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

December 3, 2013

Take your photography knowledge up a notch

by Marcus Neto

November 19, 2013

New Website Launch: MASGC

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 9, 2013

Meet Tad Ward

by Tad Ward

September 16, 2013

ExpressionEngine Naming Conventions

by Marcus Neto

August 13, 2013

Intern’s Corner: 6 Inspiring Designers from Dribbble

by Jared Darby

August 3, 2013

Statamic Tutorial: Getting Started with Raven

by Marcus Neto

July 22, 2013

Welcome our new Intern: Jared Darby

by Jared Darby

July 21, 2013

Statamic Tutorial: Using our Custom Fields in a Template

by Marcus Neto

July 20, 2013

Statamic Tutorial: Clarification on Field Order

by Marcus Neto

July 10, 2013

Statamic Tutorial: Creating a New Page Type

by Marcus Neto

July 9, 2013

Statamic Tutorial: Adding A Contact Form

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

July 6, 2013

How do I know if ExpressionEngine is up to date?

by Marcus Neto

June 27, 2013

I really REALLY hate bookkeeping

by Marcus Neto

June 19, 2013

Blue Fish is sponsoring this year’s ExpressionEngine conference

by Marcus Neto

May 21, 2013

Post- Mortem of a Website Project

by Marcus Neto

May 1, 2013

ExpressionEngine Add-ons we use on every install

by Marcus Neto

April 18, 2013

Using Zurb’s Orbit with ExpressionEngine

by Marcus Neto

March 22, 2013

Are we all just playing at this thing called Business?

by Marcus Neto

March 17, 2013

Sometimes the simplest things cost you big money

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

February 17, 2013

Is ExpressionEngine an Enterprise Content Management System?

by Marcus Neto

February 13, 2013

Setting a site free from ExpressionEngine’s MSM module

by Marcus Neto

September 25, 2012

Why I love Planscope

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 21, 2012

Let’s talk about selling ExpressionEngine

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

May 15, 2012

ExpressionEngine Templates

by Marcus Neto

April 28, 2012

Breaking up a Matrix Field for use in a SafeCracker Form

by Marcus Neto

February 28, 2012

LessConf 2012

by Marcus Neto

October 25, 2011

NYC and EECI 2011

by Marcus Neto

March 7, 2011

Removing Index.php from the URLs of Expression Engine websites

by Marcus Neto

January 12, 2011

Learning a Hard Lesson

by Marcus Neto

March 24, 2010

SxSW Wrap Up

by Marcus Neto

September 28, 2009

An Introduction to Fireworks

by Marcus Neto

August 10, 2009

Integrating the JQuery Cycle Rotator into ExpressionEngine

by Marcus Neto

March 9, 2009

Download ExpressionEngine Core and Install it on Godaddy shared hosting

by Marcus Neto

Last week I recorded four more videos on our ExpressionEngine installs. There are a number of different requirements that were fulfilled in the websites used. 

I also re-recorded a demo that I used to give all the time while I was Product Evangelist at EllisLab. This particular video is 25 minutes long. I walk the viewer through Channels and how ExpressionEngine is a multi-channel Content Manamgement System. I also show them how the URL structure is formed using Template Groups and Templates. I briefly talk about Add-ons. And then I talk about how you can set up Member Groups in ExpressionEngine for the different roles you need. That you have the ability to tailor a user's experience based on permissions that are quite granular for a CMS. 

Anyway, We intend on doing quite a bit more on our YouTube Channel so make sure to subscribe!

 

Learn more about Marcus Neto

TL;DR - I chose Base

Two weeks ago I started down the path of choosing a new CRM package for Blue Fish. Little did I know when starting on this project that there are at least 30+ CRM SaaS apps currently available. And let me clarify, I stopped searching when I got to 30 so that means there are probably plenty more. 

At first I was really enamored with Nimble CRM. It allowed you to really harness social selling and I like that functionality. It had integration with LinkedIn that allowed you to really make use of LinkedIn (surprise!). But notice I'm using past tense when speaking of that functionality. Two days after starting my trial of Nimble LinkedIn announced that they were going to partner with Salesforce and Microsoft. This basically meant that any other CRM package that was making use of their API was left out. So I went back to the drawing board and looked at…

Agile CRM is another package that I spent a lot of time evaluating. The way that Agile sets itself apart from the others is that it has marketing automation. It certainly isn't as robust a marketing automation tool as Infusionsoft or Salesforce, but it was a really good start. What I realized after spending some time with it is that as a sales organization Blue Fish is just not ready for marketing automation at this point time. If, six months from now, we are really making use of a CRM tool, and I think it would help us, then my evaluation criteria might be different.

And this is where things were turned upside down for me. At this point there was no real standout because all of the other functionality of the CRMs is fairly similar. You store contact information and you email or call those contacts and the CRM tracks your interaction with those contacts. Most of them have some sort of pipeline view as well that tells you what the value of the deals you are currently working on is worth. And they will track a deal from Prospect to Qualified to Closed (lost or won). All of the 30 or so that I listed in the previous blog post provide this functionality.

So I started looking at other things like price, design, and product maturity (nothing like choosing a product and having them close up shop). In general, I can say that the design of most CRMs I looked at was stupidly horrible. It was shocking, really. There were a few holdouts though. The only one that I think stood out besides Base was Customeed. It really is well designed, but the functionality did not seem to be there and it was a bit more than Base. The prices run the gamut from $10-15 all the way up to $100 per user per month. Of all the ones that I looked at, I think Salesforce was the most expensive. You can easily spend several thousand dollars a year on their product with a small sales team and as a small business that was surprising.

One of the other things that came into play was the ability to use a native mobile app. Again, this seems like it would be a no-brainer for a CRM. Sales people are a mobile group, if they are in the office often times that means they are not being productive. So having access to a mobile app should be something that every CRM strives for. Or at least making the software really easy to use on mobile devices. There were a number that did not offer any mobile version at all.

The punch line is that I decided we would use Base CRM. I'd been using it off and on for the last year but I never looked deep into it's functionality. Turns out it has quite a bit that I was not harnessing. Linking your email to it is easy and makes a huge difference in the experience. I love the interface. I think the UI makes sense. And it is easy to customize.

I also like that it asks you why you may have lost a deal, and it has keyword tagging. Both of those are important for the same reason. You need to be tracking where your deals are coming from so that you can put more effort into that lead generation area. So if there is a particular networking group that you are involved in you can tag all of your leads from that group with the name of the group. Then you can take a look quarterly to see where your leads are coming from. If there are a lot from that group then you keep going and putting effort into it. If you are not getting any leads from it then you may want to take a look at whether it is worth your time to continue attending. 

So we have settled on Base for the time being. I have set a task for myself for 6 months from now to re-evaluate what we need as a sales organization. My hope is that Base will continue to grow with us and that they will add some marketing automation. I would also love to see Linkedin loosen their death grip on their API. There really is no reason for them to shut out all of the other CRMs for the biggest most enterprise focused of them all. Not everyone wants to use those behemoths. I hope this has been helpful, and if you want more info either leave a comment below or email me.

Learn more about Marcus Neto

There are a lot of opinions out there on Sketch and mine is one of them. I’m not saying that you - the reader - should be using it or shouldn’t, I’m just relaying my personal experience with it. Hell, I might even switch back to Photoshop full time at some point. For now though, Sketch is giving us a new way to look at how we design and it’s making parts of it easier than ever. Here are some things we love about Sketch in no particular order and then some gripes about it too. 

Exporting is awesome - The act of exporting assets has become so convenient that I don’t even think about it any more. Sketch has a dialogue that allows you to export assets at different sizes and filetypes in a couple of clicks. The added benefit of the retina art board option is also pretty awesome. 

Project Organization - The days of having massive photoshop files with hidden layer comps/hidden layer groups or even having multiple PSD files for one project are all but gone (Sketch is a lot more like Illustrator than Photoshop but PS is what I use so that’s what I’m comparing.). Sketch has a multi art board setup and has a page based interface. So you can set pages by name inside one file. 

Templating and Styles - We have a default template for web design. In it are the default form elements that Sketch provides as well our default type styles from our framework and Entypo icons, which I use pretty often. From this we are able to go through and make early decisions on web projects that will shape the visuals throughout the project. We’re working on a project now where, along with Google Fonts+Typecast, we made some decisions about color, style and visual elements to send to the client before we ever started designing whole pages (a la Dan Mall).

Now Some Gripes

Sketch is definitely a work in progress. There are some bugs and some real issues as far as performance goes. Here are some things I’d like to see fixed:

Copy/Paste: pastes in random places on art board, it really needs a paste in place option. Bugs me to no end. 

Text Formatting: Sketch sets type pretty poorly. It’s not super accurate and can be buggy. 

Guides: I use guides a lot in PS and the lack of guides aside from the layout settings irks me. ( Author's Note: I was just informed that I'm not paying attention and guides are present and actually work pretty well. )

I’ve gotten used to these bugs and other ones. The enjoyment I get building UI with Sketch is totally worth the minor headaches I’ve experienced. I hold no allegiance to any app or developer (as far as this goes), so if this stops being fun and useful I’ll definitely switch to something else. For now I’m getting a kick out of Sketch and it’s making our work move along a little faster. 

(Author's Note: I know that releasing an app on the level of Sketch 3 garners a lot of expectation AND criticism. The above gripes are not meant to be slights, nor should they detract from the fact that I genuinely enjoy using Sketch and it's helped me with a lot of aspects of my workflow that were slowing me down. )

Are you using Sketch? Do you have questions about Sketch or our workflow at Blue Fish? Let’s talk in the comments or on Twitter. 

Learn more about Keaton Taylor

So a few thoughts... As an industry we suck at sales. Seriously. I have talked to large numbers of studios over the last 3-4 years and I would say 75+% do not have an organized sales process, sales process management tools (CRM), hell, most of us don't even use contracts!!!

To quote Mike Monteiro in Design is a Job:

"Lack of clients is the number one reason design studios fail. The number two reason? Who cares."

Lest you think I'm getting it twisted. A process, tool, or document do not equal actual paying clients. But I would argue that the fact that a large percentage of agencies in the web industry do not have a defined process means they do not have tools that help track their clients which means they are losing business where they might use a contract (see what I did there?).

Anyway, I decided that it was time to put a more formal process together for Blue Fish. My first step when heading down this path is to read and research. So I listened to The Competitive Edge podcast with Aaron Ross. It is a good listen. Aaron has some interesting concepts in regards to structuring sales organizations. That's great, but what is one to do with an organization of one? Aaron addresses that issue as well.

The short version is that you schedule your week so that you fill different roles on different days. But the important thing is to not miss any of the different facets to a healthy sales organization. The podcast with Scott and Aaron was good enough for me to purchase the Kindle book. I am about half way through it. Aaron repeats himself a bit but there are some good ideas in it.

Next up on this journey, I have been researching CRM (Customer Relationship Management) tools... Let us officially declare that we do not need any more CRMs, no not one. If you are thinking of going into this space then let me present you the list of what I found:

Blue Fish's Exhaustive List of CRMs

  1. JobNimbus
  2. Marketo
  3. Campaigner
  4. TrackVia
  5. Microsoft Dynamics
  6. SalesBoom
  7. Infusionsoft
  8. OnePage CRM
  9. Base CRM
  10. Capsule CRM
  11. Pipedrive
  12. You Dont Need a CRM (note: Ironic Much?)
  13. Highrise (Interestingly enough this is not the 800lb gorilla in the group)
  14. Zoho CRM

Are you getting the point yet? Oh, don't worry if you haven't seen one you like. We are only half way through the list!

  1. Sugar CRM
  2. SalesLogix
  3. Act
  4. Redtail CRM
  5. Pipeline Deals
  6. Agile CRM
  7. Nutshell
  8. Nimble
  9. Maximizer
  10. Close.io
  11. Batchbook
  12. Daylite CRM
  13. Intuit Quickbase (ick!)
  14. Customeed
  15. LanternCRM

And finally, the 800lb gorilla is SalesForce

That is a list I compiled in about 10 minutes. Without even trying, I was able to come up with a list of 25+ CRMs. That is just ridiculous... so if you were even thinking about going down this path I would urge you to pick a better way to spend your time. 

For those of you not familiar with Sales or with what a Customer Relationship Management(CRM) Tool is, there are basically two types of CRMs: automated and non-automated.

CRMs with automation provide some mechanism by which you can automate certain aspects of the sales process. So, perhaps when you get an inquiry from your site you send out an email each time that asks the basic questions about project info, project budget, project timeline, etc. With a CRM that provides some automation you could have that email atuomated. So someone visits your site, fills in the contact form and immediately gets an email back thanking them and asking some of those basic questions. CRMs with automation also provide tracking of people/organizations through a sales process. SalesForce and Agile CRM fit this bill. 

CRMs without automation don't do that. So basically they provide tracking of people/organizations through a sales process and nothing else. All of the ones listed above provide this functionality. This is standard. Some have better processes by which they allow you to track folks but the reality is that this is a given on these systems.

The other item I am seeing pop up over and over again is Social CRM. This is a relatively new feature. Basically it means that you can input a person/business and their social media information. The Social CRM will then track their information and allow you to interact with it. So if one of your prospects tweets about having an issue you can reply back with an article or fix for them. This will ultimately end with them throwing money at you and you will become a millionaire overnight. Actually, I can definitely see a useful purpose with this. Especially with existing clients and making sure that they are happy.

So go through the list. Which one did/would you choose? Why? What are it's strengths? What are it's weaknesses?

Learn more about Marcus Neto

For those of you not in the know (like me before I worked at Blue Fish) Show-EE is a small community dedicated to showcasing the latest and best ExpressionEngine websites. There’s no focus on design and/or development - though there is some curation to weed out the truly terrible stuff - just a focus on EE and how different folks in the web industry use it. 

Blue Fish Design Studio acquired Show-EE in early 2014 from one of it’s original founders and a former associate of our fearless leader, Marcus Neto. When we took control of show-ee.com it was banking around 500 views a month, upkeep and maintenance on the site was nearly nonexistent and the last recorded upload was from early 2013. Long story short - it was a ghost town. One of the really disconcerting things about this is that the ExpressionEngine community as a whole was kind of seeing this downward shift everywhere. A couple of shake ups at EllisLab and some unanswered emails caused the term “abandon ware” to be thrown around a lot. ExpressionEngine for all its faults is still now and will be for the foreseeable future one of the most scalable and robust content management systems available. We strongly believe that the #eecms community is alive and well and only getting better. Through that belief we have committed ourselves to giving show-ee.com a facelift and working to get it back online to foster the growth of the #eecms community at large.

So we made all these promises to ourselves and the community and then shit got real - I have to actually redesign this massive site with new content and clever tag lines and all the things. I’m a nervous guy by nature, so no pressure when designing a forum for developers of one of the most prominent Content Management Systems on Earth, not that EE developers are picky or anything... The task at hand was a mighty one but a few nights of research and The Glenfidditch led me to put together some wireframes and concepts that seemed like they might be viable. 

I worked through the design mobile first with some content being created on the fly, but being created in line with the tone that we're working towards: casual and friendly but knowledgable. The design was well recieved but after a couple rounds of critique we refined some of our ideas and our layouts and nixed a few things that weren't making sense. Specifically, the new mark was really not jiving with the rest of the design. It threw off the balance of the rest of the site, sat a little too high in the header and really just generally wasn't working - it took me some time to be ok with that because I thought I was being clever. After paring away a few things we settled on a refined mark and a similar color palette.

Boom, a brand is made. We have our logo we have our design but wait... something's wrong. In all the furious designing and Scotch drinking and research I did, I completely forgot to do normal, basic, even standard - every single project things. I didnt have a site map, I didnt check analytics data, I basically screwed everything up from the word go. Why did i do this? Because I was being selfish, shortsighted and hasty (if some of this sounds familiar, it's because I wrote a shorter and less embarassing post on this here.) I wanted this site designed and ready for production this very minute and because of that, the work suffered and I was staring down the barrel of several wasted hours and new projects rolling in that I had to start on. It was terrifying and I was embarrassed to say the least. I took this to Marcus and Tad and explained to them that the pooch was screwed and it was my fault. Tad had already started working on development of a few small parts and I was coming to him letting him know that they were wrong and our timeline would need to be extended. After talking me off a ledge and thinking through some of the things that were missed not just in design but in all the aspects of the redesign, we regrouped and I began working on a workflow. 

We do workflows for our clients to show them how the site will work but also to make sure that our overlap from project management to design to development is really painfully obvious. It shows every page with every interaction that is worth making note of. In some cases there are more interactions and in some cases less. In the case of Show-EE, we tried to make sure everything was there. This was one of the first time we used Eric Miller's UX Kits for showing these flows and it worked wonderfully.

One of the main things we left out of our thought process is the fact that we wanted people to be able to log in and keep up an actual profile, linking all their posts to their profile and potentially to the company they work for. This was integrated into an early workflow (seen above) that was refined even further as we went on. We talked through a lot of what was wrong with the old show-ee.com - users couldn't upload their own images, there was no way to catalog multiple entries by a single company, the ads got in the way of everything - there were multiple issues we had to figure out. This type of workflow, more visual now than we'd ever done before, was letting us see all the chinks in the armor. We made some tough decisions, like killing the showcase and add on reviews as separate areas of the site. We've compiled all of those things down to entries in the blog. Which is a shame because I was really psyched on the design of them, they just aren't relevant enough to be whole sections. 

Back to square one. In the weeks between dropping the ball and realizing we needed to start over, I had begun using Sketch 3 (be on the lookout lookout for my extended post on Sketch and it’s use at Blue Fish) alongside Photoshop and Illustrator to mock up wireframes and to do little things that needed doing here and there. Tad and I had been talking about potentially using Sketch full time or most of the time anyway, because of it’s exporting abilities and what that might mean for an even more overlapped workflow. Show-EE presented itself as the perfect project to do a dry run on. So we did. 

With a newfound clarity and a workflow document sitting in front of me, much in the fashion that we approach client projects, I started wire framing out some new ideas. A lot of things stayed the same - top nav, hero image, color palette. Something changed though, this process was moving a lot faster than before, even with the added complexity of profiles, login/log out issues, success pages, etc. I was designing with the full picture in front of me - a workflow that detailed all our necessary interactions, content from the previous iteration to work off of and a clear path to really work through the design. What came out of the re-redesign has been a lot more successful and has felt a lot less piecemeal. 

* I’m not going to go on and on about what Sketch has allowed us to do in terms of designing mobile first, having a really clear plan for going into dev or allowing me to start dev without Tad (which I did on this project without telling anyone), I will say thought that I’m a fan and it’s working for me. *

We’ve been able to maximize ad space - especially for more cost effective options - without impeding on the user’s ability to view and interact with the site. We’ve simplified the Shows (thats what we’re calling the uploads, Shows) and made profiles a reality so the person is connected to the project but the person does not become the main focus. We want the profiles to be available but the story of how the work was done to be the centerpiece. 

The other side of the “work is the most important thing” coin is that we want to eventually have a robust profile system for users. Right now we’re getting everything set as the minimum viable for launch but eventually we want to make this a place where EE developers have a profile that allows them to do things like post jobs on a job board or have discussions about EE and design & development in general. 

We’re not shooting for the moon or anything with Show-EE but the process it’s taken for us to get to this point has been a long one. Design and redesign, constantly rethinking content and adding features to our roadmap. There’s a lot more to relaunching something like this than I expected. So far it’s been crazy rewarding and a heck of a lot of fun. Blue Fish is crazy excited to get Show-EE launched and try to work some more life into our #eecms community. 

Let us know what you think about the launch, questions about the design or the future of Show-EE in the comments! Thanks for reading.

Learn more about Keaton Taylor

This will be the first of a number of blog post where I give a narrated walk through our control panel set up of ExpressionEngine. Over the years Mike Boyink and I have discussed a project like this numerous times. We find it interesting to see how folks use the capabilities of EE. And if I could require everyone do something similar for Show-ee I would. I think it is silly to just show screenshots of the home page of a site without showing the context of how the site solved some complex problem for the user.

So, this particular series is fairly straightforward. I talk through the Team, Work, and Contact Channels in our own ExpressionEngine-based site. Hope you enjoy!

Learn more about Marcus Neto

After agonizing over roadmaps and blogs and things that are mostly in the future it was clear we needed to back up and regroup. We took a break, we designed a landing page and we put together office furniture. We hit social media (maybe a little too hard), decided that some things were nearly irrelevant and started thinking about newsletters and marketing plans. When the time came to go back over the wireframes for Show-EE, it was like the room let out a loud and dismissive fart noise.

Title Tags appear in the browser chrome

The issues we found were in the interactions that we didn't know we needed to think about. When it comes to our clients, we take the most amount of care possible to think through the design and user interaction - that's what companies like Athlon Media Group hire us to do and we're pretty confident in our abilities. They say it's the quiet ones you have to worry about and no one was talking. Here's the deal - Show-EE is a labor of love but with a second look we figured out that proximity was the problem. The obstructed vision comes when we think we understand the problem at hand. It becomes a problem when we think we know the issues because we're so close to them that we can smell the 1.6.8 install stinking up Arcustech's servers. Sometimes even we take for granted how infinitely enlightening something as simple as a workflow chart can be when planning a site. This is the care we take with every single client's work - I'd even say that this only scratches the surface of the level of detail we put into a project. But we took it for granted for ourselves. How important are our clients projects? Very. So important that sometimes the expectation of the level of care for their work supersedes our own.

Anyone else struggling with Cobbler's Children syndrome and the internal proximity fight?

Learn more about Keaton Taylor

Generating a sitemap is pretty easy but I figured someone might find a more detailed how-to useful. Earlier today I was taking a look at our sitemap and realize that I needed to make a few changes. Often times with something like this you might be tempted to turn to an add-on in order to generate the site map. I did a quick search and turned up a few solutions on Devot-ee. But I’ve created these before so I decided to just create one.

Creating a dynamic sitemap is not hard, and they certainly help your Search Engine Rank. The basic use of a sitemap is to tell Google when a page has been added, how often it gets updates, and when it was last updated so they can keep their information about your site current.

I’m in a good mood as the sky is blue, the birds are singing, and my youngest son has a baseball game this evening. So, before you decide to purchase yet another add-on let’s take a look at what you can do natively with ExpressionEngine.

The first step is to create the template as an XML document. If you are not aware of how to do this then you might want to give us a call.

Once you’ve created yours you’ll want to follow the format as follows. The opening declaration to tell what the file is:

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd”>

Then the format for each of the entries:

1
2
3
4
5
<url>
  <loc>http://bluefishds.com/</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>

This is where you can use ExpressionEngine to make it update automagically. I’ll admit that some of the pages like our About Us page or our Contact Page I just leave in as a static entry. But for something like our blog I use the following code:

Note: the code formatting is buggy when mixing XML and EE. The ASCII in the code below is the curly braces used in EE

1
2
3
4
5
6
7
&#123;exp:channel:entries channel="blog|work|staff"&#125;
<url>
  <loc>{comment_url_title_auto_path}</loc>
  <lastmod>{edit_date format="%Y-%m-%dT06:00:00+00:00"}</lastmod>
  <changefreq>weekly</changefreq>
</url>
&#123;/exp:channel:entries&#125;

Obviously, you’ll want to change the URL structure to whatever your site is. And so long as you change the Channel specified in the Channel Entries Tag Pair you can use this same snippet of code for your staff pages, work pages, and whatever else might get a regular entry added to it on your site.

Just make sure to close the urlset tag with:

1
</urlset>

So a completed Sitemap XML file for ExpressionEngine might look something like this…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-8"?>
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
 
<url>
  <loc>http://bluefishds.com/</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>
<url>
  <loc>http://bluefishds.com/about-us</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>
<url>
  <loc>http://bluefishds.com/work</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>
<url>
  <loc>http://bluefishds.com/blog</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>
<url>
  <loc>http://bluefishds.com/contact-us</loc>
  <lastmod>2014-04-02T19:18:31+00:00</lastmod>
  <changefreq>monthly</changefreq>
</url>
 
&#123;exp:channel:entries channel="blog|work|staff"&#125;
<url>
  <loc>{comment_url_title_auto_path}</loc>
  <lastmod>{edit_date format="%Y-%m-%dT06:00:00+00:00"}</lastmod>
  <changefreq>weekly</changefreq>
</url>
&#123;/exp:channel:entries&#125;
</urlset>

Hope that is helpful. Much better than paying for an add-on. If it is drop us a comment in the box below.

Learn more about Marcus Neto

Last week I wanted to post a blog-post-a-day about SEO but this one is a doozy so it carried over to this week. In today’s post about SEO I will explain Google Analytics a little. If you are not familiar with Google Analytics, it is the standard when it comes to tracking website traffic. Even if your web provider has some mechanism by which they show you stats for your site, it is secondary to Google Analytics and you should absolutely have it installed on your site. I would go as far as to say, if you do not have Google Analytics installed then why do you have a site? I think that if you don’t have it installed then you are not serious about understanding how people are using your website. Too strong? Perhaps. Let’s read on and hopefully the strength of my position will rub off on you when you find out how awesome it is.

Ok, so if you are not familiar with Google Analytics then let’s start with it being FREE. Yup, that is right. This wonderful little tool is just given away by Google. If you have an Google Account just go to the Google Analytics home page you can sign up for free. Google even provides you with amazing instructions for how to get started.

Now that you have Google Analytics installed let’s take a look at the reports that I feel are the most important.

When you first log into the reports Google Analytics shows you a graph of the Visits over the last 30 days. Typically, I start by looking for spikes in traffic. That would indicate that either something we wrote was extremely popular or that the site got posted somewhere that is sending us a lot of traffic. Either way I want to know who, when, how the spike was created. If you hover over the points on the graph it will tell you the numerical value of the point.

This initial page also shows how many Visits, Unique Visitors, Pageviews, Pages per Visit and Average Visit Duration. All of these are important to know. Depending on the type of site you have (commerce vs blog vs brochure site) I would weight them differently. Visits and Unique Visitors are just barometers for how much traffic you are getting. Generally speaking the more the better. But I also want to caution you that a ton of traffic without conversion means you are missing something. I’ll gladly take a lower numerical value of visitors for a higher percentage of conversions. Pageviews and Pages Per Visit tell me that once the person is on the site they are poking around a bit. The Duration of their visit tells me whether it was just a cursory glance of the site or if they are reading through something on the site. Several months ago I wrote a blog post that was the longest I’ve ever written and the Duration for that site averages around 9 minutes which is just crazy!

If you look at the side navigation you should see Mobile and then below it find Overview. I like this report as it gives me information about the types of devices that are using the site. I can immediately tell whether I have a mostly Mobile or Desktop audience. As you can see in the image below the audience for this particular site is mostly Mobile. If I have an audience that is mostly Mobile and my website is not responsively coded or have a mobile version then I am handicapping my site.

Next we are going to look at Acquisition / All Traffic report. I like this report as it will tell you where your traffic is coming from. Remember those spikes I mentioned? Those should manifest themselves here as a site that has sent you a large amount of traffic. If you want more detail as to the URL that is sending the traffic then go to Acquisition / All Referrals and click on the website sending you the traffic. It should give you a breakdown of the URLs that are originating the traffic.

The last thing (and quite possibly the most important) that I look for is under Behavior / Site Content / All Content. This report tells you what people are looking at on your site. It is important to note that / means the home page. So more than likely / will always be at the top of the list. I like to check this report weekly. Especially if we are blogging a lot. It tells me what topics are hitting the mark with folks that read our blog. If a certain topic is getting more interest than others then I will spend more time writing content on that topic.

I hope that the recent posts on SEO have been helpful. As always, we are here to help if you need it. I’d like to offer you a free (short) analysis of your Google Analytics traffic. Just send me an email to get started.

Learn more about Marcus Neto

I’ve heard it time and time again from small business owners all over the country. They feel guilty about their blogs, that they're not updating them as much as they know they should. For whatever reason when you ask a business owner to write they feel the weight of the world come crashing down on them. I am here to tell you it doesn’t have to be that way. And that you are not alone.

One item that I should point out before we get started is the importance that Google places on updated content. If your digital studio did their job when they built your site then they probably registered you with Google’s Webmaster Tools. I won’t get into specifics about the tools they provide there but I will point out that Google asks for a site map in a format that gives the URL for a page, the date it was last edited/published, and the frequency that the page changes.

Google also uses technology that allows them to “crawl” a site. When Google crawls a site it basically is trying to make a table of contents for the site that it can store. This allows Google to store information about your site so that if someone searches for terms you have written about your site will be sent as part of the Search Results. If you want to learn more Matt Cutts has a great video where he covers Crawling and Indexing

So, we now know that based on the frequency of your posts and their relevance to search terms you will be ranked accordingly. But we still have this little issue of writers block… so we know it’s important to update your site content but can’t.

I studied English in college at James Madison University (Go Dukes!). As part of that I took a Creative Writing course (as all good English majors should). My professor used to have this way with words. Anyway, he coined the term Brain Vomit. Now say what you will about it being gross and there are other ways of saying the same thing (brain storm, mind map, etc) but out of all of the things I learned at JMU this is one of the top things that stuck with me.

So, for those of you not fortunate enough to have taken that class, let me introduce you to Brain Vomit. The premise is that you sit down for a set duration and just write everything that comes to mind. So I may choose a subject like photography and just start writing:

light, lighting, reflectors, camera, f-stop, aperture, lenses, weddings, inspirational people, inspiration, nature, kids, lightroom, photoshop, touchups, models, night time images, basics, events, on camera flash, backup systems

That was what I came up with in 30 seconds imagine what you can do in 5-10 minutes. Now, you may look at that and say big deal, but I look at that and say I just came up with ideas for 20+ blog posts on photography (feel free to steal them by the way). You could write a blog post on your favorite lens, people that inspire you, photographers that inspire you, places that inspire you, photographing nature, photographing kids, teaching kids to take pictures, macro photography in nature, preparing to shoot a wedding, essential equipment for shooting a wedding, the brand of camera system you shoot and why, etc, etc.

The key to this is to remove your filter. Yes, someone else has written some of the subjects we initially came up with. But that does not matter. You are going to put your own spin on it and give your opinion. And, you are going to notice that after a while you will start to rank higher and higher in the Search Engine Results. You’ll also notice that your traffic will begin to increase. In the beginning there will be 3 people reading your blog (slight exaggeration) but as you start to show some consistency, and spend some time promoting the site (we’ll cover this soon in a blog post) your following will increase and so will your traffic. People will see that you know what you are talking about. You will establish yourself as an expert in a specific topic and when the time comes, hopefully, they will hire you for the job.

I hope you are enjoying these posts as much as I am enjoying writing them. Make sure to leave a comment with any questions or comments.

Learn more about Marcus Neto

Recently I have been getting a lot of questions from friends that own their own businesses. The questions tend to circle around the idea of getting more traffic to their business websites. While I can’t guarantee traffic I can give you some pointers on how to optimize your site for better Search Engine results. So I am challenging myself to write a blog post every day of this week on how to increase your traffic.

One of the difficult things about optimizing a site for Mobile Alabama is that the name of our city has double meeting. Basically there are numerous ways of using the word mobile, you can get a mobile phone, you can look at mobile websites, you can live in a mobile home, or you can visit and do business in Mobile. Unfortunately capitalizations don’t make a difference when doing a search on Google. Try it. You can search for mobile or Mobile and still get the same results.

So what is one to do? Introducing Title Tags...

To start you can pay attention to your Title Tag (technically called a Title Element). The Title Tag dictates what shows up in your browser chrome when you visit a site. For instance:

Title Tags appear in the browser chrome

Notice that all you see is "Blue Fish Design Studio" when you visit our site. But if you use your mouse to hover over the tab you’ll see the full title: Blue Fish Design Studio - ExpressionEngine, Web Design, Mobile Websites - Mobile, Alabama. In Google's eyes, the Title Tag is the second most important on-page Search Engine Optimization element. The first is content (more on that in another article). Google uses the Title Tags to make an initial judgement about the content and what it is about.

Make sure that all of your Title Tags contain keywords that you want to show up in searches for. And definitely make sure that if you want to appear in searches for Mobile that you use Mobile, AL or Mobile, Alabama.

Title Tags are limited to 70 characters. The good news is that you can have different Title Tags on every page. So, if you have a blog, each of the articles on your blog can have a different Title. This means that every additional article that you write gives you more opportunity to show up in search results. So if you have been putting off writing on your blog perhaps now you’ll understand why that is important.

We’ll be writing a post about content for tomorrow. It will share ways that you can get past writers block. We’ll also discuss the importance of updating content on your site. So check back!

Learn more about Marcus Neto

Our website sucks. I’m okay with saying that because, well… for one, I was the one that designed it. And two, I’m okay with saying that because I’m not in denial anymore. I now see its failings. 

Now, don’t get it twisted, the website functions and was coded well (responsive and all that). It does the things that a portfolio website is supposed to do in that it communicates what we’ve done. What it doesn’t do is what bothers me, I do not feel like it accurately captures the essence of who Blue Fish really is. It doesn’t show you the creativity of the people involved. The behind-the-scenes craftsmen that are going to be working on every aspect of your website if you work with us. 

Two months ago we were having an internal meeting and I brought our website up with the guys. I told them that I wasn’t pleased with how our website was performing. It’s not unlike many studio websites in that it communicates our services, work we’ve done, and gives us a place to write posts like this. Keaton brought up the idea of recording some of the sales meetings I was conducting to find out what I was communicating about Blue Fish. The hope was that this would help us better understand who we are. The truth is though, even if I were to record those meetings they would still get a skewed idea of who Blue Fish really is.

As a result of those exchanges I‘ve been meditating on this idea of “who we are” as a growing consultancy. 

So, who is Blue Fish? 

Blue Fish is a small group of people that have come together to work on crafting websites. As a group we love to cook. I’m not talking about opening a bottle of Ragu and plopping it on top of some store-bought pasta kind of cook. I’m talking about guys that like to experiment in the kitchen. We like to use our Saturdays to smoke large slabs of meat, make bread from scratch, and in general, experiment with food. We approach those things by combining different tastes until we come up with new dishes that no one has taught us. We love to dissect the tastes of craft beer and fine scotches, tequilas and bourbons.

We love music, 75% of the team knows how to play multiple instruments. If this internet thing is just a fad we could start a band — we have guitar, drums and bass covered. The one guy that doesn’t play any instruments is still crazy about music, always willing to share his latest find with the rest of us. We’ll stick him on the mixing board as he obviously has a good ear.

If I distill this down, all kidding aside, what I‘d like people to see is that we take pride in thinking through problems, experimenting, and forging solutions. We consider our work a craft no different than baking bread, taking quality photos, or learning to play an instrument well. 

And so… to that end I can emphatically declare that our website sucks.

So where do we go from here? I see this as the beginning of a journey. It will require us coming together as a team to build our voice into one. When I was growing up I was involved in select choirs. I even studied music performance for a while at James Madison University and I can remember a few times when choirs that I sang with came together as one voice. It is a beautiful thing when 70-80 voices combine and move as one. I can see now that my job is as the conductor. To conduct our merry band of revelers in such a way that we are moving as one. So that the richness of our tenor comes through the music and that you can literally feel the emotion, the heartache and the craftsmanship that goes into our jobs and through our performance. 

I guess we have some work to do…

Learn more about Marcus Neto

A little over a week and a half ago I made the trip up to Huntsville, Alabama. The purpose of the trip was to meet with a couple of friends and to get a feel for the startup scene that is currently taking shape there. What I found, once there, was quite surprising.

For those of you that are not familiar with Huntsville it has long been known as Rocket City. NASA and the Department of Defense have a huge presence there. Most of early space exploration can be attributed to the efforts of Huntsvillians. This is a city where science and technology rule.

Downtown Huntsville Alabama

I arrived on Wednesday evening and got settled in downtown Huntsville. I’ve visited Huntsville a few times but never been downtown. I was delighted to find that the downtown area is bustling with activity. I stayed at the Embassy Suites which is right next to the Civic Center. I did not realize but Huntsville has an active professional hockey team called the Huntsville Havoc (part of the SPHL). There was a match on Thursday evening but I had plans otherwise I would have loved to see that.

Lowe Mill Huntsville Alabama

The next day I had lunch with my friend, and Startup Entrepreneur, Antonio Montoya at Lowe Mill. The name of the place we ate was the Happy Tummy and it lived up to it’s name. I know this is not a food blog, but the sandwich I had deserves mentioning. It was the Squeal Like a Pig and it had Chipotle Pork, Bacon and Ham on it. It even had little bits of bacon in the bread. These ladies take their sandwiches seriously. If you are on the Eastern Shore and run a restaurant, make this sandwich and I will be a regular.

Lowe Mill Art Huntsville Alabama

Lowe Mill is very interesting to me in the sense that it is a group of similar minded individuals (artists) that have joined together and created something that is larger than any of them could have done on their own. For those of you that are not familiar with Lowe Mill it is an old cotton all that has been converted into a center for the arts. Artists have to apply and go through a jury process before they're allowed entrance into Lowe Mill. The benefit is that rent at Lowe Mill is very inexpensive and the synergy that happens when you have a large group of artists all in one location is amazing. If you are near Huntsville it is definitely worth seeing. If you are an art lover then it is definitely worth seeing.

Lowe Mill is an important part of the puzzle for the startup community in Huntsville. Most people, when we talk about a startup community think Tech. But the reality is that Startups can be any type of business. Lowe Mill has over 200 artists in residence. That is 200 small businesses (Startups) in one location. But in relation to the Tech startups in Huntsville, whenever there is something great that is going to be achieved, artists are always involved. Design thinking requires a creative thought process and artists definitely add something to that conversation.

That evening there was a gathering of technology focused folks at a meeting called QEST . QEST was started by Cygnus Strategy Group as a gathering where each month 3-4 people can get up in front of the group and explain to everyone what it is that they are working on. This event was a little bit of a flashback for me as three of the presenters seemed to be very focused on technology for the federal government or Department of Defense. The cool thing is that Cygnus has since announced that one of the individuals that presented has been approached about a deal since the gathering.

The last presenter of the night at QEST was Jacob Birmingham from Kidebit, LLC. He has created a little app that goes along with debit cards. This app (really it is a system) allows kids to start learning how to manage money at an early age. I thought it was a really neat presentation and a really cool system. As a father of three I could definitely see using something like this to help my children learn about managing money.

HOT Coffee Tech Meetup Huntsville Alabama

The next morning I headed over to the College of Business Administration at the University of Alabama in Huntsville. That is the location for the twice monthly HOT coffee and tech meet up. There had to be at least 25 to 30 people there. It was quite exciting to see that it wasn't just a bunch of students (although there were a handful in attendance). This group was originally started by John Whitman who is a Visiting Assistant Professor and Director of the ICE Lab (Innovation, Commercialization, and Entrepreneurship Lab) at UAH. What's amazing is that when John moved to Huntsville a little over a year ago he just made a decision that he wanted to help create an alternative economy for the Huntsville area. Talk about a spark! As an outsider just visiting I would say that his work for Huntsville is affecting change. I sat in a few meetings with him over the course of the three days and I'm very impressed with his mind and how he is approaching this goal. He is definitely an asset to the community.

HOT Coffee is basically a networking event for startup minded people. You come with lots of business cards and over the course of an hour you end up talking to lots of people. I gather that the idea is to get lots of similarly minded folks in one room and let the synergy push the community in new directions. It is such a simple idea but oftentimes is difficult to enact, so it was really cool to see their success in person.

Later on Friday afternoon I was involved in a small gathering of startup minded people that due to NDA's I'm not allowed to really discuss. But suffice it to say that by being part of this meeting I realize that all of the different components that are needed for a start up community are present in Huntsville. Leadership? Check. Synergy? Check. Technology minded people? Check. A network of investors ready to fund the next big idea? Check. Socially minded individuals that want to make a difference? Check, check and definitely check. I am impressed with what I saw. As someone that is based out of Lower Alabama I am hoping that they gain even more traction. This would do wonderful things for our State. And who knows… perhaps a little bit of their synergy will make it’s way down I-65 to the Mobile Alabama area. If you are interested in Startups and located in the Mobile area, drop me a line.

Learn more about Marcus Neto

Today I was visiting with a client that runs a local restaurant. I wanted to show some metrics of how the redesign that we did of their site was performing. What I found when I started looking into the numbers was a surprise even to me. Keeping in mind they are not Facebook getting millions of visitors a day. As we look at the numbers focus on the improvement not the quantity.

Here is what the Analytics show:

Sept 15 to Oct 15

From Sept 15 to Oct 15 there were 1010 Visits, 863 Unique Visitors and 2676 Pageviews

Oct 16 to Nov 15

From Oct 16 to Nov 15 there were 986 Visits, 831 Unique Visitors and 2537 Pageviews

Nov 16 to Dec 15

From Nov 16 to Dec 15 there were 1065 Visits, 882 Unique Visitors and 2858 Pageviews

Dec 16 to Jan 14

From Dec 16 to Jan 15 there were 1561 Visits, 1299 Unique Visitors and 4731 Pageviews which is really odd because you would expect traffic over the holidays to slow down. I can't wait to see what the analytics say about next month's traffic.

If you've never seen Google Analytics (GA) the above may be foreign to you. GA shows these basic metrics when you view your analytics for your site. The ones I typically track are Visits, Unique Visits, and Pageviews. In some instances Time on Site makes sense to look at if you are writing a lot of content and trying to gauge whether folks are reading it or not.

So if we look at those metrics (Visits, Unique Visits, and Pageviews) as an average from Sept 15 to Dec 15 you see the following:

  • Visits - 1020
  • Unique Visits - 858
  • Pageviews - 2690

Compare that to the numbers post launch:

  • Visits - 1561
  • Unique Visits - 1299
  • Pageviews - 4731

That is an increase of:

  • Visits - 53%
  • Unique Visits - 51%
  • Pageviews - 76%

Not too shabby for a single month increase. But why? Without spending hours diving into the reports that GS provides I think I have narrowed it down. When I looked at the mobile traffic for the previous three months it averaged out to 468 visitors on mobile. When I looked at the last 30 days it was 839. That is an increase in mobile traffic of 79%. The other devices were up as well but not nearly as much as mobile.

So it does not take a leap of faith to draw the conclusion that a responsive site worked in this case. Making it easier to navigate on the smaller screens meant people visited more often, looked at more pages (pages per visit went from 2.62 to 3.03) and spent more time on the site. Making the site Responsive really works for a restaurant since folks are often away from their computer when they are researching where to eat.

If you have any questions about your own Google Analytics numbers, or want to talk about how to interpret them, just contact us

Learn more about Marcus Neto

In this blog post I'm gonna let it all hang out. No polish. I think it is important for our community to share hurdles that we encounter and how we approach hopping over them. As a matter of fact I think we may even make this an ongoing series on the blog.

Keaton, Tad, and myself just held an impromptu meeting about communication. For years Blue Fish was just me. I had no one to communicate with except for the clients. There was no designer handing off assets to a developer. There was no project manager needing both of them to meet certain milestones in order to keep a project on schedule. It was just me.

Now, with a growing team, I find myself needing to be very purposeful in communicating. We know that we have some improvements that we can make. Some are small tweaks, others are much larger. I'll talk about the larger ones first.

In many organizations, as they grow they don't take time to stop and analyze their process to make sure that they are not introducing bugs into their process. It should not be just a "get shit done" kind of attitude. There should be a process that matures as the small team grows. This makes it easier to assimilate new members into the team as well. In our case we have found ourselves getting a bit disorganized on larger projects. Milestones were not being communicated (by me). Certain functionality was not being completed (in ways that I never communicated).

Those of you that know me will find this odd cause if I am anything it is a communicator. If I over analyze it I think maybe this is me not wanting to paint the really awesome folks that are joining Blue Fish into a corner. But there has to be a balance. I am almost 100% responsible for all communication with the client. I have a feel for the way certain things should flow based on their expectations. Capturing that and communicating it to the appropriate person internally is really important (many of you are saying "Duh!").

The second, smaller tweaks, is how all of that gets communicated. We use TeamBox for our project management. It has really been awesome for the last 6 months that we have been working in it. The one thing that we're trying to figure out is how to keep track of milestones since Teambox does not really appear to have that type of functionality. The solution that we're going to give a try is higher level tasks.

When we get a new project in I assign tasks to Keaton for what sections we need a design. So I have something along the lines of:

  • Create Design for Home Page
  • Create Design for Business Directory
  • Create Design for Business Directory Categories Listing
  • Create Design for Blog Listing
  • Create Design for Blog Article
  • Create Design for Category

In TeamBox each of those can have a due date, but what we feel is missing is an overarching task of:

  • All Design Assets should Be Delivered to Development

This clearly communicates and sets the expectation that the 6 smaller tasks should be wrapped up, prepped, and delivered to Development so that they can start on coding the site. Truth is that there is a good chance Tad has started this prior to this task being checked off, but it stands as a mile marker for me as Project Manager that if this Task does not meet it's due date then we need to adjust. We either need to get Tad some help on getting the development done, Tad may have to work hours that we don't like him working, or the project timeline will slip.

If the Milestone task due date is not met there are repercussions. It means we have to communicate with the client that their project delivery date might not be met and we don't like it when that happens. We also don't like it when Tad has to work longer hours or weekends. So we really need to try and stay on top of this task.

Many of you already have this all figured out (own it!). Make sure to leave a comment and let me know how you have communicated as a small team to make sure that everyone is staying on top of what is needed.

Learn more about Marcus Neto

Several months ago we started on a new project. We will be building out a site for Eastern Shore, Alabama. The site will focus on building awareness of our community. Our desire is to have a place that both locals and tourists will use to learn more about our area. Things in this area are changing fast and it is hard to keep up! We'll have a business directory that will be FREE to all businesses. We'll also have articles pertaining to our area with tips on things like good locations for pictures, great places to go for dinner on Valentine's Day, Places to Visit, Things to See, Recipes, etc. We'll also have a community curated list of events and much more.

We've secured the domain name easternshoreal.com. If you are a business owner then make sure to sign up. Again, all business listings will be free.

If you are on Facebook then make sure to like our page.

If you want a sneak peek of the design for the new site...

New website for Eastern Shore Alabama Learn more about Marcus Neto

Over the holidays, I had a chance to dig in to Gary Vaynerchuk's latest book titled Jab, Jab, Jab, Right Hook: How To Tell Your Story in a Noisy Social World, or #JJJRH as the Twittersphere has so brilliantly named it. The book is about social media, the obvious ways businesses misuse various platforms, and eventually, how businesses should properly use social media as a marketing tool. The book is a fast read and I encourage anyone and everyone to pick this book up! As a business owner or a marketer, it will help you use the platforms more effectively.

The book's title grabs you right from the beginning, Gary starts the book off with an immediate connection to boxing, calling the sport a brilliant picture of the business world. Like boxing, business takes strategy, preparation, patience, and most importantly, a distinct understanding of your opponent, or in our case, the customer. Jabs in business come in the form of anything a business gives their customers without a "call to action." Jabs don't try and sell anything, or obviously market a product. Jabs give value to customers without expecting anything in return. Ultimately, jabs set up the knock out punch, the "right hook".

Gary drives home a couple of focus points that I thought were absolute gold, but perhaps the most important thought in the entire book came with Gary's explanation of native content. Basically, each social media platform has a specific way its content is best presented. Some social media outlets are text-driven, others support photos and videos, the list goes on. For instance, Instagram is all about the the visual, while Twitter focuses more on news and quick snippets of information. Anyone using these platforms and reading this is probably thinking, "duuuhh.." And honestly, I thought the same until #JJJRH showed me how many businesses clutter these platforms with content that doesn't belong. The marketer who develops the ability to speak fluently on their chosen social media platform, will be the most successful.

Understanding all of this, I took some time to pick out a couple of practical ways you can improve the effectiveness of your social media campaign.

For Facebook, when possible make sure to use a photograph, and make sure to put a logo on the image so that people can quickly tell who is posting. You always want the photo to be high-quality, if it all possible use a professional photographer. Use the barter system to get a professional photographer involved if you have to. But... If you have to make a choice between stock photography and a photo that is lesser quality, opt for the lesser quality photo. Stock photography should never be used. Visually attractive posts are important. Make sure your posts are worth looking at, then they will be worth reading. Speaking of reading, take the time to ensure that your text is not too long when posting to Facebook and also that it's entertaining. Facebook isn't a blog. Keep your content short and simple.

Twitter is a bit different. Gary has some suggestions that can help transform your ideas into effective tweets. Gary refers to Twitter as the cocktail party of the Internet, a place where listening well has tremendous benefits. So Listen! Understand your customers and respond to what is relevant to them. We all remember how quickly Oreo's team responded to the blackout during the Super Bowl. They received enormous coverage all because they were listening and responded almost instantly. If you want to succeed on Twitter you have to be relevant to your audience. When posting, also understand that Twitter's nature is incredibly fast-paced. Your posts should reflect this in every way. Even your calls-to-action should be quick and simple. In the end you should really just ask yourself one question "is this post interesting and engaging" if it's not then why post?

Here's another tip from Gary, unlink your accounts. When sharing a Facebook post, take the time to craft it specifically for Facebook, the same for Instagram and Twitter. Nothing is more sloppy than posting a link to Instagram that you can't click, or posting a username of a mention in Facebook that was a by-product of a tweet. Effective native content starts with native content! It has to be crafted for each unique platform.

From the reviews and posts I read, I think the book has created more fans for Gary V. than educated social media marketers, but that's definitely no fault of the book's content which is outstanding by the way. All in all, the book is a must-read for anyone in business trying to make sense of social media marketing.

I'd love to talk more and hear your thoughts on #JJJRH. Comment below, email me, or shout at me via Twitter.

Learn more about Jared Darby

Last month we launched a new website for a restaurant client. 4+ years ago we built their first website. At the time uploading a PDF menu for folks was acceptable. But, with the advent of a more mobile web user, we knew that on this latest version of the site we wanted to display the menu on their site in html formatted text.

Because this is a fairly small site, with fairly simple content needs, we made the decision to use Statamic as the CMS. One of the first things we needed to do was to take the structure of their PDF-based menu and think through how we could turn it into publish forms in Statamic that make easy for them to update. Next, we considered how to lay out that content within Statamic so it was easy to read and understand. Last, we had to consider how to take that content and display it on the front-end in a clean, easy to read manner.

This particular menu contains notes about consumer info, gratuity, product information and consumption of different food items. Some of these are required by law so they have to be on the site. The easy way out would have been to just hard code them into the page. But we don't like taking the easy way out. They also wanted to provide the menu in PDF format as a download. We decided that the 'Menu' page would need two fieldtypes, so we created a new fieldset called 'menupost.yaml' with the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
title: Menu
 
fields:
  content:
    display: Menu Note
    instructions: Any menu notes
    required: false
    default: 
    type: redactor
 
  menu_pdf:
    display: PDF of menu
    type: file
    allowed: [pdf]
    destination: assets/

The first field is for basic content like the consumer info, gratuity, etc. The other field is a file field that allows the client to upload a PDF version of the menu. We made sure the client is only able to upload PDFs to this field by setting 'allowed: [pdf]'. Also note that we specify where that file will be uploaded.

Save menupost.yaml and complete this step by making it available to the user by adding the fieldset to page.md under our Menu page.

With that complete we need to think about the actual menu itself, the individual sections. Looking at the menu again we notice that it is broken down into different sections:

What we are going to do is set this up as entries under the Menu page. Think of each section as a 'blog entry' (Read more about Pages and Entries here). For this set of entries we needed a new fieldset. Our solution was to use the Grid fieldtype. Each section within the menu is comprised of the same basic parts; section title, a section description, item title, item description, a primary price, and a secondary price. A few of these fields were also optional so that was noted as well.

We setup the fieldset like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
title: Menu
 
fields:
  title:
    instructions: These are instructions.
 
  notes:
    type: text
    display: Notes
 
  items:
    type: grid
    display: Items
    starting_rows: 2
    min_rows: 2
    fields:
      item:
        display: Item
        type: text
        width: 25%
      main_price:
        display: Price
        type: text
        width: 10%;
      secondary_price:
        display: Secondary Price
        type: text
        width:10%
      item_note:
        display: Item Note
        type: text
        width: 55%
    instructions:
      above: Each food item
 
  content:
    display: Section Note
    required: false
    default: 
    type: redactor

The first field you see is 'Notes'. On the PDF version of the menu this is the little note under each title so a text fieldtype is perfect. Second is the items using the grid fieldtype. It contains 4 fields: Item, Price, Secondary Price and Item Note. Again some fields are optional of which we will cover later on. The last fieldtype is a redactor field for Section Note. This a note at the bottom of each section for additional info, again optional.

After saving this it creates the following:

Now that setting up the content interface for the client is complete we need to display it on the front-end. We do this via a template. We've named ours menu.html for SEO purposes.

In the template we address the optional fields by using a conditional statement:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{{ if menu_pdf != "" }}<p><a href="{{ menu_pdf }}">Click here to download</a> a copy of our menu (pdf format)</p>{{ endif }}
{{ entries:listing folder="menu" sort_by="date" sort_dir="desc" }}
<article class="food grid-100 grid-parent">         
  <h2>{{ title }}</h2>
  {{ if notes != "" }}<p class="notes">{{ notes }}</p>{{ endif }}          
  <ul>
    {{ items }}
    <li>
      <p class="item"><strong>{{ item }}</strong> {{ if main_price != "" }}<span>{{ main_price }}</span>{{ endif}}{{ if secondary_price != "" }}<span class="secondary">{{ secondary_price }}</span>{{ endif}}</p>
      {{ if item_note != "" }}<p>{{ item_note }}</p>{{ endif }}
    </li>  
    {{ /items }}
  </ul>          
</article>
{{ /entries:listing }}
 
{{ if content != "" }}{{ content }}{{ endif }}

If you have not done so already, take a few minutes to enter in some content. The code from above will output the raw HTML + content. From this point all you have to do is apply a little CSS to produce a simple but very elegant restaurant menu.

I hope you found this useful. Our plan is to post a blog post or two per month on Statamic. Follow us on twitter to stay updated!

Learn more about Tad Ward

Jeff Claeson and I started talking in 2009 about the possibility of creating a gallery that showcased sites created using ExpressionEngine. It is out of those conversations that Show-ee was birthed and launched in 2010. It was an exciting time.

When I went to work for EllisLab in 2011, I made a very difficult decision to give up my portion of Show-ee to Jeff. I did it because at the time I felt like any new ideas that I might have in showcasing ExpressionEngine should be brought to EllisLab (that was my job, after all). That was a really rough day and an extremely difficult email to send.

Fast forward to Dec 2013, I contacted Jeff last month and asked him if he had any plans for the site or if he would prefer to sell it. It has not been updated in a year and I know he cares about what happens to Show-ee, but I also know that it is more of a service to the community and client work was taking precedent. I doubt Jeff would've entertained such an offer from anyone else, but I think because of the history that he and I have with the site he entertained and accepted my offer. It is with great excitement that I announce that Blue Fish is now the owner of Show-ee. This is really, really exciting to me.

It's no secret that I love ExpressionEngine. I've always loved promoting what the community is doing as a whole. Show-ee has always been an extension of that. A way of giving back to a community and an eco-system that has allowed me to do things I never thought possible (so thanks!).

We have a ton of plans in store for the website. Keaton has already been mulling over an all new design. And Tad is chomping at the bit to code the whole thing up (responsive of course). We will also be updating the format so that the content makes sense with where ExpressionEngine is now. We will also be looking at how we can add additional content like showcasing / interviewing developers and studios that are committed to the ExpressionEngine community. Doing a more in-depth review of how websites have used ExpressionEngine in creative ways so we can all learn from one another. It is the sharing of ideas & information that I've always loved about this community and we intend on taking that into what we build for Show-ee version 2.0.

Thanks, and go sign up for advertising so I can afford to do all of these things smile

Learn more about Marcus Neto

When I was in high school there was this guy named Josh that was always at our parties. Josh was around 5 years older than all of us and at the time it was awesome, we had this older friend who hung out and bought us beer. The math was easy Josh=beer beer=girls girls=awesome. At some point though, the logic breaks through and everyone realizes older dudes hanging out with high school girls is probably not ok. I think to some extent, we’ve all seen that kind of thing happen and over the last couple of years we’ve been watching image carousels slowly but surely become the “Josh” of the web.

Image carousels? Sliders? Whirlygigs? Whatever they’re called - why are we using these? Is it push from a client? Is it an established design patter? We need to take a step back as an industry and ask this question (again), because the numbers are in, and it’s not looking so good. The University of Notre Dame’s Web Director recently did a couple of studies to test the efficacy of their top level featured image carousels and the results are mostly depressing. The first study’s summary is kind of shocking:

"Approximately 1% of visitors click on a feature. There was a total of 28,928 clicks on features for this time period. The feature was manually “switched/rotated” a total of 315,665 times. Of these clicks, 84% were on stories in position 1 with the rest split fairly evenly between the other four (~4% each)."

The follow up with six month totals is only slightly less bleak. So this is a real problem, it’s not an isolated thing where those of us working on mom and pop sites are having a hell of a time because they demand an image carousel. This is something systemic that’s happening on sites big and small and we can assume that among a large cross section of our industry, the stats are similar.1

We might very well receive a response of “Well, big deal, I use my carouslidagig for branding and informational purposes.” and that’s totally ok, but let’s talk usability, accessibility and payload. If our primary goal is to deliver stunning websites at a small payload that are user focused, then carousels are standing in the way of meeting those metrics. The size of the website very obviously goes up when using an image slider so I’m not going to make a series of points regarding that. Usability and accessibility are where the real damage is potentially done. Look at five websites with image carousels and tell me how many are auto forwarding on a 3-5 second delay… I’ll wait……….

Ok, it’s likely that if not all of them, definitely a majority of them fit those characteristics. Now, how well does that work for someone with accessibility needs? Right, it’s not ideal. Usability is the final but, I would think, the most important of the three because we’re talking about the ability of the user to use the site. I would venture to guess that of the five randomly picked image slider sites you picked a few minutes ago, at least one of them is terrible on mobile, another is confusing or hard to navigate and all of them are very likely obnoxious in general.

The pitfall everyone mentions is that the clients are the ones requesting, or rather demanding these slide monsters to showcase all their best ideas/events/insert something they are psyched on here and that’s ok. Part of their job is to do what’s best for their business and in many cases the client will assume (wrongly) that throwing as much information at a user as possible is good for business. Our job as designers, developers, project managers and directors is to let them know they are wrong and then back it up with quantifiable evidence. There will always be the clients who either don’t believe you or are looking for that missing “something” in their site and *DING* a lightbulb goes off and an image slider will deliver so much content to the user that our conversions will skyrocket and they’ll sell their used car lot to Google! It’s your job to talk them off that ledge, the truth is that they don’t know any better. That client sells cars, he doesn’t read every A List Apart article or pour over the musings of Brad Frost, that’s what you, as a web professional, are supposed to do.

So what’s your recourse? Should you have a clause in your contract that states “designer will not engage in design, use or implementation of image sliders?” No, obviously not, but maybe you have some choices. Are there design patterns that make an image slider more effective? Yes, there are (I left that part out earlier so we could weed out all the TL;DR crowd.. jerks). It is possible to design a usable and effective slider, but by doing so you’re still going to encounter problems of payload and ultimately usability. Image carousels right now are a little like being shot - there’s no good way for me to shoot you. It’s going to hurt either way, but maybe I just graze you. Maybe you just use three slider images and make sure there is a clear navigation and don’t auto advance all over someone. Make as much as possible CSS based so there are less requests. It’s possible, it’s totally possible to design a better image slider, but it’s still not going to be the best solution.

What can we possibly use to fill that whole space below the header? My immediate answer would be a question: What do you want to use? Cause the possibilities are nearly endless. Do you need to deliver a lot of content like The Verge?, do you need to sell some things like GAP? or do you want to help people send better emails like MailChimp?. A lot of us in the community talk about designing for the user, but put the client first because they have the checkbook. I say let’s all put our money where our collective mouth is and have those hard conversations with clients. The truth is that we all know a carousel is probably not the best answer but it’s up to us as a community to continue to break that design pattern. I know I don’t want to be explaining stats for banner blindness to every other client in 5 years, do you?

1 [Author’s note: I stopped writing here and did about 15 minutes of google searching and comment reading to see if there was a positive note about the use of carousels. I found only anecdotal evidence of their efficacy and it seemed to be rooted in some traditional advertising related logic - the more branding and information, the better]

Learn more about Keaton Taylor

I am part of a small group of studio owners. We meet once a month to discuss various things. They run the gamut from hiring new people, marketing strategies, new approaches to contracts and more. A large part of the group is just encouraging each other. Being a small business owner is a lonely thing. Sometimes you don't feel like you can talk to your employees about everything. Sometimes you just need an objective opinion on whether you have lost your mind (again).

2013 has kind of blown my mind. In late 2012 I was just leaving EllisLab after 18 months as their Product Evangelist. I had no idea what 2013 would have in store for me. I look back now at some of my goals and realize just how low I had set the bar. But back in 2012 these goals seemed huge! I mean one of my goals was to keep an office outside of the home. I was worried that after leaving EllisLab I was not going to be able to make the monthly payment for my office space!

Like many of you (if you set goals) I set some goals for my income as well. I wanted to be able to pay myself the same as what I made at EllisLab. It was not a huge number. Last week I wrote that check. It was a good feeling. The big change is that now instead of just looking at my business as a way of offering myself a paycheck I am looking at it as a business. So I am more concerened with the revenue we are generating as a team vs what my check has written on it.

So 2013 has been wildly successful. Blue Fish has added a number of folks to the ranks. We now have five people working on projects of some sort. Not everyone is full time but considering that in 2012 it was just me... We've also had gross revenue 200% over what I initially thought I could do on my own. We've worked on some really great projects for some really great people. We've made strides forward in our education on technical things. We've also made huge strides forward on how we operate as a business. I can see that we are starting to form our processes that will allow us to grow even more.

So, as part of preparing for the final meeting with my compatriots tomorrow. I was sitting here and reflecting on what has been accomplished this year and what we want to shoot for in 2014. Now that I have the right team in place (for which I am extremely thankful) I want to increase our gross revenue by another 70%. I know this is a large goal. It will mean taking a more active role in sales and focusing on dialing in our workflow. I want to add one more person as a full time employee in the 1st quarter. In total I want to add 3 people as employees next year. Bringing our totals to 5 full time employees and 2-3 part timers.

I personally want to get better at my job. If you've read the e-Myth book (If you haven't you should) then you'll understand me when I say that the technician in me has gotten better at getting out of the way in 2013. I know I am still a bottleneck in some situations. Sometimes I have difficulty letting go of a role that I have had to fill (designer, developer, sales, bookkeeping etc). I've found the key people to take over most of those roles though so now I get to lean on them and focus on making sure they have what they need to do their jobs.

I'd also like to get better at sales. I think many in our industry are very passive when it comes to sales. We put ourselves out there and hope that someone will contact us. We wait for the proverbial manna to fall into our inbox. I don't want to just wait for leads to drop in my lap anymore. I want to generate the leads. I want to have several markets that we are actively pursuing. I want to create new opportunities.

I also want to get better at appreciating and managing the people that work for me. I think I am doing a decent job. The only complaint I have gotten is when I am getting in the way and not flowing the information through in a timely manner. If that is the biggest complaint then I should be ok. But mostly I want the people that work for me to know I value them as people. That I want them to acheive their goals just as badly as I want to acheive my goals. I want them to succeed wildly. I want them to lean into their desires and push until they are looking back and thinking "wow... I can't believe what I've been able to accomplish this year".

Most of all, I am turning 40 this weekend. With this birthday more than any other I am realizing just how short life is. My goal has always been to make a difference in the lives of those around me and in 2014 I want to take that to another level.

Learn more about Marcus Neto

Something we don't talk too much here at Blue Fish is that we do quite a bit of photography. Websites need images to visually represent their brand and communicate an appropriate feel. Several of my friends have emailed me recently asking for advice on what camera to purchase. This being the Christmas season I am betting that a few more folks that we know are going to end up with shiny new cameras under the Christmas Tree. So I figured I would write down some basics for taking your photography knowledge to the next level.

When most people get a new DSLR they are a bit overwhelmed. They know that they now have all of this power but have no idea how to harness it. They set their new shiny toy to Automatic mode and snap away. While this gets you a bit more capability over a point and shoot camera you are really missing the boat if this describes your way of using the camera. Dear Reader, I want you to reach deep down and work hard to understand 3 things: aperture, shutter speed and ISO. I know you can handle it. Stay with me here.

On most DLSR camera lenses if you look at the front of the lens you should see the shutter inside. It looks like a series of blades. Visually it will help you understand aperture and shutter speed if you can visualize this. Aperture, in non-technical terms, tells you how large that shutter can open. The odd thing about aperture that people have difficulty understanding is that as the number goes down the size that the shutter can open gets larger. For instance, if you have a prime lens in the 50mm focal length that has an f-stop of 1.2 it can open much larger than a 50mm lens with an f-stop of 2.8. As a matter of fact the size difference is quite large.

Since photography is all about light (a blog post for another time) being able to open a shutter to a wider diameter means that the lens can let more light in. This will be important in a minute when we discuss how the three of these items are related. If you still have that lens handy take a look at the writing on the front of it. If it is a zoom lens then it will probably say something like 28-105mm 1:3.5 - 5.6. The 28-105mm tells you the focal length. The 1:3.5 - 5.6 tells you it has an f-stop range from 3.5-5.6 depending on where in the focal length you are. So at 28mm it has an aperture of 3.5 and at 105 it has an aperture of 5.6. Both of those apertures are pretty average. Once you start getting into photography you may be looking at zoom lenses with a constant f-stop of 2.8. Or prime lenses with f-stops in the 1.2-1.8 range. But both of those demand that your wallet be really committed to this photography thing.

Alright, if you are still reading then I congratulate you. This is not easy stuff. But it is important to understand. Let's continue with some easier items.

Next up we need to discuss shutter speed. This should be easy. Shutter speed is literally the speed at which the shutter opens and closes. Most lenses have plenty of capability here. In other words the lens that came with your camera will be just as capable as a $2000 L-Series lens from Canon.

ISO really stands for Film Speed. But most of the cameras I've seen recently visually represent this as ISO. Back in the days of film you used to have to know more about film speed but now with Digital not so much. Film speed tells you the sensitivity of film. In film it ranges from 50 to 3,000 ISO (if I remember correctly). With digital it goes from 50 to 102,400! Now I can't imagine taking a picture with my film speed set to 102,400 as the image would start to show a lot of noise. But the image below was taken at iso 10,000 (Canon 5d mkIII with a 70-200 f/2.8). It is starting to get a bit noisy but is still a usable image. Especially when you consider that just a few years ago we couldn't shoot anything over iso 800.

So, we've covered the super confusing aperture and the not so confusing shutter speed and iso. Here comes the important part... they are all related. Three legs on a stool kind of related.

Let's say I am taking a shot and the camera meters the image (we're set on Auto) and tells me that it is set to properly expose the shot at iso 400, f/4 and a shutter speed of 1/200. If I make a decision that I want to set the camera to aperture priority (Av mode) and change the aperture to f/2.8 the shutter speed may need to increase to 1/320 in order to still properly expose the image.

Another example would be if I am shooting at dusk and it is getting dark outside. The camera tells me that it is set to iso 400, f/2.8 and a 1 second shutter speed. Well a 1 second shutter speed is not going to work. No one has a hand that steady. So you need to adjust the settings to get the shutter speed to 1/100th. But your camera does not have an aperture that can go any larger than 2.8. Well, then your only option is to increase the sensitivity of the camera. You would change the iso incrementally till you are in a better range for shutter speed.

I used to just set my camera to auto. All of these things were confusing to me too. But once I realized the relationship between these settings and why I might need to know how to utilize them it opened up a whole new world (cue Disney music). It made it easier to get the picture when the conditions were less than ideal. And now that I have progressed into studio lighting it is imperative that I understand the effect changing one setting has on the other. Hope this was helpful. And keep shooting!

Learn more about Marcus Neto

Recently we launched a new website for Mississippi-Alabama Sea Grant Consortium (MASGC). The MASGC is one of 33 federal/state partnerships that matches NOAA Sea Grant expertise and resources with state academic institutions. This project was 5 months in the making and we are very proud of how it has turned out.

When you look at the new site you can't really get a feel for the magnitude of the project. One of the largest aspects to this project was information architecture. Previously there was none (joking).

For those of you reading this that are not part of the web industry, information architecture is basically the organization of information on the site. It is how you make a site make sense to folks outside of the organization. Internally you may see things a certain way but externally, to the lay person, the expectation might be different. When that happens the expectations of an external visitor always take precedence over what internal folks may want to see.

Did I mention the Data migration? I think Jared got a trial by fire with this site. They had content dating back to the 1970s! Thankfully they were open to leaving off some of the older publications. But all of the text had to migrate to the new location on the new site (if it was maintained)

This site is an example of why I love ExpressionEngine so much. No matter what type of content we threw at it EE absorbed it. And made it easy for the non-technical folks at MASGC to update their content.

For the ExpressionEngine folks that are reading this... This site has 34 Channels, 22 channel field groups, 121 Custom Fields. We also used 21 Template Groups and 35 Templates.

As for Modules we used Backup Pro, Calendar, Channel Files, Channel Images, Channel Videos, Forms, Title Master, Updater and Wygwam. We used Freebie, Stash, Matrix, Playa, Hon-ee Pot, Low Seg2Cat, Single Entry Extensions. And we used a couple of other add-ons like P&T Pill, MX Jumper, Switchee, and TruncHTML.

Of course we had channels that are a page layout, but for the most part the channels are different types of content. For instance, Projects, Calendar, Forms, Publications, Gallery, Locations, and People are just some of the types of content that we had on this site. So we created the channels for those pieces of information and then used Playa fields all over in the other Channels so that they could associate content that goes with what ever entry they were putting into the system.

One of my favorite examples of ExpressionEngine's prowess is the People section. We called it people cause it includes people outside of the immediate staff. So if they have someone write a blog post that person can be put into the People Channel and in the News section they can associate the Guest Blogger to the News entry and their information will show up on the page with their contact info. This way the person's information can be reused and there is just one location where any updates might need to be made if their email or phone number changes.

For the People Channel we have custom fields for First Name, Last Name, Job Title, Address, Phone/Fax/Cell (matrix field with pill for type of number), Email, Important Links (Matrix field with Link Text and URL), Bio, Organization, Project Info, Social Links (Matrix field with Pill for type of Social Account and URL), Pictures (Channel Images), and Focus Area (Playa Field). We also use the categories to decide whether the person is part of the Staff, Board of Directors, Management Team etc. It is this type of granularity that really makes EE shine. To be able to use the same content on a Program page, News Article, Staff, Management Team or on the filterable list on the contact page is really nice and makes the maintenance of the CMS much easier for clients.

The site is also responsive. With large sites like this it is always a challenge to get the site structured in a way that makes sense at different breakpoints. I think Tad did an excellent job of it though. One area that I am most impressed with is the Calendar.

Desktop through larger tablet sizes show a monthly view...

But when you get to a mobile device the layout re-orients itself.

As for design, MASGC works with a lot of groups but many of those groups are associated with the Gulf Coast. We wanted a color scheme that worked with a water and sand motif. There is a lot of content on this site so Search was an important aspect of the design. Making it simple for folks to find content that might be buried deeper in the site. We used images on the Research, Outreach, Education and the Focus Area pages to bring a human aspect to the site. Because there was a lot of content associated with each page (News Articles, Galleries, Projects, Contacts, Programs and more) we opted for a 3 column layout on some of the pages. This was the easiest way to keep all of the associated content front of mind.

We are really proud of this project. It has brought us together as a team. And I think many of you will understand what I mean when I say it feels good to see it launched. Special thanks to the MASGC crew for being so awesome to work with. We look forward to continuing the relationship.

Learn more about Marcus Neto

This blog post is a summary of the talk that I gave at the ExpressionEngine conference in October 2013.

Intro slide to talk

TL;DR

In this talk I will provide some insight into WordPress, Drupal and Joomla and how they compare to EE. But this is really just meant as a way of introducing a different way you might want to look at this discussion. We move into a discussion of not selling the tech but focusing on selling a business benefit.

Experience

It's important for you to know a little about me so you know why I am approaching the topic in this manner. You are reading this on our website so you could just hop over to our about us section and get a bit of this but let me highlight it for you.

In 2011-2012 for 18 months I was the acting Director of Business Development / Product Evangelist for EllisLab (the makers of ExpressionEngine). My role in the organization was to help people understand what made ExpressionEngine different and why they may want to give it a fair shake.

I helped devs in the community by helping them explore EE for the first time, helping them strategize on proposals that they were sending to clients, and demostrating ExpressionEngine to both Dev companies and companies that were considering it on their own.

I demo'd ExpressionEngine to Fortune 100 companies during this time. I only say that to let you know, as a reader, that ExpressionEngine is used at many different levels on the internet. Enterprise Level organizations use EE and mom & pop small businesses use it. It can serve both purposes well.

As a developer I have built or worked on over 100 websites using ExpressionEngine. I have been a member of the EllisLab community since June of 2007. And, I have been a member of the ExpressionEngine Pro Network for 6+ years since March of 2008.

It is safe to say I have sold my share of ExpressionEngine websites.

Other items of note, I have been in sales since 1997 when I was hired as an inside sales rep right out of college. This was probably one of the most influential periods of my life. The company I worked for wanted us to become better sales people so they invested in us by getting us sales training at a local institute. I would go over to the classes 2-3 times a week. Being a good salesperson is something I take pride in. This is not "Slick Bob" in a sportcoat trying to talk you into a lemon of a used car. This is a Sales Engineer approach of educating the customer

The Landscape:

So the title of this talk is EE vs Drupal vs Wordpress. I added Joomla because it just felt wrong to discuss these other CMSs and not talk about Joomla. While I've prepared some slides for us to take a look at the other CMSs I have to tell you that this is a very high level, simplified version of what these powerful CMSs can do. To think that anyone could do a talk about even their finer points in an hour is laughable. 

I will also point out that in my slides you did not see anywhere that I am selling myself as an expert in Drupal, Wordpress or Joomla. And really, my hope is that by the end of this talk you'll understand that does not really matter.

Graphs

The next three slides show graphs of the usage of the top CMSs. These graphs are why we are having this talk. Wordpress, Drupal and Joomla cleaning our clock. We know that some of you are running into situations where you are selling a client and they may be leaning towards one of these situations so we wanted to talk about that.

You'll notice that as the rank of the site goes up WordPress loses a little ground, Drupal gains a little ground, Joomla loses ground, and EE gains but only minimally.

Line Graphs

These line graphs show the hierarchy a little better.

I don't think this lack of increase in market share is something that we ExpressionEngine development shops need to be terribly worried about. I know the numbers from the last couple of years from periodically checking them, and I've not seen it drastically change. Out of pride I do wish that EE had gained a little ground.

I think it is important to note that if you are a development shop that uses EE then you are are part of ExpressionEngine's street team. You are the ones that market it. You are the ones that spread the news about it as a system. If the numbers on this graph change it is because of something that you did.

Is it Unique?

One of the things that I wanted to address is the idea that ExpressionEngine is unique. Now I know each piece of tech is unique in it's own way. But one of the things I think we would all agree on is the ability to create channels, Create a Field Group, and then assign the Field Group to a Channel. I now know that each of the systems have something similar. WordPress calls it a Custom Content Type, Drupal has a Custom Construction Kit and Joomla has a Content Construction Component. These are all similar to the native functionality you find in ExpressionEngine.

Unless I am missing something EE is the only Multi-Channel (in our lingo) system of these. But each of them have this ability to create custom fields and expand on the capabilities of it's core system.

Let's dive into each of these briefly

WordPress

WordPress has had Custom Fields for a long time. They showed up in February 17, 2005, in WordPress version 1.5.

For a long time you were required to know PHP to manually configuring them.

Now, you can just do a from within WordPress (which is kind of cool) that will show you the many plugins that make this much easier. I'll point out that the item count from this search is 1,000. I have a hard time believing there are 1000 add-ons for Wordpress to create custom fields but for sure there are plenty to get the job done.

These next few screens show you a bit of how difficult the process is to use these. I think you'll find that it is not difficult at all. You install the Plugin from within the Control Panel and it adds a navigation item. Open it up and you can easily walk through the process of creating a new Custom Post Type with custom fields and all. Still a single channel, but plenty of functionality.

The system creates a navigation item. To get started with this particular plugin you just push the Create Content Type button.

The above image shows the different types of custom fields that you can create. Not as extensive a list as ExpressionEngine but I'm betting some searching would net more

When you add a field you can assign values based on the type of field you are adding

This image shoes the fields that I have assigned to the new Content Type

So, when you go to the publish page for the new Content Type you see the new Custom Fields at the bottom of the page.

As a front end dev the above scares me. And that is my biggest issue with systems other than EE. I don't know PHP and I don't necessarily care to learn it at this point. Making use of the custom fields in the template code would make my eyes glaze over. 

So what are the Pros and Cons for WordPress vs ExpressionEngine?

Drupal

As of Version 7.2.3 (that I downloaded) the CCK was built into the core install.

You open a page or section in Drupal and right there you see that you can create additional Content Types

You can add custom fields to that content type. Initially there does not appear to be as many field types as was available with WordPress but Drupal was built for PHP Developers so I am sure this is something that can easily be added.

The above image shows the parameters you can set for the image field type that I was working with.

This is what it looks like after you add a couple of custom fields to the Content Type

After you add the new Content Type it is selectable and can be used to enter in new content.

Aaand... just like in WordPress you see the custom fields at the bottom of the publish page. I'd also say that knowing the reputation of Drupal this functionality can most certainly be built on

I'll not pretend that I know the specifics of how you gain access to that content so that it can be displayed on the rendered page. That most certainly is the place of a more experienced PHP Developer. Which is where Drupal exceeds.

So what are the Pros and Cons for Drupal vs ExpressionEngine?

Keep in mind that Seeds of Doubt may not necessarily be a bad thing. But Highly Technical and Developer friendly typically translate to more expensive in a prospect's mind.

Joomla

Briefly, let's just gloss over Joomla.

Ooops. smile Actually, this slide was taken directly out of a client site of mine. But, it looks this way because they were originally using Joomla. They called me because they got hacked and immediately wanted to move over the ExpressionEngine but did not want to do a redesign. This was a low budget low time invested just make it work kind of project. But, what this illustrates is that with these systems you can often times get bloat due to the way they handle plugins. Each plugin adds it's own separate CSS and JS files regardless of whether they are actually needed.

Going back to the point about Custom Content a quick search of the extensions directory over at Joomla's website netted 19 modules. From what I could tell they mostly work by creating a completely different architecture to Joomla hijacking the old way of entering content and creating a completely different area in the Control Panel where users do that.

So what are the Pros and Cons for Joomla?

So where do we stop?

So where does this stop. This constant bickering and comparison of one CMS to another. We've taken a brief look at 3 today. A quick look at the landscape tells you that there are many more CMSs out there that probably have good technology underpinning them. Yes, as a fan of ExpressionEngine I have an appreciation for WordPress, Drupal and... well... let's not get carried away and include Joomla in that...

But where does it stop? I mean if you take a look at even a small segment of the CMSs that are available you begin to see that coming up with talking points for each is going to get you no where. You can't possibly think through and market against all of these.

So now what?

You should now be getting a picture that the CMS doesn't really matter. That if any of you had chosen any of the other CMSs you probably would have found the same level of success you have today.

The whole "My CMS is better than yours" argument is fun but it's best for poking fun at fellow techies and not fodder for clients or prospects. They don't necessarily care. So you use ExpressionEngine, or Drupal or WordPress. Who cares? Make the move to selling based on business goals not on the tech underpinning and you will make your life a lot easier. Make sure the tech can provide the solution. But the prospects that you talk to do not necessarily care which CMS you use. They just want to know that it is going to work and be easy for them.

Where I contradict myself...

If they do ask though. You'll want to be able to explain why you use EE. You use some of the following:

EE Benefits

ExpressionEngine is really easy to use for non-technical folks. The fact that each publish page is different means that they will be easier to fill in. The cost of getting First-Party Support is really really low when compared to other CMSs. ExpressionEngine makes no assumptions about your content or structure so designs can be customized more. And there is not a cookie cutter look to EE websites. The add-on developer community is amazing. Yes they are commercial add-ons, but that is a good thing as we want our devs to want to extend and support the products that they build. ExpressionEngine is extremely flexible. You can approach it's flexibility from several angles. It is flexible when you consider how you code the front end of sites using EE. It is flexible to extend and build modules for. EE can scale with the best of them. Due to my position at EllisLab I know of at least a handful of websites that received 5-25 Million visitors per month. I am comfortable in saying that it can handle traffic with the best of them. Security was always taken seriously at EllisLab. Everything was developed knowing that some of the most security concious organizations were going to use EE. And finally, multiple channels of content is how we have those flexible publish pages that are different for each type of content.

Show them a demo

Show them a working demo. Grab Twitter Bootstrap or Zurb's Foundation and make a working site. It will probably take you 1-2 days but it will be something that you use many times over. Nothing is more powerful than showing them how they would enter in content that they specifically will need.

My demo has various channels for different types of content. I have a channel for images, video, locations etc. Show them how that looks as a publish page. Also show them how you can easily bring in that information into templates and mix it together. I have found this to be a powerful tool.

Give them Examples

Here are just a few of the examples that we know of that are using ExpressionEngine. This is as of Oct of 2013. If I am talking to someone that is curious about ExpressionEngine I might give them a couple of websites in their market segment as examples.

Focus

Now I would like to move into the swift kick in the rear portion of my presentation. Part of the problem many developers are having is that you are not focusing on your business. You want to build websites, and that is fine. Love of your craft is a beautiful thing. We LOVE building websites at Blue Fish. But, so many of you could be so much more successful if you would put some focus on your business. If you cannot keep yourself from continually getting dragged back into code/design/whatever then you will be susceptible to the up and down nature of this industry. The typical cycle for a freelance or small shop is: you sell a job, you work on a job, you finish the job, you market yourself, you get an interested prospect, you sell a job, you work a job, and so on. The only way to break out of this is to continually be marketing yourself and working deals. Or Always be closing" smile

And for those of you that are perfectly fine as independents? Keep on rocking. Not everyone wants to build a business and that is ok.

Active Stance

One of the things I would like to to do is to take a more active stance with your sales. That same level of attention to detail with the colors you choose, validation and semantic-ness of code etc. If you apply that same level of attention to detail to your sales process you will have more success.

Conclusion should be that we need to be in a constant state of self discovery to figure out new angles to market our products.

Full Circle

The moral or TL;DR (Too Long Didn't Read) of the story really is to not sell a deal on technology. If you find that you are continually having deep discussions about the capabilities of the various CMSs then you've lost control of the discussion or are presenting yourself in a way that is not helpful to your sales process.

Occasionally you will run across an RFP that states that the website to be built has to use x technology. If you get one of those the first thing you do is call the person you are interfacing with to see if there is any wiggle room. If not then bow out and explain why. Sometimes simply explaining why you've chosen a specific CMS with strong conviction is enough to get them thinking about whether they have made a mistake in eliminating it. It can often times lead to a discussion that opens the deal back up. 

Thanks for reading. If you have any questions don't hesitate to write me and ask! Learn more about Marcus Neto

Hi. My name is Tad Ward. I do a lot of the front end code work here at Blue Fish. I’m definitely a code guy, not a wordsmith, so I’ll be as brief as possible.

My love for the Internet began in the mid to late 90's with Geocities and Microsoft Frontpage. Being able to create cheesy web pages was something I found enjoyable. Ultimately it led me to Beckley, WV and the Mountain State University. I graduated from MSU with a Bachelor's in Internet/E-commerce and an Associates degree in Website development. After college, I started my first job as a front-end developer for a small business in the Beckley, WV area. The company didn't last very long so I decided to start my freelance career and TMW Webdesigns.

I continued to do freelance website development off and on for a few years while being a full-time cook in a couple of restaurants. Working as a cook allowed me to develop my enthusiasm and love for all things cooking and food. My passion to become a successful web developer drove me, so I continued to pursue it and in 2009 I was forced to use a little content management system called ExpressionEngine. Being forced to use EE took me down a path that has led me to where I am today. Now, I am proud to I consider myself an ExpressionEngine Pro and a proud member of the EE community.

I have a little bit of wanderlust that has came from my moving around a lot as a kid and adult. I was born in Ohio but have lived in Hawaii, Charleston SC, Northern Virginia, numerous places in West Virginia and Boise, Idaho. Traveling is something I truly enjoy and hope to do a lot more of in the future. In the mean time, I am enjoying being father and loving boyfriend. I have a son who was born 3 years ago, and about a month ago we had a beautiful little girl. We've grown into quite the little family.

Other than being a front-end developer and devoted father; I am a huge history buff. My favorite historical period is Ancient Rome. There is just something about that time period that has caught my attention and kept it. Not sure if it is the crazy emperors such as Caligula, what life was like for the everyday Roman, or the food and drink, I am hooked.

Over the years, I have developed a love for cooking and most definitely grilling, love for craft beer and home brewing. One of these days I hope to start my personal food blog. Prepare your taste buds!

I am an Atlanta Braves fan and I will chop till I die!

I am excited to be a part of the Blue Fish Design Studio team and would love to answer any questions you have about cooking, Ancient Roman History, craft beer, or coding. Follow me on Twitter or shoot me an email.

Learn more about Tad Ward

Today my buddy Steven Grant was running into some issue with a site he inherited from another ExpressionEngine developer. He was looking for what appeared to be a custom field but actually turned out to be a Snippet. This brought him to tweet the following:

Several years ago Leevi Graham started the discussion on Naming Conventions in ExpressionEngine at the San Francisco EECI Conference (2010). I remember sitting through his talk and thinking "This is all so obvious, but I've failed to implement it". I think we are all guilty of letting loose of standards at times. Perhaps you don't group your CSS as well as you usually do or you don't comment your Javascript or whatever. OK, maybe you don't but I know I need to be reminded occasionally.

But, I think you will find the following fairly low barrier as far as implementing goes. Let's start with some assumptions. You have a Field Group for a Channel. The Channel is called Staff. The Field Group is called Staff. You have 2 fields (let's keep this simple). The first is a WYGWAM field for Bio. The second is a Matrix field (or Grid) for images. The Matrix field has 2 columns. The first is a File field for the picture. The second is a Text field for Alt.

So in this instance, if memory serves correctly, we would have the following:

The Bio field would be given a long name of Bio and a short name of cf_staff_bio. This tells you that it is a custom field (cf), that it belongs to the Staff channel (staff), and that it is the Bio field (bio).

The images fields gets a long name of Images and a short name of cf_staff_images for all of the same reasons above. Where it delineates slightly is for the Matrix columns. In theory the File field would get a long name of Image File and the Text field would be Alt Text. The short name for Image File would be mf_staff_image_file and the short name for Alt Text would be mf_staff_alt_text. The difference here is that we are using mf for Matrix Field followed by the channel name and then the long name of the field.

Other fields that may be used would be Snippet (sn or snip), or Global Variables (gv).

The specific long name is not terribly important. It is the format that is important. Prepending tells any developer in our community the type of field that you were using and where to find it if they need to make adjustments.

Much thanks goes to Leevi for bringing this up several years ago. I just felt it needed repeating as it is not necessarily something that new folks to our community have heard.

If you have any additional suggestions leave a comment or touch base with me on Twitter

Edit: Apparently Steven wrote a blog post on this topic in 2010 as well.

Learn more about Marcus Neto

Its definitely been a whirlwind month, and to say that I’ve been hard at work wouldn’t do my time here at Blue Fish justice. When I’m not scanning in contracts, migrating content, or making coffee, I try and find some time to continue honing and developing my skills in design. Inspiration has been a vital tool in my growth and it’s definitely one of the ways I love to keep my inspiration fresh and continuous. Dribble is one of my favorite ways to see other designers hard at work. Here are 6 designers whom you may not know. I love their style.

Steven Parker is one of the guys who’s work I would love to see a whole lot more. Everything that he he’s shown has been incredibly clean. He’s the senior designer for Squarespace and is clearly an experienced designer who has had a lot of time to perfect his craft. The piece highlighted is an ad he did to promote the Squarespace meet up during SXSW 2011.

Arian Selimaj has an awesome grip on how to integrate his own style and feel to flat design. Not only are his pieces simple and effective, but everything he does is a visual adventure in itself. When I see anything he does, I can definitely tell it’s his work.

Claudio Cioba is a creative who works incredibly well inside of boxes. That’s right, I said inside. A specialist in interface design, Cioba’s specializes in spicing up the practical. Sometimes you forget that he is displaying data because of how beautiful everything he touches is. Cioba has the amazing talent of bringing the ordinary to life.

Allan Grinshtein has a very vibrant feel to everything he does. Without seeming childish, he creates art within every single page. A natural illustrator, Grinshtein clearly has a knack for icons and badges. His work on the web follows suit, you can help but feel like you’re in the world of a master illustrator whenever you browse his work.

Heath Waller is without a doubt one of my favorite designers right now. She is incredibly gifted designer who has a lot of work displayed on Dribble. Classy is the best word to describe her work. Anything she produces has the polished tendencies of a designer who’s found what really works. Waller consistently inspires me with her use of white space. Her pages are simple, full and spacious all at the same time. She’s awesome, give her a look.

Mike Precious is the definition of a pro. His designs are polished and they exude the confidence of a designer who’s good at what he does and knows it. If he hasn’t he probably could write a book on effective web-design. He knows how to use colors, patterns, and every inch of space he’s afforded. His stuff is killer.

Learn more about Jared Darby

Statamic V1.6 has been out for almost a week. So I pour myself a bit of Don Julio 1942 (fine tequila or scotch are the only things that will do in this situation) with 2 ice cubes in a glass, block off a bit of time and sit down to take a look at the new Control Panel theme and Raven.

Pedantic introductions aside… this control panel is gorgeous. Such a pleasure to use. They've moved some things around but I like it. It seemed a bit odd, in the previous version, to land on the system information after logging in. Users don't necessarily need to see that info. They, more than likely, came there to manage content not to check system file security. So it is a nice change to land on content first. The control panel is responsive in speed and viewport adjustment. Mobile usage is nicely done. I'm also really digging the ability to filter based on a section or type of content. I think usability with non-technical users will be really nice when combined with the custom field capability that is similar to ExpressionEngine's Channel Publish page.

Raven is really really cool. To quote the Statamic Overview page for Raven.

Forms never saw this bad ass coming.

It is pretty cool and after only a little bit of playing with it I know I am only scratching the surface. In an effort to come to grips with Raven I will first try converting the contact form we have been working on in previous blog posts to a Raven fueled form.

To begin you have to download Raven. You'll need to upload a few files. In _config/add-ons you'll upload the Raven folder from the package you downloaded. We'll return to this folder in a minute as it contains some powerful things. Next you'll upload the Raven folder to _add-ons. Installation? Complete. I love this system.

So go back to the _config/add-ons/raven folder. See that folder called form sets? Open the example.yaml file in your favorite text editor. This is basically where you set all of the cool parameters for Raven. I'll spare you the details of each and every parameter and just highlight the settings I used in mine.

1
submission_save_path: _content/_forms/

This is where it will save the submissions on your server. You'll see in a minute how you configure it to send you an email as well. But I bring this location up because, as you can see, it is inside of the _content folder. This means you can output this stuff on the front end of the site if you like.

1
file_prefix: contact

I went ahead and set a prefix for my files in case I have another form. This way I can tell the entries they create apart.

1
2
3
4
required:
  - name
validate:
  name: alpha

Just want to see what happens when this fails (in the next blog post)

1
2
3
4
5
email:
  to: marcus@bluefishdesignstudio.com
  from: "{{ from }}"
  subject: The raven has flown
  automagic: true

This is the one that I am jazzed about. See that from field? The {{ from }} in there will contain the email address of the person submitting the form. I've not asked but I am betting that you can use that same format in the other fields as well. So if you wanted to dynamically set the subject you could.

Save the file.

Go to _themes/denali/templates and open contact.yaml. We need to change a few things if we are going to use Raven. Actually the code we will be adding should make things a lot cleaner.

You can delete all of this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    {{ if error}}
        <h1>Error</h1>
        <ul>
        {{ errors }}
            <li>{{error}}</li>
        {{ /errors }}
        </ul>
    {{ endif }}
 
    {{ if success }}
    	<div id="contact-results">
		{{ thankyou }}
    	</div>
    {{ else }}

And instead of this:

1
{{ email_form subject="Contact Form" to="marcus@bluefishdesignstudio.com" required="first-name" }}

All you need is this:

1
{{ raven:form formset="contact" return="contact-us" }}

The formset parameter tells Raven to look at that file we made changes to at the beginning of this tutorial. And as you might suspect the return parameter tells it to return back to the same page. Make sure to replace the ending {{ /email_form }} with {{ /raven:form }} and delete the unnecessary conditional logic between the raven:form tag pair. No worries if this is a bit confusing. Just look to the end of this blog post and I will provide full code for the files we've talked about.

Now, above the raven:form tag pair put this:

1
2
3
4
5
{{ if raven:success }}
	<div id="contact-results">
		{{ thankyou }}
	</div>
{{ endif }}

The raven:success and raven:has_errors are new tag pairs that Jack added to make things simpler. I'll only show you the raven:success in this blog post and talk a bit about raven:has_errors in the next.

Notice that in the code above we are still using our {{ thank you }} to output a custom message when the person completes the form successfully.

Provided you have edited your code properly your _themes/denali/templates/contact.html file should look like so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<div class="block">
  <header>
    <h1>{{ title }}</h1>
  </header>
  <div class="contact-content">
  	{{ if email }}<p><strong>Email Address:</strong><a href="{{ email }}">Email Address</a></p>{{ endif }}
	{{ if phone }}<p><strong>Phone Number:</strong> {{ phone }}</p>{{ endif }}
	{{ if twitter|dribbble|facebook|linkedin }}<ul>{{ endif }}
		{{ if twitter }}<li><a href="{{ twitter }}">Twitter</a></li>{{ endif }}
		{{ if dribbble }}<li><a href="{{ dribbble }}">Dribbble</a></li>{{ endif }}
		{{ if facebook }}<li><a href="{{ facebook }}">Facebook</a></li>{{ endif }}
		{{ if linkedin }}<li><a href="{{ linkedin }}">Linkedin</a></li>{{ endif }}
	{{ if twitter|dribbble|facebook|linkedin }}</ul>{{ endif }}
	{{ instructions }}
  </div>
{{ if raven:success }}
	<div id="contact-results">
		{{ thankyou }}
	</div>
{{ endif }}
{{ raven:form formset="contact" return="contact-us" }}
  <fieldset>
	<label>Your Name:</label>
	<div class="form-left">
		<label class="small">First Name<span class="required">*</span></label>
		<input type="text" name="first-name" class="text-field" id="first-name" size="50" value="" />
	</div>
	<div class="form-right">
		<label class="small">Last Name<span class="required">*</span></label>
		<input type="text" name="last-name" class="text-field" id="last-name" size="50" value="" />
	</div>
	<div class="form-left">
		<label>Email Address<span class="required">*</span></label>
		<input type="text" name="from" class="text-field" id="email" size="50" value="" />
	</div>
	<div class="form-right">
		<label>Phone Number<span class="required">*</span></label>
		<input type="text" name="phone" class="text-field" id="phone" size="50" value="" />
	</div>
	<label>Company</label>
	<input type="text" name="company" class="text-field" id="company" size="50" value="" />
	<div class="form-left">
		<label>What is your timeline?<span class="required">*</span></label>
		<select name="timeline">
			<option value="timelineselect" /> -- Select One --<br/>
			<option value="Immediately" /> Immediately<br/>
			<option value="Within 2 months" /> Within 2 Months<br/>
			<option value="Within 4 months" /> Within 4 Months<br/>
			<option value="No timeline" /> Hadn't really thought about it<br/>
		</select>
	</div>
	<div class="form-right">
		<label>What is your budget?<span class="required">*</span></label>
		<select name="budgetrange">
			<option value="budgetselect" /> -- Select One --<br/>
			<option value="$5k to $10k" /> $5k to $10k<br/>
			<option value="$10k to $15k" /> $10k to $15k<br/>
			<option value="$15k to $20k" /> $15k to $20k<br/>
			<option value="$20k to $30k" /> $20k to $30k<br/>
			<option value="No Budget" /> Hadn't really thought about it<br/>
		</select>
	</div>
	<div class="form-left">
		<label>Your Message<span class="required">*</span></label>
		<textarea name="message" id="message" rows="18" cols="34"></textarea>
	</div>
	<div class="form-right">
		<input type="submit" class="button small" value=" Submit Form " />
	</div>
</fieldset>
{{ /raven:form }}
</div>

and your _config/add-ons/raven/formset/contact.yaml file will look like so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
###########################################################################################
#
#  EXAMPLE RAVEN FORMSET
#
#  Formsets can override any default settings (raven.yaml) EXCEPT master_killswitch
#
###########################################################################################
 
# Location (from root) to save form submissions
submission_save_path: _content/_forms/
 
# Prefix your files with a string which are saved in the format:
# YYYY-MM-DD-HH-MM-SS.yaml
file_prefix: contact
 
# Fields allowed to be submitted in the form, automatically
# purging anything and everything else
#allowed:
#  - first-name
#  - last-name
#  - from
#  - phone
 
# You are not required to require fields, but once you do, any missing
# from the POST will squash this submission and send a list of
# missing fields to your {{ raven:errors }} tagpair
required:
  - name
 
# Apply validation rules to specific fields. Refer to documentation
# for a full list of available rules and their format
validate:
  name: alpha
 
# Error messages can be mapped to your fields and passed to the
# template upon failure. They will be available here:
#
# {{ raven:error }}
#     {{ invalid }}
#         {{ field }} : {{ message }}
#     {{ /invalid }}
# {{ /raven:error }}
#
# messages:
#   name: "Must be made of letters. Who named you?"
#   website: "That's not a website. Are you from the past?"
#   birthday: "You need to be 21 to drink. Come back later."
#   favorite_number: "Ahem. I said 3 digit number."
 
# Configure notification email
email:
  to: marcus@bluefishdesignstudio.com
  from: "{{ from }}"
  subject: The raven has flown
  automagic: true
#  html_template: html_email
#  text_template: text_email

Now if you go to the front end of the website and navigate to the form we've been working on you'll see it looks like just before. If you enter in info and submit it you should see what ever message you had in thankyou field in your Contact Us entry.

Next I may try and take a look at submitting content through a Raven form. No promises though. I will at least take a quick look at the error messaging capabilities of Raven.

Now raise your glass to Jack and Fred (makers of Statamic) and take another swig of that tequila (or scotch).

EDIT: Jack has moved the formsets folder for the V1 release. So just make note of it's new location in _config/formsets. That is all smile

Learn more about Marcus Neto

Hi. My name is Jared. I am the intern here at Blue Fish. When I’m not making coffee, or looking wide-eyed at Marcus’ plethora of camera lenses, I’m either taking pictures for websites, transferring content to updated sites, or continuing my pedestrian learning of HTML5.

I’m a drummer, guitarist, songwriter, and I can most likely vacuum a room better than anyone you’ve ever met. I make frozen chicken breast into gourmet meals on the weekly, John Cusack is my favorite actor, and when I get some free time, I’ll let you know what I like to do in it.

I believe in some strange way, the amount of times I’ve moved as a kid contributed heavily to my need to change interest so fast and frequently. I was born in Sugarland, TX, moved to Baton Rouge, grew up in Kansas City (ironically, the Missouri side), eventually moved back to Texas, and finally made the trip to Mobile, AL for college.

Currently, I am working here at Blue Fish, but I also work at Bay Community Church as their youth group’s creative director. I direct their videos, manage their branding, and oversee their graphic design, and worship departments. I never imagined I could find a job that would let me be as creative as I can possibly be in everything I’m interested in; be it music, design, or cinematography. We do everything from writing SNL-styled sketches, songs, to short films and documentaries.

I am passionate about learning and constantly growing. I’ll graduate this year with a degree in Business Management and a minor in Marketing from the University of Mobile. I enjoy sports, music, and good books. You can follow me on Twitter or say hi via email.

Learn more about Jared Darby

We've been building out a contact page in Statamic. In this tutorial we are going to put the custom fields that we created in the last tutorial in the template file. This will allow us to display the content that we have saved. We will also look at some basic conditional logic using the custom field as a comparator. So let's get started!

As part of working up this tutorial I had to make some changed to the files we've been working on. Let's make those updates first.

In the Contact.yaml file (_config/fieldsets/) we now have the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
title: Contact Page
 
fields:
  _template:
    display: Template
    type: templates
 
  image:
    type: file
    display: Upload an Image
    destination: assets/img
    show_thumbnail: true
 
  where:
    display: Where It’s At
    type: location
 
  instructions:
    display: Page Content
    required: false
    default:
    type: markitup
 
  thankyou:
    display: Thank You Page Content
    type: textarea
 
  email:
    type: text
    display: Email Address
 
  phone:
    type: text
    display: Phone Number
 
  twitter:
    type: text
    display: Twitter URL
 
  facebook:
    type: text
    display: Facebook URL
 
  dribbble:
    type: text
    display: Dribbble URL
 
  linkedin:
    type: text
    display: LinkedIn URL
 
  content:
    display: Page Content
    required: false
    default: special
    type: hidden

Specifically look at the Thank You Page Content text area. That was the Results Page Content. We also made the content field hidden and created an instruction custom field in the last tutorial post. The reason why is Statamic requires a Content field unless you specifically mark it as hidden. So by marking it as hidden we can control the order in which the fields appear.

At this point make sure to go to the Contact Us entry and make sure you have content in all of the fields. The content will make it easier to tell whether the next step has been completed properly.

Next we will be working in the (_themes/denali/templates) contact.html file. When building websites for clients I like to use conditional logic to make sure that the field has a value (is not empty) so that we are not outputting a lot of unecessary HTML and messing up the layout of our page. The way that you do that with Statamic is as follows:

1
{{ if email }}<a href="{{ email }}">Email Address</a>{{ endif }}

This code basically states that if email has a value (any value other than empty) then output the code. Otherwise it will just not output anything.

If we extrapolate this then we can do the following:

1
2
3
4
5
6
7
8
9
{{ if email }}<p><strong>Email Address:</strong><a href="{{ email }}">Email Address</a></p>{{ endif }}
{{ if phone }}<p><strong>Phone Number:</strong> {{ phone }}</p>{{ endif }}
{{ if twitter|dribbble|facebook|linkedin }}<ul>{{ endif }}
	{{ if twitter }}<li><a href="{{ twitter }}">Twitter</a></li>{{ endif }}
	{{ if dribbble }}<li><a href="{{ dribbble }}">Dribbble</a></li>{{ endif }}
	{{ if facebook }}<li><a href="{{ facebook }}">Facebook</a></li>{{ endif }}
	{{ if linkedin }}<li><a href="{{ linkedin }}">Linkedin</a></li>{{ endif }}
{{ if twitter|dribbble|facebook|linkedin }}</ul>{{ endif }}
{{ instructions }}

Notice that I also made sure to capture the undefined list HTML tag with conditional logic. The pipe ( | ) allows us to say that if any of the custom fields have any value then go ahead and output the contained code.

After you update with the contact.html file with the code from above the top of your contact us page should look like the following:

I've made one other change to the contact.html file as well. Eric's Contact Form code does not change the URL when there is a success, but it does internally have a way for you to kick out a note that the message has been sent. To do that you use the {{ success }} tag. Eric provides an example in the code on the Github page. But I want to take it a little bit further. So we are going to use the thankyou custom field that we created to allow a user to output whatever text they want when a visitor submits the contact form. You do that by doing the following:

1
2
3
4
5
{{ if success }}
	<div id="thankyou">
		{{ thankyou }}
	</div>
{{ else }}

Notice that the {{ if success }} was already part of our code. All I did was add a div (that can be styled to attract attention) and the {{ thank you }} custom field. Now, whenever someone submits the contact form they will see whatever content you have put in the Thank You Page Content field.

You'll note that I left off using the Location field for another blog post. I got into that documentation and realized it was a bit more powerful than I thought it was going to be (good news) and decided I would put off that blog post for another day.

I have to say, I am really enjoying Statamic. I wasn't sure what I was going to feel as I was going through this. I've been a fanboy for ExpressionEngine for so long that I almost felt dirty even considering another CMS. Granted Statamic is not a full on replacement for EE... yet. Jack and Fred are kicking butt and have laid a good foundation. We are actively looking for a smaller project that we could use Statamic for. If that is you or if you know someone that needs a small business website then make sure to send us an email.

Learn more about Marcus Neto

Two weeks ago I wrote blog posts on Getting Started, Adding a Contact Form, and Creating a New Page Type for Statamic. As part of creating a new Page Type we also created new fields for the Page Type. One of the questions I had afterwards was how to reorder the fields because the Page Content Field was appearing at the bottom of the page. I wanted it to appear in place where I had it in the code. Just as a refresher here is that code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
title: Contact Page
 
fields:
  _template:
    display: Template
    type: templates
 
  image:
    type: file
    display: Upload an Image
    destination: assets/img
    show_thumbnail: true
 
  where:
    display: Where It’s At
    type: location
 
  content:
    display: Page Content
    required: false
    default:
    type: markitup
 
  results-content:
    display: Results Page Content
    required: false
    default:
    type: markitup
 
 email:
   type: text
   display: Email Address
 
 phone:
   type: text
   display: Phone Number
 
twitter:
   type: text
   display: Twitter URL
 
facebook:
   type: text
   display: Facebook URL
 
dribbble:
   type: text
   display: Dribbble URL
 
linkedin:
   type: text
   display: LinkedIn URL
Yesterday Matt Steele asked me if I had figured out the field order bit from the last blog post. The resident Community Manager, Gareth Redfern had the following to say: So basically, the following:
1
2
3
4
5
  content:
    display: Page Content
    required: false
    default:
    type: markitup
was throwing us a curve ball. The fix? All I had to do was change the name of the field from content to something other as Statamic processes the Content field and puts it at the bottom of the form. So I made the following change:
1
2
3
4
5
  instructions:
    display: Page Content
    required: false
    default:
    type: markitup
and it worked just like I wanted it to. You'll also want to add the following to the end of the contact.yaml file:
1
2
3
4
5
  content:
    display: Page Content
    required: false
    default: special
    type: hidden
The content field is required unless specified otherwise so you have to tell Statamic to hide that field since we are not going to use it. So, thanks Gareth! Learn more about Marcus Neto

One of the things that I absolutely love about ExpressionEngine is the ability to create Channels for specific types of content. Statamic has similar capabilities though it takes a different route to get there. In ExpressionEngine you would go into the Control Panel, create a channel, create a channel field group and assign the fields you want to the channel field group. In Statamic you go into _config/fieldsets/ and create a new YAML file with the appropriate fields in it and all of their configuration parameters. This enables an additional Page Type when adding a new page in the Control Panel.

To get started we will navigate to _config/fieldsets/ and create a new file named contact.yaml. To get started let's put the following in the file and save it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
title: Contact Page
 
fields:
  _template:
    display: Template
    type: templates
 
  image:
    type: file
    display: Upload an Image
    destination: assets/img
    show_thumbnail: true
 
  where:
    display: Where It’s At
    type: location
 
  content:
    display: Page Content
    required: false
    default:
    type: markitup

This code will give us the ability to select our contact template, upload a file (image) to dress up the page, input an address (and plot it on a map!), and display some basic content on the page. It also gives you this when you click on the Create New Page button in the Control Panel!

To extrapolate this and make it something something we can really be proud of we would do something like the following:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
title: Contact Page
 
fields:
  _template:
    display: Template
    type: templates
 
  image:
    type: file
    display: Upload an Image
    destination: assets/img
    show_thumbnail: true
 
  where:
    display: Where It’s At
    type: location
 
  content:
    display: Page Content
    required: false
    default:
    type: markitup
 
  results-content:
    display: Results Page Content
    required: false
    default:
    type: markitup
 
 email:
   type: text
   display: Email Address
 
 phone:
   type: text
   display: Phone Number
 
twitter:
   type: text
   display: Twitter URL
 
facebook:
   type: text
   display: Facebook URL
 
dribbble:
   type: text
   display: Dribbble URL
 
linkedin:
   type: text
   display: LinkedIn URL

Jack and Fred cover the various Fields that are available on this page. I think it is going to take a full on site build to make me comfortable with the capabilities this brings. For the moment though it makes it easy to do something like the above where I have defined items that are currently on the Blue Fish contact page. Adding the above to the contact.yaml file nets you the following:

The question I have is how do you control the order of the fields? Statamic seems to be ignoring the order in the file. I'll have to ping support and see what they say because in a perfect world I would be able to present the fields in a specific order.

Also, be aware that YAML is very, very, very format sensitive. If you are not used to this then it can throw you for a loop. When I originally put the above code in the contact.yaml file I was not seeing 4 of the fields render on the publish page. Turns out it is because there was a space missing. Adding the space and saving the file made them appear. So be aware that something as simple as a missing space can cause issues.

I think that about does it for this installment. Next I will take a look at how to place the content we just put in the fields . But so far so good with Statamic. I can definitely see the power in this system. It's probably my familiarity with ExpressionEngine that is making this click so quickly for me. The mentality of creating custom post types for various types of content is something that I "get". Statamic certainly makes this easy.

Learn more about Marcus Neto

In our last post we talked about some of the reasons we are looking at Statamic. We talked about the lack of a database, creating a user so you can log into the CP and how Statamic is easily theme-able. In this post I wanted to accomplish something that I now I will use on every site that Blue Fish does. So we will be walking through how to add a contact form to your Statamic install.

I will admit that when I viewed the home page for Statamic and saw that the Form Builder was set to Coming Soon I was deflated a little bit. I can't remember the last time I made a site that did not have some sort of contact form on it. So without this functionality we would either have to not use Statamic or we would have to look at using some outside source like Wufoo. I am not keen on piecing different systems together like that so I was really hopeful that someone had created a plugin for Statamic that would allow for contact forms.

And I was right, Eric Barnes has created a plugin called Statamic Email Form that does just what we need. It is much simpler than what we usually use (the free version of FreeForm for ExpressionEngine) but for this type of site it fits the bill nicely.

If you download his package and unzip it. All that is left to do is upload the email_form folder from his zip file to the _addons folder on your server. Once it's finished uploading it is installed.

The next step is to get a form to work with. Since we already have a form on Blue Fish's website I figured that was a great place to start. If you want to use that code you can:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<fieldset>
	<label>Your Name:</label>
	<div class="form-left">
		<label class="small">First Name<span class="required">*</span></label>
		<input type="text" name="first-name" class="text-field" id="first-name" size="50" value="" />
	</div>
	<div class="form-right">
		<label class="small">Last Name<span class="required">*</span></label>
		<input type="text" name="last-name" class="text-field" id="last-name" size="50" value="" />
	</div>
	<div class="form-left">
		<label>Email Address<span class="required">*</span></label>
		<input type="text" name="from" class="text-field" id="email" size="50" value="" />
	</div>
	<div class="form-right">
		<label>Phone Number<span class="required">*</span></label>
		<input type="text" name="phone" class="text-field" id="phone" size="50" value="" />
	</div>
	<label>Company</label>
	<input type="text" name="company" class="text-field" id="company" size="50" value="" />
	<div class="form-left">
		<label>What is your timeline?<span class="required">*</span></label>
		<select name="timeline">
			<option value="timelineselect" /> -- Select One --<br/>
			<option value="Immediately" /> Immediately<br/>
			<option value="Within 2 months" /> Within 2 Months<br/>
			<option value="Within 4 months" /> Within 4 Months<br/>
			<option value="No timeline" /> Hadn't really thought about it<br/>
		</select>
	</div>
	<div class="form-right">
		<label>What is your budget?<span class="required">*</span></label>
		<select name="budgetrange">
			<option value="budgetselect" /> -- Select One --<br/>
			<option value="$5k to $10k" /> $5k to $10k<br/>
			<option value="$10k to $15k" /> $10k to $15k<br/>
			<option value="$15k to $20k" /> $15k to $20k<br/>
			<option value="$20k to $30k" /> $20k to $30k<br/>
			<option value="No Budget" /> Hadn't really thought about it<br/>
		</select>
	</div>
	<div class="form-left">
		<label>Your Message<span class="required">*</span></label>
		<textarea name="message" id="message" rows="18" cols="34"></textarea>
	</div>
	<div class="form-right">
		<input type="submit" class="button small" value=" Submit Form " />
	</div>
</fieldset>

This form uses just about every form element so it should give you a great place to start from. Once you've got a form to play with you will need to add a new template in Statamic that you can use for the Contact Page. I am using the default Denali template so I went to _themes/denali/templates in my Statamic install. Once you've found that location you can either duplicate an existing template like Page or just create a new html file called contact.html.

Using Eric's sample code from Statamic Email Form I ended up with this in my contact.html file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<div class="block">
  <header>
    <h1>{{ title }}</h1>
  </header>
  {{ email_form subject="Contact Form" to="some@emailaddress.com" required="first-name" }}
    {{ if error}}
        <h1>Error</h1>
        <ul>
        {{ errors }}
            <li>{{error}}</li>
        {{ /errors }}
        </ul>
    {{ endif }}
 
    {{ if success }}
        <p>Your message has been sent!</p>
    {{ else }}
	<fieldset>
		<label>Your Name:</label>
		<div class="form-left">
			<label class="small">First Name<span class="required">*</span></label>
			<input type="text" name="first-name" class="text-field" id="first-name" size="50" value="" />
		</div>
		<div class="form-right">
			<label class="small">Last Name<span class="required">*</span></label>
			<input type="text" name="last-name" class="text-field" id="last-name" size="50" value="" />
		</div>
		<div class="form-left">
			<label>Email Address<span class="required">*</span></label>
			<input type="text" name="from" class="text-field" id="email" size="50" value="" />
		</div>
		<div class="form-right">
			<label>Phone Number<span class="required">*</span></label>
			<input type="text" name="phone" class="text-field" id="phone" size="50" value="" />
		</div>
		<label>Company</label>
		<input type="text" name="company" class="text-field" id="company" size="50" value="" />
		<div class="form-left">
			<label>What is your timeline?<span class="required">*</span></label>
			<select name="timeline">
				<option value="timelineselect" /> -- Select One --<br/>
				<option value="Immediately" /> Immediately<br/>
				<option value="Within 2 months" /> Within 2 Months<br/>
				<option value="Within 4 months" /> Within 4 Months<br/>
				<option value="No timeline" /> Hadn't really thought about it<br/>
			</select>
		</div>
		<div class="form-right">
			<label>What is your budget?<span class="required">*</span></label>
			<select name="budgetrange">
				<option value="budgetselect" /> -- Select One --<br/>
				<option value="$5k to $10k" /> $5k to $10k<br/>
				<option value="$10k to $15k" /> $10k to $15k<br/>
				<option value="$15k to $20k" /> $15k to $20k<br/>
				<option value="$20k to $30k" /> $20k to $30k<br/>
				<option value="No Budget" /> Hadn't really thought about it<br/>
			</select>
		</div>
		<div class="form-left">
			<label>Your Message<span class="required">*</span></label>
			<textarea name="message" id="message" rows="18" cols="34"></textarea>
		</div>
		<div class="form-right">
			<input type="submit" class="button small" value=" Submit Form " />
		</div>
	</fieldset>
    {{ endif }}
{{ /email_form }}
</div>

There are not many parameters for the Email Form plugin. You'll notice that in this one I have used Subject, To and Required. Just like other CMSs if you need to have more than one condition in a parameter they are seperated by a pipe which looks like |. So if I wanted to make the required parameter have more than one condition it would look something like required="first-name|last-name|from". I am using the name of the field to specify which ones are required. Unfortunately all this plugin does is validate that the field is not NULL. I'm hopeful that someone with better coding chops than myself will pick that up and make it so that it is really validating that email fields have proper email addreses in them and that things like name fields do not have numerical characters in them.

The last thing left to do to make this a working page that we can view is to add it to the navigation. In the Control Panel you will go to the Pages section. Click on New Top Level Page. Select Standard Page from the modal. Give it a Title of Contact Us. Select the Contact template from the dropdown. We'll look at adding Page Content and other custom fields in the next blog post. For now just click on the save & publish button.

Once you've saved the entry if you go to the front end of your Statamic install you will notice the nav item has automagically been added to the side nav. Click on it and you should see the template (unstyled but we'll get to that). The first thing you should do is test it a bit and make sure it is working. Fill in the form and click on submit. You should be rewarded with an immediate email from the system that looks like so:

If you are so inclined you can use the form above with your site. To make it look a little better and give you a good starting point use the CSS below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
form{
	margin-bottom: 30px;
}
label{
	font-weight: bold;
	font-size: 16px;
	display: block;
	width: 100%;
	margin: 2% 0 1%;
	float: left;
}
.checkbox input{
	float: none;
}
label.small{
	font-weight: bold;
	font-size: 12px;
}
input{
	border: 1px solid #e3dfd4;
	border-radius: 5px;
	padding: 6px;
	float: left;
}
input.text-field{
	width: 95%;
}
.required{
	color: red;
}
.left {
	float: left;
}
 
.right {
	float: right;
}
 
.text-left {
	text-align: left;
}
 
.text-right {
	text-align: right;
}
 
.text-center {
	text-align: center;
}
 
.hide {
	display: none;
}
 
.button {
	background: #2ba6cb;
	border: 1px solid #1e728c;
	-webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset;
	-moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset;
	box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset;
	color: white;
	cursor: pointer;
	display: inline-block;
	font-size: 14px;
	font-weight: normal;
	line-height: 1;
	margin: 0;
	padding: 10px 20px 11px;
	position: relative;
	text-align: center;
	text-decoration: none;
	-webkit-transition: background-color 0.15s ease-in-out;
	-moz-transition: background-color 0.15s ease-in-out;
	-o-transition: background-color 0.15s ease-in-out;
	transition: background-color 0.15s ease-in-out;
}
 
.button:hover, .button:focus {
	color: white;
	background-color: #2284a1;
}
 
.button:active {
	-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset;
	-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset;
	box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset;
}
 
.button.large {
	font-size: 17px;
	padding: 15px 30px 16px;
}
 
.button.medium {
	font-size: 14px;
}
 
.button.small {
	font-size: 11px;
	padding: 7px 14px 8px;
}
 
.button.tiny {
	font-size: 10px;
	padding: 5px 10px 6px;
}

If you add that CSS to your denali.css file you will end up with a working contact form that looks like this:

Next we will take a look at creating a new Page Type. We'll probably try and bring in all of the information that we use on the Blue Fish contact page. So stay tuned!

Learn more about Marcus Neto

This will be the beginning on a blog series where I walk through my experience learning Statamic. For those of you not familiar, Statamic is the Ron Swanson of CMSs. It is a relatively new (a little over 1 year old at time of writing) CMS but it can grow a man sized mustache. It is the love child of Jack McDade and Fred LeBlanc, two very talented developers that I am sure eat bacon on a regular basis. But enough with the lumberjack talk...

Some of the reasons why Statamic has captured my interest is that it allows for multiple ways of updating a site. It does not use a database to hold information or entries. It uses a unique file based system where the CMS processes files and then spits out the requesite HTML that is necessary for rending a website. And if I am being completely honest, my knowledge of Statamic at this point in time is zip. I like what I am seeing in the documents so I want to use this blog series as a chance to dive in and learn more.

There are a couple of other things that are drawing me to Statamic. I'd be lying if I said I wasn't lured in by price. $29 for a personal or non-commercial site is cheap for what this system provides you. And $99 for a commercial license is still really inexpensive. Blue Fish still does small business sites in a lower price range ($3000-5000) so spending $99 for a system that gives us a lot of what we need is nice vs ExpressionEngine which can easily cost us $500 when you add in some of the necessary add-ons. Not complaining too much about the price, on larger projects I will gladly absorb it. But in this lower price point it is nice to know we have options that give our clients the abilities that they need to update the site and we can increase our profitability.

The other reason I want to explore Statamic is because it seems extremely easy to create themes. I know the guys (Jack and Fred) are planning on launching the Trading Post which will be a place to sell plugins and themes for Statamic. And I'm betting as Statamic gains more traction the template market will be fierce.

Let's get started, shall we?

Previous to starting this blog post I created a folder on my development server. I also created a subdomain that points to that folder and makes it easy to navigate to my Statamic install. I have installed Statamic in that location. You could easily do this or if you so choose you could use MAMP or WAMP and install it locally. Installation took about 5 minutes only because it was my first time. If you are not familiar with installing Statamic then you can find very thorough documentation on this process here.

Since I've already installed Statamic all I really need to do is update it to the latest version (1.5.1 to 1.5.3). Such a horrible process... I'm joking. The arduous process (joking again) includes uploading the _app and admin folders from the new version you just downloaded to your existing Statamic install. All told it took me about 3 minutes and all of that was me waiting on my AOL sized DSL connection to send the files to my server. There is more information in their docs. Once you've uploaded your files, if you go back into the control panel and refresh you will notice that the version number has changed in the footer. Boom! Done. So far I am very impressed. I'm sure updating a full on website will certainly be a little more involved since you will have to update any plugins that you have installed. But for the most part they have done a great job of seperating out content and template files so that updating is not as messy as some other systems. I am also betting that Jack and Fred have it on their Status Board to create a one click updater. If not then it won't be long before someone does since all you are really doing is uploading the contents of two folder. There are no updates to a database which can, at times, make you hold your breath.

One of the problems I had early on was finding and creating a user so that I could access the control panel. This is the page I was looking for in the docs, but I don't think I found it when I was setting up my install. But once I figured it out I realized it was so easy that I smacked my forehead and ate some more bison jerky. A lot of the configuration stuff you will need to access to set up your install is in... _config. I know... This is really hard stuff here... Within that folder there is another folder called users. So if you are keeping track that is _config/users. Inside of that folder you will find yaml files that define the different users and all of their pertinent information. In a new install you will find admin.yaml.sample. Rename this to admin.yaml so that it becomes usable to the system. So when you open admin.yaml you will see:

1
2
3
4
5
6
---
first_name: Admin
last_name: McAwesome
roles: [admin]
# password:
---

You'll want to make changes to this to reflect your user. For instance:

1
2
3
4
5
6
---
first_name: Marcus
last_name: Neto
roles: [admin]
# password: password-here
---

I changed the first_name, last_name to reflect my name. I left the role as admin since that is really the only role that is available right now. I put in a password where "password-here" is and saved the file. Once you've done that you just log in and Statamic will Encrypt your password. Resetting a password is as simple as deleting the encrypted password, typing in a plain text password in it's place and making sure to log in again so that the system re-encrypts the password.

That is it for this installment. Next up I'll be looking at adding a contact form to Statamic.

Learn more about Marcus Neto

If you are responsible for managing and editing entries on your website you are an end user of ExpressionEngine. As an end user of ExpressionEngine you may feel that there is a bit of secrecy as to how EE works. Believe me, as a developer that builds websites with EE, I can relate. If you are an end user you may not know how to check to make sure that ExpressionEngine is up-to-date. This blog post will show you a quick way to do that. It's actually super easy, it's getting EE updated that is the tricky part. We'll talk about that after the tips.

The first step to checking whether you are current or not is to visit this page. It is the Change Log. This is what ExpressionEngine developers use to tell what has changed, been fixed or been added to ExpressionEngine from Release to release. You'll notice that right under the heading "ExpressionEngine 2.x Change Log" there is a number. It currently says 2.6.1. That is the latest version of ExpressionEngine.

The next step to checking whether you are using the latest version of ExpressionEngine is to log into your control panel. If you scroll down to the bottom of the page you will see the footer. It looks a little something like this:

You'll notice right after the word ExpressionEngine there is a v2.5.5. That is the version number. If that number does not match what you saw on the Change Log then you may need to update.

If you are currently engaged with an ExpressionEngine developer then I would highly suggest that you contact them to have them make the update to ExpressionEngine. It's not really something that you want to try on your own unless you're very familiar with the system. Often times it involves not only updating EE but also making sure that all of the supporting add-ons are updated as well.

Whether you use your original developer or someone new you will want to make sure to have all of your licenses available. This is so they know the software license you are using is legitimate and they can proceed with good conscience.

As always, if you are not currently engaged with an ExpressionEngine developer then we would be happy to help.

Learn more about Marcus Neto

Today I am going to share a failure I have as a business owner, and a little of how I am trying to change for the better. Yesterday I grew up as a business owner, just a little bit. Blue Fish is growing. We are set to have a record year have had a record year and are setting our sights higher. But every business owner has their achilles heel. Mine just happens to be bookkeeping. Try as I might I just hate it so much I ... I just hate it. I do not mind sales, marketing, project management, learning or actually doing the work. But I hate bookkeeping

As much as I hate bookkeeping I realize that if Blue Fish is going to move forward over the next year or so I am going to have to get over my hatred of bookkeeping. I am going to have to find a system that allows me to easily categorize and make sense of the expenses. Other requirements are that the system have good reporting, specifically I want to see a regular profit & loss statements, accounts receivables and your general "how much am I spending on this category" type reports. I want to be able to push a button or two and provide the accountant all of the information that he needs to do our taxes at the end of the year.

I've know Allan and Steven for a couple of years now. They are the makers of LessAccounting. But I just could not bring myself to use their product. It had nothing to do with either of them as I love them both. But it was that it was ... a real bookkeeping app.

I've tried other systems. Years ago I bought Quickbooks because I thought that was what all business owners had to use. That was laughable. I installed it on my computer and, even as technical as I am, I was immediately lost. Talk about paying no attention to User Experience. It has to be one of the worst pieces of software I have used in my (almost) 20 years in the software business. Business owners are not accountants. Most of us never took accounting in college. I didn't major in Business. And it seemed like there was very little help or explanation even during the set-up phase. Anyway... I digress

Off the top of my head I know I've also tried YNAB, spreadsheets and Xero Personal. I won't name them all here but I've also looked about half a dozen other systems too. Well, yesterday I finally gave LessAccounting a fair shake. I registered and spent the 10 minutes or so walking through the onboarding process. I went ahead and hooked up to the Blue Fish bank accounts. Granted our type of business does not have a ton of transactions but in another 10 minutes I had easily set up the bank accounts and categorized all of the transactions... and enjoyed it. Yes... there... I said it... I actually enjoyed it...

Hats off to Steve and Allan. They have made everything really simple for their users. How they did it I do not know but the interface is intuitive. They use language that, as a business owner, I understand. So I am writing this blog post as a thank you. If you are in the market for an easy to use bookkeeping system then do yourself a favor and take a hard look at LessAccounting. When you do, here is my email so you can thank me smile

Learn more about Marcus Neto

I'm really pleased to announce that Blue Fish will be sponsoring this year's ExpressionEngine conference in Portland. We are thankful that Brad and the team from Giles-Parscale have decided to continue the tradition of holding this annual conference. In years' past it has been a chance to catch up with friends in the community, network a bit and learn a thing or two. This year's conference looks like it will be jam packed with good sessions. The hard part will be deciding which ones to attend.

I'm particularly excited as this year is the first year that I have been asked to present. I'll be speaking about selling ExpressionEngine with a focus on how to handle customers that may be familiar with other CMSs but not EE.

If you are a member of the ExpressionEngine community I would highly recommend you take this chance to put your money where your mouth is. The cost of sponsorship is not terribly high. And it is a chance to give back to this community in a way that is tangible.

If you are new to our community then I would highly suggest attending the conference. There is nowhere you can go to get this kind of info in such a short period of time. It will cover everything from how to live a better - less stressful life, how to conduct your business in a professional manner and (if you are so inclined) how to write better code. The EllisLab folks will be there talking about ExpressionEngine and there are a whole host of other reasons you will want to be there.

Don't miss it.

Learn more about Marcus Neto

Time of death? 10:36 Central Standard on May 20th... I hope you never have to experience that sinking feeling when you realize that a project that you have cared about and helped limp along for over 7 months (when it was scheduled to have been done in 2) finally rears it head to take it's last breath. It sucks. You build relationships and care about folks on the client side. You want to help them succeed. You become their cheerleader. And then, the project takes a weird turn and you find yourself wondering what happened. I've only had to end a few client relationships over the last 8 years of running Blue Fish so I count myself as fortunate. But those few have taught me a few things.

The first was one of my very first clients. Over the course of the project she became more and more demanding but would not budge on price. My desire to provide her with a solution was strong but finally at some point she became almost abusive and I had to call it. The lesson learned with that project was to use a contract because up to that point I had not had a need to.

The second client that I had to end a relationship with was a church. We had an agreement that one very senior person on staff was going to be the point person and that he had the authority to make the decisions needed. We worked all the way to the end and then the Senior Pastor got involved at the last minute and said that he didn't like the site and wanted to start over. Things got heated and we just could not come together as he wanted me to redo the site for free and I just could not work for free (I have a family to feed and time is my commodity). The lesson learned with this project is to make sure that even when a leader says they do not want to be involved you keep them updated anyway so that there are no surprises at the end of the project.

This most recent one hurts a bit as the person I was working with on the client side is a really good person. The project has been on life support for 4+ months though, and instead of calling it when we missed the first deadline due to the company redirecting her efforts I stuck with it and said we would try and get the project completed. Fast forward a couple of months and the contact's boss has gotten impatient and, out of the blue, is giving her (and us by default) a month to get the site done. No discussion with us about timeline, level of effort, availability or anything. At this point in time we just do not have that kind of bandwidth so I had to decline. Lesson learned with this project is that if a client has issues meeting deadlines you can only help them so much, especially if their focus is elsewhere.

My hope for you is that you never have to go through these pains. My hope for you is that all of your client relationships are golden and filled with love. Statistically speaking though, chances are good that you are going to have to end a relationship with a client at some point in time. So learn this, when it becomes obvious that the project is unsalvageable make the break up quick.

Learn more about Marcus Neto

Recently we were asked what some of our "go to" add-ons are for ExpressionEngine. While we don't subscribe to a "use all the add-ons all the time" mentality there are a few that make their way into our installs more often than not. Below is a list and some reasons why.

In no particular order:

Updater - what did we do before Brad and company created Updater? For those that are unfamiliar this brings an easy to use interface to the updating ExpressionEngine process. We used to have to upload files and make backups and stuff. No longer. Select the file, click a button and relax.

Channel Images - Another add-on by DevDemon. The reason we use this one so much is because many sites we build have some functionality where bulk uploading is necessary. Channel Images has a great bulk upload feature. We also like it because it automatically resizes images to widths/heights that you specify in the CP. While there are other add-ons that allow you to resize images I find it simple to do with Channel Images.

Backup Pro - Eric Lamb (mithra62) has given me piece of mind with Backup Pro. Before any changes are made to a production site we make sure to hit Backup Pro and run the backup process for both the files and the database. We also encourage our clients to ocassionally do the same just to make sure backups are being made.

Freeform - If you have built any sites with EE then you know that FreeForm is THE free add-on for forms. It's gotten a bit more complex since Solspace made it into a two-tiered (free/paid) product but that has not changed the fact that the free version is a service to the EE community.

WYGWAM - A WYSIWYG that we can just upload the files, click a button and forget about it? This is a no-brainer install from the folks at Pixel and Tonic. Even though most of our sites segment data into their own custom fields there are always those content blocks that need additional formatting (news/blog/bio/etc) and for those we use WYGWAM from Pixel and Tonic.

Deeploy Helper - Most of our work starts on a dev server. Deeploy Helper from Hop Studios makes changing server paths and URLs really simple. Gone are the days when you had to scour the control panel for all of the various locations where the server path or URL is hidden. Just visit Deeploy Helper under modules and it displays them all on one page and then will even give you the ability to search and replace.

Hon-ee Pot Captcha - It is no secret that all websites are getting hammered with spam. While there is no perfect solution Hon-ee Pot Captcha from Trevor Davis has cut spam on the sites we build, drastically. I highly recommend it to save your clients' sanity.

Switchee - Use Switchee once on a project and you will be sold on it's effectiveness. It brings Select Case logic to EE. Complex Conditional Global Variables just won't cut it anymore. Thanks to Mark Croxton for making this super efficient add-on.

TruncHTML - All sites have some need to truncate text. TruncHTML from Oliver Heine is how we handle that. It does so simply and has not failed me in my many years of using it.

VZ Address - VZ Address from Eli Van Zoeren might seem like an odd one for this list. But many times when you build out a site you have decisions to make about where to store things like location information. More often than not we choose to store them in a Channel as that is what the client is most used to working with, and we want them to be comfortable with changing the content. VZ Address gives you the normal fields that you would want for address all in a single custom field and then gives you tags that you can use to display those on the front end of the site.

Field Pack+ - I love the styling Brandon and crew from Pixel & Tonic have put on these fields. Plus I am a sucker for the Pill Fieldtype. Many times we won't use all of these fields but they are free so we install them anyway.

There are a number of others that we seem to use quite a bit like Playa, Matrix, Zoo Visitor, and Calendar. But they all have specific uses that is not needed on every site.

Learn more about Marcus Neto

Just like many of you, we have been doing a lot of responsive websites lately. When we can, we try to build our own without the use of frameworks. But that is not always a possibility due to budget or timeframe. When we have to use a framework we prefer to use Zurb's Foundation. We find that it has the right mix of functionality we need to be able to develop websites.

Recently a client we are working with asked for us to add some functionality on top of Zurb's Orbit. For those of you not familiar, Orbit is the image rotator that Zurb includes with their framework. Our client wanted to be able to dictate what quadrant the Caption showed up in. So with a little bit of CSS and an additional field or two in our channel we can create an image rotator that allows the author of the entry to specify which quadrant the caption appears in.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="home-rotator" class="row">
	<div class="large-12 columns slidebox">
		<ul data-orbit>
			&#123;exp:channel:entries channel="rotator" limit="5" sortby="random"&#125;
				<li>
					<img src="{cf_rotator_img}" />
					<span class="orbit-caption {cf_rotator_caption}">
						<a href="http://bluefishds.com/template_group/template">
							{title} - {cf_rotator_sub-title}
						</a>
					</span>
				</li>
			&#123;/exp:channel:entries&#125;
		</ul>
	</div>
</div>

You will need to include the following javascript files:

1
2
<script src="http://bluefishds.com/assets/js/foundation/foundation.min.js"></script>
<script src="http://bluefishds.com/assets/js/foundation/foundation.orbit.js"></script>

Add this code to your css file. I prefer to not modify the original foundation.css files in case an update is released, we wouldn't want to overwrite our changes. I know it adds some additional size to the site since you have to download some additional lines of code. But in the grand scheme of things I doubt 25 uncompressed lines of code are a huge problem. If you disagree then compress them to a line each and you should be ok.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.orbit-container .orbit-slides-container > * span{
	width: 200px;
	padding: 20px;
	background-color: #fff;
	color: #333;
	margin: 35px;
	opacity: 0.85;
}
.orbit-container .orbit-slides-container > * span.lower_left{
	bottom: 25px;	
	left: 60px;
}
.orbit-container .orbit-slides-container > * span.lower_right{
	bottom: 25px;
	right: 60px;
}
.orbit-container .orbit-slides-container > * span.upper_right{
	bottom: 250px;
	right: 60px;
}
.orbit-container .orbit-slides-container > * span.upper_left{
	bottom: 250px;
	left: 60px;
}

I prefer to use Pixel & Tonic's Pill fieldtype for the field that allows an author to select which quadrant the caption appears in. So we need to head over to Pixel & Tonic's Divebar and download/install their Pill fieldtype (just upload the files to your third_party folder and install the fieldtype).

We will then add a new field to the channel that contains the images used. In this example we are isolating the rotator in it's own rotator, but we often use a single entry channel for the home page that allows a user to manage many aspects of the home page from within a single entry (blog post soon).

Fieldtype: P&T Pill
Field Label: Caption Overlay
Short Name: cf_rotator_caption
Required: No
Searchable: No
Show by Default: Yes
Pill Options (each on it's own line without commas): upper_left : Upper Left, upper_right : Upper Right, lower_right : Lower Right, lower_left : Lower Left

This is what is added to your Publish Page:

Publish Page for Caption Overlay

Notice that the first item on the Pill is selected by default. This means that you can re-arrange the order of the Pill Options to make your most used position the default if you like.

I hope this is helpful. If you have a project that you need some help with or if you want to build something cool using Foundation Contact Us

Learn more about Marcus Neto

Forgive my scattered thought. I know this blog post is not as polished as I would like it but it covers some things that I thought needed to be said to a few folks that need to hear it.

This morning I was having a conversation with someone (who shall remain remain nameless) and they said to me "My father still thinks that I'm playing at this business thing". I tried to let it go but even several hours later I'm still sitting here thinking about that statement. As an owner of a small business I think at times we all hear that we're just playing at this business thing. But it really gets under my skin.

I started to think about what that statement means. If you look at the way businesses were started previously it took a lot more effort. In previous generations there certainly was a build up to starting a business. You would identify a need, build a business plan, and then (more than likely) you would go to a bank for funding. Ultimately going to a bank for funding meant having to put something on the line whether it be your house, retirement, or some other financial asset. Once financing was secured you would start to actually build up the company. This typically meant that you would have people marketing, selling, you might have administrative staff for HR and let's not forget about the workers that actually do the billable work. So I think this is why the unnamed person's father used the word "playing".

Many of us in the ExpressionEngine community work for small companies. And by small companies I mean companies that are five people are less. In my largely unscientific mental poll, a large percentage of folks are working by themselves as Freelancers. The conversation I had earlier made me stop and think about that. Many of us that are or have been Freelancers recognize the ups and downs that go with having a single person wearing all of the hats. You focus on trying to find work, and then execute the work, and then focus on trying to find work, then focus on some administrative task like taxes, then focus on the work. It is a draining cycle. I did this for years and it ultimately lead to frustration and a lower salary than what I would've preferred for all the work that went running a small business.

The current trend in the web community is to build a product. Many Freelancers have thought romantically about what it would be like to create a product where you only have to work four or five hours a day couple times a week in order to make the necessary income. Maybe this is the remnants of the 4-Hour Workweek talking? I imagine many of us in the tech industry have read Tim Ferris' book and thought "Man, that would be nice!". But the reality is that the 4-Hour Workweek mindset is one in which your expenses are extremely low. You're only having to provide for the basics of necessity. The truth is that many of us still have lives. We have families. We have kids. We have houses. We have cars. And those are all things that when added up are quite expensive. Sure, there are a few random folks that do make it big. They create that one product everybody must have or the one product that has such a large market that even if they only gain a fraction of a percentage somehow they manage to make a living. But what about the rest of us? Are we really just playing at this thing called business?

The problem is that the word "playing" has some really negative connotations when used in this context. I don't feel like I'm playing when I show up to work at my office every day and try to provide my customers with the best service that I can provide. I don't feel like I'm playing when I'm called upon at all hours of the day and night to handle things that have gone wrong that I was not responsible for. I don't feel like I'm playing when I don't get to take vacations like most normal folks with day jobs. So I wouldn't use the word "playing" when referring to how I run my business.

There are easier ways to run a freelancer business though. Last year, working for EllisLab, I realized that I really like working with people. I vowed that when I left EllisLab that I would do whatever I could to have someone or some people working with me. It is impossible to master all of the skills necessary to build a website and so it is important to have folks that can round out your weaknesses. I've noticed over the last year that many ExpressionEngine freelancers are teaming up, so I gather that many of us are realizing the same thing. I went the route of finding someone that would want to work put up with me. That person is Tad Ward. Many of the EE folks will know him from Twitter. He is an easy going fella and for the last month+ he has been making my life much easier. My goal for Blue Fish is to have another person working with me by the end of the year. Someone that is more of a hardcore PHP/JavaScript programmer that can take the capabilities of what Blue Fish can do to the next level. After 15 years in the tech industry I am finally ok with saying that hardcore programmer guy is not me.

What I've realized is that I fill the important role of Business Development / Project Management (on top of meddling with design). Every web shop needs someone that can handle the conversations with the prospects and customers. That can make sure that they're being taking care of. That can communicate anything that needs to be handled for the project and follow up on items that might be needed from the customer. They are also primarily responsible for making sure that a steady stream of contracts are being signed. They should also be making sure that there's enough marketing taking place through blogging and social media that people are aware that you're in business and available for hire (Call us smile. In my personal experience it is impossible for one person to fill all these needs and still be able to focus on design, front end development, custom programming, administration of the business and maintain any healthy sanity.

So all this to say… Freelancing is not "playing". It is damn hard work. But because it is so hard I would probably suggest working smarter. Team up. Figure out a way to make working with other folks work. Ultimately this will make life easier and more enjoyable.

To the person that sparked this blog post. I don't think you need to hear me say this but... You are one competent developer/designer and you run your business in a professional manner. Keep it up. There are many of us out here in the big wide interweb that know just how hard you work.

Learn more about Marcus Neto

I am pretty active in the business community where I live (Daphne, Alabama which is across the bay from Mobile). I'll often get questions for pointers from other business owners on things they can do to boost their online presence. Of course a top notch website is top of my list, but sometimes it is the simple stuff that costs us the most.

Some of you may be missing out on free advertising or free business and not even know it. Years ago Google integrated Google Local Business into their search results. Now, when you do a Google search for something like Restaurants 36527 you get a page that lists local businesses that fit that search criteria along with the organic search results.

With the fast adoption of smart phones and mobile devices this listing has fast become a replacement for the Yellow Pages. It is more convenient for someone to pull their iPhone or Droid device out of your pocket and do a Google search for what they are looking for than it is to find a Yellow Pages and thumb through it trying to find what you are looking for. Nevermind the fact that Google Places for Business can be updated regularly versus Yellow Pages which, once printed, can never be updated.

Now, for those of you that are business owners that have never paid attention to this, let's show you how to add your listing to Google Places for Business. First, go to Google Places for Business. If you have a Google Account then use it to log-in. If you do not have a Google Account then you will want one. Membership definitely has it's benefits. To create a new Google Account go to the registration page. Once you have created a Google Account go back to the Google Places for Business page and log-in.

OK, now that you are logged in you will want to look for an 'Add Another Business' link on the right hand side of the page.

Once you've found that just follow the steps to enter in your business information. The first thing you will be asked for is the phone number for the business. If the business does not exist on Google Places then you will be prompted for more information about the business.

If the business does exist on Google Places then you will see the following.

If you click on Edit you can edit the existing information and take ownership of the listing.

Some of you may find that your listing is already on Google Places even though you did not put it there. That is because Google has culled information from websites including Yellow Pages' website and added it to their data set. You will want to take ownership and edit the existing information though. That way you can ensure that the content is always correct. This is, after all, the very first thing people will see when they google for your type of business or when they do a search for your business by name. You want to make a good impression.

After you have updated or entered your information you will click on the Finish button. Google will want to verify the changes are being made by someone with the proper authority so they will either want to call you or they will send out a postcard.

Either way they will want to give you a pin number that you will enter into Google Places to verify that the changes were made by the proper person. My entry did not give me the option to receive a phone call but if yours does and you are at the business location then opt for the phone call as it is faster.

After you receive the pin number you will want to log into Google Places for Business again and look for the following

Enter in the Pin number and your changes will be pushed to the live listing. It may take a little bit as Google does not push them immediately. From this point forward it should be a little easier for you

I hope this is helpful. If we can be of any service please let us know. And if you change your mind about that top notch website definitely keep us in mind.

Learn more about Marcus Neto

Design mistakes can sometimes lead you in a different direction. Five months ago I showed this design (see below) to Matthew Spiel for some feedback.

Looking back at it now I can tell I was just being lazy. I just wanted to quickly get a new site up which is the wrong attitude to have when you are trying to sell others on the idea that you know what you are doing. Obviously the design is a rough... aww who am I kidding... the design just stinks. I can smell it emanating from the screen it is so bad. I can't justify any piece of it. But Matt's immediate reaction was that it was morbid?!? Morbid? Why? Matt kindly explained to me that it looked like I had put the fish on a plate... I did not see it before but now that I have had it pointed out to me I could not un-see it.

Fast forward 5 months and I was thinking through our 404 page. I wanted something that would be moderately creative without being too out there. I think the Blue Fish logo on a plate idea is perfect smile

Learn more about Marcus Neto

During my tenure at EllisLab one of the roles I filled was Director of Enterprise Services. This quickly morphed into Director of Business Development but in my mind the role was the same. In both of these roles my job was to educate. I spent a good portion of my time demoing ExpressionEngine and answering emails about it's possible uses. It was not uncommon to field questions from name brands that we would all recognize. Higher education institutions, Fortune 100 companies, and some of our favorite brands all use EE.

One of the questions I got on occassion is "Is ExpressionEngine an Enterprise CMS?". I always found this interesting. But this question always left me wondering what the person actually meant by Enterprise CMS.

The Association for Information and Image Management (AIIM) International refined the definition of Enterprise Content Management as follows:

Enterprise Content Management (ECM) is the strategies, methods and tools used to capture, manage, store, preserve, and deliver content and documents related to organizational processes. ECM covers the management of information within the entire scope of an enterprise whether that information is in the form of a paper document, an electronic file, a database print stream, or even an email.

So if we follow a strict interpretation of the definition of ECM then no. I would have to say none of the Web CMSs (WordPress, Joomla, Drupal) that those of us in the web industry would typically think of would fit this definition either. Further, if we narrow the definition to just the Web Content Management portion of and Enterprise System:

Web Content Management as Enterprise Content Management component is used to present information already existing and managed in the ECM repository. However, information presented via Web technologies - on the Internet, an extranet, or on a portal — uses the workflow, access control, versioning, delivery and authorization modules of the WCM instead of own integrated ECM functionality. There are only few examples of successful implementations whereby a shared repository for documents and web content are managed together.

So where does that leave us? Do we loosen the definition of Enterprise Web CMS to be a little more focused on what most of us think of when we use this term? AIIM defines a Web CMS as follows:

A WCMS is a program that helps in maintaining, controlling, changing and reassembling the content on a web-page. Content is mostly kept in a database and assembled using a flexible language like XML or .NET. The user interacts with the system at the front through a normal web browser. From there he can edit, control parts of the layout and maintain and add to the web-pages without any programming or HTML skills. For this it needs to then provide some or all the following functionalities.

  • Automated templates that can be changed easily on one place and then move all through the system
  • Easily editable content
  • Extensible feature sets, usually through plug-ins or extensions.
  • Regular updates and adherence to Web standards
  • Simple Workflow for processes like submittal, editing and authorization for release
  • Lifecycle Management of content, from creation to final deletion
  • Version control of whole web pages

A Web Content Management System often exists as a part of larger Enterprise solutions but can be equally effective for smaller-scale implementations. Most vendors have some sort of Web CMS components in their Software Suite, whether as proper Web Content Management to support the publishing and reuse of content or as web-enabled functionality of top of their more widely used content repository.

I would argue that their definition is a bit narrow for today's use. Most of us would define an Enterprise Web CMS as a system that has the following capabilities:

  • High level of Security protection from outside expoitation
  • Granular security levels for users with different functions
  • Data type flexibility
  • C.O.P.E. capable
  • Extensible
  • Scaleable
  • Workflow management
  • Document management
  • Versioning
  • Higher levels of support

The problem with this list is that I could pretty much make any of the widely available CMSs fit this list. But since I am not an expert on the other systems (Drupal, Wordpress, Joomla) I will just break this down for ExpressionEngine.

Security protection from outside exploitation

ExpressionEngine is just like any other piece of software. If you get a talented enough individual looking for a hole then they are bound to find some way in. Thinking otherwise is foolish. That said, in 6 years of my involvement in the ExpressionEngine community I have never heard of an EE site getting hacked due to an exploit in the CMS. When I was on staff we would occassionally get emails from users saying they got hacked. After spending some time walking them through the exploit it was typically 1 of 2 scenarios. They were on an unsecure host. Or they had another system installed in the hosting that was the gateway for the hacker.

I can't go into great detail but I can say that some of the most security concious organizations in the US have tested EE and found no real exploits. Often what they find is more of a configuration issue more than anything. When you add to this the ability to store your admin folder above webroot. The ability to change the name of your admin folder.

Granular security levels for users

Unlike some systems ExpressionEngine is a bit more granular in how you assign permissions for different member groups. Super Admins have access to do everything in the control panel. But if I want to allow a user access to post in a specific channel (ExpressionEngine is a multi-channel system) then I can. And I don't even have to give them the ability to delete entries. This means that a user might have permission to add/edit entries in the news section but cannot add/edit or even see entries in the image rotator channel.

Data type flexibility

ExpressionEngine excels when it comes to handling different types of Data. One of the main ways that it does this is by allowing you to assign different fieldtypes to a field. If I have a staff channel I can assign as many fields as I need to that channel. So I might have a file field for the image, a textarea field for the bio, text fields for the email, phone and social media info. The fields can be different for each Channel. So I may have a podcast channel that has a file field for the audio file, textarea field for the description and text fields for the speaker/duration etc. This also makes ExpressionEngine extremely friendly to non-technical users as the forms that they need to fill in for the various types of content they have on the site is tailored to the content.

C.O.P.E. capable

This is a relatively new idea in the web world. Karen McGrane is one of the first people that I heard speak of this capability even though I had been using EE in this manner for several years before hearing her talk in 2011 at An Event Apart. She uses NPR's Create Once Publish Everywhere (C.O.P.E) as an example. The basic premise is that you have custom fields to store specific bits of content. This allows you to control who has access to that content. In the case of NPR it allows them to extend portions of their content to different platforms/providers in an easy and manageable way. With EE I can reveal the stored content via RSS/HTML/XML and limit it to different levels of members based on permissions. It's actually quite easy.

Extensible

ExpressionEngine is built on the Open Source CodeIgniter PHP framework. It also has extensibility built in to the system. This is evidenced by the great number of professional quality add-ons that have been built for ExpressionEngine. Chances are that if you have a need for some specific functionality that there is an add-on that will provide that functionality to you. But if that is not the case then using the built in classes and/or CodeIgniter you should be able to create it.

Scaleable

I personally had conversations and know of EE sites that get many millions of viewers per month. Some of these systems utilize a caching mechanism. Others just have a multiple server set-up. Scaling ExpressionEngine typically progresses like the following:

  • Shared Hosting
  • VPS
  • Dedicated single server - EE and DB server on one
  • Dedicated dual servers - EE on one server and DB on the other
  • Multi-server set-up - many EE servers to one DB server
  • Caching + dual/multi servers - EE on one server and DB on the other fronted by Varnish or Memcached

When a site gets to many servers vs caching + they are typically getting into that 5M+ visitors. This progression is nothing new. Most of the top CMSs would progress in the same way. I do want to be honest in that there is a propensity with EE to overload the DB server due to the fact that EE is a multi-channel system and on a single page of the site you could be pulling content from many different channels. Each of those bits of content from the various channels is at least a query (sometimes more) to the DB. So great care needs to be taken on high trafficked sites to limit what you are pulling from the DB and to be smart about how you employ EE. Typically if you limit what you are scanning for in the DB and you are still having performance issues on the front end of the site then you will need to go the route of putting a caching mechanism in place.

Workflow management

Workflow Management is an achilles heel with EE. If your organization truly needs multiple level workflow management with collaboration and more then I am not aware of a system being sold for less than $50k that can provide you with that. ExpressionEngine does have the ability to limit what a member group can do. So if I want the editor group to only be able to push entries to a status of Draft then I can do that natively. If I want a bit more functionality then I can use an add-on like Better Workflow which allows for an entry to remain live on the site, edited & saved as a draft all while the non-edited version stays live. The edited of an entry kicks off an email to an admin that can then review the entry and push it live to the site.

Document management

EE does not have a document management library function but due to it's highly flexible nature you can either create one in about 5 minutes or you can use an add-on like Channel Files to provide some additional functionality. If you have need for versioning of your documents then EE may not be the solution for you. In theory there is a way around document versioning and that would be to put all documents through the same versioning process that you use for files that make up the site. This work around would be confusing to non-technical folks. Another possible solution would be to use an add-on like Matrix and just add each version of the doc as a new row in the same entry. You could manually assign a version number or just use row count to do so. But either way, this is not a robust document management system like what can be found in the more expensive systems.

Versioning

There is built in versioning of both Template files and Entries in ExpressionEngine. You will find that most ExpressionEngine devs are moving to external systems like Git to maintain a more comprehensive level of Version Control. As with most database driven systems there is a weakness when it comes to versioning anything that is stored in the DB. In ExpressionEngine this would include information related to the Channels, Channel Fields, Categories, Statuses and Entries.

Higher levels of support

Thankfully EllisLab addressed this recently with their addition of Private Support. Prior to this addition the only option was to either enlist the help of a qualified ExpressionEngine development shop or post your question to the public forums. For some organizations posting to the forums was just not an option. So adding Private Support was a necessity in addressing this issue. Now an organization can choose the level of support that they need.

So you see, ExpressionEngine is a reasonable CMS for use in websites at an Enterprise Level. Especially when you consider:

  • The low barrier of entry for learning EE which helps to reduce costs and increase the speed at which you can deploy sites.
  • The ability to extend EE for your organizations specific needs.
  • The multi-channel and data type flexibility and it's affect on the ease of use for non-technical editors and writers.
  • It's flexibility in handling different types of content.
  • The scaleability and EE's ability to handle millions of pageviews per month.
  • And more...

Sure there are a few places it does not fit the hard core definition of ECM. Mainly:

  • ExpressionEngine does not currently have a multi-level workflow management capability.
  • EE does not have a true document management system that ties into your ECM

But if your organization can work with a single level workflow management capability and manually manage their document versioning then EE can be a powerful asset to your organization. Especially considering the power it has for such a low priced CMS.

And, of course, if we can help just let us know.

Learn more about Marcus Neto

This blog post is as much for my aging memory as it is for you. I hope you find it useful. And I hope my future self can make sense of this.

Every once in awhile we run into something in ExpressionEngine that we wish could be a bit easier. Yesterday I ran into one of those things when I tried to extract a site out of an MSM install. The client had 6 sites in MSM which I am sure seemed like a good idea at the time. But one of the sites is for a business venture that now requires the site be removed from the MSM install and set free to be on it's own.

Now most of you that have not worked with MSM may not understand why this is a pain. Well, MSM requires that a site, any of the installed sites, be primary. Each site is assigned a numerical value in the database. This is found in the form of a Site ID (site_id). What MSM does not allow you to do is change which site is the primary. So, if you have an MSM install and you need a site from within the install to be removed then you run into a situation where you can delete all sites except for two, the one that is primary and the one that you need. In order to fully remove all unnecessary sites from the install you have to go into the database table by table and look for site_id in all of the various tables. You will then run some SQL commands that will remove the items associated with the unnecessary primary site and move the items that are part of the secondary site into the primary slot. So let's begin.

To begin with make a backup of the site and move it to a secondary host or set it up on your localhost. EllisLab has great instructions for moving a site. I would just add that I use Deeploy Helper on almost every install to make changing paths and URLs easy. So get the site set up.

Make a backup.

Once you have installed the site in a new location and are confident that all of the paths are correct log into the CP. You wil go to the Edit Sites section of the MSM install. Delete all of the sites that you do not want. You will probably find that the site that you do want is not the primary (that's just the way this always ends up) so leave it and the primary.

Make a backup.

Log into PHPmyAdmin or (better yet) Sequel Pro and gain access to the database. You will go table by table and execute the next two commands. I will explain them and then you will use them as necessary. When you select a table you are looking for the following (Snapshot taken from Sequel Pro).

In this image you see on the left that I have the exp_channel_data table selected. You will also notice that the second column in the table is site_id. That is what you are looking for, site_id. If you see that in a table then you will do the following.

This next SQL command will delete the entries in the table that have to do with the current unnecessary primary site (site_id = 1). If you need the primary site then this whole blog post is not for you. So open up the interface in your database management tool that allows you to execute SQL commands and use the following. Make sure to change to the actual table name.

1
DELETE FROM <table_name> WHERE site_id = 1

Then after that is done you should move the items that are associate to the secondary site (site_id = 2) into the primary position (site_id = 1). To do that you just use the following. Again, make sure to replace with the actual table name. What this command does is find all of the entries in the database that have a site_id that is equal to 2 and changes them so that they are equal to 1.

1
2
3
UPDATE <table_name>
SET site_id = '1'
WHERE site_id = '2'

That's it. Just rinse and repeat over and over again.

I did send a quick email to Derek Jones about this and he is aware of the issues. I believe (I am inferring from his email) that the concern is that in large EE sites if they (EllisLab) make it easy to switch primary then the DB could easily become overwhelmed due to the amount of updates that are necessary. But he did ask for the use case. Not sure what he will do but I hope that in the not too distant future we will get some sort of easy way to extract a site out of MSM.

Learn more about Marcus Neto

Several months ago I asked the twittersphere for some Project Management app suggestions. The list included Zurmo, Apollo HQ, Project Pier (Open Source precursor to ActiveCollab), Wrike and Zoho. I even looked at using Omnifocus or Wunderlist, of course the list included ActiveCollab and the Industry Standard Basecamp.

I'll admit that I have never been a fan of Basecamp. I think it does a decent job of acting as a repository. It gives you a place to put tasks, messages, files and other odds and ends that make it a great way to keep a project organized.

But I wanted more...

I could easily have purchased another license of ActiveCollab ($500) or subscribed to Basecamp ($50 per month) and been done with it. History tells me that those apps don't get used after awhile. Clients' hate them and make adoption difficult. And I feel that they do a fairly poor job of helping with the Management of the important aspects of the project... namely what has to get done and how close we are to being on budget.

So with no real idea of what I was looking for but a list of websites to sift through I began my search. And here is what I found...

Planscope

Planscope Project Management App Screenshot

Planscope at it's most basic is a task list. Where it excels is what it adds to that basic functionality. You have the ability to create Projects, Create Tasks, Assign those tasks to a Task Group, and Set Milestones for those items. All of those items would be enough but WAIT there's more...

You have the ability to Assign tasks to members of your team. you have the ability to create sub-tasks.

Tasks in Planscope

Planscope also lets you estimate each of the tasks. You then input a budget and it give you a progress indicator for budget used / progress. And this was why I bought into Planscope hook, line and sinker. This ability to see where you are in relation to budget and progress is huge. It allows you to see almost immediately where a project is going off course and either correct it or go back to the client and have a conversation with them about the task item that threw the project off course.

Your client also has the ability to take part in the conversation. Clients are given access to their project which allows them to review items that have been completed, re-order tasks that have been entered or comment on tasks for clarification.

As if all of this is not enough...

Brennan saw fit to integrate Planscope with time tracking apps like Harvest. So when you click on the play button in Planscope it starts a timer for a Project/Task in Harvest. The workflow is really quite awesome.

Milestones in Planscope

I really like how Planscope helps me put estimates together. Plus, if I am still in the pre-contract phase and the prospect is amenable to it you can give them access and they can prioritize the items you've put together and adjust the project ,leaving some items off, so that they can stick to their budget.

When I was at EllisLab we went through a few apps trying to find one that would fit our needs for Scrum (Jira and Pivotal Tracker). I think Planscope would also work really well in a Scrum or Agile environment. You could easily enter in your tasks and move them into Task Groups. Instead of estimating in actual hours you could put in your point cost for items etc.

I know Project Management Software is a rapidly changing marketplace. Who knows what features will be released next week that we all think will save our projects and help us get work done faster. I'm happy with the choice I made as it gives me an immediate indicator of the health of the project (and ultimately of my estimating skills). Hope you'll check it out. Let me know what you think.

Learn more about Marcus Neto

​I've had a number of folks ask for some pointers on demoing ExpressionEngine lately. While I was working as the resident demo person at EL I probably demo'd EE close to 100 times. I enjoyed sharing what I loved about this system with others. My hope is that this video shares a bit of that with you. This was done in 1 take on the first try and I have not given a demo in a month.

Some additional pointers:

  • Make sure to clear your browser cache prior to a demo.
  • Make sure to use WAMP or MAMP as the last thing you want to do is host it on a server somewhere and have to transmit audio and video on your slow DSL line and still be able to access the demo site. WAMP/MAMP will take the demo site out of the DSL equation.
  • Make sure you are using an actual demo site. Do not use a customer's site. You are inviting Murphy's Law into the mix if you start to use customer's sites as examples.
  • Try and elevate the discussion away from a prospect's specific requirements and more to the capabilities and functionality in general.
  • Practice your demo. The first 6-10 are going to be rough. You need to be able to be thrown a curve ball and recover without missing a step.
  • When giving demos make sure that you use a quality headset or a mic and headphones. Nothing kills the mood faster than an echoey sound or reverb.
  • If possible hide your desktop. If you are on a Mac you can use Backdrop which is available in the Mac App Store.
  • At EllisLab we had an account with GoToMeeting. I found it to be a reliable experience. Make sure to test the screen sharing app prior to your first demo to make sure that it won't fail

I do hope that this helps. If I can answer any additional question just let me know.

Learn more about Marcus Neto

Over the next couple of weeks I am going to write some articles about selling. These articles are not going to be geared towards sales professionals as they should already be adept at the things I am going to discuss. These articles will be written for the Independent Consultant that has had the gumption to strike it out on his/her own. He/She may have great skill at providing technical solutions for clients, but without the ability to sit down and talk with someone about those solutions they will be back working for someone in no time.

I spoke a bit about this at the EECI conference in Europe and also at the DCEErs conference last month but after the amount of questions I received I felt it warranted expanding a bit. The slides for those talks have been posted to Speaker Deck if you care to look at them. They will be the foundation of this blog series.

If you've looked at those slides (If you haven't go do so now) you may think it odd that I spend over 30% of the slides telling you a bit about me, where I live, my family and what some of my likes are. Truth is that the Bio portion of my slides really only takes about 5-8 minutes depending on the crowd I am speaking to and it serves a purpose. 

The number one reason why people buy from you is a personal connection they feel they have that allows them to trust you.

After almost 2 decades spent selling (If you are a independent consultant you are in sales. Embrace it) I have learned that unless there is some bond that the person feels they have with you there will be no reason for them to listen to you. It is this bond that allows them to spend thousands or tens of thousands (or more) of dollars with you. 

So the first 30% of my talk was an illustration. It was a way of giving the parents, photographer hobbyists, coffee drinkers and donut eaters a reason to listen to me (I mean, who doesn't like donuts?). 

I love this quote by Allan Branch of LessEverything:

The story you tell, the website you design, the copy you add to that website, the way you talk on the phone, the tweets and status updates you send out through social media , etc... will attract a certain type of project and client.

That is some wisdom right there. So does this mean you have to change who you are and pretend to be something you are not? ABSOLUTELY NOT! Be yourself, but be aware that the communication and information that you put out there is directly related to the types of projects and clients you will get. Call it... Communication Karma.

It is very important that as you are getting to know your prospects that you are finding commonalities that you can discuss that go beyond the project at hand. In a classic sense this used to be done over golf, or cigars and scotch, but you don't have to take it that far (unless you are a fan of a good single malt like me). Just listen in for clues. Do they mention a recent vacation? Do they live in an interesting part of the country that you've been to or want to go to? Do they have pictures of themselves with their children going for a bike ride? These are conversation openers... take them. 

Just remember... Don't be slimy. This is not a stereotypical used car sales mentality. This is you building a genuine relationship with another human being. 

Next up we will talk about Selling vs Consulting... 

Learn more about Marcus Neto

​​Over the last couple of years I have collected quite a number of websites that use ExpressionEngine. Some of these have been showcased on either Show-ee or on the ExpressionEngine site but a majority of them have not. I just validated them using the Builtwith extension for Chrome so as of today they are using EE but that can change. Anyway, here are links to 30 websites that use ExpressionEngine. Next time a prospect asks for some sample sites of who is using EE you can reference this.

Everyone from the State Department Blog to the Democratic National Committee.

Fortune 5 companies like GE's Healthcare Division

Higher Education likes ExpressionEngine as well as evidenced by it's usage by Tuck School of Business at Dartmouth, University of Florida's Student Affairs and University of Miami.

Both Musicians like Leona Lewis and Music Companies like BMI love ExpressionEngine and even Australia's Division of Warner Brothers uses EE

Tech companies like Omnigroup (makers of the most awesome to-do app ever - Omnifocus), Canon, OpenDNS, and my buddy Ian's Help Desk software Helpspot.

Travel and Tourism Boards use it to promote their regional areas like Jacksonville and Jackson Hole.

Power companies like EE as well. UTC used ExpressionEngine and so did North Light.

Very serious sites like ABA Journal use EE.

Less serious sites that cater to the Bro humor use EE to feed their sites to millions of users per month like TCMag and BroBible.

Everyone's favorite comedian uses EE as well.

You can use ExpressionEngine to order up a RAD guitar from Fender or Ovation

The awesome car magazine Motor Week uses EE and so does car tire manufacturer Yokohama

Whenever I visit this site I lust over the bikes... Mario Cipollini's bikes

I prefer TEQUILA but in a pinch Vodka will do. This site for Ultimate Vodka is done in EE

Large Multi Language news organizations like Hispanically Speaking News and Zocalo Saltillo feed hundreds of thousands of pages of content.

After reading this far you are probably hungry so go grab a Clif Bar as they use EE as well

And last but not least... Even Nuns use ExpressionEngine

Learn more about Marcus Neto

I have to say, when I made a somewhat innocent statement on twitter the other day I had no idea the conversation it would start. But I am glad for it.

** Full Disclosure: Let me say that what you will read here is me without my Product Evangelist EllisLab hat on. But I will say that I have always been a cheerleader for ExpressionEngine as a CMS and the community that surrounds it. I will also point out that I am still the owner of EETemplates.com **

Today Ryan Irelan wrote a piece over on EEInsider about ExpressionEngine templates/themes. I feel like it is a well balanced and thoughtful post on the pros and cons of templates for EE. This is not so much a rebuttal of that article but just some additional thoughts.

But first... some history...

A number of years ago I sat down with a friend that was active in the Joomla template community and we started brainstorming ideas for a business venture that we could run together. Through the course of that he went the route of Wordpress and I went the route of EE. He chose to go that route due to the size of the market. I just couldn't do it. I felt EE provided a better experience for end users and did not have any other folks doing templates for it so I chose to go off on my own and start EETemplates.

EETemplates was a success in a sense. It never took off like I wanted it but I think that was due to my lack of patience more so than anything else. I rushed it. While I could have taken a year to do proper designs and build out a store with all of the functionality expected from a true marketplace, I didn't and that hurt me.

I think the other thing that I had working against me was at the time I was the only person building Templates for EE. WooThemes did not enter into the market until a year or so later. I watched with interest as they waded into the market as I have always thought that in order to make templates for EE successful there would have to be several sites making them. The reason for this is that there is no mindset in the larger web community that EE is an option when a template has to be used due to budget constraints or lack of technical ability. Development shops that might choose EE don't because there is a lack of templates that will speed up their development time. So they move on...

Woothemes never released numbers for how many templates they sold. I am betting that it was not a small number. But I am also betting that it was not nearly as large as what they sell for Wordpress and that from a business perspective it just did not make sense to invest in EE when there was still much to gain in the WordPress theme community. *Adii if you want to email me some number I would welcome them smile *

So that brings us to the current status of no theme shops for ExpressionEngine. Let's think about that... The #1 commercial CMS with hundreds of thousands of users and many many more installed sites and there is not a single theme shop for it. Ryan pointed to the CMS Usage Statistics by BuiltWith. I look at those statistics regularly as part of my duties at EllisLab. And every time I look at them I see a market that just has not been tapped. I look at the top graph and wonder how many people would gladly pay $300 more than what they already pay to use any of the other CMSs for a better experience and the ability to make changes with only a knowledge of HTML and CSS. As someone that does not know PHP I would gladly pay that money. And while I do not have hard numbers I would think I am not alone in this.

This is not just about money to me. When I started in Web Design I very much studied the work of others. When I ventured in to providing CMS solutions for my clients I used templates as a way to learn how to create templates for Joomla and WordPress. I think there is a very important educational role that templates play in any CMS community. I received many emails from folks that used templates from EETemplates stating that they were worried about EE but that using a template allowed them to see how the basic functionality worked and they were able to learn EE faster through reverse engineering my code.

There is also a huge market for EE in the less expensive website market. As a studio owner I could make a higher rate on the sites that were simpler, where I used template that I made, vs a large custom site. If you want details on that I can cover it in a different post. But I will say that there are a lot of repeating elements in site design. The more that you can standardize and create a repeatable process the more it will allow you to speed up production and close out business faster. I have told several folks in our market that I could sell simple sites using ExpressionEngine for $2-3000 and build the site in a day or so. After licensing fees for EE and an add-on or two that leaves quite a bit or profit for a day's work.

To those that would say that this will detract from the ExpressionEngine community and marketplace I would say horsehocky.

Are there still sites being built for WordPress, Drupal and Joomla for hundreds of thousands of dollars? Yes.

Will selling templates bring more folks into the community who will purchase add-ons from our totally awesome add-on developers? Yes.

Has the Code Packs provided by add-on developers like Solspace, BrilliantRetail and others been helpful to our community? Yes.

I do not want EE to change. I don't think it has to in order to support templates and I would never use my position at EllisLab to advocate for a solution that would change what we love about EE. I have talked with several very smart folks in our community that have ideas for how to accomplish this without changing the flexibility of EE. I would argue the solution has already been found by folks like Solspace and BR as they already provide mechanisms for installing code packs into an existing sites without harming the already existing parts of the site. The have the ability to install Template Groups, Templates, Channels and Field Groups/Custom Fields at the click of a button. Last time I checked that was a template.

Ryan closes his article by saying that there are three things that are necessary for Themes to take hold in. I agree with 2 of them:

I think we could stand to have more documentation on how you can template EE. I wrote two articles on this on EETemplates found here and here. But that is certainly not a complete vetting of the abilities. They were written prior to my time at EL so they were not validated by anyone at EL. But they are a good start.

I also think a site similar to Devot-ee but for themes would make things easier for folks. Themeforest has a section dedicated to ExpressionEngine (Woo's old themes made by Bjorn). At one point in time I considered using EETemplates as a marketplace. Who knows...

But the thing I really don't think is necessary is a lower priced ExpressionEngine license. Anyone that has used EE and had their lightbulb 'AHA!' moment will tell you that it is worth every penny EL charges for it and then some. So to think that EllisLab needs a lower priced tier is just not something I think is necessary.

What is necessary is for 3-4 different folks to say that templates are going to happen in the ExpressionEngine community and start building them. Take different views on whether they should be fully flushed out sites or starter kits for Developers. Build the market. I will put my EllisLab hat on for one second to say that I will promote and talk about what you are doing.

Want to talk more about this? Feel free to email me your thoughts or disagreements.

Learn more about Marcus Neto

Recently I built a SafeCracker form that will never see the light of day. It was beautiful but the client didn't want to use it... But I digress. This for had your basic sign up form and then allowed you to add an additional attendee. The form was designed so that if a parent was bringing children they could add them by filling in a couple of fields and then clicking on Add Row for any additional children. Initially I created this functionality in the normal way by just adding the following to my code:

1
{field:cf_registration_add_attendees}

But that did not give me the custom look that I wanted. Plus, my matrix field actually have 8-9 fields in it so I wanted to break apart the Matrix field so that I could lay out the fields in a way that would make more sense for the user. I searched and searched the Matrix forum for hints on how to do this and found some info. In an effort to make this easier for my future self, here is an example of how you would do that:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<fieldset>
<legend>Additional Attendees:</legend>
<div class="attendee">
<input type="hidden" name="cf_registration_add_attendees[row_order][]" value="row_new_0">
<label for="">First Name</label>
<input class="input_xlarge" type="text" name="cf_registration_add_attendees[row_new_0][col_id_7]">
<label for="">Last Name</label>
<input class="input_xlarge" type="text" name="cf_registration_add_attendees[row_new_0][col_id_8]">
<label for="">T-Shirt Size</label>
<select name="cf_registration_add_attendees[row_new_0][col_id_14]">
<option value="Child's Small">Child's Small</option>
<option value="Child's Medium">Child's Medium</option>
<option value="Child's Large">Child's Large</option>
<option value="XS">XS</option>
<option value="S">S</option>
<option value="M">M</option>
<option value="L">L</option>
<option value="XL">XL</option>
<option value="XXL">XXL</option>
</select>
</div>
<p><a href="#" class="addrow">Add Row</a>
<a href="#" class="remrow">Remove Row</a></p>
</fieldset>

Notice that in the name of the fields there is a slight change from the normal parameter that you use to pass values to SafeCracker. In these you have cf_registration_add_attendees[row_new_0][col_id_7]. The col_id_7 points to the column ID of that particular field in the Matrix Field. I believe I went old school and used Firebug to inspect the Matrix Field when I was displaying the whole field in the SafeCracker form (for testing purposes).

This next part was provided by Carl Crawley of Made By Hippo. I could not, for the life of me, figure out why my Add Row code was not working. Carl thought to add the Div around the form with a class of Attendee and hook the javascript into that. He also worked out the bits where row_new_X where X gets incrementally higher with each added row. The javascript code is as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script>
$(".addrow").live('click',function(e){
 
	e.preventDefault();
 
	var $attendee = $("div.attendee:eq(0)");
 
	var $size = $("div.attendee").length;
 
	var $clone = $attendee.clone().html().replace(/row_new_0/g,'row_new_'+$size);
 
	$("div.attendee:last").after('<div class="attendee">'+$clone+'</div>');
 
})
 
$(".remrow").click(function(e){
 
	e.preventDefault();
 
	if($("div.attendee").length > 1)
	{
		$("div.attendee:last").remove();
	}
})
</script>

Which attaches itself to the add/remove links from above.

So that's it. This example should be enough to get you to a working version on your SafeCracker form. Just make sure to include {safecracker_head} so all of the supporting javascript files are available and you should be good.

Learn more about Marcus Neto

This past week I spent 2 days at LessConf in Atlanta. I had never heard of this conference before going to Panama City to speak at the meet-up a few months ago. Allan Branch, the person that organized the meet-up, started LessConf about 4 years ago. He is business partners with Steve Bristol at LessEverything and they are a hoot!

I will admit I was a bit confused about what the conference was going to be focused on. There seemed to be a lot of hub-bub surrounding the conference but no speakers were announced and there were not really any old videos of speakers to give any indication of what it would be like. Having said that this conference was probably one of the best I have been to. Turns out the conference is about helping and fostering growth in people that have start-ups. And while EllisLab is not necessarily a start-up there is a lot to be reminded of in how start-ups think, behave and operate.

Spike Jones was the first speaker of the conference. He was easily my favorite. He is active in the Word of Mouth Marketing Association. In his talk he shared about how he helped Fiskar (maker of scissors... of all things) create a word of mouth initiative that fed off of the scrapbooking community.

He also talked about the ins and outs of this. How they created a barrier to entry by making the ambassador program small (4-5 people) to make the Fiskarettes feel special. How they personalized some scissors and sent them to them. How they created a new level in a scrapbooking forums especially for them. And ultimately the positive effect on the Fiskars brand that they carried into scrapbooking community.

He also talked about how to tell stories with powerful identities. His example was the State of Texas. Love them or hate them Texas has an incredible marketing campaign. Don't mess with Texas, Everything's bigger in Texas etc. He talked about a great brand as being polarizing. This idea resonated with me...

Rob Walling was the second speaker (don't worry I am not going to write about all 10 talks). Rob's talk was excellent for a different reason. Rob runs 5-6 small startups. His talk was all about Cost per Acquisition, Lifetime Value of a customer and how to use the information those numbers provide when making decisions about your business. If I remember correctly he also talked quite extensively about A/B testing and using CPA and LV when doing your A/B testing so that you know whether your changes are working.

He also talked about leveraging low budget ways to get word out about your product (Podcasts, Guest posts etc.) using relationships that you might have with apps that are integrated with yours to get word out by cross-promoting to each other's communities.

John Crawford talked on the second day about not forgetting your friends. My major take-a-way from his talk was a quote:

Your friends have awesome powers - They can create alternative Universes - Let them

The quote builds on his talk about how the people around you can often open doors or take you in different directions by introducing you new people. In his case it opened up some doors that led to 1.5M in funding. smile Not bad if you ask me.

The final talk I wanted to tell you about was the guys from Intercom.io, Eoghan McCabe & Des Traynor. They talk about how ability and hard work will only take you so far. That without passion you will not acheive as much. And I was struck by something.

The team at EllisLab is a team of positive thinking and passionate people and I am proud to be associated with them.

They discussed the idea that starting (or running) a business is like working on a piece of Art. That there is no scientific forumula that you can follow to get from point A to point B. And that like most pieces of art it only acheives it's true potential when it is complete. Some really good stuff in this talk...

They also mentioned that Des has called every single one of their (thousands of) customers. That proactively reaching out to their customers is one of the best ways to delight them. I would love to experiment with this. I may not be able to call every new customer to ExpressionEngine but I would like take more time to reach out to the community members that are NOT on twitter. Twitter contains such a small fraction of our community and I often wonder what the rest of our wonderful community is up to (nothing against my twitter friends smile ).

Their final thought (and they were the final talk)? Was that you must be customer obsessed. That we are entering into an age of the customer. I agree with them. Businesses that stand out for me are the ones that provide ridiculous customer service.

For me there was a common thread in all of the talks. My main take-a-way was to focus on the customer/client in a more personal manner. The EllisLab community is waaaay bigger than a lot of the communities the speakers at the conference deal with, but that shouldn't matter. We not only need to be Bacon, but I also need to take a chance and personally connect with our customers. But that means I have to put myself out there, and that is a bit unnerving...

LessConf was awesome!

Learn more about Marcus Neto
EECI 2011

Last week I was fortunate enough to attend the ExpressionEngine / CodeIgniter conference. For those of you not in the Tech world EE and CI are made by EllisLab which is where I currently work. This was my first time in New York City. As the date approached I was quite nervous. I usually travel well but this trip was throwing me a bit. I think it may have been a combination of my new role as Director of Services and Product Evangelist for EllisLab or the idea of going to NYC after not having lived in a city for a number of years (grew up in DC).

EECI 2011

The trip was great though. Flying in was awesome as we got to see the skyline (oooo preeety) and the Statue of Liberty. The drive to Brooklyn was no disappointment. Those NYC cabbies make you feel like you are riding a roller coaster at Coney Island. I had dinner the first night with an awesome group of EE devs. Eric Miller played host and introduced us to a nice Latin joint not too far from the hotel. Bigota Bistro was the name, and their fish tacos are A.m.a.z.i.n.g.

bandhphoto

The next day I hung out with Jeff Claeson and some other Scottish dude that is lost in New Zealand named Iain Urquhart. Seriously though, Jeff and Iain are awesome. We made it to Times Square before they decided that they were starving and needed sustenance. After that Leslie decided to join us and we made our way to the Empire State Building. This was the sightseeing highlight of the trip for me. I thought I would be a bit freaked out by being 80+ stories high but I did not freak out. The day was perfect for it. Outside of that, I made a blunder. I wanted very badly to visit B & H Photo since I have ordered so much stuff from them. Unfortunately it was a Jewish Holiday and they take that sort of thing very seriously so I was out of luck.

EECI 2011

The conference was awesome. I am always amazed at the talented people that I get to talk to at conferences. It was fun being mentioned by Les a few times during the keynote. And even though I would consider myself an expert in EE I am always learning. Tech is definitely an area that you can spend a lifetime not mastering. Matt Weinberg of Vector Media Group is always great for some good information. He did a really nice Top 10 this year. His talk on ecommerce last year was something I watched several times. And Aaron Gustafson made me feel like I didn't know a thing about HTML/CSS. His talk was jam packed with good tidbits for those of us wanting to master HTML and CSS as it relates to Responsive Web Design.

_MG_0751

_MG_0836

_MG_0823

All in all it was a good experience. My only wish was that we had had more time. There were so many people to talk to I felt like I didn't get to everyone I wanted to catch up with. I left NYC feeling like I had eaten well, talked to a lot of very smart people and experienced something I will remember forever. I mentioned on twitter that I felt the same leaving EECI as I used to when I would go to a camp during the summer. So many friends that you have to say goodbye to...

EECI 2011
Learn more about Marcus Neto

For a long time now I have struggled with removing index.php from my EE websites. I have used a mix bag of the include/exclude method and add-ons that deal with making the include/exclude method easier.

A few weeks ago I was having some issues while creating a multi-language site and Jack McDade sent me a snippet of .htaccess code that has worked on several hosts (including a dedicated mac mini, gatorhost) and is simple. I asked Jack's permission to post the code and he said yes. So if you find this handy make sure to give him a thanks by purchasing one of his many add-ons or follow on the twitters...

1
2
3
4
5
6
7
8
9
10
11
12
AcceptPathInfo On
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
# Looks for files and directories that do not exist
# and provide the segments to the index.php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^/index.php
RewriteCond $1 !.(css|js|png|jpe?g|gif|ico)$ [NC]
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Learn more about Marcus Neto

This is an example of things in design that can bite you in the butt. I recently lost out on even being able to present an offer to City of Spanish Fort for a new website (a great prospect by the way) because of the e. on my business card. They mistakenly sent the proposal email to e.marcus@ instead of just marcus@.

Needless to say this mistake is not going to bite me again. That is a hard lesson to learn...

Old Blue Fish Business Card

Old Card with the e. and p. for email and phone

New Blue Fish Business Card

New Card with the e. and p. removed.

Learn more about Marcus Neto

Philip Bloom's session (more on that later) and I knew I wanted to meet some like minded folk but that was pretty much it.

I left Mobile, Alabama on Thursday and arrived in Austin late. Immediately I got to the hotel and dropped off my junk as I knew there was a group of cool kids (other ExpressionEngine Devs) waiting on me at the Iron Cactus. So I arrived and was warmly greeted by Mike Boyink, Adam Wiggall, Kevin Shoesmith and a few other EE folk that at the time were engrossed in conversation (Brandon and Nevin wink. So that night we all ended up playing pool and getting to know each other... oh and there was the beer... like an ever flowing fountain it just kept flowing. Adam and Kevin kick butt at pool whilst Brandon and I were the bottom feeders with Brandon beating me soundly after playing a single game that seemed to last an hour!

Sessions started on Friday. I think we went to 2-3 of them. That is the thing... outside of the Philip Bloom session on Monday I really cant remember too much of the sessions. I have to say that they were a bit disappointing. Doesn't matter though. I would do it all over again. And here is why....

Adam Wiggall (@turnandface) was my roommate. Absolutely a great chap (Englishman living in Orlando). I spent almost every hour of SxSW with this guy and I don't think there were any of those awkward moments where you are unsure of what to say next. He is big into photography too so we spent a few days exploring downtown Austin. He made the parties more fun. I have to say I am Chuffed to Bits to know this dude (I hope I got that right...).

EllisLab sprung for a duck tour for anyone that wanted to come. It was fun to get on this thing and go riding through downtown Austin with out little duck calls quacking at people. Kind of ridiculous really but it was fun. I got to talk to a few people (seeing a theme here?) like Greg Aker and Lisa Wess from EllisLab. Derek Jones and Greg Salt as well. Robert was there from Whooz Media... Loads of fun... Did I mention Robert is hosting EECI in May?

Sorry for doing this but while we were on our Duck Adventure tour we met Leslie. Leslie is a transvestite from Austin Texas. Google her. She is rockstar famous. Nevermind that she is a 60 year old dude walking around in public in a thong... sorry I think I just puked a bit in my mouth ... did I mention Austin's catchphrase? Keep Austin Weird... 'nuff said.

I'm not much for Canadians (kidding) but if I had to be friends with one I guess this guy would do. Kevin Shoesmith from Factory Interactive. I can't believe this is the best picture I have of him. Sorry for the quality. He is a mean pool shooter and doesn't like to lose so if you see him in a pool hall be on notice. Kevin and I walked back from the Happy Cog'aoke party together talking of ExpressionEngine, business and where the damn pizza place was. To our surprise we arrived on 6th street to find it absolutely packed at... 3:30a.m.!(if I could capitalize that I would cause it is certainly caps worthy)... He pretty alright for a Canuck...

Fish meet Toad... Some of you may know that my parent company is Blue Fish Design Studio. Well this is Paul Burton from Atlanta and his business is 16toads. Apparently we both have a thing for liquid cause it showed over the week. Paul is a stand-up guy. He took his jibs like a champ when he took home first place in the SxSW awards for best blog for his pet project the Vile Plutocrat. We gave him all kinds of grief.

And then there are the twins.... These guys hail from Tulsa, OK. Who knew they even had interwebs in OK (I can kid as my wife is from OKC)? Nick Switzer is the wirey shaved head one and Justin Shattuck is the pomade friendly one. These guys are trouble but damn good at that. Actually they are really intelligent 20 somethings with a hell of a business. Between Mr Wiggles and these guys there was a lot of name dropping (legitimate). Good guys and the life of the party.

So as you can see there is a theme here. The people are what make SxSW worthwhile. So often we work alone (or distributed as in our case) and never get a chance to actually meet face to face with some of our peers in the industry. It's important to do this every once in awhile. The ExpressionEngine group is a close knit one. We help each other out. We talk openly about our businesses (after all there is plenty of business for everyone) and when we get a chance to get together we buy each other a couple of rounds and catch up like old friends.

So yeah... writing this article is sappy... so sue me. Better yet... next year come to SxSW so you can wax poetic with me.

P.S. I attended the DSLR filmmaking sessions on Monday. Philip Bloom was amazing. And at the end of the 3rd session there was a give-a-way. I never win anything so I was not too excited... till they called my name. I won a Zacuto Rapid Fire rig for video shooting with a DSLR. So awesome! So I want to thank Philip and the Zacuto folks for such an awesome prize. My Z-Finder should be here tomorrow. You have a fan!

Learn more about Marcus Neto

Note: After much discussion via Twitter regarding what video service is best we have decided to go with Amazon S3 and some player (TBD). But... until we can get that set up later this week we wanted you all to be able to watch this video regarding Fireworks (CS3) and it's use as a web design tool. So we quick posted it to Vimeo. Hopefully it can stay there for a couple of days till we get the video hosting thing straightened out.

In this video we will start with a blank slate and create a usable but simple layout to replace that which is found at Sean Smith's Repatriate.me. This was not meant to be a end all be all tutorial but rather just a quick post about some of the features that I like about Fireworks as it applies to web design. You may like Photoshop... that is ok. The video idea came about because Sean and Richard were both asking questions about designing websites and I made the comment that they needed to give Fireworks a whirl. As a way of convincing them to come to the dark side I have armed this video with the very best. It basically recreates the look of Sean's website in about 10 minutes.

Fireworks Tutorial from Marcus Neto on Vimeo.

If you have any other things that you would like to see in Fireworks just leave a comment. I can't make any promises but I will try to create videos for any features you would like to see in use.

Learn more about Marcus Neto

I often see questions on the ExpressionEngine Forums regarding photo galleries. In EE Version 2.0 the Photo Gallery module by EllisLab is going to be discontinued but there are some other reasons for using Weblogs instead of the Photo Gallery Module.

So...

Doing a search for JQuery Image Slideshow on Google nets quite a few solutions for the designer wanting to integrate a rotating image effect on their website. We are kinda partial to Mike Alsup's Cycle JQuery plugin. If you use his code try and make a donation.

In this tutorial we will walk through the steps necessary to integrate the Cycle code into our PhotoStudio template. But it should be noted that these steps can be used as part of any website.

First head on over to Mike's site and download the code. You will have to copy and paste into a new .js file. Go ahead and name it jquery.cycle.js and save it to a folder named js in the root of your web hosting.

Next click here to download the JQuery package. The file that you download should be named jquery-1.3.2.min.js. Make sure to save it the the js folder as well.

Next step is to link to these files in the Head portion of your HTML in the template you are going to be using like so:

1
2
<script type='text/javascript' src='http://bluefishds.com/js/jquery-1.3.2.js'></script>
<script type='text/javascript' src='http://bluefishds.com/js/jquery.cycle.js'></script>

You will have to define a weblog to hold the images and the following custom fields (largeimage, title). The largeimage field is a text input field and basically holds the path to the image not the HTML code that displays an image. That code will reside in the template so that we can use the title as the alt text.

OK so let's start with bringing the images into the template. Make sure to add the code pointing to the javascript files. The exp:weblog statement that pulls the featured image is perfect for building this out. Basically you want it to look like below.

1
2
3
4
5
<div class='slideshow'>
	&#123;exp:weblog:entries weblog='[your weblog here]' limit='[your qty of images here]'&#125;
		<img alt='{title}' src='{largeimage}' >
	&#123;/exp:weblog:entries&#125;
</div>

In the code above the div wrapper with the class='slideshow' is the hook for the JQuery to grab onto. Any image tag that is in that div will be a part of the rotator.

Below where you linked to the javascript files you will want to put the following code. This is taken from the beginners example on the Mike's website. Basically the fx: 'fade' statement in this code is what defines the effects. You can read up on all of the additional effects here

1
2
3
4
5
6
7
<script type='text/javascript'>
$(document).ready(function() {
    $('.slideshow').cycle({
		fx: 'fade' // choose your transition type, ex: fade, scrollUp, shuffle, etc...
	});
});
</script>

That's it! If you go to the page then you should see the rotating images.

Learn more about Marcus Neto

Godaddy shared hosting is probably one of the more prevalent hosting packages that we get asked about. Judge all you want wink but they have a stable product for very little money that works well for small business owners that have sites with little traffic. Recently someone asked me how to install EE in Godaddy Shared Hosting so I decided to make a tutorial out of it.

Navigate to the ExpressionEngine website

Enter www.expressionengine.com into the Navigation Bar

 

Click on the Download Free Core Version button

Read the License

So many people just bypass the license Agreement Screen. I would like to suggest that you read it.

 

Click on the Accept License and Download button

This should start your download.

 

Unzip the file that was downloaded

It should be titles EECore1.6.4.zip. The version may change slightly. For instance it may change to EECore2.0.zip or something similar.

 

Open the folder that was just created by unzipping the .zip file

If you are on a PC what you see may look slightly different but the files and folders should all be present

 

Open your favorite FTP Client

Panic's Transmit wink

 

Connect to your shared hosting using the FTP program and upload the files

Navigate to Godaddy

enter www.godddy.com into the Navigation Bar

 

Enter your custom number and password and click Secure Login

Click the my account link

Click on the Hosting link

Click on the manage account link for the hosting account

Make sure, if you have multiple accounts, that you select manage account for the hosting account that you used when you uploaded the ExpressionEngine core files

 

Select the databases section of the hosting control panel

Select MySQL

Click on the Create Database button

Fill in the blanks

Fill in the Description, User Name, Password and select MySQL Version 5.0

 

Click on the OK button

Wait for a bit

Your DB will take a few minutes to move from a pending setup status.

 

After the DB is created

You will have to refresh the screen a few times but after awhile you hope to see the above...

 

Click on the edit button

You need to get the server name where the DB actually resides so click on the edit button.

 

Grab the Host Name

Either highlight and copy or write the Host Name down.

 

Navigate to the location where you FTP'd your files

Using your favorite web browser navigate to the location where you uploaded your files. Once there the system will forward you to the install.php file to walk you through the installation.

 

ExpressionEngine Installation Wizard

This is the first EE window that you will encounter. They have installation instructions too! wink But theirs don't have these cool images in them for the visual learners like me.

 

Are you ready?

If so then click the magic button and away we go!

 

License Agreement

The good folks over at EllisLab make some great software don't they? Please don't steal from them. If you are using their software for commercial purposes then the money they charge is well worth it.

 

Do you agree?

Make sure to change the radio button to the "I Agree" entry and then click on the submit button.

 

Move the System?

If you want to you can gain a bit of security by moving all of the system files. For the purposes of this tutorial though we will leave it as is. Click on the Submit button.

 

Server Settings

Most of the settings under server settings should be correct. You will want to add the email address of the webmaster.

 

Database Settings

Remember those assumptions? You will notice the red boxes where you have mentioned the bits of information you will need. For most hosting the location will be localhost. But for some shared hosting plans (Godaddy comes to mind) the database location may be a remote server. The username, password and database name were generated by you when you created the database. Go ahead and fill those in.

 

Trust EllisLab

We like to trust the folks at EllisLab on this one. SHA1 all the way baby!

 

Admin Account Settings

Here is where you will create your account for accessing the control panel for EE. The username and password will be used to log in at http://www.somedomainhere.com/system. Your email address will receive any notifications the system sends. Your screen name is what others will see when you write an article. And the Name of your site is the long name that you want to appear in the Title portion of browser windows.

 

Localization Settings

Tell em where you are located. Me? I am in the Central Time zone for the U.S.

 

This is where we come in.

This tutorial is based on installing the default template.

 

Click Here to Install

By clicking the button you should be done.

 

Congrats!

You are done! By clicking on the view site link you will see the default installation of EE. By clicking on the Control Panel link you will sent to the log in page. Either way you will need to use your FTP program to log into your hosting space and delete the install.php file. This is a security risk if you leave it up there.

 
Learn more about Marcus Neto

These Entries are like brother and sister

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

May 7, 2014

Walk Through ExpressionEngine: Blue Fish

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

September 28, 2009

An Introduction to Fireworks

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

December 11, 2013

Image Carouslidagigs

by Keaton Taylor

May 27, 2014

Redesigning Show-EE

by Keaton Taylor

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

January 13, 2014

Growing Pains: Project Management

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

January 9, 2014

Intern’s Corner: Jab, Jab, Jab, Right Hook

by Jared Darby

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

January 15, 2014

The results are in… Responsive works

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

December 3, 2013

Take your photography knowledge up a notch

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

January 9, 2014

Intern’s Corner: Jab, Jab, Jab, Right Hook

by Jared Darby

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

February 5, 2014

Huntsville Alabama’s Startup Scene

by Marcus Neto

July 22, 2013

Welcome our new Intern: Jared Darby

by Jared Darby

November 19, 2013

New Website Launch: MASGC

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

August 3, 2013

Statamic Tutorial: Getting Started with Raven

by Marcus Neto

July 9, 2013

Statamic Tutorial: Adding A Contact Form

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 21, 2012

Let’s talk about selling ExpressionEngine

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

July 22, 2013

Welcome our new Intern: Jared Darby

by Jared Darby

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

January 9, 2014

Intern’s Corner: Jab, Jab, Jab, Right Hook

by Jared Darby

December 11, 2013

Image Carouslidagigs

by Keaton Taylor

July 9, 2013

Statamic Tutorial: Adding A Contact Form

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

August 3, 2013

Statamic Tutorial: Getting Started with Raven

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

August 3, 2013

Statamic Tutorial: Getting Started with Raven

by Marcus Neto

July 7, 2013

Statamic Tutorial: Getting Started

by Marcus Neto

July 9, 2013

Statamic Tutorial: Adding A Contact Form

by Marcus Neto

July 10, 2013

Statamic Tutorial: Creating a New Page Type

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

March 17, 2013

Sometimes the simplest things cost you big money

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

November 19, 2013

New Website Launch: MASGC

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 16, 2013

ExpressionEngine Naming Conventions

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

January 15, 2014

The results are in… Responsive works

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

March 31, 2014

Getting Started with Google Analytics

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 21, 2012

Let’s talk about selling ExpressionEngine

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 16, 2013

ExpressionEngine Naming Conventions

by Marcus Neto

January 13, 2014

Growing Pains: Project Management

by Marcus Neto

May 21, 2013

Post- Mortem of a Website Project

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

November 19, 2013

New Website Launch: MASGC

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

August 21, 2012

Let’s talk about selling ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 16, 2013

ExpressionEngine Naming Conventions

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

October 25, 2011

NYC and EECI 2011

by Marcus Neto

March 24, 2010

SxSW Wrap Up

by Marcus Neto

December 4, 2013

2013 Wrap up and Setting Goals for 2014

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

February 28, 2012

LessConf 2012

by Marcus Neto

September 16, 2013

ExpressionEngine Naming Conventions

by Marcus Neto

February 20, 2013

Design mistakes

by Marcus Neto

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

November 19, 2013

New Website Launch: MASGC

by Marcus Neto

January 9, 2014

Intern’s Corner: Jab, Jab, Jab, Right Hook

by Jared Darby

January 10, 2014

Eastern Shore Alabama Website

by Marcus Neto

April 18, 2013

Using Zurb’s Orbit with ExpressionEngine

by Marcus Neto

August 1, 2012

30 sites that use ExpressionEngine

by Marcus Neto

October 17, 2013

EE vs WordPress vs Drupal vs Joomla

by Marcus Neto

September 18, 2012

ExpressionEngine Demo

by Marcus Neto

We Should Talk More

We love problems. If you have a great idea or a problem that you need help solving we’d love to help plan, design, build and execute your idea. Don’t hesitate to send us an email using the contact form or pick up a telephone and give us a call. If you just want to get together for coffee or a beer to talk it over we are always up for it.