Graffar

Arround the end of 2018 I was on a hike and I noticed some old names carved into a tree. I didn’t love defacing nature, but I did like the idea that I could glimpse into the past and imagine what those names might have been doing years ago. With this experience in mind, I set out to build a digital version where no trees were harmed.

My plan was to build a node.js site hosted on AWS that would have basic social networking features; namely, posts, a feed, and likes. Posts were geotagged to their location and instead of having friends and seeing their posts, you’d see nearby posts. It was a fun challenge learning about SQL’s support for spatial queries like st_distance_sphere.

When creating a post, the idea was to pin a small note, thought, image, or video to that location. When viewing the nearby feed, you’d see a distance to the post and a real-time compass showing the direction to walk to get closer to the post’s location.

Over a month, I added more features to Graffar. My favorite was what I called Journeys. With Journeys you could string together a series of posts. When someone was near your first post, they could see the distance to your next post in your journey and if the post had an image, it was blurred based on your distance. Journeys were a fun way to do scavenger hunts in a playful way.

I was having fun learning about what a full version might look like, so I added user creation, a forgot password with email reset flow, a basic reporting flow that would put reported posts in my admin view, basic first time user flows, a heatmap of posts on a map, and a slew of other admin features to spoof location and see usage stats.

For some reason I’ve always loved eBay’s reputation star image system. Instead of showing a number next to the like count, I showed a series of emoji escalating in complexity. Posts with a few likes would have a ⭐️, a few more and it’d graduate to 🌟. Eventually culminating in an entire galaxy of stars 🌌.

As with any project, the devil is in the details. I never took the time to think through how social media sites need to send down generic data (like the post content and like count) and requester-specific data (like if the requester liked this post). Building an end-to-end site helped me realize the scope of all the auxiliary systems like moderation, unauthed browsing, user management, and administrative tools.

I wasn’t super happy with the frontend, it was utilitarian, but I was happy with the live compass arrow and the Journeys feature. Ultimately I shut down the site since it was only used by me and a few of my friends and family. Additionally, many people are privacy-concious and distrustful of deliberately tagging their content with a location that anyone else can view. I still really like the idea, even if only as a personal and private journal that is geotagged and shareable with friends.