Archives For WordPress


June 13, 2014 — Leave a comment

I heard about Phabricator from Greg, in reference to the WMF collapsing a bunch of other tools into this one omni-developer app. I’ve been struggling to figure out what I am doing with my repo hosting, so it was neat to hear a large org moving to something that is free software and self-hosted.

I’ve spent about a week with it, and I’ve been up and down, most so than with any other software I’ve ever used. I didn’t quite understand why I was hung on this software so much, but for the last few days it has been all I can think about. I am starting to break it down, now.

First thing: I wish I had found Phabricator when I was first starting out, maybe back in the cog motive days. It does a lot of stuff really great, and outside of an org that does shared development, it has some great features for single freelancers, like the simple interface for creating and signing contracts.

It bums me out that it doesn’t hit all my needs, but it did make me reassess what my needs were. The git hosting doesn’t come close to Gitorious or GitLab, but those are specialized apps, and they only have light issue-tracking on top of it. I am actually quite fond of the tasks in Phabricator, but tracking issues around code outside the repo is not what I’m looking for.

Basically, I want Phabricator to scale! I want big, huge, public instances of it, but that isn’t the tool they made, though it can organize large groups of folks. I think it is the perfect tool for WMF, which will have a relatively narrow focus. I want a single todo list, and I won’t be able to get it from Phabricator.

However, my own personal work is taking me in interesting directions lately, where I am focusing on fewer clients, but larger projects. I can already think of 2.5 new instances that I should be running, and they do not overlap. And for other projects, I think I have some WordPress plugins that make more sense, since they are less technical in detail, and allow for a conversation to develop with folks that may not want an account to a complete organization system.

Oakland Police Beat

Oakland Police Beat has launched. Susan Mernit explains what the site is about. You should go poke around, see what it is all about. ^_^

It is a WordPress site, and the data is stored in custom post types and taxonomies. All the software that composes the site is free and open source (and I will be providing a writeup of all the great projects we used soon). Bernard is interesting.

Susan Magnolia created the logo, visually showing OPB as an extension of the Oakland Local family.

Pods + maps

April 2, 2014 — Leave a comment

Someone is asking about some difficult MySQL mapping stuff, I don’t understand it, but I do know of a relatively easier way to get custom post types, such as those created by Pods, onto a map in WordPress. I built this for Live Work Oakland, so I remembered the steps, and I sat down and cranked this out in about 30 minutes: Pods + Geo Mashup.

The CPT is called Location, and has three additional meta fields added: Address, City, and Zip Code. The issue folks were having in the forum thread was how to show it on a map, and for that I used another (terrific) plugin, Geo Mashup. One of the settings for that plugin is this ingenious reverse geocoding feature, which will construct the address from an array of fields you designate. This screenshot shows how it is configured on the lab site:


The map page is just the map shortcode showing all posts with location data (the lab site is configured to only show the Location post type, but you can be creative with it). For LWO I built it into the theme, so it shows on individual listings automatically. Check the documentation, it is a pretty nifty plugin!

If you want to try it out, add a location! That bit is done with Gravity Forms and an add-on plugin that allows you to save it to custom post types. I only included a few address fields, so some locations may not show up correctly on the map, but this is only a demo. Also, you’d want to show the custom fields on the individual location posts, but that is a different tutorial. If you don’t want to mess with a lot of custom coding, these plugins can do the heavy lifting for ya. ^_^

Here is the Location custom post type export from Pods: location.pods (copy the contents of the file and import, or just add the three fields yerself!)

Plugins used:

For the longest time I’ve tried to fit every WordPress site into my tiered network instance. I don’t want to keep multiple repositories for different configurations, so I’ve endeavoured to pile them all up here (where this blog lives).

Recently I stumbled upon Commons In A Box, and it changed my mind. I really like the plugins it installs, I had no idea that BuddyPress had gotten some of those features in additional plugins, in part because not all of them are in the official repo. CBox itself doesn’t really appeal to me, though I am glad it exists. While I can’t get it installed properly, that it is based in an academic org means that they will support their common use case, and that appeals to me. It is the closest thing I’ve seen to a WordPress “distro”, and I’d like to see more.

I am going to do some more testing, to make sure all my expectations are met, but if it works the way I think it does, I will be rolling out a few new sites in the coming months, based on ideas I’ve had for years now. This is exciting stuff, and I will documenting it heavily (one of my ideas is to finally get a site up for socially documenting the webcraft I do). Fun! ^_^

