What happens when you run out of low hanging fruit?


As some of you may know, I’m working on a project called Shift SMS which allows you to simply schedule and manage your staff with text messages (as if you’ve missed that on all my my blog posts and or social medias).  Having to teach myself programming has been one of the less outwardly exciting parts of the process, but it is something that I do find extremely interesting to do.  The most challenging part is that for a person like me who is a big fan of small wins and creative ways to hack around big problems, there are virtually none in the programming community, at least to the beginner.  It’s a hard thing to learn that takes a lot of time to do.

I find a lot of motivation in quick wins because they generate a rapid amount of output that can propel momentum.  With Shift SMS, I completed the landing page, wrote some blogs, opened the relevant social media accounts, etc. in all less than a week.  Having that rapid pace of growth in terms of what can be seen and visually assessed really helps motivate yourself to go forward.  So what happens when you run out of low hanging fruit?

If you imagine this tree of said fruit, the low hanging fruit consists of probably less than 20% of the fruit on the tree.  The remaining 80% is all the way fucking up there, which makes up the bulk of your work.  And while the amount of work required to get up there to get your next 20% of fruit is way higher, that basket is only going to look twice as big.  You don’t look as impressive as you did when you got your first 20% of fruit.  You’re not working any slower, but you’re getting incrementally less.  For me, I’m wondering if I’m actually doing any work because I haven’t had anything to really show for it since the first interface beta was hacked together.  It’s made me stray away a bit and take my eye off the ball.  Distractions are affecting the laser-like focus from when I first started.  I don’t feel like I’m achieving as much.

As a pretty narcissistic person, this is a devastating blow to take.  I pride myself on being more competitive and knowledgeable than a lot of my peers and having to take the slow lane in anything really affects my competitive spirit.  I think I can truly be the best at anything I put my mind to, but programming is definitely one tough nut to crack.


Model View Controller Web Development For Drunks

We poppin bottles

It’s 3:35 in the AM on a Saturday night, or what annoying people call “Sunday Morning”.

You just got home from a long night of drinking and you are fucking starving.  Nothing is open, so you’re relying on your remaining brain cells to make something to eat.  You grab the mish-mash of stuff and head onto the stove. Eggs, leftovers, hot sauce, and all the other crap that you thought would be good at the time all goes on the skillet and 3 minutes later you’re eating a Jackson Pollock like concoction on your plate.  It’s not the best thing you’ve ever eaten, but it satisfied the need that you had to satisfy right then and there.

Now, as a man that has once put wasabi as a rub on chicken (which rendered it STRAIGHT UP inedible), I know a little something something about cooking drunk, and a little bit about web development.  If you’re even remotely aware of anything about web development, you’ve probably heard of something called Ruby on Rails (or Rails for short) that’s sweeping the nation.  Ruby on Rails is a framework that allows for the rapid development of web applications using the Ruby programming language.  Basically, it’s a bunch of stuff people wrote in order to save them time from writing it again.  It’s like buying lined paper instead of drawing lines on paper every time you needed lined paper.  Sort of.  I know that wasn’t a cooking reference but get off my back, will ya?

Anyway, being the smartass I am, I decided to turn my back on learning Rails and Ruby on Rails and learn Django – pretty much the same thing except for the programming language Python, which I already sort of knew.  Despite the fact that the documentation for Django is pretty fucking terrible, I think I’ve started to get the hang of the grand concepts of why you’d ever use a Model View Controller framework (which Rails and Django are).

May I present to you my grand metaphor for Model View Controller frameworks:  drunk cooking.



Let me explain.

The Model

In my opinion, Model View Controller development all starts with the model – or what you want the models to become.  A model is just a table of data in a database that the controller can access.  Basically, it’s your fridge.  Everything that you can use to craft your is essentially stored inside of this bad boy.  Just like a piece of chicken can pretty much become anything that tastes like chicken, so too can your data become pretty much anything that tastes like chicken (or whatever useful task you’re trying to accomplish).  You’re basically trying to take separate types of information and trying to combine them in delicious ways, like so:

It's a Doritos Locos Tacos

Fig. A – Combining different things in order to make something awesome. This is the website “Rap Genius” if it was a food item.


The Controller

