FAQQLY
I interned at FAQQLY (a social networking startup) over summer 2006, originally to work on the interface, but would often work on the backend as well. (Small teams means everyone gets to touch almost everything.)
Over the course of the summer I worked on everything from drawing out prototypes on whiteboards with other interns to design the flow of pages, to writing new features and pushing to the server (and fixing it when it broke! no budget for a real IT guy…)
The most notable accomplishment was designing front to back the entire Shares section of the page. Users would post items they were willing to share, and their friends could request to borrow them. For business reasons we had to launch that feature by a certain date, so I volunteered to write it in a week so the other employees could concentrate on developing other parts of the site. After talking with the founder to understand what he was expecting, I sat down with a few other interns and drew out how I expected pages to be laid out on a whiteboard, as well as sketching on paper so they could comment on specific aspects of the page flow. Papers in hand I began coding, and finished everything in about 4 working days. The end product featured Amazon integration (to grab data and pictures of items), AJAX image upload, and everything a Web 2.0 site needs to call itself 2.0.
The founder also wanted to push content sharing (for network effects and positive blogger buzz). I researched potential API “styles” (REST, SOAP, XML-RPC, etc), and eventually settled on a REST API for simplicity. I wrote all of the code for it, and then handed off a description of the API to the project leader so we could publish a spec for users. I also implemented things such as RSS and Atom feeds and microformats to further the good internet citizen vibe.
It was quite a wild ride.
Unity in Christ
Unity in Christ is an umbrella group that serves as a way for the Berkeley Christian fellowships to communicate and work together. Most of my work with them has been design related, as they already have existing programmers on their board.
The first thing I was asked to do for them was to produce a replacement for their existing signup sheet. What they had at the time had been made for a particular event but was not sufficiently flexible for upcoming events. My implementation stored all data in flat files which were portable and allowed for multiple event signup forms to be online at once, and encrypted signup information. I wrote it in PHP, using the Savant template engine, with a custom written plugin that emulated the Formation form-generating API. (which I have made available)
Later in the year, a large inter-fellowship event needed a web presence (for publicity reasons). I was put in touch with the artist, who had done most of his work on paper, and had approximately two days to convert it into a web design and put together the HTML. Taste and See’s design was originally designed for a higher-resolution medium, so I moved around elements in order to allow for website navigation and sidebars, which are less prevalent in print media. Over the summer I was then asked to redesign the actual Unity in Christ. The design was also influenced by print media, in this case, my Bible.
History Bookshelf
In an attempt to make a profit on my unused hosting, I put together a simple website powered by a CMS I had written for an unrelated project, and put it online.
This is the only outward-facing site powered by the CMS. It was developed because I wanted to write a CMS where SSH and a terminal were the GUI and not the site itself. Internally all of the pages are stored as XML (really a subset of HTML, so if the PHP support dies for some unknown reason, the site will merely lose dynamic features and the templating, but the content will still be accessible) and are transformed, tweaked and stuffed into a template when called.
Otherwise this is a fairly simple site, I tried to make it as light on bandwidth as possible, weighing in at 20kb on initial pageload, and 1-5kB on subsequent pages. (I pay for disk space and bandwidth usage ala-carte, so it is in my best interest to let the often viewed pages be as small as possible.)
For this project I also wrote a PHP script that would generate the HTML for the outlines; most of the notes were originally written in Word, and were bulky on export. The script features several quick regexes to strip out some unwanted formatting (fonts and so on), and used the PHP DOM-XML extension to then load the file and further clean things up.
GameMethod.com
This was the largest projects I have ever undertaken. I joined the GameMethod.com staff as a coder patching new features into their existing CMS. After 3 months of on-and-off development, the site founder asked me to redesign and rebuild their entire site from the ground up. I found someone who would help with the design, and we began work.
The CMS was based off of Textpattern, but with the photo upload functionality rewritten so that photos are attached to galleries. Galleries were usually associated with either a specific game or an article, and an interface was written to allow editors to easily edit image metadata (what the image was about, descriptions, related articles, etc.) Additionally a number of modifications to the Textpattern internals to add features the original CMS had, and to further integrate the site contents with the site forums. The changes included multi-page articles, author profiles (which were not in Textpattern at the time), and a replacement of the Textpattern comment code with code that would work with the Invision Board. (All articles are forum threads, and comments are replies to those threads.)
I continued to work with GameMethod for the rest of the year, and in that time restructured the site as their coverage of video games expanded to cover more platforms and industry events.
Flash Cards
Before you look at the code and laugh at me, I would like to point out that I developed it before people were talking about AJAX. All I had to work with was Photoshop (for the buttons. I’m still kind of amazed I bothered to make buttons…) and iframes. Those were darker days then. Javascript powers most of the display logic, it queries the server and loads the data into the iframe, the contents of the iframe include Javascript code that then updates the whole system’s state. A poor-man’s AJAX. Deeper down, there is some PHP glue code that loads the right flash card file, parses it and sends individual cards back to the browser.
This was certainly much cooler than studying.