Steal these Startup Ideas: Collection One

I want you to steal these ideas.

Seriously. Make these things a reality.

There have been a LOT of people who have said this in recent years: ideas are relatively of no value. Until someone actually executes and makes them valuable, ideas are about as value-less as dreams.

Okay, sure – the genesis of creativity is an idea. But that doesn’t mean the idea is the thing of value.

For the sake of brevity, I’m going to go ahead and post some ideas here that I have discussed recently, and I will continue to post more ideas in the future. The hope is that someone will take these ideas and execute; I certainly can’t do all of them.

So, my only request is that if you are inspired by these ideas (even if you don’t execute them directly), contact me and let me know. You can find me easily. Google “Jonathan Cutrell”.

Without further ado:

Coffee subscription drive-thru service

Credit actually is due to @taylorleejones for most of this one.

Coffee is one thing almost everyone I know has in common. So much so that many of us have a coffee budget that we write off on our taxes. Subscriptions simplify our lives to a great extent. The idea is simple: create a subscription service that takes advantage of passive Bluetooth at a drive-thru and provides a reliably great cup of coffee any time I want it (24 hours). Heck, you could create learning algorithms to do auto-ordering and preparations schedules. I just want my same coffee, and I want it to be good. And I’d love data on my coffee drinking habits (because I’m a part-time data nerd).

Make sure the coffee is awesome. On the flip side, make it cheap, too. You’re clearly going to trade personal data (think iBeacons) for coffee. Luckily, coffee IS cheap, especially in bulk, so don’t worry about the margins. They’d be silly good, especially if you leverage that aforementioned data well. If people come by who don’t have a subscription, just charge them a flat fee for a cup. Then at the very least, you likely have a viable drive-thru service.

On-Demand Task Service (Crowd-sourced)

TaskRabbit is awesome. But it doesn’t take advantage of the ultimate scalability model that Craigslist, Ebay, AirBnB, Kickstarter, etc have captured over the years: the crowd is more powerful than the individual. So build a thing that connects people (people means ANYONE) who need something done now and are willing to pay for it with the people (anyone) who are willing to do that thing.

How does it make money? Be the payment service, too. You should easily be able to complete a task and both parties press a button to get paid. Every time someone gets paid, you do too. Make the un-scalable part provide monetary value: vetting. Allow people to pay to become “verified.”

Scaled Micro-Investment for the Financially Clueless Laymen

I know almost nothing about investment.

There, I said it.

Perhaps this is because I’ve never received investment money myself, so I’ve never been pressured to learn.

But I do want to invest. Not a lot – just a bit of my money that would otherwise go into savings. And I don’t want to go and meet with a broker, nor do I want to learn everything about stock trading. And honestly, I want to invest in very early stage companies, not huge national corporations.

I bet there are more people like me. Probably a LOT more people like me. And the truth is, we have MONEY that we want to INVEST in awesome things.

Not donate – invest.

Not pre-order a product – invest.

(In a dream world, I would also receive tiny bits of equity for these tiny investments.)

Build an iPhone app that lets me throw a thousand dollars at a private startup doing something awesome, and pays me just a little bit when they succeed. I understand everything I need to understand to make a bet. Let me make a bet. (And you take some of that money, by the way.) Make it like Monopoly instead of business school.

Personal Privacy Intelligence, Automated

Want to know who is looking at your stuff, where they are, and what they want? If you don’t already, you probably will. Alexis Ohanian (yes, I mention him a lot right now) relates people invading our data to someone opening our mailbox and reading our mail. Yes, I absolutely want to know exactly where the packets of information are traveling, and who opens them. If you create a startup that tells me with some level of confidence where my data is and what is being read, when, by whom, I would pay a body part.

This has significant business implications too; think Google Analytics on steroids, plus a private investigator in the form of intelligent algorithms and tracking techniques. The privacy war is coming, and there’s a lot of money in war. If someone is spying on me, I also want to spy on them. This has a lot of physical-world cost in the long run, but whoever owns this will probably own it for a long time. They can also be sure that they will receive a lot of resistance and shutdown requests, so it’s probably wise to do this in a country where the government is… small.

A REAL, widely accepted solution to this:

