Instagram / Tiktok / Reels / Shorts - like RSS feeds

I am working on concepts to have independent, simple web servers providing RSS/Json-based protocols to give users the same viewing experience as Facebook/TikTok/YouTube/X/Reddit/Instagram. This is where we are:

  • The usual blog system is the equivalent of Facebook posts
  • Video podcasts are the equivalent to YouTube
  • Microblogs are the equivalent to X.

But where is the equivalent to Instagram and TikTok? Those swipable full-screen images or videos with text overlay?

I think all the data can already be in the feed today:

  • The enclosure/attachment would be the main image or video. The one that's in the background on Tiktok/Shorts
  • The post description would be the text on top of the video
  • Instagram posts have multiple images. In RSS, the MediaRSS extension can handle several images (alternatively, multiple enclosures could be sufficient, but they don't have per-image titles). In JSON Feeds, attachments have all we need. However, I am not aware of any RSS reader supporting more than one image.

So we have all the data. The reader just needs the right hints to render it correctly. Let's call them card-based feeds.

So two things are needed.

  1. a flag in the feed to make the RSS reader display it as a series of card-based posts
  2. a backward-compatible convention that lets existing readers render additional media.

The RSS / JSON Feed extension (proposed)

Giving the RSS Readers a hint to display a post as a card-based post is relatively simple with extensions.

For XML, we can use a simple new element in our own namespace to make an item as a card:

<card xmlns=‘https://sosocial.dev/' />

(side note: XML namespaces are wonderful and pretty much the only time I prefer XML over JSON)

JSON Feeds also support extensions, albeit in a less elegant way. We need to put something like this in our feed:

"_sosocial": {
    "about": "https://sosocial.dev/",
    "cards": true,
}

Backward-compatibility

Backward-compatibility for existing readers is very simple as long as the feed has only a single image/video per post: just do nothing. A typical reader will display the image/video at the top, and the text underneath. Not perfect, but it will work anywhere.

Multiple-images are more difficult. I would propose to duplicate all images but the first into HTML, marked with a special class. Card-supporting readers will filter them out. Existing readers will display them.

That basically means that every item with multiple images starts their HTML with a special div:

<div class="sosocial-alt-card">
  <img src="/img1"/>
  <hr/>
  <img src="/img2"/>
  <hr/>
  <img src="/img3"/>
</div>

Card-supporting RSS readers will not display 'sosocial-alt-card'. All others will show it.

P.S.: I bought the domain sosocial.dev when it was on sale for just $1. I was too lazy to check there is already a company of the same name. So I need a new domain...