Shaun Gallagher's Web Programming Portfolio

For more information about Shaun Gallagher, visit his bio page.

Note: Some of the domains listed below have since expired. When possible, I've linked to a mirror, but it is not guaranteed to work.

FAB - The Facebook Apps Bundle (fab.pressbin.com)
Project description:
FAB includes ten powerful applications that let you super-charge your Facebook experience. You can also use FAB with your business or group's Facebook Page.

Among the apps are Unrestricted Status, which lets you bypass the typical 400-character limit on Facebook posts; Schedule Status Update, which lets you schedule a post to be published some time in the future; Click Track, which lets you see which friends click on the links you post to your Wall; and 'Like Notifications, which sends you an instant email alert when people "Like" your status.

About the project:
The ten apps included in FAB are among about five dozen Facebook apps I've created over the span of several years. I recently decided to select my most useful apps and compile them as a bundle.

Getting all the apps in one place required updates to the code of each individual app, including, in some cases, switching over from the legacy FBML format and REST API to the new Javascript SDK and Graph API. I also had to tweak the code to compartmentalize each app and resolve namespace conflicts.

FAB uses PHP, jQuery/Javascript, a fair amount of AJAX, some cURL, along with cron jobs and semi-complex database queries for email notification scripts.
Correlated (www.correlated.org)
Project description:
Correlated helps discover surprising correlations between seemingly unexpected things.

Each day, a survey question is posted, and at the end of the day, the responses are compared with responses from all of the previous days' surveys. The results with the strongest correlation are then posted.

About the project:
Correlated is powered by a pretty complicated MySQL query that measures how much various subgroups of survey respondents deviate from the total number of respondents in their answers to a particular poll question.

The front end involves a lot of Javascript/jQuery/AJAX, and various page elements are cached in PHP to minimize server load. The back end involves a lot of database stuff, as well as some cURL requests to handle various tasks related to e-mail registration.
Project description:
Through a FOIA request, we received a number of spreadsheets containing 2010 credit card spending for all school districts in the state. I build an interactive database that allows people to view spending by school district, and to drill down to individual transactions.

About the project:
The home page for this project uses a treemap to visualize spending by school district. Each individual district's page includes a sortable table listing all of their transactions during the year. Both the treemap and the sortable tables are built on Google's Visualization API.
DelawareOnline.com 2010 Election coverage
Project description:
DelawareOnline.com's election night coverage included a banner at the top of the page showing up-to-the-minute results of four statewide races.

We also linked to a page with up-to-the-minute results of all of the races.

About the project:
I created a script in PHP that used cURL to grab election results from the state's Department of Elections site. I then used regular expressions to grab the data I needed, and used a cron job to fire the script every minute and write the output to a static file.
Take Me Warmer (pressbin.com/takemewarmer)
Project description:
This fun little project was inspired by a New York friend's Facebook status update, posted on a particularly chilly day, asking how far she'd have to travel to enjoy T-shirt weather.

In just a couple of hours, I had whipped up Take Me Warmer, which allows a person to enter their ZIP code and a minimum temperature. It then shows them a map of cities that have a high temperature at least as high as their specified minimum, and sorts them according to distance.

About the project:
Take Me Warmer uses weather data from about 50 major U.S. cities, provided by the Weather Underground API. Geographic data is provided by the Google Maps API.

Site description:
At its core, Truyoo is an identity verification service. But that boiled-down description doesn't do Truyoo justice.

Truyoo gives Web site owners and administrators a FREE, simple, and highly effective way to publish user content without needing to worry about abusive users.

And Truyoo gives Web surfers a way to get special privileges and access exclusive content without having to pay for recurring subscriptions to each site.

About the project:
Truyoo has been through several versions, with the most recent version completed in 2009.

The site currently employs PHP's cURL functions to interact with other Web sites, but a planned redesign would create a REST-ful API.
Flying Standby (www.flying-standby.com)
Project description:
Flying Standby is a popular Phoenix, Ariz., band whose drummer is a former roommate of mine.

He asked me to quickly put together a basic site for the band.

About the project:
Because I quickly cobbled this site together, there are a lot of things about it that I don't like, but apparently, it was acceptable.

I also coded a bare-bones backend so that the band members could update the site themselves.
Constant Ads (www.constantads.com)
Site description:
Constant Ads offers online ads with no expiration dates. Unlike practically every other online advertising platform, there are no "pay per click" or "pay per impression" charges; you pay for your ad up front (starting at $5), and that's the only thing you ever have to pay, even if your ad gets a million or more clicks.