But seriously, how is this not completely done yet? I know the XBox One is heading this direction, but how close is it? I’ll answer your question with a question: when will my Dad buy an XBox One? Now, provide a simple, beautiful solution to the problem of discrete boxes doing discrete things that can benefit from all of the automation and remote-ness (read: not remote control) of the cloud. Give me a way to schedule EVERYTHING.

Give me a way to throw away Comcast’s horrible channel surfing interface. I still want the things cable provides me, like reliable sports – but please, for the love of God, make things look better than TiVo circa 1999. FIFTEEN YEARS, guys. And if you think your one Raspberry Pi with XBMC is enough, then you probably don’t watch sports. And you’re probably not willing to keep paying for cable and Netflix, but I am. Someone make a Nest for my home entertainment system, and I’ll buy. Now, do a deal with cable companies and/or Netflix to be the single solution for any home, and you win the long term game.

Appified Personal Article Insurance

I came up with this idea recently when the apartments around mine started having pipes burst, destroying a good bit of their stuff. Let me ask you this: did you update your homeowners or renter’s insurance right after the holiday influx of new Christmas toys? No? Why not? Certainly not because you don’t want to pay to protect your stuff. It’s about the inconvenience of the call to the insurance agent. If only there was a way to take a picture of your stuff and find it in a database, and update your policy to cover your stuff…

I, and many others, would LOVE to add 10 cents instantly to my renter’s insurance whenever I get something new that I’d like to protect. Oh, and by the way – think about the ENORMOUS potential of having the data of peoples’ belongings indexed. Give them deals in a trade for their stuff, and ad revenues would be stupid good.

Oh, you have a collection of president bobbleheads? Looks like your missing George W. Throw that in your cart, and we’ll auto insure it for less than 2c a month.

Seriously, why isn’t this a thing already? (I didn’t say all of my ideas were ethically good… they just would make money. For the record, I’d totally use this, but I bet a lot of people hate the thought of it.)

Job Hunting Meets Matchmaking

LinkedIn sucks at this, let’s be honest. Sure, it has a pretty decent connection-map for your professional relationships, but have you ever tried to hire on LinkedIn? It’s terrible. And really, there doesn’t seem to be a GREAT solution to the recruiting problem. Maybe that’s short-sighted, but the existing solutions are either old school (phone calls and vague recruiting emails) or are so chock full of horrible fits and spam and people who don’t maintain their portfolios.

Take a cue from high-end dating websites. People who want to get hired will probably pay to put their profile on a curated site dedicated purely to hire matchmaking. If you’re hiring, wouldn’t you love to use a serious matchmaking site for your search to find someone who fits your culture, needs, and budget? Give space to both the hirable people and the hiring people to do the seeking. Develop matchmaking algorithms for personality and job placement. Be vigorous to keep recruiters out, or at least very accountable to not be spammy. Focus on happiness/genuineness and job quality first, money second, and skills third. To jumpstart this effort, make it happen in a niche. Be the ultimate job placement software as a service in the restaurant management market of the southeastern United States.

This is one of hopefully many installments. If you want to take any one of these ideas, like I said, just let me know and then go full-steam ahead. I would want you to succeed, because I would use every one of these things if it was done right.

Discuss on HN

The Anatomy of Surprise and Delight

A chance to surprise and delight someone by doing something a little exceptional goes a long way because it provides a smack of awesome humanity upside the head. – Alexis Ohanian [1]

Bill Murray has a reputation. Sure, to many he is an actor with a strong and highly memorable personality in each of his movies. But Bill Murray’s fame goes deeper.

If you have had the chance to experience what I’m talking about here, I’m certain you would agree: Bill Murray is a delightful person.

We know the norm for the famous population amongst us is to show up almost exclusively with “their kind”, highly guarded from much personal interaction with their fans.

Bill Murray has quite an opposite approach to this mindset. On occasion, Murray shows up in an unexpected place and acts in unexpected ways. These stories have become somewhat mythical, enough that people have adopted a practice of telling these stories, even if they never even happened.

What’s the big deal? Who cares that Bill Murray did something ordinary?

Well, the answer is quite simply that for Bill Murray, that ordinary thing was out of the ordinary. And not in the crazy Kanye-interruption kind of out of the ordinary, but rather in the “I’m going to give you a car for no good reason” kind. Bill Murray becomes what other actors won’t: a real life human being, doing real life things. What a delightful surprise indeed.

Ordinary Actions Aren’t Always Ordinary

