Dustin Davis
Developer, Entrepreneur

I’ve been using django-helpdesk for my support software on my Django powered site. It works well enough, but I didn’t really like it.

I started looking around for “better” support tools. I actually found an article that tried to rank 76 support tools! Everything I tried I didn’t really love.

Then one day I as I was listening to a MicroConf from HIten Shah, in the Q&A someone asked him about support and he said he still prefers to use Gmail.

That settled it for me. Here are the reasons why I prefer to use Gmail for customer support.

It is how customers prefer to communicate

I hate using support ticket systems. They are all slightly different and all annoying. They are even more annoying when not integrated well and I have to create a new account just for the support system and knowledge base. I prefer to just email support. So, I assume most of my customers prefer the same.

Canned Responses

I’ve heard a lot of people use canned responses, but I prefer aText. It has more features (labels, cursor placement) and its faster.

You can also add lots of extra shortcuts you can use while communicating with your customers. Shortcuts could include sub canned responses and links.

For example, I could type eb.faq.banks which would then automatically change to a url to the FAQ page on banks for Envelope Budget.

Add Forms to your App to Give Yourself More Context

Creating a form in your SaaS app for customers to use to send you a support email has a few benefits. You can add text to the subject line or in the body of the email to make things even easier. Here are some examples:

  • Username: If you use usernames you can append this to the message so you don’t have to look it up manually.
  • Category: Sometimes you will see help desk software have you select a category. You could do the same and prepend it to your subject line. Then create a Gmail filter to auto assign it to the matching label.
  • Priority: Likewise if you want priorities you could do something similar and star the email that comes in.
  • Link to customer profile You could append a link to the customers profile so you can go right to it and learn more about the customer if applicable. Alternatively, you could just append all the info you need in the ticket.

Here are the items I like to see for each customer when they contact me:

  1. Username
  2. Plan type
  3. Date Joined

You can get more information about your customers

Reparative can give you more details about your customer. I often find myself relating better to customers when I know more about them. For example, if I see a link to their twitter or LinkedIn profile and see they are also a programmer, I can be more technical and use a bit more bevity in technical responses.

Context & History

One of my favorite features when gmail was first released was how it group replied & forwarded conversation. This is really handy.

Often customers will open an old email and reply to it when they have a new question. I have no problem with this. In fact, I prefer it because then I can see our past conversations as well and have some context when working with the customer.

Undo Send

Ever hit the send button and then immediately thought, “oh wait, I forgot something!” It happens occasionally. Undo send give you about 10 seconds to change your mind after hitting send.

GrexIt

I recently came across this tool that looks helpful when working with others in support. As I grow I may look into it. But as a one man support team, it is just not needed right now. At least I know there are tools to help me in the future.

Stars & Labels

Right now, my support volume is so low I maintain inbox zero with ease. I know that will not always be the case and I’ll want a way to prioritize. Having multiple stars and labels will help keep me organized.

Mailbox & Boomerang

I often use the Mailbox app on my mac or iPhone, or Boomerang in Gmail to archive message and have them return to my inbox and a certain time.

Sometimes when a but report comes in I tell a person I will get back to them when it is fixed. I can then boomerang it for when I think it should be fix. When it shows up in the inbox again I can reply and let them know it is fixed, or remember to hurry and fix the bug so I can reply!

Stats

I heard someone share their first response time for support tickets. I thought, “I wish I had a way to track this.” Wouldn’t you know, there already is. Check out Gmail Meter. It actually has this stat and builds it for you – along with other interest email stats. And, like Gmail, its free.

Mobile

I don’t need a special app on my iPhone or iPad. I can use the default mail client or the Gmail app (or Mailbox or a myriad of other apps I’m sure).

Chat

Sometimes a customer may also use Gmail and may be online. You can quickly pull up a Google Hangouts or chat session with them.

Offline Mode

Want to go to lunch and answer all your support emails? You don’t have wifi or tethering? Just use Gmail’s offline mode to read and reply to all your emails and have them all synced and sent when you get back online.

I love collecting t-shirts at programming conference. So far I’ve gotten some good ones at ng-conf. Here are the eight shirts I added to my wardrobe. Counting down to my favorite.

06-IMG_4420

8. CDK Global

