Who is Casey, who works on a project or has worked on a project called Post Marks?
I contributed a little bit to Post Marks and it's exciting to have you in Europe for the
first time as well I understand.
So just happy in my cup.
If you're coming in then please do join us and come in and find a seat and make quiet for our speaker.
Thank you very much.
I think you are mute.
No, I should have told you.
All right.
Hello everybody.
My name is Casey Kolderup.
I'm really happy to be here today.
It's my first time in Europe so this has been an exciting trip for me.
It's also just great to see so many cool projects here and so many questions that I'm going to ask in this presentation.
Have been answered by many of you have talked today.
So thank you for giving me so many new ideas already.
I'm here to talk about non-microblogging software.
Design on activity pub and I'll talk about the inherent trade-offs of the interoperability.
But first, I'll talk a little bit about myself.
I'm Casey, like I said, I live in Portland, Oregon in the United States.
I'm a developer of a small Fediverse app called Post Marks.
That you might have heard of, but for the purposes of this talk, I need to go back a little bit further and my time on the internet.
I was introduced to the open web as an adolescent in the early 90s.
GTE was my first ISP.
I watched the birth of blogging and the explosion of opportunity that was web 2.0 as a teenager.
I learned how to code as I can make my own websites.
And then the 2000s I went to Purdue University to get a bachelor's degree in computer science.
I treated it as a trade school even though it was university.
I really wanted to get out there and just learn what I needed to know to build the web because that was what I wanted to do.
Now in the 2020s, I'm an engineer who works on glitch.
It's a website that aims to make it possible for everyone to build the web.
It's a platform where people who want to learn how to make websites and other apps that live on the open web,
whether that means going in and changing a few lines of text on a web page and some colors in a CSS file,
or building your own web socket based web XR and multiplayer game from scratch.
Whatever you make will provide hosting for it and a community where you can share what you've built.
In my free time, I'm on their hobbies.
I've worked with APIs like Twitter, Discord, and Macedon to build generative bots that make art or jokes.
I've built CMS's to host blog posts and create a variety that I've done.
My first ever PHP app built in 2001 was a link blog,
because I was obsessed with those cocky.org and meme pools in my first favorite websites.
As a user, I spent countless hours in IRC, not technically the web, but you know, it's related.
Slack and Discord channels on PHP VV forums.
I'm micro blogging networks like Twitter and Macedon.
On unique platforms like Google reader and co-host, RIP to Eggbug.
Many sites that I hear myself and others used to explain how we spent time on the web.
But one thing I think that goes too often unsaid is how much time I am.
My friends have spent exploring the fullness of what happens off of those platforms.
Following hyperlinks in a web browser and seeing the full potential of the technologies that give us this world online.
So it's been good for me to remember the thing I loved most about the web is the breadth of experiences that are enabled.
This is Archive Stumbler, a project I built last year, which lets you browse Archive.org collections randomly, which Archive.org actually doesn't support.
There's no random feature on it, which is just really fun way to kind of get a little serendipity and see what else is out on the various collections available there.
I've certainly read my fair share of blogs, dating back to meeting someone and reading their entire live journal and chronological order.
The web makes it possible to host multimedia interactive games and weird exploreable websites that unfolded unexpected ways as you search their corners for secrets.
That variety when it's present makes being online feel to me vital, diverse, exciting and engaging.
We're able to find not just a variety of content, but a variety of experiences.
What I'm here to talk about today is the result of reflecting on that breadth of design and experience the web can provide.
In the face of what I've realized I spent so much of my free time recently doing and what the project that brought me here has missed out on taking part.
The end of 2023, I released the first versions of a platform I called Postmarks.
Postmarks is a social bookmarking platform that lives on the open web.
You probably know what a bookmark is, but just for the sake of completeness, we're talking about as a URL has some metadata associated with it.
Let's you attach excerpts of that site or describe the contents and then usually categorize it in relation to other bookmarks that you have.
By default, bookmarks you create or visible to anyone looking at your postmark site on the web.
But those bookmarks are also broadcast to other introduces servers via the activity pub protocol, which makes postmarks not just a social bookmarking app, but a federally enabled bookmarking app.
Social bookmarking is hardly a new idea.
I built it intentionally with many similarities to the first social bookmarking app on the web delicious.
Yeah, it deserves it.
Delicious was a tool that grew out of a group link plug-in site.
I was, as I said, obsessed with called Mean Pool.
It helped its founder Joshua Shactor, organized URLs that he wanted to store and categorize.
Delicious may not have been a platform that became a household name, especially with that weird domain name.
But as an example, if it's influenced the way that we used the word tag to refer to keyword metadata, that actually comes from delicious.
I think a lot of people don't realize.
I was a delicious user. It was really cool as someone who was in college at the time and was using more than one computer for the first time, which like, now we don't even think about.
But back then it was like so exciting and go to the computer lab and have my bookmarks there.
Go back to my door and have them at home.
Knowing other people on the site and browsing their tags and browsing their bookmarks, gave it kind of a social component.
But for me, it was first and foremost a kind of a form of external memory.
I was sinking things to the cloud before we even talked about things that way.
Delicious had a sort of tortured history as it got acquired and resold multiple times in different companies.
In 2009, another developer looked at that and kind of had the classic, I could make that thought.
And did, and the result was called pinboard.
A very similar website, but one that came with slow growth business ideals that seemed to promise it would stay available as a sustainable business for a long time.
And it still available online today.
I moved to pinboard shortly after it's launched and I used it happily for years.
When it comes to the Fediverse, I've used mass and on both publicly and privately since 2017 and a lot of different forms.
I first tried developing the activity pub protocol in 2022.
Thanks to Jerry's, because he needs activity pub service tutorial.
And the great information available at activity pub.rocks, which is a great site if you haven't seen it.
I ended up making a demo of what would eventually become post marks just before Christmas 2022.
I kept hacking on it in my free time throughout the month of the fall.
And eventually shared news that I was released in an initial version just recently in September 2023, which I guess is over year ago now.
The response was bigger than I was expecting.
And then the months that followed I took a number of great contributions from friends and new acquaintances that fixed activity pub related bugs, added full tech search.
All kinds of other cool stuff.
I think a few here in the room right now.
Thank you very much.
And Andy, I know, has helped with a lot of the sort of governance and code of conduct stuff, which I really appreciate.
Unlike many software projects that I've worked on, my goals for post marks are actually really concrete.
I know what I want its end state to look like.
I want to get to that point and kind of end it and then make it available to fork and give it a new life from there.
In 2025, I'm hoping to finish off what I see is that original vision for the project so that we can decide what to do next.
When I sat down to start post marks, I gave myself three core ideas that I decided right away where the most important things to the project.
Things that would define what it kept it useful to the kind of user I had in mind, what would keep me moving forward and developing it.
And we'll get people including me excited about using it over any other bookmarking platform.
After going over the list, I'll explain each one of them in more detail and the impacts that one in particular had on the project as a whole.
The first is actually single user instances.
Unlike most activity pop apps, post marks is a platform where a given instance or server is home to one actor or user.
That is to say if you want to use post marks, you're going to set it up for yourself or find someone who will set it up just for you.
The setup process is actually pretty simple, though.
And using the glitch platform, there are literally four required steps.
You take two random values and generate them.
You put them into a .env file.
You put a user name into a JSON file and then you rename a file to signal to the server that everything is ready to go and you're ready to launch the server.
With Litch, you can remix the base project.
It's available at postmarks.litch.me.
And you can do all that in your web browser using the glitch IDE in less than five minutes.
We'll also talk about how I decided while working on postmarks that, despite the fact that for career reasons I've learned how to make single page web applications with fancy JavaScript features and all kinds of slick auto updating things,
I was going to use what I considered old techniques for postmarks.
This was less of a principal decision than it was a practical one, but either way I'm still convinced it was the right choice.
The third principle is interoperability with the developers.
It occurred to me that since I was using activity pub, I should probably do that.
It would be possible if you know anything about activity pub design to build something on a security pub in a way that mass it on would never even see it.
You could follow an actor from them to their followers, actors available.
But then the activity the actor is performing would never be available to mass it on via the notes that it kind of knows how to understand.
Interop the seem to have a number of advantages.
In a way, and in a way, and in the thing that kept development working the fastest for me.
But it's also led to some of the most difficult challenges I've faced in designing postmarks.
But first, let's go back to single user instances.
If you have any opinions about mass it on, some of them are probably related to its decentralized model and the concept of instances.
On mass it on in software that works activity pub, instances are most easily represented by the domain name that makes up the second half of your username.
But the actual impact goes further than that, which a lot of people don't understand when they're first signing up.
And instances are collection of users who store their data on the same server, who abide some set of rules, and who are subject to administration by the instances leadership.
And who in most cases are seen as belonging to a group of some kind, whether it's a clearly stated entity group, a shared interest,
or just even sort of a reputation or attitude about how they behave on the Fediverse.
Instances are home to communities.
Like most communities, instances experience to growth and decay, they go through good times and bad.
They're also subject to political action from other instances and communities they're in contact with.
Sometimes, these situations where instances shut down or get isolated from parts of the Fediverse, the way most activity pubs apps work right now,
these events could have real impacts on individual people who might never have seen it coming.
On mass it on today, moving your network is accomplishable, but moving your content is not.
Some of this is due to difficulties that are specific to mass it on, but some of it's due activity pub itself.
This isn't for lack of care.
There are efforts to fix this problem.
I look forward to how that's going to evolve over time, but it's still definitely something that's being worked on.
Web-based bookmarking, while having a social component dating back all the way to delicious,
has first and foremost, as I said, been an activity I do for myself.
In my private bookmarking account that I used as an authoritative source, I have about 20,000 bookmarks that I've accumulated in my grade over 20 years,
as I've moved from platform to platform.
I use my recent bookmarks every day to track things I want to read across devices with a mom like desktop,
and I want to read on my phone later, and I search my full archive, not just daily, but pretty close.
If I want to have a place to bookmark, bookmarks, I need to know that's not going anywhere,
and I suspect most people who would install their own self-hosted bookmarking software probably feel the same way.
While mass it on and many other popular activity pub platforms are very reasonably designed to be large,
heavy weight or medium weight platforms with live databases and search indexes and things that help them scale to hundreds and thousands of users,
there have been some projects that go to social that focus on a minimal footprint for a small number of users.
With postmarks, I took that as inspiration, and I took it as step further.
One instance has one user.
So while this decision does have its own complications and political kind of ideals that have to be managed around the Fedivers as a whole,
it has been a job for me in keeping the project simple, manageable, and adding a constraint that says that the software I'm designing
has to balance the utility it provides to its own user with the complication of its install and hosting process,
instead of amortizing that across a large community.
Moving on, we can go to the old web architecture that I referred to earlier.
I don't expect this principle to be too controversial, and I'd event like Phasetem, although elsewhere in the world that I sometimes get more pushback on this.
But when I decided to start this project, I made a web server, it generates HTML on the server side.
I know this is crazy, delivers that to the browser, accepts an HTTP request via HTML forms,
and uses minimal JavaScript on the front end to improve the user experience just a little bit.
The app has predictable readable URLs that are motivated user could build themselves when typing in the browser,
which is something that I still do every day, or when trying to make scripts or tools that would link to query their bookmarks.
I use SQL light databases, persisted to disk, to store everything.
There's no extra services you have to set up for in PASAS provider for.
And yes, I promise I'm old enough to see a certain irony I'm referring to in Node.js app as part of the old web, but it's how time goes.
All of this was impart related to my own tendencies and philosophies of software architecture,
but it was mostly to force myself to stay moving forward on the actual functionality of the project.
I'm not a UX expert, and will I know some modern front end techniques that make use of these heavy client-side JavaScript things?
I knew I risk it and bogged down and learning new patterns and adding new dependencies.
Sticking with things I already knew how to do and minimizing the dependencies of the software,
made sure I had the most time to learn about activity pub and keep the project rolling as I was kind of working on it.
The general philosophy of keeping things simple, also maybe they'll build postmarks on glitch,
which helped avoid a common problem when developing server-side software for activity pub.
To make sure that talks to other activity pub servers, you need to host it somewhere that has a publicly addressable URL,
so that you can do two-way communication.
There are ways to do this while developing locally on your computer, if you have like a full-on reverse proxy,
pointing to a static IP that you've provisioned with your ISP or you're using a tool like DINDNS or NGRAC.
But by developing on glitch, I can spin up any number of copies of my app across any number of subdomain host names essentially instantly.
Glitch doesn't offer the ability to build a network of services like a postgres database and a last-exert cluster out of the box,
so sticking to configuration and static files and a database that's persisted the disk made it easy to host,
and which is remix featurement I could fork the project and pursue other ideas while looking at a live working copy of the previous checkpoint of my work,
and have that all happen at the same time.
The last principle was a sense of desire to interoperate with NASID on and it's micro-blogging peers.
There were a number of motivations for this from the start, to ease development and testing, to improve demonstration and onboarding,
and ultimately to rebuild the feature of delicious and pinboard, but to me was never my most used feature, but seemed like it had some interesting potential for postmarks.
The testing and development benefits came pretty much from the very first demo that I gave to my co-workers in 2022.
With the way I had written the first prototype, an instance was capable of registering that other fetavers actors had followed it,
and broadcasting out activity to them.
But I didn't write any UI or protocol level support for following anyone else within postmarks.
I didn't need to, I could test my instance out by following it from my NASID on account,
seeing the post shop my timeline,
replying to those from NASID on to add comments and so forth.
I didn't add the ability to follow other users on postmarks until the day after I announced the project in 2023,
because I hadn't really hit me yet what I wanted to do with that or why I would even want that.
NASID on, though, proved a very useful smoke testing tool.
I was just constantly refreshing on NASID on timeline and just seeing how posts broke in various ways.
After launching also, in talking to members of the development community, I discovered other tools that would be really super beneficial over time.
FettiDB gave me a lot of good information about other people that were actually running postmarks.
I could see that it was actually happening out there and see who was installing new versions.
And in the months that followed the amazing Fetti test project launched and they were really gracious enough to include postmarks is one of the pieces of software that they tested against.
As a benchmark, that resulted, they have a better idea of how many, how well we comply with the activity postback, which.
I had a lot of fears about, but it turned out that we did, we do it pretty okay with it.
We just still places to go with it for sure, but, you know, we're doing all right.
The first use of actually adding the ability within postmarks to follow people turned out to be bringing back an old feature of delicious.
It's called the network page and it was kind of a photo feed that existed on delicious before Facebook had a news feed or even friend feed existed.
Postmarks network page.
Or sorry, the delicious network page would show you basically a feed of all the bookmarks people that you know were bookmarking chronological order sort of like a social network.
Once postmarks with the network page, it'll show you other postmarks users any bookmarks they're adding.
But also let you follow users on sites like Masadon see URLs that they're sharing within their posts and have quick ways to add those as bookmarks that you can kind of start building up a queue if things you want to read or whatever else that you want to do.
In some ways, that's similar to the Twitter API app in Nuzzle which some of you want to familiar with which was an email newsletter the did a similar thing.
And there's actually I found a really great.
I forgot to add in another slide at the last minute, but there's a great app that's in development for the front of Fediver is called sil SLL that social that doesn't similar thing for Masadon that just gives you that feed for free.
Finally, interoperability provides visibility for your project.
It's an extra avenue for sharing the platform for people who get excited about it.
And an extra way to dip your toe in the water is an observer from established platforms like Masadon.
If one person loves postmarks and starts using it, they may be encouraged to post about that on Masadon.
But other than telling people to go look at a website, elsewhere on the web, they can link to what looks just like a Masadon user by specifying their at user name at postmarksinstance.org.
They're full of the actor name and everything.
If someone who sees their post clicks through, they stay within the context of Masadon or whatever micro blog game platform they're using.
They're invited to follow that feed right there in their Masadon client.
Those sort of see those bookmarks kind of flow into their timeline and maybe once they're following a few of those, they'll notice the similarities and wonder how they can get their own.
They reply to a post that shows up as comments in the postmark seizures instance in doing so.
They've hopefully made the postmark seizure instance more valuable for the person who's using it.
And over time, the result is that postmarks becomes a useful tool for those who already know about it and operate it and it makes this off known organically to people who are realized they want it later.
So that's a great reason to include an operability in your app.
Unfortunately, though, interoperability turned out to be the most challenging of the three principles that I kept in mind when developing postmarks.
Everything I said about it's benefits so far is true, but it's also more complicated.
While using Masadon test the output from postmarks is helpful, it also sometimes added complexity.
And actually, we heard about this during the rightfully, it's freely talk earlier today.
There are things I was doing with activity problems that I'm still convinced we're technically compliant with the spec,
but they resulted in posts that were broken or not doing what I wanted to have Masadon.
As being a example, there were details like having bookmarks tag, the show up as hashtags, and you can click on that in Masadon and have it do what you expect to hashtag to do in Masadon.
It just wasn't quite working right for a while.
Thank you.
And it just, it took some time, and ultimately what I found myself doing was not just reading the activity of how to spec,
but having to go look at the source code for Masadon, look at the source code for third party clients,
look at the source code for other platforms like firefish, and just kind of spirals outward and outward as you keep going.
The biggest difficulty I faced though, with it, handling and interoperability, ends up being a little more philosophical.
It relates to what I said earlier about what's great about the web that captured my attention in the first place,
or rather what's missing from that today.
I've been calling it the flattened web, the more I talk about it with my friends.
Masadon and many of Fediverse and broader social webcam were heavily inspired by Twitter, as I'm sure everybody here knows.
In general, they're designed to reproduce as a very specific core experience.
There's a timeline, as we just heard, the default one of Masadon is a reverse chronological, which is an algorithm, I'll agree with that.
Timeline, the post that, or by selection of users, you've chosen to follow.
A post can have some text, an image maybe, or a couple images.
Some text like a user name or a hashtag can have kind of pre-programmed hyperlink behavior.
A single URL on the post can have a visual card, but there's no other programable content or even significant structure display that you can add.
This is a post from panic by the way, which is a software company from Portland where I live.
What this means, though, is that post-marked activity in order to interoperate has to find some way to fit within that box.
A box is essentially a note, as the activity pub sees it.
As a result, when you see a post-marked bookmark on Masadon, your experience of it is as a Masadon post that follows a certain template that makes sense for a bookmark.
If people reply to your bookmark, it just creates a note that is a reply to that note.
On post marks, though, that's a totally different thing. It's a comment that has a very different visual importance to the bookmark itself.
But from Masadon, you're seeing it in a very different social context.
After seeing how this plays out with post marks in the current Fediverse ecosystem, I come to start thinking about the result of all these posts, having to fit in one place is kind of problematic.
As a cynical flip side of the organic growth opportunity that I was so excited to share with you earlier, it also raises a question from me, what's the point of doing any of this?
I'm not bothered with post marks when you could just write a Masadon client that formats a link blog.
You could search your posts with some kind of combination of operators about it from me and put my hashtags in and have an HTBS to have a link in it.
So why build a whole platform just if you get back into this flattened web?
This isn't Masadon's fault on not blaming it. It's only natural that an ecosystem with one dominant player.
Its product decisions will influence platforms that seek to interoperate, but I do think we should be aware of and have better ways to discuss the influence it has and what we do.
In the same way I started to see good discussion in general about other topics that reveal status quo about as being not just neutral, but a result of cultural conditions that have impacts on how we live and what we do.
It may sound harsh to speak of a flattened web, but I don't say this is an outsider.
I feel confident that I've read more posts on a flat timeline than most of the population of the world at this point.
I haven't been very heavily invested in communities in these platforms for almost as long as they've existed.
And up until recently I wouldn't say I regret it.
It's kind of an escapeable in the social circles that I think most of us are in in 2025 that you have to be on this flattened web.
In the case of a micro-block timeline I appreciate that Masadon has kind of respectful of your attention in some ways.
But short of small innovations in client side apps like FanP or Elk.
It does seem like everything gets condensed in the same rectangle and you end up with things like an amazing announcement, a funny joke, news of a tragedy, a friend looking for help or validation or a postmarked bookmark, all kind of jammed together all at once.
When I was younger I think I might have been better at surfing from vibe divide when this happened, but there's something that's made it harder for me to want to subject myself to contextless chronological information,
that's not recognized and compressed to a dozen seconds worth of attention, repeated hundreds of times in a row.
It's not pure rejections because I certainly log onto these platforms, plenty of days still.
You know, sometimes you want to just know what's going on in the world or connect with your friends or you have things that you need to put out in the world to say.
And I have friends that I've known online for 30 years at this point in my life and I have friends that I've known for six months that I hope I'll have 30 years from now.
But right now, maybe because of the moment that we're in, I keep wishing the way I related to them didn't involve this flattened timeline.
So it took the realization that no matter what I do with postmarks to make it interoperate, I had made an important component of it and that set into other people's flattened experience of the web,
which has made it really difficult for me to be motivated about doing more.
I still haven't really figured out what to do with these feelings to be honest.
Postmarks has been fairly neglected as many open source projects are, but this is kind of a different reason.
I'm trying to find ways to structure my 2025 to talk to, to do what I've said before about reaching the end of the state, hit those last few features that I really want to make and close things out.
But it's not only of excitement, it's just because I need closure.
After 20 years of making things the software, I'm a firm believer that very few choices can provide purely positive effects.
Advancements in software are built on later after later of trade-offs, and in this case, something that is given me a lot of benefit in the course of building this project,
also resulted in some questions that I'm forced to reckon with.
I feel struggling for a while to ignore them, to push through and keep doing what I've been doing, I think instead of trying to find an alternate path.
I'd love to talk to more to anyone that resonates with and try to move forward together to turn the social web and assign the field less flattened.
Thank you.
Thank you so much, Casey. I really enjoyed that. I've enjoyed all the talks in this debris.
That was especially great.
Something that I watched you develop and I've been involved with it.
The edges and I just thought you had some really almost poetic thoughts there, so I appreciate them. Thank you.
Thank you.