A friend of mine once sent an email to Steve Jobs. If you have read anything about Jobs, you’ll know that he, on occasion, would send short (as in single-sentence) replies to random emails that hit his inbox.

What’s the big deal? Why does anyone care?

Because it’s out of the ordinary. It’s almost like winning the lottery in some sense – out of the seeming millions of emails that hit Steve’s inbox, he picked yours to respond to.

That email – a normal, ordinary thing – now hangs framed next to my friend’s desk to remind him every day what customer service looks like.

Steve knew his customer’s context. He knew his fans, and he knew what gets good press. He knew that the experience of seeing “Sent from my iPhone” tagged on an email from him would mean the world to someone, and yet it only took a few seconds for him. He knew that keeping the emails short actually added to the experience, to the lore: “and then he responded with a simple yes” sounds much more like the cold, in-the-elevator-firing Steve than “and then he responded.”

It’s not about fame.

Of course, fame gives you a much larger platform. Like a newborn baby learning how to walk, if you’re famous, people fawn over every little thing you do. So, when a famous person does something out of the ordinary, it is elevated. But it doesn’t require fame to surprise and delight people.

What it requires is context and personal connection.

In the early years of Reddit, Alexis Ohanian surprised and delighted authors whose posts hit #1 on Reddit with a digital golden alien email sent personally from him. Reddit hadn’t hit superfamous status, and yet this quirky, personal email elevated Ohanian in these authors’ minds.

Photojojo created a simple interface enhancement that gives users a small bit of shock: pulling a lever unleashes the arm of a cartoon monster on the page. Kickstarter’s footer lets you cut the bottom off, revealing the message “Eureka! You’ve found
our little secret.”, and inviting the discoverer to subscribe to their mailing list.

What does surprise and delight look like?

It really seems simple: do something outside of the expected behavior that will make someone smile. Take the routine out of what your users experience, and instead give them something dynamic and unpredictable. Provide a random, good (and perhaps even undeserved) customer service experience. Give things away on occasion for no reason, and chalk it up to PR investment. Make individual customers feel special just for being around.

Whatever you do, don’t fake it.

If you fake it, people will know. Don’t send out mass emails that attempt to make people feel individually noticed. Instead, let them know it is a mass email; this communicates that you respect their right to filter emails based on personal importance. Don’t provide something for free with stipulations. Don’t go halfway with these things; if you are going to surprise and delight your customers, you actually have to care primarily about surprising and delighting them, and secondarily about the effect that will have on your business. This isn’t business 101, where profits are the only thing that counts; this is about human intuition. If all you care about is money, you can wrap that in as many compliments as you want – I will eventually feel the weight of your fakeness. Cultivate real care for your customers, their problems, and their joys.

[1]Alexis Ohanian. Without Their Permission: How the 21st Century Will Be Made, Not Managed (Kindle Locations 1174-1175). Grand Central Publishing.

Discussion on Hacker News

Nonchalant Arrogance, Intellect, and Caring About Your Work

I recently encountered a demeanor that I couldn’t quite place. I anonymously overheard a conversation and, unfortunately, let it get under my skin enough to tell you about it.

I (somewhat ashamedly) tried to find some kind of a meme that described the person who portrayed this demeanor, which forced me to put it into words: nonchalant arrogance.

The “yeah, it’s a big deal, but I know you’re going to think it is, so instead of aligning with you, I’m going to downplay my accomplishment so you think it’s the tip of my intellectual iceberg” attitude.

The “if you like that, there’s more where that came from, but I’m under an NDA” guy.

The “eh, their third album is okay, but the early stuff you don’t have access to is the best” attitude.

I’m not sure why this attitude is still somehow effective in shifting perception, but it is. Perhaps it has something to do with a perceived sense of humility from the general audience, or maybe it portrays some kind of rare, cultured superiority and curation of “good ideas” that should be followed, like a good Instagram-er. Like the guy who turns his nose up at certain kinds of wine if they are paired with the wrong kinds of food, but gets a column in the paper as an expert sommelier.

I hate it, and I don’t want to be it, but at the same time I do want to communicate a sense of intellectual superiority. (For those of you who don’t want to be perceived as smart, throw the first stone.) I want others to value my opinion at a level of excellence.

The difference is, I don’t want it to be because I have some exclusive access to information that they don’t have; rather, that I have done the hard work to uncover that information, and that access is granted only to those who sweat for it.