These guys were awesome to put a t-shirt in every swag bag so you didn’t have to go ask for it. Unfortunately it is my least favorite because it is black. Two words, beard dandruff.

07-IMG_4421

7. ng-conf

This is the shirt everyone got in their swag bad. It is a nice simple design. I like the shirt fabric much better than last years. This is year the shirt is white print on gray shirt. It’s a nice minimalistic design that I like, but I feel like a race car driver with all the logos not the back of the shirt. But hey, thanks to the ng-conf sponsors!

1-IMG_4426

6. Domo (T-Shirt)

A nice soft t-shirt. Gray with Domo logo on the front and Domo careers xml markup on the back.

02-IMG_4416

5. Capital One Tech

I had the choice of red or blue. I kind of wish I went with red since I have a few other blue shirts. This has a nice simple logo, again with a nice soft fabric.

03-IMG_4417

4. AirPair

This was the only light colored shirt I saw so it stands out a bit more. Great fabric with two color print. Their was a catch to get this shirt – you had to sign up on their website. But that wasn’t a problem because I would have anyway. They have an interesting service where I can get paid to mentor someone on the things I have expertise in. Or, I could find a mentor to help me out with a project.

05-IMG_4419

3. Firebase

Nice soft blue t-shirt. I love that this was designed custom for this event with the year on it. I like the snowflake in the background of the Angular logo – giving it a touch of Salt Lake City. I also got a nice yellow beanie with the Firebase logo.

04-IMG_4418

2. Domo (Soccer shirt)

This has to have been the most expensive shirt being handed out at the conference. Many people would probably put this shirt #1 on the list. But I’m not a soccer fan. Had it been a baseball jersey, easily #1 on this list!

01-IMG_4415

1. Ionic Framework

I got this same shirt last year and I wore it all the time. I love the minimal and interesting logo. Unfortunately I left it in a condo in St. George a few months ago when we took a family trip to hike Zion National Park. I found out about this shirt on twitter and found Mike Hartington and he hooked me up with a new shirt.

Note:
There were other t-shirts being handed out of course, but I didn’t get one either because I didn’t know about it, or it didn’t look like something I’d wear (black shirt with colorful bubbles all over it, for example)

Yesterday I attended the advanced workshop at ng-conf. I thought I’d share some of the highlights.

There were four rooms for the advanced workshops. We stayed in the same room while the instructors rotated.

AngularJS Animation

Our first session was on AngularJS Animation by Lukas Ruebbelke. I’ll be honest, I’ve been spoiled by being able to work with great designers the past 5 years or so, so I haven’t kept up on design & CSS. So that said, I’ve relied on them to do all the amazing UX animations & such.

So this was all new to me and it was great to see the magic behind CSS transitions and how to make them work with angular. We did have some issues with wifi so it took a little longer to get started that we had hoped.

Lukas had some great demos setup up for us to play around with. I had the most fun with this example adding a jack-in-the-box transition effect to the images.

Advanced Directives

Our second session was on advanced directives by Joe Maddalone. This was my favorite session due to the topic, the content, and the hands on examples.

I know I don’t use directives enough in AngularJS. It was great to see some of the advanced features in directives.

It was interesting to see how to build a directive to loop through data as an alternative to ng-repeat. I especially enjoyed learning about transclude: 'element'. I admit it was a little hard to grasp, so I may have to go over it again and play around with it more.

Lunch

Lunch was provided and catered by the Little America Hotel. It was amazing as their food always is. I just wanted to give a shout out, that’s all.

Angular Formly

Our third session was on Angular Formly by Kent C. Dodds.

I have to admit, I really hate writing forms. In fact, over 10 years ago I wrote sort of mini language to create forms. I would parse it with Perl to generate html for forms.

One feature I really love in Django is their forms implementation.

I haven’t really had to work with forms for several months, so I haven’t felt that pain, but I would say that if I were to create any type of form with more than 3 or 4 fields, or if I had an app with multiple forms, I would most likely use Formly.

Firmly basically lets you code out your forms in JavaScript. I limits the amount of coding you have to do and gives you consistent looking forms with many great features to do everything you need to get done.

Protractor

Our last session was on Protractor by Ben Clickinbeard.

Protractor is basically an end to end testing framework for Angular apps.

I apologize to Ben, but I kind of checked out of this session and went back to learning about animation and css transitions.