The controller is you.  You’re the person that’s running the ship in this kitchen, so it’s up to you to fucking do something with the stuff that is in your fridge (the model).  Grabbing eggs and cracking them is essentially the same as taking a list of names in your model and sorting them alphabetically.  Squeezing an excessive amount of sriracha into your frying pan is the equivalent of finding all of your data that starts with the letter B and listing them.  I think you get the idea.  You’re taking something and then doing something with it.  Make it fun.

Geoffry from Fresh Prince Swagging Out

Fig B – After assessing the available ingredients, you have to ask the question “turn down for what?”


The View

This is what ends up on your skillet/plate.  This is how the thing looks when it’s all cooked together and most likely plopped onto your semi clean Ikea plate that you will then shovel into your drunken face very quickly.  To get a little technical, this is where Django and Rails kind of separate (views in Django are the functions that are built on a combination of the HTML output as well as things like URL mapping, where as apparently in Rails this is only the HTML.  Whatever, we’re drunking cooking here!)  This is the stuff that’s the end product that you see and that you consume.

Jamie Oliver garnishing

Fig C – “Go on en, toss a bit of pucca on ye dish yah? Giv it a bit of pop m8” – What I imagine Jamie Oliver would say about your web app




Hopefully that enlightened you a little bit about the world of programming and web development.  Here’s a couple of resources I recommend if you want to start drunk cooking yourself:



Rob Ford

  • Tango With Django – What I’m doing now.  Works off an older version of Django but everything seems to still be very relevant.
  • Two Scoops of Django – From everything I gather, this is the definitive book for doing Django correctly.  Probably my next step.

How To Lose Friends and Influence No One



A couple of months ago, I was applying for a job at a pretty neat startup that very publicly promoted their focus on corporate culture.  They said their entire manifesto for their company culture was based upon the book “How To Win Friends And Influence People” by Dale Carnegie.  Naturally as a part of the application process, I thought it would be pretty smart to read that book just to prep for a potential interview and just to expand my knowledge.

What I learned is that I’m the opposite of Dale Carnegie.

To be fair, the book was written in the 1930’s and uses allegorical stories to make its point, a style that I think was pretty popular in those days (think “A business man from Connecticut consoled in me one day that…”).  However in 2014, the book does have the sketchiness factor of Nigerian Prince Scam email.

For those who aren’t familiar, Dale Carnegie’s philosophy is quite simply “turn the other cheek”.

I’m not entirely sure if I’m the opposite by nature or by choice, but up to this point in time, I have been very un-Dale Carnegie like.  I think that there’s a degree of general politeness that should be exercised by everyone, but at the same time I think that there’s is a desperate need for honesty in communication. The fact that the term “real talk” exists as a very common saying implies that most of the things that are said are not “real talk”.  I try to be pretty blunt when it comes to serious discussions and I think that most people that come to me for discussions or advice want me to be that guy.  I’ve said some not very kind but very honest things that have made people cry.  I think/hope that they appreciated it in the end, but I feel like the reason they asked me my opinion on these things is because I will totally do that.

There was once a situation in a previous job where an unnamed person was faking the reports for a company that I was working for.  The numbers that they reported were somewhere between 5x to 10x more positive than they actually were.  I wasn’t the first person to discover this, but when I did, I threw on my Hardy Boys mystery cap on and did a relatively detailed investigation into the issue.  There was no question that the numbers were inaccurate.  I had a meeting with my managers, and then their manager, gave them the details and told them where to go to look for more info.  Nothing happened.

4-6 months later, the bombshell dropped that the report in question was inaccurate!  By this time, everyone was pretty aware of the fact that this was happening for some time.  We had a meeting and everyone basically said “we all knew this for a while”.  I basically said to the managers in that meeting that “everyone in this room knows that this person needs to be fired and we’re all looking at management to act”.  That person was barred from working on the reports again, and then eventually, fired.

Dale Carnegie definitely would not have said what I said.

I think our biggest ideological difference is the fact that I sincerely believe that most people have been lulled into a sense of complacency when it comes to blame.  Nothing is ever really anyone’s fault.  BP’s Deep Water Horizon leaked a crap load of oil into the ocean.  The NSA illegally wiretapped everyone in America.  Financial institutions sold toxic assets in the mid 2000’s that totally pushed the world to the brink of economic peril.  There are people that are at fault and should be held responsible for these events, and they should totally be called out on being the assholes that they are.  That’s how I feel at least.

Dale Carnegie would probably still be their friends.