So I have this struggle, as many others might, that I don’t have enough knowledge to properly and fully convey an idea. Certainly I feel confident in my vocabulary and in my writing style, and I truly don’t experience writer’s block very often. What I do experience is a sense of fear that once I write something out, or build something to release, that it’s going to be subpar. It’s going to be like the band’s 3rd album, or a badly paired wine.

I refuse to adopt nonchalant arrogance. If I am proud of something I’ve done, I’m not going to put on a charade of humility in hopes of you noticing – I’m going to tell you how excited I am, and show you my project. Who knows if you will like it. From my point of view, honesty and transparency are just as valuable as humility. I’m not above my own work. I’m certainly not above my own writing, or the subjects I write about. Nor am I above building for the web, or the people for which I build. I love what I do, and I’m really quite excited to tell you about it, especially if you have an open ear.

I vow never to post with a contrived ironic space between myself the creator, and my creation. I want my fingerprints all over my creations.

The chase for the external perception of intellect can be a dangerous path. That chase leads us to stop being excited when we learn something new. Do you remember when you first made a successful jQuery transition, or when you first learned how to remove something from a picture in Photoshop? The love for the work often dies when you chase a sense of intellect in hopes of an elevated position in the field. You can easily lose respect for the joys and simple highs of your craft. You begin to see the seemingly trivial nature of what once kept you up late at night, reading and hacking and intoxicated with hope of building something of personal value to show the world.

As Alexis Ohanian says in his book Without Their Permission and in the video below, I want everyone who comes into contact with me to know that I “give lots of damns.” That as a creator, I don’t want to separate myself from the work that I do for the sake of perception. I want the things I create to be so closely tied to me as a person that I fight for them like they’re a living, breathing extension of myself.

I’m Using Buffer to Segment My Working Day, and it’s Awesome

I have a lot of different responsibilities on a day-to-day basis. I’m guessing you probably do too.

Family and home responsibilities, like loving my wife, paying bills, and taking my dog on walks.

Personal responsibilities like sleeping enough, exercising, chasing my own goals, and making time for intentional sanity.

Work responsibilities – now there’s a big (and awesome) list. In particular, let me highlight two types of work I do, at work.

  • Reactive work – work that requires me to respond to external resources, like emails, phone calls, meetings, etcetera
  • Creative work – work that requires me to build something out of nothing (or out of a predetermined specification)

As a company, Whiteboard employees recently read 99U’s Managing Your Day to Day, an excellent book about building an effective creative routine. We’ve all adopted a good number of practices proscribed in the book to start out the year, and let me tell you, it has been fantastic. A few simple thoughts on these practices, as they will inform what this article is really about.

Don’t check email, social media, or content sources until 2PM or later.

Note that this is making space for the creative work, where nothing is needed. Quite a few successful creative folks agree that it’s best to do this kind of work in the morning, so we’re trying it. The basic concept is to avoid getting into response mode, as we tend to allow problems and tensions to linger, but instead to start our day out with a clean brain after sleep, which will theoretically encourage what Cal Newport calls deep work.

Maintain a stopping point.

At some point during the day, your routine needs to shift away from working and onto the other parts of your life, like hiking or relaxing or basket weaving. This allows for you to not only fulfill your family and personal responsibilities and/or projects, but also forces you to do only the most important things for projects while you are working on a day to day basis.

Learn this: The rest of the world is not on your schedule.

With these two thoughts in mind, we must also realize that the rest of the world isn’t on our schedule. So, emails will come in at night. (Ignore them until 2PM the next day.) People around the world will continue to live their schedules, and in fact even in the United States, people on one coast will have a different schedule than I will.

So, in a very narrow sense, people are asynchronous from one another.

Before you continue, if you think social media is useless, then you can stop here and hopefully still gain something from the article. No one else needs to hear why you’re quitting Twitter and Facebook and throwing your phone away and selling your car and moving out to the back woods to get away from the noise in the world. (You already told us… on Twitter and Facebook.)

If you take social media to be important to your job (it is for mine) or for your personal aspirations (again, it is for mine), then you should understand that schedule is everything.

Why does schedule matter?

First of all, professional engagement on social media isn’t about people wanting a glimpse into your life. (Unless, of course, they are particularly interested in your personal affairs. Generally not the case for me, other than my mother.) Instead, it is about what your followers can gain from you.