It had nothing to do with the presenter, but rather the topic. I spend 7 years in QA and I find testing a boring subject overall. I know some companies are all about test driven development, but I’m not a fan so this whole topic just had me disinterested.

Summary

Overall it was a great day to step out of the home office and spend the day learning new things – and I did learn a lot of new things. Good job Egghead.io team for the presentations.

Lego inspired
  1. Type text in Legothick font
  2. Highlight text and select Object -> Expand
  3. Select the Live Paint Bucket tool by pressing K
  4. Select white as the background color. With the text object highlighted, click inside each letter to fill it with white.
  5. With the text selected, select Object -> Path -> Offset Path…. Turn on preview and select the level of offset you want.
  6. With the offset path selected (it is selected by default, but if you happen to deselect, you may need to right click on the object and select Ungroup), choose yellow for the background color and no stroke.

I recently needed to update the SSL certificate on EnvelopeBudget.com. Below are the notes I took in the process for when I need to do it again in 5 years.

Step 1

Purchase an SSL certificate. I bought a cheap one from namecheap.com.

Step 2

Create CSR (certificate signing request)

openssl req -newkey rsa:2048 -nodes -keyout envelopebudget.com.key -out envelopebudget.com.csr

Then print it out and copy it to your clipboard.

cat envelopebudget.csr

Paste CSR into the namecheap admin area

Wait for approval email… submit approval.

SSL cert will be emailed to you in zip file “envelopebudget_com.zip”

Step 3

Upload the zip file to your server using scp.

scp envelopebudget_com.zip envelope@envelopebudget.com:~

Unzip the file on your server.

unzip envelopebudget_com.zip

Concatenate the primary certificates.

cat envelopebudget_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> ssl-bundle.crt

Move all certs to /etc/ssl/localcerts.

    sudo mkdir /etc/ssl/localcerts
    sudo mv *.crt *.key *.csr *.zip /etc/ssl/localcerts

Make sure the following is in nginx. (See Setting up a Django Server with PostgreSQL, Nginx, Celery & RabbitMQ)

    ssl on;
    ssl_certificate /etc/ssl/localcerts/ssl-bundle.crt;
    ssl_certificate_key /etc/ssl/localcerts/envelopebudget.com.key;
    ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;

Restart nginx.

Essentialism

I completed the audio book Essentialism: The Disciplined Pursuit of Less by Greg McKeown. I had read some good reviews on how it has changed some people lives such as Stu McLarin, Michael Hyatt and Pat Flynn.

I don’t know that is was as life changing for me as it was for them. Yes the book resonated with me and there were some good ideas in there, but nothing seemed revolutionary. In fact, it almost felt like stuff I had been taught my whole life, but backed up and supported by research and stories and given a new term: “essentialism”.

I guess I feel like I have a good balance in life as it is. I think I unconsciously made many essentialism type decisions after I was diagnosed with GIST cancer. In fact, I made a major job change last summer in order to take leave the face-paced world of a startup where I was in-line to be the CTO in order to take on a less stressful job where I could work from home and spend less time commuting and more time with my family.

I don’t feel like I have a major problem of taking on too much or doing non-essential tasks. In fact, I often feel like there is more I should be doing. So, yes, there are many ways I can improve, but none of them are major life altering decisions. I just need to focus on the essential things I need to do in order to reach my goals. Setting goals regularly is one of those things I should be doing more of.

One interesting aspect of the book that made me do a “Wait, what?” was when the author said he likes to read classic literature first thing in the morning. He mentioned a number of books he liked to read and two of them he included were the Bible and the Book of Mormon. I didn’t realize the author was LDS. I have to admit, that once I realized that, I did pay a little more attention as I am also a Mormon. I guess I have a little bias in me.

One question I have is can wealth really be achieved by practicing essentialism? It seemed to me that many of the stories in the book where of wealthy people turning to essentialism in order to cope with the ever increasing demands upon their time.

Is there a season of hustle to get to the top, then a turn to essentialism to stay there without burning out? Or, can you practice essentialism from the beginning and attain a level of financial success much faster? I think people often realize that once they have more than enough money, money does not buy happiness. Once money is no longer a motivation they turn to essentialism to find happiness.

I don’t know if that question was completely answered for me. I’d be curious to hear more thoughts on this.