Someone asks:

Hi just curious if you were to choose a CMS and technologies for launching a local community digital only community news site, which is mobile and tablet friendly, and easy for community editors to use to publish articles, what platforms, CMS and tech would you recommend?

If you are asking me, you probably already know a little bit about my work. What you are describing is similar to what we have at Oakland Local, as well as the recently launched Young Oakland.

I personally work primarily with WordPress, but I didn’t start there, nor did I stay once I found it. I compulsively use new self-hosted software, and have used just about every FOSS CMS/blog/forum/gallery/status/repo/IM project out there. The first version of Oakland Local was in Drupal. But eventually we migrated even that site to WordPress.

The theming layer, user system, custom post-types and plugins make it a very versatile platform. I build sites for a variety of companies and individuals, and most of them I also host on a single multi-network WordPress instance, which shares users, plugins and themes, so the overhead for keeping it updated isn’t affected very much by each new site I add. This configuration is possible because the core of WordPress allows for thousands of developers to build on it, so you have 10 years of development and millions of human hours working on the design patterns to use for your site.

Okay, so of course I suggest WordPress. But there are 29,000 plugins, probably more themes, and building any site is difficult. Where does one start? Well, here are some specific suggestions on starting a local community-driven news site, at various levels of abstraction.


Edit Flow makes it easy to manage a lot of folks working on different content at the same time. I think one should probably be familiar with the WordPress post edit screen first, but even with the slight learning curve, a small team of editors can handle a lot of content easily, once they grok this plugin. A couple training sessions for editorial workflows will go far for a community site.

Pods allows drag-and-drop creation of custom post types and taxonomies. I prefer this plugin to other methods because the interface is easy to use, and allows for easy export/import, so creations can be shared without having to code. There is a learning curve to do things beyond the basics, but it is a good starting place to customizing WordPress post types. An example of using Pods is on Moon Handbooks; we use it to create the book pages, which have structured data.

Gravity Forms is a premium plugin that creates forms. It doesn’t sound too exciting, but it is amazing what you can do with it. At Young Oakland, students can submit their art work, and contributors to the RailsBridge Blog can create posts without having an account on the site (which means the bottleneck isn’t administering users on a blog). There are a lot of contact forms, but GF has a drag-and-drop interface, and other plugins that greatly increase what the forms can do, like passing data to a CRM or a custom post type.

WP-Piwik is the plugin that makes it easy for WordPress to use Piwik, a free and open source analytics project. Knowing how folks use your site can be useful, and on a community site it is one tool in creating value for its members. Piwik can be configured to respect folks’ privacy as well, and I run an open, public instance at AnalyticsX. If you would like to track your site there, get in touch.

While I don’t use them personally, BuddyPress (social networking) and bbPress (forums) are worth mentioning. I don’t use them for various reasons, the primary being I don’t have a need for those particular setups. But I keep an eye on them, because they are definitely useful to the right group.

I was surprised to hear that some segment of the WordPress community is making efforts to combating harassment at events. This isn’t the point of this post, but I’ve observed that the so-called WordPress community is often out-of-sync with the broader so-called FLOSS community. There are things that the WordPress project has done that other projects can learn from, but we’ve been discussing women being harassed for at least a few years elsewhere, and I sure efforts were in motion before I was engaged. This isn’t a criticism, just this disconnect that I feel personally between WordPress and the larger FLOSS movement.

Anyhow, I read an account of a horrible experience Sarah Gooding had at a WordCamp. I’ve been thinking about it for a day and here are some thoughts:

  • Let people get fired. This isn’t about shaming the harassed for being considerate, it is just that we should collectively allow for people to get fired for their actions. No decent workplace is going to fire someone without investigating it, so we should be okay with folks being held accountable for their actions. Even if the worry that it wasn’t as bad as the harassed thought, it is obvious that if the same incident happened to someone else, we would suggest they report them. So let’s change that up. The worst that happens is that folks’ think before they talk, and that is good!
  • People who host the after-parties, have an anti-harassment policy, or lose all your party goers to the parties that do. Well, you’ll probably still get the drunk assholes. There’s some cognitive diversity for ya.
  • Enforcers of the anti-harassment policies at after-parties, throw people out when they have been reported. You should have training, but you shouldn’t be surgical; err on the side of the harassed. Worried that someone is just a little too drunk? First of all, that isn’t an excuse because we are all consenting adults. But more importantly, the worse case scenario is someone retires early and misses one party. They can follow up with the party host or event organizer in the morning, and the rest of the procedure can be followed (such as restricting them from being near their target). This is a good course of action, because inaction allows one (or more) of your attendees to be traumatized.

