In fact, we built digital gardens for everyone on ATProto! Yours already existsâitâs just waiting for you to plant something. Check out your corner of the internet here.
Digital gardening is about curating and contextualizing ideas on your own personal site. There are already ATProto apps for posting short-form thoughts, for writing longer pieces, for posting photos and videos, for streaming and for sharing events; in your garden, you can post new content and also repost the best of what youâve published elsewhere.
The vision of spores.garden is a lightly social network of personal websites which let people express themselves as individuals. Thoughts in these gardens are planted, curated, and admired by a network of fellow humans, not by an algorithm.
The more we dug into this project, the more respect we gained for ATProto; it gave us a lot more to think about than a traditional web project. It was easy enough to build a site generator, but we got to take advantage of some of ATProtoâs unique properties to add some really fun features to spores.garden: a unique visual identity for each garden, the ability to pull in data from other apps, and semi-social experiences like linking to other gardens or following a trail of breadcrumbs to see what other users are looking at.
Discover your unique garden
We didnât want to build Wordpress-on-ATproto. Every instance of spores.garden will have a unique colour palette, flower identicon, and isoline background generated specifically for you.
You can change your handle on Bluesky, you canât change your flower or theme on spores.garden.
If you signed up using Blueskyâs default settings, your internet handle ends in .bsky.social, but you might see other people whose handles are something else (like meâIâm lexa.fyi and Iâm a member of hypha.coop)! Those handles are names the user chooses, but your real identity on ATProto is hiding underneath that human-readable handle, as a âdecentralized identifierâ or âDIDâ which was generated when you first joined the protocol.
To generate your theme, we send that underlying DID through a hashing algorithm that deterministically generates your colour palette, flower, and isoline background. No two themes will be the same, and a given DID will always generate the same theme.
Plant your seeds by hand
Aside from generating the visual identity for a site, gardens are distinctly not algorithmic. Digital gardening is supposed to be manual, because selecting and curating meaningful content is a way of reclaiming your humanity on the web.
Everything you see in this network of personal sites was planted there by a human, with intention.
You can write new stuff on a garden, but you can also repost the best things youâve posted elsewhere in the Atmosphere, like on Bluesky or Leaflet. Instead of each application having a database with all of its app-specific data, each ATProto user has a personal data repository hosted on a personal data server (PDS). That repository is a collection of all the data they own in the Atmosphere. Your personal repository is, obviously, personal. You and the applications you authorize are the only ones who can add or edit data records to the repository on your PDS, but anyone can view the contents.
That property makes it very easy to set up a new application because there is so much underlying data from each user already availableâthereâs no âcold startâ issue where users are unmotivated to join because theyâll need to build up a presence from scratch again. As soon as you claim your garden, youâre immediately able to pull in your own data and explore other gardens via the most recently updated gardens on the homepage.
Follow the flowers
The homepage is, however, the most boring way to find new gardens. Instead of an endless scroll of hyperlinks, we chose to use peopleâs unique flowers across the entire application as signposts leading you back to a garden.
When you visit someoneâs garden, you can collect their flower and have it show up on your site as a way of affiliating yourself with that person. Early blogs sometimes used a similar webring concept to let viewers easily navigate throughout a network of similar websites.
You can also plant your own flower in someone elseâs garden as a sign that you have been there. These planted flowers act like a digital guestbook, with new visitors able to see who has been there before and follow the links back to those other gardens.
These properties are both enabled by a service called Constellation, provided by a fellow Toronto-based ATProto nerd, Phil. Constellation takes advantage of ATProto records being publicly accessible and creates user-specific âbacklinksâ from the available information.
Imagine that Aspen follows Birch on Twitter/X. A âfollowâ can be represented as a directional relationship between the Aspen entity and the Birch entity. Displaying a list of Birchâs followers is as simple as querying for all directional connections between Birch and any other entity. Theyâre probably stored in a single table in a single database.
Now imagine that Aspen follows Birch on Bluesky, where data is stored in one database for each person. There is no table to query for a list of Birchâs followers because that information is scattered across all his followersâ PDSs.
Instead, a âfollowâ creates a record in Aspenâs PDS saying âAspen follows Birchâ. Birchâs follower list can be shown to him via Constellation (or a similar indexer) scanning the âfirehoseâ (a stream of all data being created, edited, or deleted in ATProto) and keeping track of every follow record that mentions Birch. Those records are not saved in Birchâs PDS, but theyâre formatted and presented as relevant information to him.
Having backlinks available solves what would otherwise be a really challenging problemâhow do we accommodate social behaviour when everyoneâs data is completely siloed? Publicly accessible repositories indexed by a service like Constellation makes ATProto into something inherently social even when used for something ostensibly individual, like a personal website.
Anytime you see a flower, itâs leading you back to someoneâs garden via Constellation backlinks.
Search for spores hiding in plain sight
Collecting and planting flowers lead to a very social and intentional way of navigating a network of gardens. By collecting a flower, youâre showcasing a link to someone elseâs work; by planting your own flower, youâre saying âheyâcome check out my stuff too!â
There is one additional way to explore in spores.garden, which is by finding, following, and stealing a special spore. Using the same deterministic algorithm that generates a theme from a userâs DID, we also encoded the chance to receive a data record called a special spore. Like the unique flower, a given DID will always either generate or not generate a special sporeâyou canât manually create or delete one for yourself any more than you could modify the way your flower looks. Whether or not you generate a special spore is an inherent property of your DID when put through our hashing algorithm.
If Aspen generates a spore, her PDS contains the original special spore record and the spore is initially displayed in her garden. That spore is always âAspenâs sporeâ because it was generated by her DID. Roughly 1 out of every 10 DIDs will generate a spore.
When Birch visits Aspenâs garden, he can steal it and add a record to his PDS that says âI stole Aspenâs spore on February 10 at 10 AMâ. Later, if Cedar sees the spore on Birchâs garden, they can steal it and add a record to their own PDS that says âI stole Aspenâs spore on February 11 at 10 AMâ.
Anyone who looks at the spore in Cedarâs garden can see where the spore has been because Cedarâs record contains a reference to Aspenâs DID, which then uses backlinks to produce a timestamp-ordered list of all other users who have interacted with Aspenâs spore.
The game of stealing the spore is a fun, semi-entropic way to discover new gardens: holding a spore doesnât imply that youâre affiliated with the original owner, nor anyone else who has previously held the spore. But honestly, we built it because itâs cool.
Itâs both a social game that imitates a piece of data travelling through a network, and a record whose existence you canât spoof even though ATProto doesnât have a centralized authority or a decentralized network of peers validating whatâs happening in the network. The more competitive readers may be already theorizing that itâs possible to write a script to constantly steal all of the spores in existence and youâre not wrong; itâs not a bullet-proof system. ButâŠitâs kind of like emptying out a Little Free Library in your neighbourhood without ever intending to read the books. Spores are meant to travel!
Let the garden grow!
In a world increasingly run by algorithms and monolithic media companies, we wanted to recreate the feeling of the web being made up of small, personal, interconnected things rather than massive platforms. Spores is our way of bringing that into that world.
We chose to build it on ATProto because its features made it a great choice for the experience we wanted to createâplayful, curated, human. From being able to use someoneâs DID as the basis for a fun visual identity to the creative social affordances of backlinks enabled by Constellation; itâs a rich ecosystem with a lot of potential that weâre excited to keep exploring. Weâve even added some documentation for fellow experienced gardeners to add support for their own ATproto projects.
We canât wait to see what you grow! Claim your flower here.