I would like to read or listen to this book again in about a year to see if it has had much effect on me and to re-evaluate where I am.

Overlooking Snow Canyon & St. George, UT

I’ve read a few year-end review posts recently and I find them fascinating. I wish I had my own archives of year-end reviews to look back on. So I thought I’d jump on the bandwagon and get started this year.

What Went Well

Gym & Fitness

I got my first gym membership in December 2013 and started going regularly. I also started running (very slowly) for the first time in my life. These habits continued into the start of 2014. I even ran my first ever 5k. For me, this is a big deal because I really hate running. So to run 5k without stopping was a pretty big accomplishment. Sure, I took last place out of all my co-workers I ran with, but I finished middle of pack overall. Most importantly I finished!

ng-conf

When ng-conf was first announced, it sounded like it was going to be a small conference here in Salt Lake City. So I was surprised when I missed out on the early bird tickets both times. But I was fortunate to get tickets in the final round. It seemed they were golden tickets though as demand was huge.

It was a great conference and I was lucky enough to score early bird tickets first round for 2015!

New Home

We built a new home in Farmington, UT. We moved in on March 14th. We decided to build so that we could get everything we wanted and not spend so much time on remodeling projects. It is a great home and we love it. There are so many kids in this new neighborhood. Our kids have made lots of new friends.

Little League

When we moved to Farmington I signed the boys up for little league baseball. I got an email saying they were in need of about 30 parents to volunteer as coaches. I found that I really didn’t enjoy coaching in Alpine so I stopped volunteering. But since they were in great need I said I could coach any of my sons they wanted me to. They asked that I coach in the Mustang league (9-10 year olds).

It turns out that I had a blast. I had some great kids on my team. I got pretty competitive as a coach because for the first time I found that my decisions could often make the difference between winning and losing. In previous leagues they didn’t keep score and there technically were no losers nor winners. We ended up taking 3rd in the final tournament which was pretty good as we had about 12 teams in the league.

My 9 year old son really wanted to play on the all-star team but I just didn’t feel he was at that level. The league had about 6 kids that didn’t make the the A or B team that really wanted to play. So we put together a C team and I coached it. We got killed every game, but it was a good experience for my son to learn and get more pitching experience. He was also pretty happy to get an all-star uniform.

Gehrig pitching in an all-star game

Baby Griffey

Our 5th child was born on June 4th. He is our 4th son. We carried on the tradition of naming him after a baseball player. I’ll admit it has been quite an adjustment. We had to upgrade our SUV, adjust our sleeping schedules, and purchase all the baby stuff we had since given away. Plus, I am finding it is very hard to find hotel accommodations for a family of 7. My wife and I both feel confident now that our family is complete.

Family Fun

We bought season passes to Lagoon this year since we are so close. It has been fun because we don’t feel like we have to make a whole day of it. Sometimes I would just take one child in the afternoon on a weekday and there were virtually no lines to any rides.

We haven’t told the kids yet, but we got passes again for 2015.

New Job

After having the baby I worked from home for a week. One day after working I walked out of my office and sat on the couch to watch a movie with the family. I thought, “It would be nice to work from home again and not have to commute.”

The next morning I noticed an email in my inbox from the local Utah Python user group. A company was looking for Python developers that would work remotely. I looked into it more and ultimately interviewed with them and accepted an offer. So I am now an employee of Verizon Digital Media Services. I work on upLynk.com. It has been fun and I have learned a lot about video streaming the past six months.

Brought on a Partner

I partnered with a friend to help me work on EnvelopeBudget.com. The design and user interface has been mostly an afterthought on this project. I bought a template and I have just been using the css classes available in the framework. Now my friend is re-designing it from the ground up. Once the designs are complete I will work on re-coding it according to the new designs – mostly utilizing AngularJS and an Django REST Framework.

What Did No Go Well

Missed MicroConf

I bought tickets to attend MicroConf in Las Vegas. I was pretty excited about this. Unfortunately my boss at the time put a freeze on all vacation time in order to meet deadlines. (I didn’t feel this was necessary, but that is another story.)

Fortunately, the organizers were kind enough to resell my ticket and give me a refund and they also gave me early access to the recorded talks.

Fitness

