JAMStack Social Network
Tags: jamstack, socialmedia, platform, decentralised
Published: 2020-08-28 16:12:41

# Intro

Hi DEV, this is my first post here. I wanted to simply share a conceptual idea about a social platform that would be fundamentally quite different from the social platforms we use today. Very different from the centralised social media sites we know such as facebook and instagram, and still quite different from the typical federated blockchain-based decentralised social networks that have been popping up in recent years. I'm thinking of something a bit more minimal in infrastructure and something based on JAMStack.

# The Inspiration

In my personal experience, the golden era of the internet was back when tumblr was the place to be and instagram was pretty much a niche for people in their 30s taking daily photos of their lunch plate. tumblr was the only platform worth scrolling your days away on for me and for many others. It was the site all the people you thought were cool used, and it's the only one I can think of that allowed you to be totally expressive online, no limitations, it felt so free. (I know this doesn't apply for everyone, but I'm sure many share the same memory). So much customisation was available to you and there was no one single way to make use of it. Be it a space for all your original content, or somewhere to express yourself via a curation of reposts that reflect your aesthetic, it didn't matter, it was all valid. tumblr was basically a platform for creating individual websites that can interact with each other through a central dashboard, and that I believe is what made it magical.

Upon reminiscing, I had an interesting thought that perhaps much of the functionality of a platform similar to this could achieved simply through the JAMstack approach. Maybe a certain framework for "social JAMstack" sites could lay out a protocol that allows content between all the sites to be shareable and interactive. No back-end needed, just a CMS instance for each site on the network.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1a8v9yenvd9gthhp7l96.png)

# The Concept

## Central Content Pool

All the site's content is statically served in JSON files in predictable locations. For example all posts can stored as such '/content/#.json', and chronologically paginated into groups of 100. This is the single source of truth for the website's persistent state. Content must have a kind of universal (and perhaps extendable) JSON archetype to follow that has basic meta-data to help identify and sort content, like an ID and a date.

Maybe sites can describe the structure of their content through "archetype" JSON files too. ('/content-archetypes/index.json').

## Reposts

Reposting is achieved through the CMS copying and referencing the JSON content of another site. For example, Site A wants to repost some content from Site B. It takes the pagination index and ID of the specified content from Site A's content pool '/content/#.json', and copies the reference to '/reposts/#.json'. Now when Site A is rendered, it may include rendering the reposted content in the appropriate locations in content streams or such. Viewers of the site will be able to see that the content has been reposted and will be able to navigate to the original source too. 

Reposting might be a little more tedious than it is on traditional centralised social networks. One idea is having the sites render some UI that generates a link that you can paste into your CMS instance to initiate a repost. Perhaps a browser extension could make this a swifter process. Or maybe even a centralised hub website that remembers your site's address. Upon clicking the repost button on Site B, a link in a new tab takes you to the hub site, which then automatically redirects you to your CMS and initiates a repost. 

## Communications 

You could even have comments or other similar public communications working this way too. However, because of this unique arrangement, comments could only be visible if the site you are commenting on "follows" you. The way this would work is, if two sites follow each other then a "connection" is established. When two sites have a connection, comments can be made on each other's content. 

The scenario plays out like so:
- Site A is rendering a piece of content (let's say it's almost identical to an instagram post).
- It has a connection with Site B.
- Therefore, upon rendering content, Site A looks in Site B's public communications directory for communications regarding Site A '[Site-B]/public-comms/site-a/#.json'.
- If it finds a comment that's targeted towards the piece of content that's being rendered, then the comment shall be rendered alongside the content.

## Site Discovery

For discovering and connecting with people on the network in ways other than through meeting in real life or through other already established platforms, I imagine there could be hubs specifically built for finding sites you might be looking for. Communities on these hubs could be set up, representing groups of common interest (like on reddit), or you could opt-in to list your geographical location on a hub so people in the local area can find you.

# Could This Be A Better Way?

## Convenience Comes At A Cost

This is quite a different approach to the idea of a social network compared to what we are currently used to. There are certainly some limitations to the experience, such as not having any way of receiving any real-time notifications of interactions, not being able to know if someone follows you without following them or going to their site first. However, I actually think this might be a healthier and more grounded system than what we have now. The hyper-connected instant communications we've become familiar with weren't really something we ever asked for, and they're what drives the short-circuited dopamine feedback loops that get us addicted to social media and leave us feeling dissatisfied. Convenience is something to be careful of, it's often attained through sacrificing something, often a loss of freedom. 

Through the fundamental ways in which it works, this platform would be less likely to create the environment of instant gratification, unhealthy life comparison and insecurity and compulsive engagement we see on existing platforms. Centralised social media platforms are run by for-profit organisations which prioritise excessive engagement (and therefore income) over the wellbeing of their users. This platform will be provided by an open-source framework (or multiple open-source frameworks) which ofcourse has no profit incentive, and therefore no incentive to get people addicted.

## What About Hosting? Not Everyone Can Do It Themselves.

Ofcourse, the site and CMS instance both need hosting. Luckily, static site's are often either very cheap or free to host (for example, GitHub Pages and Vercel are both free solutions). A JAMStack CMS is much less resource hungry than something like Wordpress. You can host one on a very lightweight hosting service, such as Heroku's free-tier plan. I envision this platform to be hosted on a diverse and healthy ecosystem of very affordable hosting services specifically set up for this social network, and then more technical users setting up their own hosting solutions on the cloud or their own servers. I would much rather pay £2 a month directly to cover the costs of my social media usage, than have my data exploited for marketing to pay it off and make the CEO a billionaire.

# Conclusion

This is quite a bold idea, but I simply feel that there is a void in the internet right now that needs filling by a more grass-roots and decentralised community. I think this would particularly benefit people in arts and music, people with small businesses and people who just want a liberated way to express themselves online.

I think it is at least worth a try at implementing, and I definitely plan on building a proof-of-concept framework at some point in the near future. Let me know if this has inspired you at all and you want to get involved somehow. Or if you have any questions or further ideas. :)