The Indie Web
The Indie Web is all about publishing content to your own website so you control the ownership and presentation of your data. Silos like Facebook, Twitter and Instagram should be used for syndication, but ideally one should not create content within these silos.
In the current state of the Internet and apps, this is not an easy task. Currently, I publish notes and articles on my own site, but I have yet to publish photos and checkins to my own site, I still use Instagram and Foursquare for these content types. Partly this is because of an interface problem, and partly because of a data/content-type problem.
Content Types
Below is a list of content types I would like to be publishing on my site and syndicating to the appropriate services.
- Notes - plaintext content.
- Photo - like what you would post to Instagram, a photo journal.
- Venue - a restaurant, business, etc. Often venues are associated with text or photos.
- Location - most likely at the city level.
- Event - a movie, conference, concert, etc.
- People - tag other people in posts (when a venue tag exists, implies you're there with someone)
Tags (aka hashtags) are often included in many of these posts, but are usually only posted in conjunction with some other content, you don't often see a tag posted in isolation. Often, tags are used when the service does not support including events, such as tweeting while at a conference with the conference's hashtag.
I usually only include a venue if the text or photo is relevant to the venue. For example, if I take a photo of Amber at the Lego store, I include the venue. But if I take a photo of a cool German bill, I won't include the venue because it's not relevant to the photo.
IndieWeb Posts
After a great conversation with @tantek tonight about the nature of a checkin, my current thinking is that I should just use my "notes" type for all of these short posts, whether or not they include a photo, venue, event, etc.
My "notes" will be a collection of all "short" content, basically a union of all content I post to Twitter, Instagram and Foursquare. These will all appear in the notes feed, and I may eventually break out feeds for each content type.
A post can have one or more pieces of information. Many existing services use this model:
- Foursquare: A checkin is a post with only a venue.
- Foursquare: A checkin with a shout is a post with a venue and text.
- Foursquare: When checking in to a movie theater, Foursquare will prompt you to select a movie as well. This is a post with a venue and an event.
- Twitter: A tweet is a post with only text.
- Twitter: A tweet with a @-mention is a post with text and a person.
- Instagram: A photo posted to Instagram with a caption is a post with a photo and text.
- Path: A post with a person is also possible on Path.
Path and Instagram are the only ones that let you include a person in the post. Foursquare automatically infers people based on the other person's checkin. I want to be able to create a post that includes only a person with no other content.
Path is the closest interface to being able to create content with all of these types. Below is a screenshot of creating a new post in Path. A post in Path can include a text note, people, and a venue.
IndieWeb Feeds
Assuming you as a follower of some of my content are interested in only a subset of this information, you should be able to subscribe to different feeds. My current list of feeds I may publish includes:
- Notes - posts that include some sort of text
- Photos - posts that include a photo
- Checkins - a feed of posts that include a venue
- Cities - a feed that includes a new post only when I arrive in a different city
- Events - a feed of posts that include an event
One important point is that the "cities" and "events" feeds should have a new entry only when I create a new piece of content with a different city or event than the previous piece of content.
For example, if I post a series of text updates annotated with the city "Portland", followed by one update with the city "San Francisco", the "cities" feed would have only two entries.
Privacy and Access Control
In many cases, it may make sense to restrict the visibility of one or more pieces of information to different groups.
A primary use case is that I may post a public text note like "Having a great time at the Appcelerator party", but I only want the "Jillian's" location tag to be visible to friends.
This quickly becomes a difficult UI challenge, since most UIs currently only have a preference for whether the post itself should be public or private. This involves adding a public/private/friends option to each attribute of a post.
APIs
As I have yet to implement these ideas on my own site, I don't have any concrete ideas for the APIs for these services. My inclination is to start with the MetaWeblog API, (the oldest posting API standard still in use) and add appropriate fields for these additional content types.
I will aggregate the posting APIs of Foursquare and Twitter (Instagram does not publish their posting API), and base parameters and parameter names off of those. This, however is a topic for another blog post!
Future Work and Exploration
- Collect information on current services' APIs for creating different types of content
- Define an API spec that could reasonably be adopted by clients like Wordpress, Path, Instagram, or open-source mobile apps
- Implement filtered feeds on my website that include posts with different content types
If you have any thoughts on this topic, I encourage you to blog about them referencing this post, or add to the IndieWebCamp wiki!