At some point – probably around the process of moving to Farmington, I stopped working out. I stopped going to the gym completely and ended up canceling my membership to save money. I have been pretty sedentary since then. I really want to get back into an exercise program. I found that I enjoyed free weights the most. I still hate running – especially on a treadmill.

Finances

At the start of 2014 we had zero debt and $80,000 in the bank. With the purchase of the house and all the upgrades and new decor, etc etc… plus a new car we now have about $30,000 in debt. As a personal finance guy that is supposed to know better, this is quite stressful.

While the change in jobs has helped, what hasn’t helped is losing income from my DIRECTV vs. DISH site. At its high point, about 3 years ago, it was bringing in $6,000 per month. Now it brings in about $300 per month if I’m lucky. It’s been hard to lose that income and hard to know what to do with that site. I can’t pay for any type of advertising and I don’t really enjoy SEO work so it has been hard to promote.

Sold My Truck, Bought a Lemon

In order to pay down some debts I decided to sell my truck about 2 months ago. I bought it at the end of 2013 for $15,000 after taxes & registration. It was a great truck. I was only able to sell it for $11,000.

Worse yet I bought a lemon of a car. I ended up purchasing a 2003 VW Passat. It had a bra on it. I was stupid not to check under the bra because when I got home I found it had been in an accident and had a different bumper on it that wasn’t put on very well. I really had no recourse. I find I am often too trusting and I can get taken advantage of easily by liars.

I took it to Midas to get new brake pads and they told me I needed to brakes. I spend $700 but when they gave me my car back the brakes didn’t work at all. They wanted another $700 to try to fix it. I took it to a different mechanic to fix it properly and spent another $700. That along with some other work that needed to be done I spent an additional $2200 on a car that is just not worth it.

I like having a truck for times I need a truck, but I hated driving it around on the freeway all the time. At some point I would like to own a small car and a truck. It won’t make my goal list for 2015, but some day…

Let Employee Go

Due to the loss of so much income and my own neglect of EnvelopeBudget – not marketing it properly, I didn’t have the income to continue paying my full-time programmer and had to let her go. It was very hard becuase she was good and so loyal. I did use my network to find her another job and she is actually getting paid more now, so I can feel good about that. And speaking of loyal I have found that she continues to answer support questions and fix issues on the site out of kindness. Isn’t she great!?

Stress & Regrets

I felt I spent too much time in 2014 looking backwards wondering if I made the right decisions. Should we have sold our house in Alpine for a smaller house & lot in Farmington in the middle of a swamp when the payments are the same? This went through my mind far more than I care to admit.

Should I have sold my truck? In hindsight, probably not.

I never really looked back on my career move though. What I learned after leaving was that I was much more stressed out at my old job than I thought. It wasn’t so much the job and the work I did, but more of the people I worked with. I felt my manager didn’t like me and didn’t value my opinion and there was NOTHING I could do to change that. It was just time to move on.

I found that moving jobs improved my back. I haven’t had any back pain to speak of in the 6 months since working from home full time. I think this is due to the lower stress environment. I’m not constantly worrying about pleasing my manager. I work for a boss who is also a brilliant developer. He understands development and doesn’t place unrealistic demands on my time & life. Plus, not commuting is just one less thing to not have to worry about.

Minor Health Issues

Around June I found myself very fatigued – hardly able to function. At my 6 month oncologist appointment I learned my blood count was way down and I was anemic. It explained a lot and it is why I had such a hard time continuing to exercise. My CT scans looked fine though. My doctor was stumped as to where I was losing blood. After a few weeks I started to gain more energy and follow-up visits showed my blood count improving. I’m still not sure what caused it. But at my oncologist appointment this month my all my blood levels were back to normal. I think I would just chalk it up to a virus or stress.

Books I Read

  1. Jouney to the Veil – A collection of blog posts from LDS author, John Pontius, up until his death.
  2. Triumph of Zion by John Pontius
  3. Visons of Glory by John Pontius – This book was fascinating. We listed to it on our trip to Boise & back.
  4. Book of Mormon – We read this as a family. Our stake president challenged us to read it in 6 months. We accepted and accomplished the challenge.
  5. Coaching Youth Baseball the Ripken Way by Cal Ripken Jr. – I bought this book for ideas to make my little league practices more fun and productive.
  6. The Happiness Advantage by Shawn Achor – I purchased this after listening to his TED talk.
  7. Fitness Confidential by Vinnie Tortorich – I purchased this book after listening to a Pat Flynn podcast were Vinnie was a guest.
  8. Rush Revere and the Brave Pilgrim by Rush Limbaugh – This is an entertaining history book we listened to on our road trip to St. George.