Constant Ads also gives site owners and administrators the chance to make cash by displaying an Ad Box on their site. Unlike other ad platforms, which generally pay about a penny per click, Constant Ads pays on commission — a minimum of $2.50 per sale.

About the project:
The concept for Constant Ads came to me about two years before I actually began designing the site.

It took about a week and a half to code.

There's plenty of AJAX involved — particularly on the homepage — and lots of complicated PHP and database stuff. Particularly difficult was creating the algorithm that generates which ads appear on which pages.

Note: This site is no longer active; a mirrored version remains, but it is not guaranteed to work.
Utopic Ads (www.utopicads.com)
Site description:
Plenty of Web sites offer free classified ads, but Utopic Ads is the first site to use Truyoo to weed out the scammers.

Utopic Ads was created after I noticed that the most popular classified ads site, CraigsList.org, was overrun with scammers.

In addition to its spammer prevention tools, Utopic Ads also offers cool features like e-mail cloaking, threaded messages, and user profiles.

About the project:
From start to finish, Utopic Ads took about a week to complete — and was basically just done in my spare time.

I used the basic template from an earlier project, Utopic.org, but the actual coding and site functionality was all new.

This project incorporates a fair amount of Javascript, but the effects are very subtle. For instance, if a user enters a headline for a classified ad that uses TOO MANY CAPITAL LETTERS, a small warning will pop up, encouraging them to format their headline correctly.

Note: This site is no longer active; a mirrored version remains, but it is not guaranteed to work.
Utopic.org (www.utopic.org)
Site description:
Utopic bills itself as "the only place for 100% civilized discussions of local headlines."

It sucks in the RSS feeds from about 100 newspapers across the country and harnesses the power of Truyoo to guarantee that discussions are troll-free.

About the project:
This was a relatively easy project — the most labor-intensive part was gathering the RSS data. But once that data was compiled, the site was ready to run without any administrative action. In fact, the site serves up somewhere in the range of 25,000 headlines a week.

Underneath the hood, there's some parsing of XML and some cURL interaction.

Note: This site is no longer active; a mirrored version remains, but it is not guaranteed to work.
ParishNetwork (www.parishnetwork.org)
Site description:
ParishNetwork is a free social networking service for Catholic parishes and parishioners.

Each parish and each diocese has its own "gathering page," where parishioners can post messages, participate in discussions, join groups, and seek out other members with similar interests.

ParishNetwork currently supports more than 13,500 parishes in 125 U.S. dioceses.

About the project:
ParishNetwork is very "AJAX" — it involves a lot of Javascript, particularly for the tabbed interface.

The site has some very robust features, including the ability to import a user's GMail or Yahoo Mail address books.
Catholics Amassed (www.catholicsamassed.com)
Site description:
Catholics Amassed is like a Techmeme for Catholic news and commentary.

Indeed, it is modeled heavily on Techmeme's "river" page — but with the addition of a special section that highlights links that multiple sources are talking about.

About the project:
The site grabs more than 50 RSS feeds several times an hour (some of which are filtered using Yahoo Pipes) and parses them, examining every hyperlink and comparing each to links from other sources.
RungJump (www.rungjump.com)
Site description:
I built RungJump in the early 2000s, when I was first starting out in my journalism career.

I was super curious about how people who had what I considered dream jobs got them. So, I built RungJump as a sort of marketplace for first-person career trajectory stories, initially only in the journalism industry but later in many other industries. People who had cool jobs could fill out a questionnaire, explaining how they got those jobs, and people who wanted access to that information could either purchase access to an individual career story, or a 30-day subscription to the site that gave them access to all of the site's content.

About the project:
RungJump was one of my first attempts at building a database-driven site with relatively complex filtering.

Note: This site is no longer active; a mirrored version remains, but it is not guaranteed to work.
Site description:
In the summer of 2009, I started thinking about all of the features I wished Facebook would implement.

Among them:

• the ability to block specific users from seeing a particular status update
• eliminating the character limit on status updates
• the ability to edit posts, rather than deleting them and starting over
• a "Dislike" button
• basic (and maybe not so basic) HTML markup
• the ability to hide certain posts from certain friends without blocking them entirely
• statistics about friends' activity, particularly which links they've clicked on

Mostly just for the challenge, I decided to create my own social networking site that was like Facebook, but had all of these features. I called it ioFeed — the "io" stood for information overload, because of the amount of data that users would have access to. And because there were no character limits to the posts, it could be used as a blog just as much as a social networking feed.