The Nintendo 64 that I never won


One of the hardest things I’ve ever had to do in my life is to pretend that Goldeneye 64 was the best game that ever existed in the world.

As a child, we were a Sony house.  Sony TV, Sony stereo, Sony Walkman.  So of course, I got the Sony Playstation.  Now, keep in mind, I AM NOT COMPLAINING about the fact that I had a Playstation.  In my opinion, it was vastly better than the N64 and has filled my life with joys that I had previously not known (I’m looking at you, Tony Hawk Pro Skater 2).

But this is the story of the irrational hopes and fears of a kid in elementary school.

The year was 1996.  As a subscriber to the Province newspaper for most of my childhood life, I often relished the day when the (biweekly? monthly?) video game article came out in the B section of this horrible newspaper.  Look, this was a time before the internet really took off.  It was really hard to find content about stuff you were interested in, unlike now where every unicycling hackey sack meetup group has a waitlist now.

So for the launch of the Nintendo 64, the video game article had a giveaway – all I had to do was answer this simple question:  Which character in Virtua Fighter is Canadian?

I mailed in my answer, and BOOM.  I felt like I already won.  I was going into Coles Bookstore and reading all the gaming magazines talking about the N64 games that were coming out and I picked what I was going to buy.  It was like an absolute certainty that this N64 was mine.  All I had to do was wait until all the other suckers had their chance and then me and Mario were gonna explore the kingdom in 3D until my parents yelled at me to go to bed at 10 pm.  This was fate.

What actually happened was that I had no fucking idea who was Canadian in Virtua Fighter.  And this was 1996 – I couldn’t just go “look it up”.  In 1996 I was reading books novels about Batman in the library because I couldn’t afford the comics.  This directly lead to my relatively advanced reading level in elementary school – but that’s another story.  Anyways, the answer was fucking “Wolf” and I didn’t get it right.  And to add insult to injury they fucking extended the contest for 2 weeks because no one got it right.  Yikes.

When they announced the winner and it was not a 9 year old Chinese kid, I cried.  I cried my little brains out.  It felt like a world was ripped from under me.  My expectations of playing Turok the Dinosaur Hunter had faded away.  My little gamer heart broke a little bit that day.  But that wasn’t the end of it.

The real heartbreak took place between 1997 til about now where I have to constantly pretend like I

  • A: Played Goldeneye 64 all the time
  • B: Think Goldeneye 64 is the best game ever
  • C: have to hate on anyone that doesn’t think A or B

And you know what, I really tried for a while to conform but after a while, I just realized that Goldeneye 64 was not that great.  The graphics were ugly, the user interface was super weird, and it made me dizzy.  Sorry, it just wasn’t for me.

But you know what was the most important thing that I realized?  you can’t force yourself to play a game that you don’t enjoy just because you want to fit in.  You just have to play your own.

Shift SMS onward.



Something to push against

There is really nothing more daunting than a blank canvas.

I used to be nervous about the first character or line that I would draw into a notebook because it was such a grand statement.  This act would be the beginning of my “creative” journey.  This was the case when I first learned to use Adobe InDesign in university as well.  I was forced to do a tremendous amount of sketches on paper to layout what my grand concept would be.  I just worked backwards.  I made the thing in InDesign and then sketched a bunch of layouts afterwards to “show my work”.

The way I like to create is to throw something on the screen and then push against it.  I take the smallest version of what I want to make and then I tweak it.  Then I tweak it again.  And again.  And again.  I’m sure somewhere there’s software that can track the versions of every single save you’ve done, but to be honest, I haven’t used it.  Why would I save a version of something that I thought was worse than what I have?  That’s why I changed it in the first place!

Every blog post that I write starts with a overly long process of deciding what the feature image should be.  I need that there to anchor my ideas and thoughts and the writing builds around that image.  For example, this post was first started with the instagram video that’s embedded below (I know it’s a video and not an image, but bear with me).  Ironically, for Shift SMS, I had created a mockup (seen above) which was supposed to help me figure out how I was going to design this web application.  But to be honest, it felt really pointless to do so.  This mockup was the equivalent of telling me to sketch out all of my layouts before I went and designed it on computer.  It just wasn’t the way I work.

But in the case for Shift SMS, what’s the alternative?  I would just code it and then iterate on that code?  Oh wait, I can’t code.  Shit.