Places I Visited

We didn’t travel much in 2015. This was mainly due to finances and having a baby. We did take a couple of road trips though.

  1. Boise, ID – I had a niece born a month before our baby. We make the trip up to be at her blessing and spend time with my brother and his family. They were kind enough to let us stay at their home, but I think they couldn’t wait to kick us out afterwards!

    At Cheesecake Factory in Boise with my big Bro.

  2. Eden, UT – My mom rented a large condo for a family reunion. We hung out with family, played golf and did a lot of swimming.

    Family Photo in Eden, UT

  3. Marina del Rey, CA – A couple of weeks after starting my new job with Verizon, they flew us to California for a one day company technology conference. It was a great overview of the company I was joining. I had an awesome hotel room on the top floor overlooking the marina. While I was in town the Braves (my favorite team) just happened to be in town to play the Dodgers so I invited a co-worker and got tickets to the game.

    Marina del Rey

  4. Antelope Island, UT – This wasn’t much of a road trip since it is so close to home. We packed a lunch and drove out to Antelope Island because it is somewhere I have always wanted to see.

    Antelope Island

  5. St. George, UT – We rented a condo via VRBO and stayed for 3 days in St. George. While we were there we spend one day visiting Zion National Park for the first time. The next day we went hiking in Snow Canyon with some friends who live down there. The cover image for this post is from that hike. That night we also went to a local play of The Odd Couple with them.

    Hiking in Zion NP

What’s In Store for 2015?

Freelancing

I’ve made the decision to take on a bit of freelancing work. I haven’t done any freelance work in a number of years. Why get paid $45 an hour when I can do nothing and make $6,000 a month from one of my websites? But, like I said, that income has dried up.

Sometimes it is worth trading hours for dollars – when you really need the dollars. I have some financial goals for 2015 that will require some extra income so right now, the quickest way for me to get that income is to take on some freelance projects.

I have already started. I have agreed to tutor someone in San Francisco to help them learn Django. We have had one session so far. I had a short skype call today from another person that is looking for someone to tutor him to help him build and host a Django site. So I guess this is more like consulting than freelance. I’m charging $50 an hour right now. If this continues I can see raising my rate as my time is limited, but I’m just getting my feet wet with tutoring/consulting.

EnvelopeBudget 3.0

As I mentioned I brought on a friend and brilliant UX designer to help me. My goal is to have the 3.0 beta version available to customers by June 1, 2015.

15 Year Anniversary

This year will be my 15 year anniversary. I really want to do something fun with my wife. I would love to take her to Hawaii as neither of us have ever been. We have also never been on a cruise, so I would love that too. Depending on what the budget allows, it may just be a trip to San Diego. Where ever we go, I want it to include a beach so we can relax. Now I just need to find someone to watch our 5 kids as we get away!

Goals

Last night we set individual goals as a family. We wrote them out twice and sealed one of them in and envelope to open next year to see how we did. I wrote 10 goals. I’ll share my goals here:

  1. Complete at least 150 workouts throughout the year. I recently purchased some olympic weights and a power rack so I can do this at home. I plan on following the 5×5 Strong Lifts routine.
  2. Go to the temple at least 25 times. I’m LDS and one of the best places I can go to feel at peace is the temple. I like to go first thing in the morning to start my day.
  3. Read or Listen to 13 books.
  4. Write 150 journal entries.
  5. Write 50 blog posts. These can be on any of my blogs, but mostly likely on this blog or on EnvelopeBudget.com.
  6. Go Home Teaching at least 10 times. Another church related goal. I should go every month, but 10/12 would still be a major improvement for me this year.
  7. Take Rachel on a 15-year anniversary vacation – out of state – beach included.
  8. Pay off credit card debt.
  9. Launch new version of EnvelopeBudget.com.
  10. Landscape our backyard. We ran out of money to complete our back yard last summer. I want to get it done this summer so our kids can play back there.

    My new home power rack!

