Along with managing a few custom email clients (some on gmail, some through hover.com), I’ve got a handful of projects running…


puppyrey.online is a single-subject blog about Rey, who is no longer a puppy. This is a photo blog generated automatically from an Instagram feed. From a user’s standpoint, there’s no easier way to create a blog because it’s just Instagram, as far as they know. Use that app to take photos, maybe some text to go with, and it just turns into their website.

Under the hood it’s built with Gatsby.js and relies on the indieweb community’s OwnYourGram service, to snag photo data out of Instagram. (It has a few limitations — no support for videos or multi-photo posts — but it works despite Instagram’s refusal to allow third-parties to interact with its data.)


Wait, am I not at rich-text.net now? No. This is richtextdotnet.wordpress.com, and it has a few posts and pages similar to rich-text.net, but it isn’t rich-text.net.

rich-text.net is my personal blog, but also a place to put writing projects, and some photography, and links out to other work. It’s also an aggregator of a lot of other web activity.

If I publish a tweet or like a YouTube/Spotify track, or post something on Tumblr, or a handful of other things… that action winds up on rich-text.net as well. That’s a fun trick. I need to write it up. The aggregator relies on IFTTT and Google Sheets and Gatsby.js and Netlify…. and the underlying services, obviously.


This is a WordPress site (if that’s not obvious, we have problems…) I also maintain one or two others, mostly for testing plugins. Here’s a one-pager for my @porknachos.com service (custom email addresses for some golf-types who wanted a wacky name).

There’s not a lot to look at, there, but it serves a purpose. Because it’s self-hosted, I can go straight to the backend code and show a client what’s going on under the hood, how a plug-in works, etc.


pineandvine.com is a custom website, nominally the home of pineandvine.com the web development shop (a/k/a: me). There’s a Portfolio there, an expansion on what’s here. There are also some other projects and bits of code here and there, potentially.


We’re getting into tougher territory for showing-off, now. I manage a small Slack instance for a group of a podcast fans. That’s not particularly ‘visual’, so it doesn’t look like much on a portfolio page.

That said, running that group led to one of my favorite projects, a chat-bot named Howard who drops non-sequiturs into our chat conversations. While the Slack group is private, I did put up a quick-and-dirty public way to interact with Howard, at hc-api.online.

There are some other Slack-related projects among my code repositories. Fans of the Simpsons and Futurama might recognize the source data that powers them.

Github and NPM

More technical readers might want to skim my repos at Github. As I peruse the list myself, I see a few things worth mentioning….

  • My photos-to-markdown repo is a Node project that can be run on a local machine… it takes a folder of images and displays a webpage with a form for each photo. Add any titles or captions you like and hit ‘Submit’, and the project will return a markdown file. This project is necessarily customized to rich-text.net and puppyrey.online, but is easily modified to match any Hugo or Jekyll blog — any blog that builds off markdown files with frontmatter and body, really.
  • simple-rating-stars, which is also on NPM, provides an easy React drop-in to render Amazon-style review stars. Very no-frills, but also very easy for a React dev to use in any project. (You can fiddle with it in a code sandbox here.)
  • A backend for taking Stripe payments. This code comes from other open-source coders (and Stripe itself), but it reminds me that there is an example of using Apple Pay and Google Pay, tucked away on pineandvine.com.