It's been 8 years since DTLT started the Bluehost Experiment. Such a simple idea in retrospect: Give your instructional technologists their own sandbox commodity web hosting account and let them experiment with self-hosted open-source tools. Yet that alone continues to be a radical idea for those comfortable supporting and using the enterprise systems handed to them by their institution. Good enough prevails. But now we find ourselves daily reaping the fruit of our experiment in ways an institutional system could never deliver. UMW Blogs continues to find use across many disciplines with 8,400 sites created and over 10,000 users on the system. And Domain of One's Own, the true vision of a distributed means of empowering students and faculty to have their own space to build their digital identity, take ownership of their data, and to experiment wildly in their own sandbox, is a force of nature. Indeed I think we all at DTLT had a surreal moment sitting amongst our colleagues at a faculty assembly called this week by our provost Jonathan Levin to discuss the challenges and opportunities he sees for UMW after 8 months on the job. Levin took the opportunity to sing the praises of the Domain of One's Own project and the opportunity it affords students. He recognized that the work we're doing is receiving attention both locally, regionally and nationally. And he encouraged every faculty member at UMW to consider the power of the program within their own department and curriculum, noting that the real success was happening within courses and he himself was planning on getting his own domain alongside all of the wonderful faculty in our Domain of One's Own Faculty Initiative and experiment in these spaces (Credit to that program goes completely to Mary Kayler in the Center for Teaching, Excellence, and Innovation).
We began piloting the Domain of One's Own project on a small VPS last year with ~400 students and faculty before moving to a dedicated server this year as we rolled out to all incoming freshman. One challenge with the project has always been the inability to really see the activity across the server. The distributed nature and framework of Domain of One's Own is both a blessing and a curse when you want to find a way to build a community and aggregate the activity across the program in a meaningful way. Martha and I began experimenting on ways to pull in data by hooking into various things that happen on the server. At the inception of the pilot for the project I manually built a syndication site for all the signups (having no idea how to do that automatically) with the idea that we could get the feed from every website install and have a unified area to pull in posts from those sites. By the following Spring we cracked the nut of adding sites automatically using a hook in Installatron and writing to the database directly. It was a hack, but it seemed to be working. In the Fall of last year Martha began using the same hooks we had for writing feeds to write basic site information for every install to a custom Wordpress type. We also hooked into the signup function in WHMCS to create a Wordpress user that would be associated with the installs.
At this point we were still hacking around things. The majority of what we were doing was direct database writing (in some cases multiple database calls in succession. A seasoned Wordpress developer would likely tell you that is dangerous and we could already see issues we were having with data not being consistent. A tag wouldn't get written properly, a user wouldn't get mapped in FeedWordpress, things like that. Luckily this year I've been attending the school of Kin Lane getting my degree in API Evangelism and recognized how we could use APIs to take advantage of native Wordpress functions with external applications like Installatron. It was literally a like a lightbulb went off. Went the Domain Incubator event in Atlanta got rescheduled Martha and I found ourselves with an open schedule and dedicated it to sit down and program exactly what we wanted. The fruits of that labor are now live at http://community.umwdomains.com. Here's a breakdown of what's happening there:
When a user registers a domain with us, an API call is made to that Wordpress site (we used the JSON-API wrapper plugin to create API hooks for the various Wordpress functions we needed to call) that creates a user. It puts in their name, email, website URL, and domain registration date into the user profile. When they use Installatron to install an application as most of our users do, we create a new custom post type called Site that holds information about the course, instructor, semester, department, status (faculty, staff, or student), and software. Much of this information is driven by just two dropdowns in Installatron we add asking the student to identify if the install is a part of a course (the code for that is up on GitHub). This site information is tied back to the user we created from the WHMCS hook. All this data is viewable and filterable at the Directory page where you can search for specific sites or drill down by any of the associated tags.
When we write the site information, we also take the site URL, pass it through a feed finding function, and then send that information to FeedWordpress along with the tags for the course, department, and instructor. FeedWordpress is set to map those posts to the author and pull in all of the sites categories and tags as a custom taxonomy we call Syndicated Tags which means students can decide on a unified tag and get a common feed from this site of all their posts (Basically a distributed tags blog). The course, department, and instructor tags we use allow us to create programmatic feeds, for example a feed of all posts happening across all American Studies courses. We went one step further and made use of the Advanced Filters for FeedWordpress plugin to index every incoming post for images and text. The images get set as featured image for the post and the text that is indexed is checked against specific terms we look for to identify common themes. This gives us common feeds for things like Digital History, 3D Printing, and Gaming without the user even having to tag it! We'll be cleaning up all our code and getting it up on our GitHub account so that anyone else can use it (copy us!).
The end result is a community hub that provides a wide view of all of the activity happening across the server. While giving our students complete autonomy and control over their space, we've also found a way to create a unified network where the great work happening at UMW in their spaces can be seen and promoted. It's still very much a work in progress but we're extremely proud of what we've managed to accomplish so far.