What we have to understand is that our followers don’t gain anything from us if they don’t see relevant content, but content isn’t enough on it’s own; it must also be timed well.

Open your Twitter timeline, and leave it for 20 minutes. I can almost guarantee, unless you follow a small number of people, that tweets from 20 minutes ago have effectively been buried in those 20 minutes.

So imagine that your next opportunity could come from a Twitter follower who is 4 hours separated from you, time-zone wise. How can you engage with this person in a meaningful way?

As far as social media goes, the answer is to post whenever they are looking.

This has absolutely nothing to do with my segmented work schedule; no one cares that I’m not posting to social media until after 2 PM except my family and my coworkers.

So how do I maintain my sane, segmented daily schedule while also increasing my chances of meaningful engagement on Twitter?

A good answer: Buffer (or a similar tool).

Buffer is a tool that allows you to setup a regular tweeting schedule. You fill up your queue however you see fit, and let Buffer auto-tweet for you. And here’s the kicker:

All of your content discovery and sharing can be done in a single block of your day.

Let me rephrase:

You can now engage with social media asynchronously instead of treating it like a chat room.

Let me re-rephrase:

You can now have a constant presence on Twitter without inundating your followers and sucking your time away from other (more) important things.

If you aren’t getting how this can be insanely valuable if done properly, then you probably need to try it for a while to learn.

A challenge.

Use a tool like Buffer to write your posts and share content for a limited, concentrated block in a day. Experience the peace of limiting social media distraction throughout your day, and the benefit of increasing intentionality and regularity of your online presence as a result of smarter computing.

(Disclaimer: I’m in no way affiliated with Buffer, nor do I receive any benefit for touting their service, but it is in my opinion the prettiest and generally the most popular tool for this particular use case. If I’m missing the mark here, please let me know.)

The war of privacy is coming in 2014

What will you do when you have the opportunity to trade your privacy as a currency?

Of course, it’s not a sustainable model, but that’s not the point. The point is that as long as we can trade our info for goods and services, we will set new standards for technological boundaries on our lives. And we’ve already seen it coming fast – mobility has been tackled, wearability is next, and embedded/environmentally ubiquitous will come after.

Apple released a phone that knows you by the same way you are identified by if you commit a crime or two. (This is a gross over-generalization, but stick with me.) On the flip-side (read: not the private sector) the NSA can listen in on your conversations. Without a warrant. Endorsed by the president. He doesn’t really want a call made on whether that’s okay.

And what will this bring? With movies like The Fifth Estate coming into mainstream (albeit fairly unsuccessfully) and with technological literacy being pushed with efforts to get everyone to code, there will eventually be a click moment where people understand the seriousness of the NSA’s deal to weaken RSA. Eventually there will be an enlightenment of what “surveillance state” means as it relates to all of these wearable devices and Xbox eyes and webcams and…

We’ve heard about Luddites, and I think this may be their birthplace: a strong, deep-rooted hatred for the corruption and terror of privacy-destroying devices like Apple’s iPhone 6. They reject the need for technology, first as a hipster trend (like leaving Facebook), but evolving into a real movement.

Obviously this is absurdist in many ways. (At least hopefully that’s obvious.) The truth is, the general population will take longer to shift to technological literacy enough to understand the seriousness of the RSA deal. (By the time that click moment happens, RSA will have become obsolete anyway.) But the underlying pattern is emerging: people will start caring more about privacy than ever before. They will understand that their need to be “always-connected” puts that privacy up for crucifixion, and that creates a direct conflict with the rapidly advancing personal device world. And that will be the war of privacy.

How We Adopted an Agency-wide Grunt Workflow

tldr; When adopting tools, do so to eliminate waste. It’s not worth adopting a tool for the sake of the clout of adopting it. For development, automate things you do the same often (or should/could do the same often). Build shareable processes that require little training overhead. Identify pieces of your process that require a common language; these places are usually where tools can be introduced to solidify that common language.

Don’t mess with my flow.

If you are a leader of a development team, you know that it can be hard to adopt any team-wide change in workflow. This is especially true if the new project tools are a significant shift away from the way you already work. The truth is, the overhead of managing the tools (instead of working on the project itself) can bog down your team, make for some confusion, and ultimately cause over-engineering and waste of time.