One clever feature I was particularly proud of was the ability to partially hide a friend's posts in your news feed, without blocking them entirely. It works by allowing each user to set the importance of each post — "low," "medium," or "high" — so you could basically say, "Only show me the posts that this Casual Acquaintance marks as of high importance. (The algorithm I created was able to prevent people from gaming the system by setting all of their posts to high importance.)

About the project:
Lots of AJAX. Lots of extremely complex database queries. Lots of usage statistics. Unfortunately, not lots of users.
CivicAssociation.net (www.civicassociation.net)
Site description:
CivicAssociation.net was a service targeted to neighborhood civic associations that gave them a place to host their sites and also allowed them to accept dues payments online, send out e-mail news alerts to members, and provide a members-only classified ads service.

I got the idea after finding out that my own neighborhood civic association was receiving dues payments from less than 30 percent of households, which threatened its ability to pay for snow removal services for our neighborhood streets. Problem is, in my state, civic association membership is voluntary, so I started brainstorming ways to help the civic association increase the number of dues-paying households.

One way is to make it easy — that's where the online payment system came in. Another way is to use guilt. So, I envisioned having a publicly accessible Google Map showing which households had paid their dues (and, by process of elimination, which had not).

Over a period of about a week, I cobbled together the site using elements from previous projects I had worked on, and I then presented the idea to the civic association board. Despite some initial interest, the project never took off.

About the project:
CivicAssociation.net made use of the Google Maps API for mapping and used PayPal for online payment processing.

Note: This site is no longer active; a mirrored version remains, but it is not guaranteed to work.
The Vatican, Obama-fied (pressbin.com/vatican)
Site description:
"The Vatican, Obama-fied" is an envisioning of what the Vatican's website might look like if it took a page from the Obama administration.

The site essentially presents content from the Vatican's site, in the style of the WhiteHouse.gov site.

About the project:
I essentially grabbed every single file needed to recreate the WhiteHouse.gov homepage, then tweaked the look and populated the site with content from the Vatican's site.
Piermont Staging (www.piermontstaging.com)
Project description:
I put this basic small-business site together for a friend of a friend who runs a home staging business.

There are few bells or whistles, but that was fine with the client.

"Mark all as read" button for GMail (coding.pressbin.com)
Project description:
This Greasemonkey script, also available as a Firefox add-on, adds a one-click "Mark all as read" button to GMail.

About the project:
GMail is notoriously hard to hack. It's a jumble of minified Javascript and multiple frames, and few elements have IDs. But eventually, I managed to figure out how to add a "Mark all as read" button — and actually make it work.
Traffic Dodger (demo: 617-284-5814)
Application description:
Traffic Dodger is an automated phone line developed for The (Wilmington, Del.) News Journal.

Callers say the name of the road they're on, and Traffic Dodger tells them the current conditions on that roadway. If no delays have been reported, the caller can report a delay by following a couple of simple audio prompts. That information is then e-mailed to the newsroom staff for confirmation and follow-up.

The application is also built to incorporate a brief advertisement, targeted to the specific roadway the caller is on.

About the project:
Traffic Dodger uses a combination of PHP, VoiceXML, and MySQL.

It is currently still considered "in development."
Custom File/Content Management System (no demo available)
Application description:
I created a custom Web-based file and content management system that allows me to access and edit remote files without the need for an FTP client.

The FMS can accept practically any UNIX command, and the CMS supports viewing text files in "code view" — where each line is numbered and syntax highlighting is applied.

About the project:
Designed from scratch and modeled after a similar FMS/CMS in cPanel, this is the interface in which I create most of my other Web projects.
Soulmate Seeker (pressbin.com/soulmate) and Homeland Reassigner (pressbin.com/homeland)
Application description:
These two Web sites use statistically accurate world population data to demonstrate various principles.

The Soulmate Seeker crunches the population data to show how unlikely it is that you and your soulmate live in the same country, or even the same continent! (This, of course, assumes that each person has only one soulmate.)

The Homeland Reassigner highlights the disparity of living conditions around the world and gives users a chance to see how their lives might have turned out if they had been born somewhere else.

About the project:
These applications use population data from the CIA World Factbook. Each country in the world is weighted by its population, so your soulmate is much more likely to reside in China (population: 1.3 billion) than in Vatican City (population: less than 1,000).
Custom webmail system (no demo available)
Application description:
I used PHP's IMAP functions to create a custom webmail system that is modeled after Google's GMail.

Among the special features are the ability to easily view and parse raw header information and custom reply settings based on the "to" or "from" e-mail address.
About the project:
This was actually one of the more difficult projects I've tackled, because the combination of PHP and IMAP can get very complex.

It took me several weeks of off-and-on work to get things just right.
Other projects
An assortment of other projects are described on my Coding Blog.