I’ve been using this metaphor lately of mountain climbers on Mount Everest.  When you’re at sea level, there’s just people living their day to day lives.  Go a little bit higher, you’ll get the people that want to hike the base.  A little bit higher than that, you’ll get the amateur climber.  But there’s a point (8000 meters or 26,000 feet according to Wikipedia) where you need to carry oxygen, because the air is too thin.  This point is what separates the minor leagues from the pros.  If you cross it, you must be a serious motherfucker.

Applying this metaphor to my professional life, that point is the ability to fluently write code from scratch.  I can’t do that.  However, there are programming frameworks and plugins, which are pre-made chunks of code that you can customize to varying degrees.  In this metaphor, frameworks and plugins are like a small balloon of oxygen.  It’ll give you enough to survive a little bit longer, but it’s hardly the recommended way to hit the summit.  But when you’re in my position, you just need some goddamn oxygen.

So that’s where FullCalendar came in.  It’s a jQuery plugin that allows you to get a calendar going very quickly and somewhat simply.  Right now, I think having any form of a calendar interface laid out is great, because now I can push against it.

Writing is writing is writing

Reaction to the Knicks

I need to write more.

One of the most challenging things is not only having the discipline to write every single day, whether it be for this blog, Shift SMS, or guest blogging, but to also have the confidence to not self censor your own content just because you’re not sure whether it’s your best work.  Not every piece of writing is going to be your best, but you should definitely strive to provide value to someone every single time you post something.  For Shift SMS, I’m currently working on another long form piece that I think at the current draft is miles better than any content that’s out there on the same topic.  I think it’s going to be a real winner and it’s something that I would want to read if I were looking at that topic.  More to come on that at a later date.

However, I must confess that I did phone it in on a recent piece of content.  I posted earlier that I was looking into turning my blog posts for Shift SMS into Powerpoint presentations and posting them Slideshare to distribute them, and also improve my SEO score.  I definitely phoned it in (edit: I’ve embedded the latest slide (blue background) with the old slide(white background) so you can compare the difference in quality):

This was just to test the waters, but I’m pretty embarrassed at the quality of the product.  I mentioned earlier that I’m currently writing a post, and this one will definitely be fully utilizing Slideshare to create value for the reader.  Promise.


Validating A Business That Doesn’t Exist Yet Part 3: Slight Progress

shift page traffic

What a whirlwind week in the world of Shift SMS!

It’s not like “we made it” progress, but progress none the less.  Let’s break it down.

Guest Posting

Thanks to Joe at Betakit, I got my very first ever guest post on blog!  The post was titled “Here’s Four Toronto Startups Reinventing The Wheel” and it looks like it was really well received.  I’m really stoked because Betakit is a blog that I actually read, and I’d say easily is in the Top 5 biggest startup blogs in Canada.  I spent quite a bit of time writing the article (3 days) and I think it paid off.  Check out the share stats on for the post as of Sunday April 6th:


3 of the 4 companies that I mentioned in the article ended up retweeting the post, but the retweet that made me the most excited was by MaRS, which is the Toronto entrepreneurship and startup organization:



In return for the guest post, I had a little bio posted at the bottom with a quick blurb and a link to Shift SMS:


The reason guest posting is valuable is because it acts as a link towards the Shift SMS website, which gives it credibility.  As far as I can tell, the link that is sent to our site is a “follow” link (which means that Betakit is basically saying, yes give them some credibility), instead of a “no-follow” link (which means fuck these guys, don’t associate them with us at all).  All of this is a factor into how Google ranks and positions your page.  This is all worth it, even if the post isn’t directly driving traffic to Shift SMS.

Definitely going to look into doing more guest posting for sure.

Launching Next

launching next landing

We also got featured on this startup website called Launching Next.  It’s started by a user on the /r/startups subreddit, and I just submitted it for shits and giggles basically.  We ended up getting something like, 7 visitors the day it launched, but 4 email signups for the beta program.  DAT CONVERSION!  So naturally, what I did today was submit Shift SMS to a bunch of startup showcases, as per this list at OVoice.