But the truth is, the evolving tools of web design are rising for a reason. Dependency management tools (or any kind of tool, for that matter) that are rising in fame should be evaluated. But where is the line? How can you know when its time to bite the bullet, buckle down, and learn the details of these tools? I think the answer is ultimately subjective, but I’ll share an anecdote with you about how we decided to move our team to a shared workflow that involves dependency management through Grunt, GitHub-centric code control, etcetera, while generally avoiding overhead.

A Note About Dependency Management

The goal of dependency management is to abstract away the details of manually managing toolsets that a project uses. In the Rails world, this is done in a Gemfile. In Node, it’s in a package.json file. Almost every project has some kind of dependency; it’s your job as a developer to make sure the dependencies are met in a suitable fashion. Furthermore, every project has different “build processes” – for some, this means compiling code. For others, this means setting environment variables or incrementing a “revision” count. Grunt is a highly-configurable tool that does many of these things for web-based projects. Powered by Node.js, Grunt and related projects have gained an enormous amount of support and active development contributions.

At Whiteboard, we are constantly starting new projects. This can happen even on a daily basis. What’s more, the developers are constantly iterating on and reviewing projects. Our work is highly communication-centric, with a focus primarily on a consumption orientation that is driven to develop brand voice. That’s a long way of saying we work more heavily with content publishing platforms than we do “web apps”.

For this reason, we adopted WordPress long ago as our primary project platform, and have made WordPress knowledge a core competency of our agency. We work in other areas (Rails, specifically) as well, but for spinning up a content publishing platform for a client, WordPress is our go-to.

Manual Dependency Management

A year ago, our processes were very slim. I like to think of this as a Good Thing™. We worked quickly, and used tools as they popped up. In the WordPress world, we found a few base themes (like Bones), and then threw our own self-brewed stuff on top. The development team is experienced enough to adopt a wide variety of tools, and this worked fine. But we started to notice problems creeping into our system: our tools were all quite similar amongst a set of projects, but none of them were dependably exactly the same. We also knew that the tools could be unified – we used the same basic types of tools/libraries/themes/structure on every single project.

We had adopted LESS, but were using CodeKit on our private machines without any global configuration. (CodeKit is awesome, and has these types of project-level options available, but we weren’t using them.) After a few accidental overwrites and other issues, we realized that everyone’s process, like our toolsets, were very similar, but just off enough to show cracks in our system.


Our first step towards a solution was to adopt a Bootstrap-inspired approach to compilation and project builds. Before Bootstrap 3, the process for compiling assets primarily revolved around a Makefile. We brewed up our own makefile, and created the first version of a theme we called Launchframe. This unified a lot of our tools, and immediately this increased our ability to communicate about projects to one another, without much hassle. The powerful element here is that our code started looking and feeling exactly the same (rather than relatively the same). We also all adopted native (Mac OS)AMP + phpMyAdmin stacks on our Mac OS machines, using Homebrew to get everything installed. This makes for predictable and very easily executable PHP-based projects. (There are quite a few guides for how to do this, including this Homebrew-specific one.)

Moving to Grunt

The Makefile approach eventually started showing its flaws. Most specifically, some of the error reporting and watch scripts didn’t quite work as expected. While Make is certainly a powerful way to handle problems, we realized that people in our field were handling these same problems in a much more actively supported way through Grunt (and associated CLI tools). When Bootstrap 3 moved to Grunt, we made the move to Grunt, and once again adopted a lot of the techniques in the Bootstrap build process.

The Trick

The best way to reduce overhead for any kind of development process is to first find your consistencies and near-consistencies, and commit to them. Once you’ve made this commitment, build your tools to automate these consistencies. For us, we always use jQuery, we always use LESS, we always start with our base theme, and we always use a particular file structure. To make the process as easy as possible, we chose to commit to these consistencies, and build our workflow so that our developers need to only know the basic overview of the process. To start a new project at Whiteboard, you install WordPress, change into that directory and type npm install. This will install all dependencies for the Grunt tasks to work properly. Then, run grunt watch. Develop on the project like you always do, and push live.

A Step Further

Who wants to install WordPress? Wouldn’t it be nice if we could automate the whole process from front to back, and have a few prompts with configuration options along the way? Of course it would. So I made this script. Running this on a configured machine with the right tools does everything to open up the project, watching and ready to be edited. It’s also a lot of fun to run it, considering the colors lolcat provides. 🙂 It utilizes a few tools here and there, particularly wpcli, to get things going. This could probably be grunt-ified, but ask yourself: why would that be valuable?