Folks that throw events or parties shouldn’t have to deal with this, obviously. Just as anyone seeing someone being violated shouldn’t have their day interrupted. But we all have to deal with this, and we all know who is causing this. So deal with it. Being harassed is frightening and isolating, and that is the antithesis of why we have events in the first place.

TL;DR – As of January 1, 2014, the new price for the bloggers I host will be $20 per 25,000 hits, calculated quarterly. This changes from the current $10 a month, charged yearly. If you’ve pre-paid for the year, it will be used as credit.

In the beginning

When I first started my hosting platform in its current incarnation, I was already hosting a dozen sites for friends. For years I had tried to get everyone I know blogging, but I realized that folks won’t go through the motions unless they are motivated personally. When I set up the current network, everyone initially set up were the folks that had that motivation, and I started charging them to increase the value of their site, and to offset the amount of time it took me to maintain everything.

Ten dollars a month seemed reasonable, but I made a mistake out of laziness; I only charged them once a year. I hate doing busy work, and that is how invoicing feels, and charging someone $10 isn’t a big deal to me, so I wanted to avoid that if possible. I don’t charge late fees on principle, so right from the beginning I told folks that I would invoice them once a year, and they had the year to pay me.

Then I got busy. Really, really busy. I am looking forward to the 2013 write-up, but needless to say it was the best year of my career. And I was really focused on the clients that are also companies, building a bunch of neat sites and being paid well. I love invoicing my clients, because I do a good job and get to support my family. And it isn’t a bother: I either invoice once or twice for a project (small amounts are paid upfront, large budgets are paid half on completion), and then we switch to quarterly for hosting and smaller tasks that build up over a few months. This is easy for me, it is easy for them, and my network is growing at a rate that I can handle.

Those who blog

I was so busy, I forgot to remind most of my blogger-friends to pay me, and when I finally realized I was about to invoice them again, at the end of December, most of them hadn’t paid me yet. This was my fault, because I had kept it informal, but I had all these unpaid invoices out, and I didn’t want to track it separately. In fact, I’d like to host more bloggers (that is, folks’ personal sites, less about a company, and more about individuals or causes).

Bloggers are great, because they are low maintenance after the first month, which is when they find out how awesome my platform is and how they get all the best practices and don’t have to worry about anything anymore. They acclimate to having me as a hosting partner, the one that compulsively uses all the plugins and can make reasonable recommendations, and will stay up all night (or day) if there is a problem. Once the honeymoon is over, they just do their thing, and if they do have a question, 90% of the time I’ve answered it a dozen times already, so no sweat. That means that I can support one of my ultimate goals of making the web better, by hosting for folks that are actively motivated to self-publish on the web.

While there is a commonality to the bloggers I know, there is also a lovely and diverse spectrum. Their publishing patterns and income levels are the things that I care about from a business perspective. I host some sites for folks that are unemployed, some that could retire at any time, others that post once a year or less, and also those that tend to generate huge spikes of traffic. My one size fits all approach to keep the bloggers out of my paperwork doesn’t really work.

Consistent and efficient (I hope)

I mulled over it for a few days after I suggested some folks leave my network. They didn’t use their site, and because they were my friends I felt weird asking them for money so I could host their husk of a blog. I like to provide value, and this feels like rent, which is not something I am seeking. I want to make a living wage hosting for a lot of people, in a clever way so it is worth all our time. But when I suggested they move their site to, I had this cognitive dissonance: I think is fine, but it will never be as valuable as my platform, and it is a weird moment when I turn folks away, not because they are doing something to threaten my network or are assholes (and I normally charge them more before booting them), but only because they weren’t using their site.

Fortunately, this coincided with a spike in traffic for a blogger that was substantial enough that if it continued I would be paying for them to host with me, which is not part of my business plan. Taken together, I realized I could tweak the formula.

Outline of how I makes my monies

I charge everyone $20/25,000 hits. Companies are calculated monthly, which means that if a company gets 0-25,000 hits, they pay me $20. Bloggers are calculated quarterly, so it changes how much they pay, and tends to be lower than a company, but is in accordance with the amount of attention I have to pay to them, hence how I value my time.