One of the sad things is that over half of the websites that are on the list require you to pay them in order to feature them on their site.  That’s fucking SHENANIGANS if you ask me.  Even one of the larger sites called Betali.st (which looks fantastic, and isn’t scammy looking at all) allows users to pay in order to expedite their review process.  I don’t know.  I think that if you create a good product, that shit should be considered content and newsworthy.  You shouldn’t have to pay for exposure.  On the other hand, how is this any different from paid advertising, which I’m definitely going to do down the road?  I’m torn.

Cold Emails

and now we wait

As some of you may know, I did send off a batch of 8 cold emails to potential restaurants in my neighborhood to be a part of Shift SMS.  Here’s the email in full:

Subject: Problems with Staff Scheduling?


My name is Anthony Wong, the founder of Shift SMS. After working over 4 years at tech companies like Kobo Books and TheBay.com, we’ve decided to go and build something great for small businesses like [business name].

We’re launching a product called Shift SMS – our website allows you to distribute your staff schedule to your team via text message, and we also allow your team to coordinate any shift changes via text as well. No more crossed out lines on the staff calendar or frantic last minute phone calls!

We think that Shift SMS will solve your scheduling problems, and we would like you to be a part of our beta program later this year.

Would be interested in using a product like this?


This email was based on a formula in a great talk by Steli Efti called “You Gotta Be a Hustler“:

Steli Efti: You gotta be a hustler slide deck

The formula that I followed is featured in the video:

  • Paragraph 1: Who the fuck am I? Why should you listen for 1 more minute? I took whatever credibility I had and tried to associate me to it.
  • Paragraph 2: A No bullshit version of what Shift SMS does. Build some understanding with the headache of scheduling.
  • Paragraph 3-4: Close.

And using a tool called Boomerang, I was able to track whether or not they opened the email.  The result after 2 days: 5 of 8 emails were opened. 0 replies.

So with a couple of days to reflect, here are my thoughts on my email:


  • I think the narrative in the first paragraph is a good touch
  • It’s less invasive than cold calling, which I’ve never done before and would be a bit nervous to do
  • It’s pretty well written
  • It has a pretty clear selling feature


  • I have no idea who I’m contacting at these restaurants.  They’re just the general information contact.
  • The email seems a little spammy

I think going forward, I might have to put an ice on the emails and look into other more effective techniques.

What’s Next?

I think I’m going to have to hack together a minimum viable product some how.  A minimum viable product is basically the most basic, shitty version of your product that’s usable.  I’m definitely racking my brain to figure out how this would work, and I don’t know.  I’m currently facing a predicament between Ruby on Rails and Django/Python.  This is me right now:


django or python?


They both have their pros and cons.  To keep things short, I sort of know how to write Python, but Ruby on Rails has a lot of the shit that I need premade and templated already.  I just have to figure out how to assemble it together, as if it were some sort of weirdly named piece of IKEA furniture.

Stay tuned everyone – who even knows what’s going to happen this week.


Validating A Business That Doesn’t Exist Yet Part 2: Marketing


First of all, thanks for the support from everyone about Shift SMS! I’ve gotten some amazing feedback from a lot of people and I’m glad that people are so interested in the idea.

So without further adieu, this post is going to go over the marketing strategy for Shift SMS – what I’ve done and what I will do.

Social (Facebook & Twitter)

Anyone that knows me is aware that I’m not especially bullish on social media, especially when smoke testing a software as a service business.  However, when you’re trying to look the part, you have to have your social media channels setup.  I’ve been using Buffer to build up a cache of posts through out the week (and if you’re reading this Buffer, I would totally love to join the team;)) with the primary focus on Twitter.

The reason that I’m focusing on Twitter is 2 fold: I use Twitter more and Facebook has recently started charging people to distribute their content.  It’s gotten so bad that even celebrities are commenting about it:


Either way, I’ve been doing the standard “follow a crap load of people and retweet really popular things” strategy.  I’m currently just south of 100 followers after about a week and a half.

Like I said, the strategy here is to make it look like there’s people in the house like in the movie Home Alone:

home alone cutouts



Content marketing is really at the core of the marketing strategy for Shift SMS.  Here was the plan:

  1. Write about 20-50 blog articles using long tail keyword phrases people would search for (“how to write a staff schedule that won’t change” “how to train teenage staff“)
  2. People interested in the subject would read more about Shift SMS and want to sign up for the beta program
  3. profit

So far, this has not worked at all.  The traffic for these posts have been abysmal to say the least (I know, I know, it’s only been a couple weeks, but still).

