I recently developed a site for Camp Lutherhaven. There are several unique features and customizations of the site that I’d like to highlight and share at some point. I’ll save many of them for another time.

For now, let me share how I went about solving a unique challenge and how you might benefit from the solution. As an outdoor ministry who provides seasonal programming, they requested that the site reflect these seasonal changes. At certain times of the year, they want to hide or highlight specific menu items. For example, once summer staff have been hired, the Apply Now menu item can be hidden until mid/late fall. They also expressed interest in changing the background image of the site depending on the season of the year in order to give site visitors a more realistic feel of the seasonal atmosphere of camp. Instead of having to remember these changes each year and manually make the necessary edits, they requested that such things be automated.

The Challenge

How do we create a site that dynamically and automatically responds to the time at which it is being viewed?

The Solution

On the camp’s previous site, I baked similar functionality into the PHP code of the site. However, now that we opted to utilize WordPress and allow camp staff broader management of the site, I wanted to land on a solution that would be more readily accessible and customizable. Hence, conditional CSS.

The Seasonal CSS plugin for WordPress allows users with the switch_themes capability to manage CSS rules which can be applied to the site during a specific range of time and optionally repeated on an annual basis.

Pretty simple and straightforward. At the moment, it is somewhat difficult to get a quick glimpse at what rules exist and which are currently active. I hope to improve that down the road.

I’d be curious to see how you end up using Seasonal CSS. Send me anything you might cook up. I’d love to see and share.

ūüéȬ†Hooray! Today, the support team at SiteGround solved an issue that has been gnawing at me since the release of WordPress 4.7.

Disclosure: I may receive a portion of sales resulting from SiteGround affiliate links in this post.

When 4.7 released, I was stoked to see that PDF files uploaded to the media library would have associated thumbnails generated from the first page of the document. Why? Because it would allow me to provide a better user experience, like this. However, after updating my WordPress install, I found the feature still missing. Grr. After some investigation, I found that this feature required certain PHP modules be enabled on the site’s server and figured my shared hosting environment would probably need special attention. With other pressing responsibilities, I put off my investigation for a long time. Finally, today, I reached out to SiteGround support and am now the happy owner of a shiny new WordPress feature. If you’re also on SiteGround’s shared hosting, I expect you might also encounter the same. Here are the simple steps we took toward allowing this feature of WordPress to work properly. FTP or SSH into your account, perform these steps, and wonder at the beauty of it all!

Step 1: php.ini Modification

Modify or create a php.ini file within the /public_html/ directory of the your account, adding the following line to this file…


Step 2: .htaccess Modification

Add the following line of code to the .htaccess file in /public_html/

SetEnv PHPRC /home/****/public_html/php.ini

Note: Be sure to replace **** with your cPanel/FTP username

Step 3: Enjoy the Magick!

And, that should do it. WordPress will now generate a thumbnail for any new PDF files uploaded to your site.

Step 4: Generate Thumbnails for Previously Uploaded PDFs

But, what about all the PDF files that already reside in your media library? Here’s a quick way to generate thumbnails for those.

  1. Download, install, and activate Force Regenerate Thumbnails.
  2. Go to your Media Library (list mode).
  3. Filter PDFs.
  4. Check to select all.
  5. Apply Force Regenerate Thumbnails bulk action.
  6. Deactivate & remove the plugin.

Finishing Up

To confirm that these steps have been successful, upload a PDF and ensure that you are immediately presented with a preview of the first page within your media library.¬†And, that‚Äôs it. If you have any questions, I am sure your friendly SiteGround support will be happy to help. I’d be curious to see how you end up using PDF thumbnails. Send me anything you might cook up. I‚Äôd love to see and share.

This past week, after purchasing a lifetime membership to MainWP, I put some work into implementing monthly client reports that can be sent to folks whose sites I manage.

Psst! If you’d like to join this small, but growing group, get in touch with me.

Disclosure: I receive 25% of sales resulting from MainWP affiliate links in this post.

After posting my work to the MainWP Facebook Group, I had several requests to share the process of pulling these together. So, without further ado…

