Student: David Julia

Mentors: Ocean90 (Dominik Schilling), Andrew Nacin, Daryl Koopersmith


Hi everyone, I’m David Julia. I’m from Denver, Colorado (UTC/GMT -7 hours). I’m 21 years old and am currently studying Computer Science at Washington University in St. Louis. I’ve been coding for about 5 years now, longer than that if you count various random stuff that I picked up on my own- I started off being very interested in the hardware end of things and then my interests quickly did a 180 as soon as I realized that software is where the fun is!
In my free time I like to cook, and try different restaurants, work out and train Brazilian Jiujitsu/Mixed Martial Arts as much as possible- I’m a blue belt in Brazilian Jiujitsu and actively compete in Brazilian Jiujitsu and submission grappling tournaments. Also I eat a fairly strict paleo/primal diet and try to stick to the Primal laws for health. On a related note, I’m heavy into logic as the basis for my beliefs and dabble in philosophy in my spare time.

Project Description:

I will be working on implementing template versioning in WordPress by developing an interface for various VCSs in the form of a plugin as well as a custom post based “adapter plugin” that implements this interface. The interface is meant to be implemented in “adapter plugins” for any VCS desired including Git, Subversion, Mercurial, etc.


  1. UI Integrated with Theme Editor
    • Basic UI
      • Automatically commits changes to a file every time a user updates the file.
      • Basic revision viewer
    • Advanced Mode UI
      • Revision Viewer (see mockups)
      • User decides when to commit, can commit changes to multiple files at once.
      • Commit button, prompts for commit message etc.
      • Displays revision information
      • Commit-Status Display (have you committed since page was updated)
  2. API for VCS Adapter Plugins
    • VcsController Interface
      • commit()
        • Commit changes to all files
      • commit($file_name)
        • Commit the changes to the file with name $file_name
      • revert()
        • undo all local changes since last commit
      • revertTo($revision)
        • revert all files back to the state in the revision
      • revertTo($revision,$file_name)
        • revert the file with name $file_name back to the state it was in the given revision
      • getRevisions($num_past_revisions)
        • get the last X revisions, return all revisions if num_past_revisions is greater than the actual number of revisions
      • getRevisions()
        • return an array containing all the revisions
    • Revision Class
      • Revision($commit_message, $file_name_array)
      • getRevisionID()
        • returns an identifier for the revision- either a revision number or a hash
      • getCommitMessage()
      • getRevisionContent()
        • returns all of the files in the revision
      • getFileFromRevision($file_name)
      • returns the file with $file_name as it was in the revision
  3. Default Adapter Plugin
    • Database-Backed, uses custom posts
    • implements VcsController interface

Project Schedule:

Week 1

  • Setup dev environment
  • Determine schedule of milestones/deliverables with mentor
  • Explore code base
  • Learn about/play with custom posts
  • Research various VCSs and alter API design if needed

Week 2

  • Code interfaces, Revision class
  • Code a “dummy” adapter plugin to use in testing, get the UI to display the dummy values correctly

Week 3

  • Begin coding Default Adapter (custom-post backed)

Week 4

  • Finish coding default adapter
  • First deliverable ready

weeks 5

  • Add support for diffs to main plugin

week 6

  • Code UI for diffs in main plugin

week 7

  • Test/debug everything so far
  • Midterm eval

weeks 8 & 10

  • Test everything!
  • Refine UI/UX

weeks 11 & 12

  • Further testing and debugging
  • Priority #1: Document everything extensively!