My mom called me last night. She owns a hot tub dealership in the Salt Lake City area. She said she had a woman come in and purchase a top of the line hot tub the other day. The woman said, “I’m glad I found you. You were not on Google when I searched. Someone up the street said I should check out your store.”

My mom has been paying some company $320 per month for the last nine months that promised to get her on the first page of Google. They have literally done nothing except continue to bill her month after month.

I don’t know how effective an SEO campaign would be if you are only paying $320 per month, but I know I could take half that and start getting lots more exposure than she is getting just by using Google Adwords.

Basically my mom was calling to ask if she could send that money to me instead in return for me helping her get more traffic. I agreed to do it. I have enough experience that I put together a simple marketing plan for her so I can start to get her more customers and as I prove I can get a lot better ROI, then we can increase our marketing spending and efforts, and I can hire a virtual assistant to do the majority of the work.

But this post isn’t really about marketing, SEO, or hiring VAs. My first order of business was to figure out how to allow my mom to set up an auto payment plan on her business credit card to put that $320 into my account each month.

Without doing much research I turned to stripe, because I know I could get it set up fairly quickly with their API. And it was relatively quick. It took me about 2 hours to do the research and create the page. It is nothing fancy.

First I created a folder on my server named payments and dropped the lib folder of the PHP Stripe API library into it.

I created a config.php file with the following:

<?php
require_once('./lib/Stripe.php');

$stripe = array(
  "secret_key"      => "**my_secret_key**",
  "publishable_key" => "**my_publishable_key**"
);

Stripe::setApiKey($stripe['secret_key']);
?>

I created a subscription plan on the Stripe admin page and gave it an ID of “soakers320″. Then I created this very simple index.php page:

<?php

if($_SERVER["HTTPS"] != "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	require_once(dirname(__FILE__) . '/config.php');
	
	$token  = $_POST['stripeToken'];
	
	$customer = Stripe_Customer::create(array(
		'email' => 'customer@example.com',
		'card'  => $token,
		'plan'  => 'soakers320'
	));
	
	echo '<h1>Successfully charged $320.00. Thank you!</h1>';
	exit;
}

?><html>
<head>
<title>Red Seam Marketing Subscription</title>
</head>
<body>

<?php if ($_SERVER['REQUEST_METHOD'] == 'GET'): ?>



  <script src="https://checkout.stripe.com/v2/checkout.js"></script>
  <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>

  <form method="post">
  </form>

  <script>
    $(document).ready(function(){
      var token = function(res){
        var $input = $('<input type=hidden name=stripeToken />').val(res.id);
        $('form').append($input).submit();
      };

      StripeCheckout.open({
        key:         '**my_publishable_key**',
        address:     true,
        currency:    'usd',
        name:        'Marketing',
        description: 'Marketing Plan for Soakers.biz',
        panelLabel:  'Subscribe',
        token:       token,
        allowRememberMe: false
      });

      return false;
    });
  </script>
<?php endif; ?>

</body>
</html>

Some notes on the code:

Lines 3-7: I should also mention I purchased a $9.00 SSL certificate at namecheap.com for added security. This code ensures that the page is only accessed via https.

Lines 9-22: After the form is filled out and submitted, it creates a form past back to this page. This is the call that creates the customer using the subscription plan and actually charges their card.

Lines 41-59: This creates the Checkout form that generates the card token that is passed into this page when it is posted.

That’s about it! Let me know if you have questions on any other portions of this code.

opensprinkler

I set up my OpenSprinkler last night. It was a pretty painless endeavor. I’ll walk through it in this post so I can explain what I did.

The Purchase

There are a few different models and options to choose from on RaysHobby.net. Time seems to be my greatest commodity at this stage in life so I opted to get the fully assembled model for $149.99. It seemed a bit expensive. I paid the same price for a 12 station remote control system at my old home a few years ago. But that system, while very nice, didn’t allow me the customization I knew I would get with this system. Also, I didn’t have to worry about my kids walking off with the remote. I could just use my phone or computer.

Additional Purchases

Once the system arrived, I realized I didn’t have everything I needed to set up the sprinkler. Specifically, I needed a power source and something to get the internet to this thing.

Power Supply

