Go try it out at http://geoparty.nimblecouchpotatoes.com! It should work just fine if you login on your box with one name and your phone with another.
It’s mostly functional 😉 It’s done using plain old setInterval ajax calls as opposed to WebSockets and since all of the command sending and message retrieval is done via REST endpoints, you could write your own external client for it.
Unfortunately I had to break some rules to get to this point (this took two fortnights), but I put it down to our trip to Iceland and London, which is another story altogether. There was already a usable frontend and backend in the first fortnight, the rest of the time was figuring out what other features to add, mostly frontendy work.
I remember talking to Scott H about the project early on and he mentioned that it sounded like there would be a significant amount of frontend work. It turned out that frontend work consumed the vast majority of the work involved, coming second only to time wasted flip flopping between ideas. Writing the backend using Go turned out to be relatively easy; it’s a simple language, you can get your head around its use of channels pretty quickly and the documentation is quite good.
Writing the frontend was a different matter altogether. You can spend hours just getting the bits and pieces aligned and working the way you want it to, but all too easily decide that some bit doesn’t quite work the way you want it to and just spend another few hours massaging it so the bits get aligned again. Doing web-based frontend work gives you a really quick feedback loop, but is consequently both a blessing and a curse; it’s easy to get lost “tidying up” or “improving” how a frontend looks when you are given free reign over how it should look. Looking at the final outcome, it would probably have taken alot less time to build if I knew what I was coming up with.
In terms of directions and ideas this could go, there’s a number of things I’d like to try if I worked on this in the future. The page itself is very general – it does room, private chat and sending of files. But it could be streamlined for specific use cases; I could imagine a “geoshare” site using the same backend that focused on sending files between people in the same location. Or richer interactions with external services; there is an unexposed API for registering webhooks that trigger on specific regular expressions, which is why you can say things like “weather in here” or “weather in sydney”. It could be hooked up to external services to provide IRC-style bot games like hangman or geo-aware wikipedia queries.
What do you think? Could this be turned into something bigger? Would love to hear your thoughts 🙂