The Basic Necessities

I’m assuming if you have interest in this, you can probably find your way around the MainWP plugin space relatively well and may even already have some membership to MainWP. Thus, I will only detail those things that I deem not intuitive or uncommon to the MainWP environment. The template that I will be sharing requires:

Plugins Installed on MainWP Dashboard

Plugins Installed on Child Site(s)

I am not detailing how you configure these extensions for proper operation, but you will need them functional in order to provide an accurate report. I had thought to also include reporting from other extensions, but have not yet been able to configure them properly for my sites.

Crafting the Report

The following steps are to be taken from within your MainWP Dashboard.

Custom Report Tokens

Within the Client Reports extension, create the following custom report tokens for use in the new report you will be crafting. After creating the tokens, you will need to visit the edit screen of each site and set the values of each token.


This token displays a nickname for the client and is used for the informal salutation at the opening of the report.


This token displays a URL to the client’s logo and is used to embed the client’s logo in the email. Prior to setting this value for each site, you will need to have to have uploaded each logo to a publicly accessible location.


This token cleanly displays the client’s site domain (w/o http:// or https://).

Additionally, you will want to set values for [client.name] and [client.site.url] as they are also used.


After creating a new client report, you can copy/paste and customize the following code into Text editor of your Report Body. I attempted putting some of this code in the Report Header and Report Footer. However, doing so created unseemly breaks in the message body. Also, please note that if you toggle from Text to Visual mode in your editor, WordPress will auto-format certain HTML blocks. This will destroy your styling.


For quick customization of this body content, you will want to be sure to modify the following:

Line 1: src="https://typewheel.xyz/share/typewheel-email-banner.png" alt="Typewheel"
Line 1: background-image: linear-gradient( to bottom, #D7D7D7, #E7D3BA);
Lines 16-18: all text & links

Finishing Up

To visually confirm that your report displays as you would like, select a child site and click Send Test Email. Note that the report will only show activity that has been tracked and recorded by the Child Reports plugins installed on each child site and that has been synced with your MainWP dashboard. Thus, if you have just installed any of the extensions, it may take some time before their respective report tokens begin to display content in the report. You should now have something similar to that shown below.

And, that’s it. If you have any questions, reach out to me at @uamv or @typewxyz. Send me any reports you cook up. I’d love to see and share them.


As I grow this business, I am constantly on the lookout for quality tools that will assist me in effectively and efficiently carrying out my regular tasks. I’ve also begun to learn that if something can be repeated, it can be automated. This is why I created an invoicing tool¬†that is set to integrate with a payment form. This is why I invested in Local. And, this is why I recently purchased a lifetime membership to MainWP. The beauty of MainWP is that it allows you to manage multiple WordPress sites from a single dashboard. So, what does this mean for you, my client (or prospective client ‚Äď hint, hint)? Firstly, this means that I will spend less time completing general maintenance tasks. Secondly, I will have more time to readily respond to specific support questions. Thirdly, you will get to receive a monthly snapshot of your online property. At the end of July, you can expect to begin receiving a monthly report showing uptime, page visits, and a performance schedule of certain tasks (updates, security scans, backups, optimizations). Here’s a peek. Nice, right? Many thanks to MainWP and their battery of extensions.

If you would like to see Typewheel maintain your site, get in touch. I hate to see a property neglected. I’ll be happy to give yours some attention.

As we’ve seen, keyboard shortcuts can drastically improve the efficiency of your work. So, how do we go about becoming such a master? There are two key steps to adopting a new habit ‚Äď knowing and doing. These are the two steps you can take toward integrating keyboard shortcuts in your day-to-day. With a mind to keyboard shortcuts, let’s dig into each of these a bit.

Knowing Your Keyboard Shortcuts

The Scope of a Shortcut

It is important to know when and where a shortcut will work. This is called the scope of a keyboard shortcut. Global shortcuts are accessible and functional from anywhere on your computer. Other shortcuts may be limited to a specific application or to a particular space within an application.

Not only does your computer have native keyboard shortcuts, but many of the applications you use each day also come with their own set of shortcuts. Dig into the settings or preferences of these apps to identify the shortcuts that may be available for common tasks. As your repertoire expands, you may notice that there is some push among developers to standardize keyboard shortcuts for certain actions. For example, though not universally used, you may notice that many applications now use j and k for navigating and selecting list items. Unfortunately, there is no universal mapping of keyboard shortcuts. Sometimes you may find that multiple applications attempt to use the same shortcut for different actions. If these shortcuts perform only within the scope of the app, this should not be a problem. However, if apps have added globally accessible shortcuts, you might encounter conflict. Thankfully, many apps allow you to set your own key combinations in order to customize the available shortcuts.

The Key Combinations

There are several ways to identify key combinations that will perform actions for you.


Pop on the Google and search away. This is especially helpful as you look for shortcuts specific to your operating system. Want to learn how to switch or close applications on a Mac or Windows machine? You should be able to find a list in no time! Try it now ‚Äst‚Ćė+TAB or CTRL+TAB.

Application Preferences

If you visit an¬†application’s preferences or settings page, you might find a list of available shortcuts.¬†Some may have pages or screens dedicated solely to these shortcuts and you might find that you are able to customize the key combinations¬†in this same place.

Helper Applications

The sole intent of some applications is to assist you in¬†becoming a pro at keyboard shortcuts. My go-to for this purpose on Mac is CheatSheet which allows me to view a full list of available app shortcuts by simply holding ‚Ćė.

Doing Your Keyboard Shortcuts

There’s not much use in learning keyboard shortcuts if you don’t put them to use. And you should have ample opportunity to put them to use. Anytime you put¬†fingers to keys and then find yourself reaching for your mouse/trackpad presents an opportunity. If I were to estimate, I’d say I’ve used 300-500¬†instances of a shortcut in writing this post alone (that’s nearly 10 minutes, according to this post). Here are a few tips to¬†start employing these handy little tools into your regular workflow.


One of the best things you can do to make a habit stick is to practice it regularly. As with any endeavor, intentionality is key. If you’ve learned a new keyboard shortcut, make a conscious effort for at least two weeks to employ it every time you need it. Soon, muscle memory will take over and you’ll think of it no more.¬†If you can’t recall the shortcut and¬†need¬†to revisit the resource from which you learned it, do so. It may take an extra two minutes now to look it up, but it will give you a good return, in time.

Trial & Error

If¬†you’re not up for revisiting your learning resource, start punching keys.¬†It’s probably sitting on the tip of your fingers somewhere. And, in the process of hunting for it, you’ll probably discover a few others shortcuts that you’d have never considered.¬†Chances are you can’t do much damage.¬†‚Ćė+Z¬†or CTRL+Z¬†will be your friend.

Grunt Work

Oftentimes, I encounter a task that requires a highly repeated action. What I will do in this situation, is to map out my actions, determine keyboard shortcuts for each, and plug away. If I can not touch my mouse or trackpad, I will complete the task in a fraction of the time it would have otherwise taken. Plus, it gives the benefit of building muscle memory for those few actions I am performing.

Next Steps

So, what say you? Will you join me in learning keyboard shortcuts? Get learning. Get doing. This week, pick one shortcut and add it to your repertoire. Here are a few to get the beginners started.

Mac Windows
Undo last action ‚Ćė+Z CTRL+Z
Select all ‚Ćė+A CTRL+A
Copy ‚Ćė+C CTRL+C
Cut ‚Ćė+X CTRL+X
Paste ‚Ćė+V CTRL+V

In future posts, I’ll introduce my favorite shortcuts. Stay tuned and thanks for reading!

Keyboard Shortcut ‚ÄĘ A combination of keystrokes used to accomplish a¬†task that would otherwise require multiple mouse actions.

I’ve always been a big fan of using keyboard shortcuts on my computer. To many, it may seem such a trivial skill; yet, it can have a profound impact on how you work and offer a significant boost to your productivity.

When I switched from Windows to Mac nearly five years ago, it took some¬†re-training of my fingers to learn new system shortcuts. I still regularly work to train my fingers in this way.¬†Why do¬†I spend time and effort on learning such a small thing? I know that every keyboard shortcut added to my¬†tool belt will give a good return. However, until recently, I didn’t know quite how good of a return¬†these little tools would give.

Adding bold text via mouse actions.

Adding bold text via keyboard shortcut.

Recently, I installed an application to track keyboard and mouse usage.¬†A couple weeks of monitoring revealed my preference for keyboard shortcuts. Shortcut actions clocked in at 60% usage and mouse actions at 40%. On average, I employ 1,800 keyboard shortcuts per day. Assuming each shortcut saves me one second of time (which I think a conservative estimate), I am¬†allowing 30 additional minutes of work per day, 2¬Ĺ hours per week, 10 hours per month, 3 weeks per year!

Crazy, huh? So,¬†are you ready to learn some keyboard shortcuts? Wondering where to begin? In my next post, I’ll lay out some tips, tricks, and tools for becoming a master of the keyboard shortcut. I will then begin sharing¬†what I have found to be some of the most useful keyboard shortcuts in¬†my tool belt.

Oftentimes, we need to connect via the web and hold meetings online. I have found appear.in to be the best way to connect individuals in this way as it doesn’t require downloading of special software, setting up an account, or remembering passwords. In order to connect with others, you need only visit the same website address. If you are concerned about security, you can rest assured that appear.in is among the most secure video chat service available. This is from their site:

All communication between your browser and appear.in is transmitted over an encrypted connection (SSL). Video and audio transmitted in the service is sent directly between the participants in a room and is encrypted (SRTP) with client generated encryption keys. In some cases, due to NAT/firewall restrictions, the encrypted data content will be relayed through our server. We take pride in collecting and storing as little user data as possible in the service. We believe that these properties make appear.in one of the most secure and eavesdropping-resilient video conferencing services around.

The one thing it does require, however, is that you access the service from a supported browser (Chrome, Firefox, or Opera). Here are some tips for video conferencing via appear.in:

Preparing for the Video Chat

  • To fully participate, you will need a computer ? equipped with camera and mic.
  • Streaming will require use of the Chrome, Firefox, or Opera browser (the technology utilized is not currently supported via IE or Safari). Download Chrome here. ‚¨áÔłŹ
  • Upon first connecting, you will need to give the browser access ? to your microphone and camera.
  • Secure headphones or earbuds ? for use during the video chat.

During the Video Chat

  • When not speaking (and connected with multiple individuals), mute your microphone ? by hovering over your image and clicking the mic icon.
  • Enlarge ‚ÜóÔłŹ any video stream by hovering over it and double-clicking.
  • Leave a chat room by closing the browser tab or clicking Leave. ?
  • ? If a room has been locked, you will be prompted to knock. Someone present in the room will need to grant you access.
  • Access text chat via the chat bubble ?. This is useful for troubleshooting and sharing links.

Ensuring an Optimal Connection

  • Keep your software up-to-date. ?
  • Always wear headphones or earbuds ? to eliminate audio feedback for other participants.
  • Select Video Quality: Low from the ‚öô Cam/Mic options.
  • ‚ĚĆ Close all browser windows and tabs that are not in use to increase bandwidth availability.
  • ‚ĚĆ Shut down other browsers, programs, and background processes that might be using the internet.
  • If a connection is still bad, you could go audio-only. Disable your camera ‚õĒÔłŹ by hovering over your image and clicking the camera icon.


  • If you encounter issues, try refreshing the webpage or restarting your browser.¬†?
  • Check that proper Camera, Microphone, and Sound Output are selected in the ‚öô Cam/Mic options.
  • Check that the system audio ? on your computer is not muted.
  • Check that the input for your system mic ? is enabled.
  • Restart your computer. ?ÔłŹ
  • Try a different browser.
  • Try a different computer.

One of the best things you can do to prepare for an online video chat is to familiarize yourself with the tool itself. Create a chat room at appear.in and poke around a bit.

[appear_in type=”private” private_room_button=”Privately Share & Discuss”]

Some weeks (or months) ago now, I went live¬†with Typewheel. My hope is that this may¬†serve as a space to highlight WordPress services I offer and share¬†insights into how we can best steward our stories online ‚Äď what tools are available and how can we best harness them? It has yet¬†to serve much purpose.

It’s entered my mind now and then to get back to it ‚Äď to share something here. Whether there is any audience reading this or not, the ambition exists. It’s not always wise to act on ambition, but sometimes you just have jump, trust, and explore. I think I’m at that point. I have heard it again and again and again ‚Ķ just start. Even this morning, I received a newsletter from John T. Meyer with some¬†ramblings on how “showing up is the hardest part.”¬†When looking to create something, get out of the way of yourself and make it happen. Even as I write this, thoughts are popping into my head ‚Äď vying for my time and attention. Get out of the way of yourself and go. And so, here I am, writing ‚Äď trying not to stop.

I’ve¬†yet to determine how best I should target these efforts. I want to blog and put something out there that could¬†benefit someone in some way. Yet, how does this shape itself? Should I be writing pieces for the novice web user, for the seasoned netizens, or for the fellow WordPress developer? I may have something to offer to each. I’ve also been wrestling to determine whether I ought to nail down a niche for those from¬†whom I might take on work. I mentioned the following ¬†in a conversation I had a Twitter a few weeks back when asked about my ideal client.

Newborn non-profits would probably top the list. I like to the see and encourage the passion that such folks have for realizing change. There is something so purposeful in these underground movements. Unfortunately, it can be difficult either to get folks to grasp the value in digital presence and resources or folks in such a position don’t have the money to put toward such online ventures.

I think it could also be fun to work with independent creatives ‚Äď authors, artists, musicians. They’ve often got such a unique message. To help give voice to that would be great.

Anyway, here is me starting. Next up … something more.

Type wheel (noun): a wheel made with raised characters on its periphery and used in some typewriters, printing telegraphs, and other printing devices

typewheelIt took me quite some time to settle on a name with which I might brand my personal services. Nothing seemed to sit well with me. At some point, knowing I would be working primarily with WordPress, I thought to explore parts of the typewriter and the printing press. Maybe there I could find a suitable name. Google led me to a diagram of a typewriter mentioning the type wheel. Perfect!

The type wheel serves as a go-between in early models of the typewriter. It is the part that responds to keystrokes, translating them into actual printed characters. When a typewriter key is tapped, the typewheel spins into action, positioning itself so that it might properly make a mark on paper. This is the same purpose I hope to serve through Typewheel. In providing design and development, I aim to remain responsive to those who have called upon my services, positioning myself to make a mark for them online. I want to translate stories to the digital realm.

Whether you are an artist, blogger, non-profit, or small business owner, I’ll come alongside you to design, develop, deploy, and maintain your WordPress site. Do you know of anyone needing¬†such services? I’d love for you to connect them with me.

Hello, world! I am finally putting my¬†design and web development skills toward¬†the possibility of profitability. For nearly 20¬†years I have been hacking together websites with little more than a text editor and a browser. Over the past four years I have accustomed myself to a myriad of new things ‚Äď local development, server management, jQuery, Ajax, version control, etc. I have dug into¬†WordPress and have loitered at the fringes of the wonderfully diverse, skilled, and generous community of WordPress developers, designers, and users.¬†I have devoted so much time into designing and coding sites and processes that gather dust. I have configured and re-configured both the Prayer League site and my own personal blog with tools that seemed to be a good idea, then proved to be inadequate. I have come to learn that investment in a quality product is key. Paying for the license of a premium plugin or theme is often worth the cost. I’ve settled on tools that most often align with WordPress standards and they serve me well.

It’s time to make these lessons work for the good of others ‚Äď maybe for the good of you. If you are in need of a designer or developer for your next project, I would be happy to connect with you. If you know of someone who might be looking to¬†start their own project online, mention me. Finally, if you’re interested in tips that might improve you as a storyteller online,¬†subscribe to this blog today or follow along @typewxyz on Twitter.