The instructions said I needed a 24VAC transformer. Honestly I had no idea what this was. I did a little research and ended up buying this one on Amazon for $14.96. It has a plug for Rain Bird devices at the end of it. I just cut it off and trimmed the wires to attach to my power terminal block on the OpenSprinkler. I learned that each of this blocks pull out with makes it easy to attach wires.

In hindsight, I didn’t really need to purchase this. When I took down my cheap sprinkler controller that the landscapers set up I noticed it uses a 24VAC transformer and I just had to loosen some screws to detach it and it would have been easier to use — no trimming of wires required.

Internet Connection

Unfortunately there is no wireless adapter built into this thing so I had to find a wireless bridge. I found this one on Amazon which I purchased for $25.99.

It was a pretty simple setup to get it configured:

  1. Plug in it.
  2. Connect to it as if it were your wireless rounder.
  3. Go to http://192.168.10.253 in your browser to access to admin config.
  4. Put it in repeater mode, connecting to you main wireless router.

That’s basically it. Then I just ran a Cat5 cable (which came included in the package) to the OpenSprinkler.

Managing Open Sprinkler

Once it connects to your home network, if you push the top button on the right side of the device it will display it’s IP address. In my case it was 10.0.1.30. I then went to this IP in my browser (http://10.0.1.30) and was propted to log in. The default password is printed on the OpenSprinkler instructions. From here you can change settings, set up stations and watering times etc.

Wiring up the sprinkler wires was also simple. I just moved the wires from my old system to the new OpenSprinkler. There wasn’t much to it.

I downloaded the Sprinklers App on my iPhone. Because my iPhone was connected to my home network as well it was able to easily detect my OpenSpinkler automatically.

I installed the app on my wife’s phone so now she doesn’t have to ask me to turn on sprinklers on random occasions.

Conclusion

All in all this project cost me around $190 and about 2 hours of time. You could save some money if you went with a DIY kit and didn’t need to buy the 24VAC transformer or wireless bridge. But I am sure going to love the ability to manage my sprinklers on a web page rather than a tiny black & white display. Also I have the ability to control my sprinkler from anywhere. (I could put it on a public IP but I haven’t done this yet since I work from home and don’t really see the need to control my sprinklers from out of town. But who knows, that could change.)

Last week as I was driving to a user group meeting, I listed to a podcast episode. The subject was managing email. Since then I have cleaned up my inbox and I have been at inbox zero or close to it all week. Between my 5 email accounts I have 1 message in my inbox right now. I’m used to having thousands of emails in my inbox, half of them unread.

One thing that has helped is that I have determined that my inbox is a terrible todo list. I have started using Wunderlist more to manage my daily tasks.

Generally I’ll start my morning by looking through my todo list in Wunderlist. I’ll set due dates on all the items I want to get done today and set the due date as today. Wunderlist has an automatic category named Today where I can see all the tasks I have set as due today.

I generally try to have no more than 10 tasks. Some are long tasks, some are simple. My goal is to get through the task list for the day. I work on one until I check it off, then I work on another I generally get about 5-6 task done in a day leaving 4-5 left that are still in my today list the next day because they are now marked as overdue. I generally just mark them as due today, or leave them as overdue and because they show up in red they tend to get a higher priority.

So as I go through my emails, if there is something that I need to take action on, I move it into my todo list. Basically, the only thing that stays in my inbox is a message that I need to reply to and I can’t just reply quickly to. Either it needs some thought or action first. But, if it needs some action first, I will generally put it in my todo list and then find the email later and reply after I complete the todo task.

For email I have been using a combination of Airmail, Gmail, and I just got the beta of Mailbox for Mac, which have been using on my iPhone and I really like it. Each client has it’s pros & cons, but I think I’ll save that topic for another day.

Last night I listed to a talk from Nathan Barry from MicroConf 2014. It was a good reminder of the power of habits and doing things on a daily basis. He actually wrote an iPhone app to track your habit goals and your streak. I looked at it and ultimately decided on a different one named Habit List. Today is my first day using it but so far I really like the flexible features. For example, some habit I may only want to do on Mon, Wed, Fri. Some habits I want to do 5 days a week, but it doesn’t matter which days. Habit List supports these features. I just really wish they had a desktop app to go with it like Wunderlist.

Hopefully I can develop some good habits and report back later that the productivity apps and processes are still working.

Clicky