command -v lolcat >/dev/null 2>&1 || { echo >&2 "I require lolcat but it's not installed. Run gem install lolcat."; exit 1; }
command -v wp >/dev/null 2>&1 || { echo >&2 "I require WordPress CLI but it's not installed. \n Run the following:\n curl | bash
."; exit 1; }
command -v git >/dev/null 2>&1 || { echo >&2 "I require git. For more information, visit: "; exit 1; }

NC='\x1B[0m' # No Color

echo '

LAUNCHFRAME 0.1 #########

      / \
    |=   =|
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
  / |##|##| \
 /  |##|##|  \
|  / ^ | ^ \  |
| /  ( | )  \ |
|/   ( | )   \|
    ((   ))
   ((  :  ))
   ((  :  ))
    ((   ))
     (( ))
      ( )
' | lolcat

if [[ $1 == "" ]]; then
    read -p "Enter the site folder you want to create for installation: " sitefolder

echo -e "${purple}Downloading WordPress... Please wait a moment.${NC}"

mkdir -p "${sitefolder}" && cd "${sitefolder}"

wp core download

echo -n "Enter database name (press enter for wp_${sitefolder}) "
read dbname
if [[ $dbname == "" ]]; then

echo -n "Enter database username (press enter for root) "
read dbuser
if [[ $dbuser == "" ]]; then
read -p "Enter database password (required): " dbpass
while [[ $dbpass = "" ]]; do
    read -p "You cannot continue without entering a database password (required): " dbpass

echo -n "Enter site url (press enter for http://localhost/${sitefolder}) "
read siteurl
if [[ $siteurl == "" ]]; then

echo -n "Enter site title (press enter for ${sitefolder}) "
read sitetitle
if [[ $sitetitle == "" ]]; then
echo -n "Enter admin email (press enter for "
read adminemail
if [[ $adminemail == "" ]]; then

echo -e "\n"
echo -e "${purple}Creating the wp-config file.${NC}"
echo -e "\n"

wp core config --dbname=$dbname --dbuser=$dbuser --dbpass=$dbpass

echo -e "\n"
echo -e "${purple}Creating the database.${NC}"
echo -e "\n"

wp db create
wp core install --url=$siteurl --title=$sitetitle --admin_name=$adminun --admin_password=$adminpw --admin_email="$adminemail"

echo -n "Install Multiple Post Thumbnails? (y/N) "
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
    wp plugin install multiple-post-thumbnails
    wp plugin activate multiple-post-thumbnails
    echo -e "\n"
    echo -e "${purple}Run wp plugin install multiple-post-thumbnails to install later.${NC}"
    echo -e "\n"

echo -n "Install Yoast SEO? (y/N)"
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
    wp plugin install wordpress-seo
    wp plugin activate wordpress-seo
    echo -e "\n"
    echo -e "${purple}Run wp plugin install wordpress-seo to install later.${NC}"
    echo -e "\n"

echo -e "\n"
echo -e "${purple}Downloading Launchframe...${NC}"
echo -e "\n"

wp theme install

echo -e "\n"
echo -e "${purple}Activating Launchframe...${NC}"
echo -e "\n"

mv wp-content/themes/launchframe-master wp-content/themes/launchframe
wp theme activate launchframe
echo -n "Install Custom Meta Boxes? (y/N)"
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
  git clone wp-content/themes/launchframe/inc/cmb
  echo "Custom Meta Boxes requires a manual include and setup - be sure to add this in functions.php or somewhere similar."

cd wp-content/themes/launchframe
npm install

echo -e "\n"
echo -e "${purple}Opening the site install...${NC}"
echo -e "\n"

open $siteurl

echo "Done!"
echo '
  ______   _______  _______  _______  _______ 
(  ___ \ (  ___  )(  ___  )(  ___  )(       )
| (   ) )| (   ) || (   ) || (   ) || () () |
| (__/ / | |   | || |   | || |   | || || || |
|  __ (  | |   | || |   | || |   | || |(_)| |
| (  \ \ | |   | || |   | || |   | || |   | |
| )___) )| (___) || (___) || (___) || )   ( |
|/ \___/ (_______)(_______)(_______)|/     \|

 ' | lolcat
subl ../../..
grunt watch

Do What Keeps You Moving

The thing we’ve learned about learning new tools is to find ways of constantly doing something new. This means stop doing the same things over and over. Wasting your time doing the same things over and over means you aren’t innovating, and you aren’t creating change. Don’t stop learning, but learn, implement, and move on to learning more and doing more. This is perhaps an opinionated understanding of the purpose of learning as it applies to development, but it certainly offers a strong method for balancing intellectual progress and business-oriented productivity.

My Solution for Quantified Self: Prompted Data Aggregation

The quantified self is really quite a hot topic. Ivan Kirigin talks about it in his post here as a potential startup idea. I’ve created something simple I’d like to share with all of you.

It is really quite simple, but also very flexible. Before I explain what it is, I’ll cover some of the conceptual reasoning behind the solution.

I believe that to do lists are generally quite hard to deal with, and overall don’t help my productivity. They require me to return to them over and over throughout the day, managing them, and often only serve as a place to mark things as done (rather than a place to ensure that I am being productive).

However, I don’t mind prompts. I don’t mind alerts. Certainly too many of irrelevant alerts can be annoying. But if I am motivated to use the alerts, I will.

As a developer, I am used to constant feedback. I am used to my machine telling me when I have compile errors. I’m used to having reports. These reports are what I take action on. To-do lists stay dormant until I put effort into them. The same can be said for calorie tracking applications. The same can be said for most tracking applications.

So, I created a small script to ask me a random question. I set up a YAML file to track my answers and the dates of my answers. I then created a simple plist file to load the script every 8 minutes via launchctl. This will give me about 50 data points per workday.

While they may be simple data points, and while the questions will repeat, the concept is simple: my computer asks me a question, and tracks my answer for me. My answers can be arbitrary; I also have two types of questions. One is directly actionable, the other is subjective. (“Tell your wife you love her.” vs “What have you eaten today?”)

Here is the Ruby code:

require 'yaml'
y = YAML::load_file(File.join(__dir__, "stretchr.yml"))
if (rand(10).to_f/10.0).round == 1
    @msgs = y["msgs"]
    @msg = @msgs.sample
    ret = `osascript -e 'set question to display dialog "#{@msg}" buttons {"Nope", "Did it"}'`
    ans = ret.split(":")[1]
    @questions = y["questions"]
    @msg = @questions.sample
    ret=`osascript -e 'set question to display dialog "#{@msg}" default answer ""' -e 'text returned of result' 2>/dev/null`
    ans = ret
@answers = y["answers"]
@answers[@msg] ||= []
@answers[@msg]<< [ ans, ]'stretchr.yml', 'w+') do |file|
  puts file.write(y.to_yaml)

