John R. Sawvel

Fan of the open web

I enjoy making things, such as web apps, food, art, crafts, and essays.

I like to use computer programming languages, combined with other technologies to build tools. My projects require knowledge across the full stack. I strive to keep my apps simple and useful.

My favorite web programs to build and use include:

My goal is to make it easy to publish content to the web.


Information can also be found at these pages: and are hosted at on shared servers where each server hosts dozens of websites, owned by others. The sites use the Apache web server.

I’m using Amazon Web Services to manage I bought the domain name through AWS, and I used Route 53 to manage DNS. For the server, I created an EC2 instance. The site uses the Nginx web server.

All of my other projects are hosted on a Digital Ocean virtual server Droplet. For these sites, I also use the Nginx web server.

I use Linux servers at all three hosting providers.

Baby University is a non-profit that helps families in South Toledo prepare their children for school. I built its website, using a customized version of my Grebe app. I also use Grebe to manage my blog sites and Grebe uses a REST API. I created “client” versions in Node.js and Perl. Grebe uses MySQL, and optionally, the homepage stream of posts, and each post that was created and updated gets stored in Memcached to speed up access. reads XMl, JSON, and HTML files from the National Weather Service. The program also access JSON data from, using their simple API. My phone contains the Yo app. I receive notifications on my phone, regarding heavy precipitation, by combining data with the Yo API. My ForecastIO and Yo modules assist. jQuery mobile displays the info. is a private, web-based messaging app that I use mainly to communicate with family members. Soupmode uses SSL. Each year, I acquire a new free certificate from Soupmode was built with my Kinglet code, which uses a REST API. The app is part microblog, part e-mail, and part message board. Messages can be sent and received to users who have agreed to be on each others’ approved list. A user can reject another user’s request to be added to the approved list. Soupmode Help page.

Waxwing is an image uploadin website that offers a stream view of posts with tagging and searching. I wanted a simple way to upload photos from phone and desktop/laptop where I can then embed the photos within a blog post. Client-side JavaScript reduces the image size to a max of 640 pixels on either the width and/or the length, depending upon which one is the longest. The resolution is reduced some. The images are stored on the server’s file system. Other info related to the image post is stored in CouchDB. Hashtag search exists, using a view that’s added to CouchDB. Elasticsearch provides the string searching. I use Waxwing at Another Waxwing install is attached to Soupmode for private usage.

Scaup is a small, single-user web publishing app. Posts are displayed in a stream views by updated date. Long posts are automatically truncated for the stream views. When logged-in, a small text area box exists at the top of the site to allow fast posting of articles, notes, and links. This was my first attempt at using a NoSQL database. Scaup uses CouchDB. For string searches, it uses Elasticsearch. Post pages and the homepage are cached with Memcached. A test site exists at I use Scaup to store my crochet notes at

Veery is similar to Scaup. It’s a single-user web publishing app where the home page is a stream view of articles and notes, sorted by updated date. It also uses Memcached. Like some of my other projects, Veery uses a no-password login mechanism. Only an email address is submitted, and if it matches the author’s info stored on the server, then a login link is emailed. The author only needs to click the link to activate a login session. Instead of remembering yet another password, the author can focus on securing the email account. Veery also relies on CouchDB and Elasticsearch. But Veery differs from Scaup by containing an API. Veery client versions exist in Perl and NodeJS. Test sites: Perl client, Node.js client, and API endpoint.

Wren is a lightweight, web publishing app that does not use a database. It stores markup in plain text files, and it creates static HTML pages. At the moment, it’s a single-user tool. Wren is API-based, using REST and JSON. Most of my web publishing apps support Textile and Markdown/MultiMarkdown, but Wren only supports Markdown. From the summer of 2014 to May 2016, was powered by my Grebe code, but in May 2016, I converted the site to use Wren. I also use Wren at,, gopher://, and zwdqwr2p2xwkpbyv.onion. The .onion site runs on my home Linux computer, and I’m using it to test Tor. I created the gopher site to test the gopher protocol. To view the onion and gopher sites, special browser clients are required.

Article Preview is a quick way to test the format of single web pages. The test site exists, and here’s sample markup to try. Using a browser, markup is submitted and formatted html is returned. It supports Markdown, MultiMarkdown, Textile, and HTML. Numerous custom formatting commands exist too. It also contains a one-command API where JSON is submitted that contains the markup, and then JSON is returned, which contains the formatted post, along with other information, such as word count, reading time, etc. I created this simple tool to test my ramblings about article page design.

Parula is the name of the code that powers my small, local message board, but I do not have the code committed to GitHub. I bought the domain name in September 2001. In the fall of 2002, I started building the first version of TT, which was patterned after in look and functionality. TT launched in January 2003. In 2005, I created the Parula code, which was/is wiki-based. I wanted a wiki to run alongside the message board. Parula supports Textile. (I’ve been writing in Textile since 2005, but I also like Markdown.) I liked the Parula code better than the original TT code, and in August 2007, I switched the main site to be powered by Parula. Over the years since, I have continued to make small changes, but TT is still powered by the Parula code from 2005.

Last decade on the server, I created a few map mashups that combined data with Google maps. I built my first map mashup in 2005 that mapped Lucas County registered sex offenders, using data from the sheriff’s department. I maintained this mapping project for a few years, but it became too much of a legal hassle, even though I didn’t do anything wrong. I’ve disabled viewing of that map app. The others don’t display content anymore because of tech changes by Google.

JavaScript Editor - My Junco, Grebe, Scaup, Veery, and Wren web publishing apps have the option to use a simple, JavaScript-based “editor” for creating and updating posts. In 2013, I started with this person’s code It’s a live-preview editor that supports Textile, but didn’t like the flashing of the formatted text in the right window pane. I modified the original code a lot to support my needs. I removed the live-preview, since my web apps also support Markdown and my own custom commands. I prefer to let the server code do all of the formatting. My version accesses the API code in my apps. Using REST and JSON, the editor sends markup to the server, and it receives HTML. Other functions that I added include a single-screen view to create a larger writing area, keyboard shortcuts, and auto-save.

(My preferred writing environment is to use Textile or Markdown with my version of this JavaScript editor, along with one of my web publishing apps. For example, I created this page using Wren, Markdown, and the modified JavaScript editor.)




In the past, I worked as a computer systems administer and programmer at a market research company where I managed Unix and Vax/VMS systems, and I created utilities and web apps. I have older experience with programming languages, such as C, Java, TCL, shell, and DCL. My web projects used Microsoft and Oracle databases.

From late-May 2008 to mid-November 2012, I worked in the education area at the Black Swamp Bird Observatory, which is a tiny non-profit, located along Lake Erie about 30 minutes east of Toledo. I created and maintained the website for the Ohio Young Birders Club. I wrote content, and I edited content, created by students and adults. The site that I created has been replaced, and unfortunately, the content is gone too. Sample page from - Feb 2012 –(not mobile-friendly)–


I believe that each person should have at least one hobby that involves building or making something.

Other interests

My other interests include weather, especially winter weather, fishing, and birdwatching or observing nature.

I monitor changes in media and digital design. I’m interested in how information is created, consumed, and shared.


Since at least the beginning of 2014, I’ve become somewhat obsessed with simplifying the design for the single web page article, to make it load faster and to make it easier to read, especially on phones. Web page bloat has become a major irritant, in my opinion.

Here’s my manifesto for lightweight web pages. If this doesn’t qualify as a manifesto, then it’s a screed. It’s definitely a frustration for the way that some publishers treat the web.