I ended up listening to an episode of Pat Flynn’s podcast (Episode 66 – Niche Site Duel 2.0) and realized that I currently have no backlink, or backlinking strategy.  Basically, there’s no way people can find my stuff because no one has linked to it.  And because no one has linked to it, Google doesn’t see the page as valuable.  In order to combat this, I have a few ideas (that I have not executed on yet):

  • Guest posting on reputable blogs
  • Creating powerpoint slides of my blog and posting them on Slideshare for SEO juice
  • Writing press releases and submitting them to PR directories

I’ll let you know how those go in a future post.

Cold calling/emailing

This is the part where we start to get into the nitty gritty of smoke testing – getting to your actual customer.  I’ll be completely honest and say that I’m a little scared to approach people about actually selling this to them.  But enough whining.

My plan is basically compile a list of about 20 restaurants to start, ask them customer development questions, and then potentially ask if they would be interested in a product like Shift SMS.  I’ve concluded that my “closing” line will be something like “We’re looking to launch our beta program in 4 months, and we want to partner with you because you’d be a good fit.  Is this something you’d be interested in?” and then go from there.

Overall, I think the process is going pretty well and I’m just encountering the bumps and bruises that come along with building anything.  I’m definitely getting overwhelmed with the amount of stuff that I feel like I could be doing, and there’s a level of anxiety that’s coming a long with it.  I’m going to try and keep my head up and hopefully it works out.

How To Fix The 500 Error With Permalinks In WordPress on a Subdomain Using Apache

Hi Everyone,

just a quick follow up on my last post.  I have another WordPress install that’s hosed in a subdomain that was having issues with custom Permalinks.  And after a couple hours of guessing – I figured it out.

In your VirtualHost file (the file that should be titled “yourdomain.com” or whatever you have instead of .com) located in /etc/apache2/sites-available/, you need to make a NEW entry with the following:

AllowOverride All

Then save, and reboot Apache by typing the following in terminal/ssh:
/etc/init.d/apache2 restart

That should fix it!

How to fix the Not Found/404 page after using WordPress Permalinks on a server running Apache

So I recently bought a server for a year at Ramnode, just because I create a bunch of websites all the time and I got really tired of creating accounts on 000webhost.

In their defense, 000webhost offers an okay product, but unfortunately their generosity is often abused leading to their domains being blacklisted for things done on their servers.

This is sadly what happened to my podcast’s site, which is now banned from Facebook:

banned from Facebook


Anyway, back to the point.  After migrating my WordPress site, I noticed that there were issues with my custom URLs that were leading to the 404 page.  It took my a couple hours, but I finally figured it out.

Step 1 – Super important!

The absolute first step you have to do is launch rewrite in Apache.  This was the thing that I was missing.  To do this, SSH into your server and enter:

sudo a2enmod rewrite

Then reset apache by entering:
/etc/init.d/apache2 restart

Step 2 – AllowOverride All

Since my server hosts multiple domains, this step might vary, but in Apache there is a file called httpd.conf in /etc/apache2/ which does a lot of magical jibberish.  If you have multiple domains, this magical jibberish file is actually located in /etc/apache2/sites-available/___yourdomain___.

You’ll know you’ve found the right file when the first line in that file is:

<VirtualHost *:80>

In side that file, find every instance of “AllowOverride” and turn it into “AllowOverride All”.

Save the file, then reset Apache again by entering:
/etc/init.d/apache2 restart

 Step 3 – Optional – Change your permissions of .htaccess

So you may or may not have to do this step.  First go to Settings > Permalinks.  Select any link format that isn’t the default then save.  If it says “If your .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file”, you’ll have to edit the file permissions of the .htaccess file.

The easiest way is to FTP into your directory, right click on .htaccess and change the number from whatever to “777”.  Then, go back into that permalinks page, select your custom field and click okay.  It will edit (or generate if you don’t already have one) a .htaccess file.

After that you MUST change your permissions back to “644”.  I cannot stress that enough.  YOU MUST CHANGE PERMISSIONS BACK TO 644 OR YOUR WORDPRESS INSTALL WILL HAVE A SECURITY HOLE.

If you need to do it using the command line, I’m sure you can easily google a way to do that.

That’s it!  Enjoy your new custom links!

Thanks a lot to Digital Ocean for providing me with Step 1 and everyone on the WordPress forums for the remaining steps.