Companies also pay me a monthly fee aside from traffic, depending on various factors (business goals, amount of time they need each month, budget). Basically, whatever I feel like charging. This is currently between $25 – $100. Bloggers don’t pay a hosting fee besides traffic, but it also means that their non-emergency requests get checked last. I try to keep inbox zero, and most days I succeed. Bloggers normally get replies from me around 4AM, local time. I am never going to talk to a blogger on the phone about their website (unless it is me berating them for a color scheme or typography decision!).

The bulk of my income comes from “projects”, which is at the low end $300 for a basic WordPress-to-WordPress migration, up to five digits to perform miracles in six weeks (it was a fun year!). Most of my projects are between $400-$750, and $3,000-$5,000. I’ll write a separate post about how I juggle these, and the lessons I learned this year. I should really document all this stuff, so I don’t have to explain it to each new client. Almost there.


The benefits to me for this new pricing scheme is that I now do all my hosting invoices four times a year (the first of Feb., May, Aug. and Nov.; it is so I invoice just before and after the holiday season, when people start acting crazy with their money). Also, the bloggers start paying for the resources they are using, which scales better for me.

The benefits to bloggers is that poor folks will only pay $80 a year for the best WordPress hosting possible, bloggers with a lot of traffic will get all the benefits of my expertise without paying the same cost as a company, and everyone will have shorter cycles for being charged, making it easier to remember and pay.

Cool. ^_^

The (Indie)Web we weave

December 27, 2013 — 3 Comments

I am making a note here, so when we take for granted how awesome our information streams are, we can look back at this snapshot and see how we did it in the ol’ days. Bonus humor, if you catch how meta the topic is.

  1. Mike makes a post about, among other things, blogging and the IndieWeb.
  2. Matthew leaves a considerate and detailed comment on Mike’s post.
  3. Matthew decides to document the sentiment on eir own site (correctly, I think).
  4. Mike employs a snarky editorial method and posts an excerpt on
  5. That gets me thinking, and I reply, both to that particular line and the observation of how RSS is used on the web.
  6. To ensure that my reply is part of a conversation, I post a link in reply to Mike’s post.
  7. Mike points out my reply in further commentary, on the original blog post.
  8. Since I am not participating in the conversation on the original post, and other reasons, Mike then replies with the link to this new comment in the thread.

The hosted software involved in this conversation includes one or more email stacks, WordPress, Drupal and, and content was published on no less than five websites (not including the federation in for non-participants).

Not our DRYest moment. ^_^

The important lesson here is that Mike, Matthew and I are obviously comfortable with all the software involved, and the additional cognitive expense in posting in multiple places is mitigated by other factors that include dopamine and connectedness. The same things that bring people back to Facebook and Twitter. It isn’t fair, but fighting to stop the exploitation of human nature was never going to be a fair fight.

A WordPress CRM-thing

November 30, 2013 — Leave a comment

Here are my thoughts/plans for a WordPress-based CRM type site. My needs above regular web-based message are basically the reply to email feature in Basecamp. Each time I’ve tried something else, that is what folks complain about, because they live out of their inbox. When I was poking around Mailgun I noticed one of their clients was 37 Signals, and it all clicked together.

Since I use todo.txt for, um, “task management”, I really just need a communication platform to capture messages (especially useful, since I delete mail when I’ve processed it; inbox/archive 0!). I need a place to do group discussion, and a place to do the occasional mail blast to large segments of my client base.

The recipe is WordPress + Gravity Forms + Pods + Mailgun post hooks + some other odds and ends as mortar.

Custom post types for:

  • Folks – Basic contact info, basically name and email, and then tags for sorting (web hosted, email hosted, dns hosted, network-name, etc). I use the tags for sending out notices (“the solanin network is being upgraded next week”).
  • Discussion – A place for people to discuss and collaboration; it has always bothered me that I can work with multiple clients to solve a common problem. Well, I plan on being able to.
  • Tickets (but called something else that sounds more friendly) – When someone has a specific, time-senstive, or private matter that needs fixin’.

I plan to build this as part of my support site that also hold the knowledge base, of which articles will be added as I answer questions, and can be updated through collaboration with the folks that actually use them. This is part of my social documentation idea.

Live Work Oakland

November 20, 2013 — Leave a comment


WordPress + Pods + Geo Mashup + 3 weeks = Live Work Oakland