And here’s the yaml file.

- Stand up and stretch.
- Live healthy, think healthy
- Tell your wife you love her.
- Do something to show appreciation to your coworkers and employees.
- Text a family member.
- Value, now. Stop doing things that don't matter.
- Have you kissed your wife today?
- Is your desk clean?
- Have you had 10 minutes of quiet thinking time today?
- What word are you thinking of right now?
- Who was the last person you spoke to?
- Is Hacker News open?
- What are you building now for tomorrow?
- Text a family member.
- What have you eaten today?
- On a scale from 1 to 10, how energetic are you?
- On a scale from 1 to 10, how productive do you feel today?
- How many hours did you sleep last night?
answers: {}

And finally the plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

Some of these you can clearly see come from personal goals. Some of them, though, are much more related to aggregating some sort of arbitrary data. Later, I hope to gain some kind of insights from this into very specific areas of my life.

Notice the name – this was originally built to be a simple reminder to stand up and stretch at my desk. I would go hours on end without stretching simply because it wasn’t on my mind. So many things we should, could, and want to do go undone because we simply let them slip our mind. I’m interested to see how much of an impact these more consistent reminders will have.

It’s obviously very easy to add new data points. Of course, as you add more questions or imperative messages, it’s more likely that you will have more time between data points on average, assuming an even distribution of the random range generator over time.

It would be easy to take this YAML data somewhere else, like for instance to JSON to be fed into something like D3:

require 'yaml'
require 'json'
y = YAML::load_file(File.join(__dir__, "stretchr.yml")) # I think this may be v>=2.0
puts y.to_json

Interested in doing something similar? Or interested in making this more than it is? Let me know. I’d love to let this grow.