Ricardo Mendes

Ricardo Mendes

I'm a middleware engineer/devops, Dad, writer, and digital autonomy advocate based in Brussels. I geek out on politics, technology, information systems, democracy, justice, coercive groups, and discernment.

This site is my personal hub for long-form writing, curated bookmarks, and open-web experiments — where ideas about tech, autonomy, democracy, and digital culture meet. Since February 2026, this site is also my personal ActivityPub instance, every posts you see on this blog can be fetched from the fediverse. Read more →

Featured

Open-source collaboration in the age of AI

I am not going to reconstruct the entire disagreement that prompted this post.

Some of the public exchanges have been deleted. Other parts happened privately or by email. I have no interest in tracing every sentence, assigning blame line by line, or producing a forensic account of who said what. That would only prolong a conflict that has already taken up too much space.

But people noticed that I removed my participation from the project, and I have started receiving emails from strangers asking what happened. So I want to explain the broader issue, without turning a personal disagreement into public theatre.

Open-source collaboration does not necessarily become easier because AI makes it easier to inspect code, identify bugs, produce patches, and write detailed issues. In some ways, it becomes considerably harder.

You can spend time formulating an issue carefully and professionally, only for it to be perceived by the repository owner as a list of orders.

That owner is, of course, entirely free to reject the contribution. They can close the issue, say that it is outside the project’s scope, explain that it is not on the roadmap, or simply decide that they do not want to pursue it. There are thousands of legitimate ways to govern an open-source project.

Governance by burnout is not one of them.

When you use an AI tool to help document a problem, the resulting issue may contain precise examples, references to specific lines, screenshots, reproduction steps, and concrete observations gathered by running the software outside the environment of its original author.

That can be useful. It can also be overwhelming.

The problem is that the intention behind such a contribution may not survive the way it is received. You may believe that you are documenting a bug thoroughly. The maintainer may see a wall of text, an unsolicited audit, or an attempt to dictate the project’s direction.

You can ask questions first. You can soften the language. You can repeatedly state that the maintainer is free to ignore the suggestion. None of that guarantees collaboration when the other side does not experience the contribution as collaborative.

Most of my experiences have been different.

I have submitted issues and pull requests to several projects, including repositories connected to my professional work. Some of those contributions were written with the help of AI—not because I could not be bothered to write them myself, but because the tool already had the context: the code, the logs, the behaviour I had observed, and the steps that exposed the bug.

When the issue was valid, it was investigated. When the patch fixed a real problem, it was reviewed. Sometimes it was merged directly. Sometimes the maintainer rewrote it to match the project’s architecture, conventions, or preferred way of working.

That is normal. A contribution is not an instruction. It is material offered to the project.

For Indiekit, for example, I submitted a skeleton pull request of roughly two thousand lines containing the foundations of a Microsub plugin. It was not something the lead developer could review immediately. It required time and several email exchanges. But the contribution was handled professionally.

That first pull request opened the way for further work, with the plugin I already use in production gradually being reviewed and reconstructed under the oversight of the person responsible for the project.

I have seen similar responses in projects such as Dolibarr, Odysseus, and ComfyUI. A suspected bug was investigated. Its existence was corroborated. A fix was discussed or implemented. Everyone using the project could then benefit.

That is one of the core ideas behind open source.

This is not an argument that AI is inherently good or bad. It is an argument that collaboration still depends on people who actually want to collaborate.

A project can publish its code under an open-source licence without being socially open to outside participation. That is entirely legitimate, but it should be understood honestly. Otherwise, openness risks becoming more of a posture than a practice.

The recent conflict also showed me how easily both sides can misread each other.

The maintainer indicated that they could not follow or process what I had written because it was too much. I interpreted this as a request for greater clarity and replied with another comment summarizing my previous points, together with screenshots from my implementation.

I believed I was reducing the burden.

In reality, the person was angry. They had perceived my earlier issues as orders and felt overwhelmed by my participation as a whole. My attempt to clarify the situation therefore became another contribution to the very problem they were describing.

I later tried to explain myself privately and apologized. I was also transparent that some of the issues and comments had been written partly, or sometimes almost entirely, with Claude’s assistance.

Again, this was not because I had randomly asked a model to invent criticisms of somebody else’s project. The tool was helping me work on the implementation. It already held the context of the bugs and limitations I had encountered, so using that context to draft an issue was the most direct workflow.

But the origin of the text does not erase its effect on the person receiving it.

Everyone is overwhelmed. Maintainers especially are often expected to write the software, review code, answer questions, manage releases, handle support, moderate discussions, and absorb the emotional reactions of users—all without compensation.

Adding more explanations, even explanations intended to correct a misunderstanding, can simply produce more pressure.

My response was therefore to withdraw. I removed my contributions and comments where I could, apologized for the parts for which I could take responsibility, and moved on.

That was not a protest against my work being rejected. Nobody is required to accept an issue, a patch, an idea, or a contribution. In a world where AI makes bootstrapping increasingly accessible, people can fork a project and take it in another direction. That freedom is essential, and it should not change.

The issue is not rejection.

The issue is the growing potential for misunderstanding, misperception, and misjudgment between people working at radically different speeds, with radically different expectations, using tools that can generate more material than any small project is equipped to absorb.

Over the coming years, situations like this will become common.

Contributors will have to learn that the ability to identify ten problems does not mean that a maintainer can process ten issues. The ability to generate a detailed analysis does not mean that detail is always helpful. A technically correct contribution can still arrive in a socially destructive form.

Maintainers, in turn, may need clearer ways to communicate what kind of participation they want, how much they can realistically review, and whether outside contributions are genuinely welcome.

We are entering largely uncharted territory. The tools are evolving faster than the social practices around them.

We will need to rediscover some old rules of collaboration and invent new ones: smaller contributions, clearer boundaries, explicit expectations, consent before large interventions, and a better awareness that attention—not code—is often the scarcest resource in an open-source project.

AI can help us produce more.

It cannot make us ready to receive more.

Whoever reads this, I came and go in Peace, I will keep doing my part the way I see fit, but I have definitely learned a lesson here and for that, I’m thankful.

Permalink

L’accord Rossel–IPM pose les fondations d’un affaiblissement durable de la presse locale et régionale en Belgique.

Ce scénario n’a rien de nouveau. Aux États-Unis, la disparition massive des journaux locaux a précédé l’apparition de véritables déserts informationnels, laissant des territoires entiers sans contre-pouvoir journalistique, sans enquête de proximité et sans surveillance réelle des pouvoirs politiques et économiques. Le résultat est connu : la viralité de la désinformation via les réseaux sociaux, davantage de désinformation, moins de participation démocratique et des institutions locales plus facilement capturées.

La France suit une trajectoire comparable : concentration croissante des médias, recul du pluralisme, marginalisation des rédactions indépendantes et uniformisation progressive du débat public. Quelques grands propriétaires décident de plus en plus de ce qui mérite d’être visible, discuté ou ignoré. Cette concentration ne suffit pas, à elle seule, à expliquer la montée de l’extrême droite, mais elle contribue à créer un espace médiatique où ses thèmes, ses obsessions et son vocabulaire finissent par devenir omniprésents.

Pendant ce temps, une caste politique et économique toujours plus étroite conserve l’accès aux plateaux, aux éditoriaux et aux leviers de décision, tandis que le reste de la société devient progressivement invisible.

Couplée à une répression systématique des mouvements sociaux et une criminalisation constante de toute forme de manifestations, désobéissance civiles, c’est la porte ouverte à une dégénérescence démocratique sans retour.

La Belgique, une fois encore, semble choisir de reproduire les mauvaises idées déjà testées ailleurs : sacrifier la diversité éditoriale, l’indépendance des rédactions et l’information de proximité au nom de la sacro-sainte rentabilité.

Mais la presse n’est pas une industrie comme une autre. Son utilité ne se mesure pas uniquement à ses marges, à ses abonnements ou à ses économies d’échelle. Une démocratie saine a besoin de rédactions nombreuses, indépendantes, concurrentes et suffisamment financées pour enquêter, déranger et rendre visibles des réalités que les grands centres de pouvoir préféreraient souvent maintenir dans l’ombre.

Quand toute la presse quotidienne francophone finit par dépendre du même groupe, le problème n’est pas seulement économique.

C’est une menace directe contre le pluralisme démocratique.

Permalink

Inbound and outbound RSS

Most of the talk about RSS is about publishing. A feed is something your site emits: you write a post, and the feed is the machine-readable copy that goes out the door. Almost every blog does this. It is the easy half, and it has been solved for twen...

La thermodynamique de la justice

Je pense qu’il y a quelque chose de profondément humain dans notre besoin d’expliquer les dysfonctionnements par des intentions. Lorsqu’un système échoue, lorsqu’une institution ne répond pas à sa mission, nous cherchons instinctivement un responsabl...

The true test of a constitution is not how it functions when everyone plays by the rules. It is how it performs when those in power decide to break them.

If a constitution cannot stop democratic backsliding, cannot protect journalists, cannot safeguard minorities, cannot prevent the concentration of power in the hands of a leader willing to exploit every loophole, then it has failed its most important purpose.

A document is not great because it is old. It is not great because generations have mythologized it. It is great only if it can protect freedom when freedom is under attack.

A constitution that survives only on paper while democracy erodes in practice is not the best constitution on Earth. It is a warning.

Permalink

Building Plume

I got annoyed. Every time I wanted to bookmark a page or jot down a note, I’d open the Indiekit admin UI in a new tab, paste a URL, and click around. Small friction. But small friction repeats forever. So two days ago I started a brainstorm with Clau...

Recent Posts

Open-source collaboration in the age of AI

I am not going to reconstruct the entire disagreement that prompted this post.

Some of the public exchanges have been deleted. Other parts happened privately or by email. I have no interest in tracing every sentence, assigning blame line by line, or producing a forensic account of who said what. That would only prolong a conflict that has already taken up too much space.

But people noticed that I removed my participation from the project, and I have started receiving emails from strangers asking what happened. So I want to explain the broader issue, without turning a personal disagreement into public theatre.

Open-source collaboration does not necessarily become easier because AI makes it easier to inspect code, identify bugs, produce patches, and write detailed issues. In some ways, it becomes considerably harder.

You can spend time formulating an issue carefully and professionally, only for it to be perceived by the repository owner as a list of orders.

That owner is, of course, entirely free to reject the contribution. They can close the issue, say that it is outside the project’s scope, explain that it is not on the roadmap, or simply decide that they do not want to pursue it. There are thousands of legitimate ways to govern an open-source project.

Governance by burnout is not one of them.

When you use an AI tool to help document a problem, the resulting issue may contain precise examples, references to specific lines, screenshots, reproduction steps, and concrete observations gathered by running the software outside the environment of its original author.

That can be useful. It can also be overwhelming.

The problem is that the intention behind such a contribution may not survive the way it is received. You may believe that you are documenting a bug thoroughly. The maintainer may see a wall of text, an unsolicited audit, or an attempt to dictate the project’s direction.

You can ask questions first. You can soften the language. You can repeatedly state that the maintainer is free to ignore the suggestion. None of that guarantees collaboration when the other side does not experience the contribution as collaborative.

Most of my experiences have been different.

I have submitted issues and pull requests to several projects, including repositories connected to my professional work. Some of those contributions were written with the help of AI—not because I could not be bothered to write them myself, but because the tool already had the context: the code, the logs, the behaviour I had observed, and the steps that exposed the bug.

When the issue was valid, it was investigated. When the patch fixed a real problem, it was reviewed. Sometimes it was merged directly. Sometimes the maintainer rewrote it to match the project’s architecture, conventions, or preferred way of working.

That is normal. A contribution is not an instruction. It is material offered to the project.

For Indiekit, for example, I submitted a skeleton pull request of roughly two thousand lines containing the foundations of a Microsub plugin. It was not something the lead developer could review immediately. It required time and several email exchanges. But the contribution was handled professionally.

That first pull request opened the way for further work, with the plugin I already use in production gradually being reviewed and reconstructed under the oversight of the person responsible for the project.

I have seen similar responses in projects such as Dolibarr, Odysseus, and ComfyUI. A suspected bug was investigated. Its existence was corroborated. A fix was discussed or implemented. Everyone using the project could then benefit.

That is one of the core ideas behind open source.

This is not an argument that AI is inherently good or bad. It is an argument that collaboration still depends on people who actually want to collaborate.

A project can publish its code under an open-source licence without being socially open to outside participation. That is entirely legitimate, but it should be understood honestly. Otherwise, openness risks becoming more of a posture than a practice.

The recent conflict also showed me how easily both sides can misread each other.

The maintainer indicated that they could not follow or process what I had written because it was too much. I interpreted this as a request for greater clarity and replied with another comment summarizing my previous points, together with screenshots from my implementation.

I believed I was reducing the burden.

In reality, the person was angry. They had perceived my earlier issues as orders and felt overwhelmed by my participation as a whole. My attempt to clarify the situation therefore became another contribution to the very problem they were describing.

I later tried to explain myself privately and apologized. I was also transparent that some of the issues and comments had been written partly, or sometimes almost entirely, with Claude’s assistance.

Again, this was not because I had randomly asked a model to invent criticisms of somebody else’s project. The tool was helping me work on the implementation. It already held the context of the bugs and limitations I had encountered, so using that context to draft an issue was the most direct workflow.

But the origin of the text does not erase its effect on the person receiving it.

Everyone is overwhelmed. Maintainers especially are often expected to write the software, review code, answer questions, manage releases, handle support, moderate discussions, and absorb the emotional reactions of users—all without compensation.

Adding more explanations, even explanations intended to correct a misunderstanding, can simply produce more pressure.

My response was therefore to withdraw. I removed my contributions and comments where I could, apologized for the parts for which I could take responsibility, and moved on.

That was not a protest against my work being rejected. Nobody is required to accept an issue, a patch, an idea, or a contribution. In a world where AI makes bootstrapping increasingly accessible, people can fork a project and take it in another direction. That freedom is essential, and it should not change.

The issue is not rejection.

The issue is the growing potential for misunderstanding, misperception, and misjudgment between people working at radically different speeds, with radically different expectations, using tools that can generate more material than any small project is equipped to absorb.

Over the coming years, situations like this will become common.

Contributors will have to learn that the ability to identify ten problems does not mean that a maintainer can process ten issues. The ability to generate a detailed analysis does not mean that detail is always helpful. A technically correct contribution can still arrive in a socially destructive form.

Maintainers, in turn, may need clearer ways to communicate what kind of participation they want, how much they can realistically review, and whether outside contributions are genuinely welcome.

We are entering largely uncharted territory. The tools are evolving faster than the social practices around them.

We will need to rediscover some old rules of collaboration and invent new ones: smaller contributions, clearer boundaries, explicit expectations, consent before large interventions, and a better awareness that attention—not code—is often the scarcest resource in an open-source project.

AI can help us produce more.

It cannot make us ready to receive more.

Whoever reads this, I came and go in Peace, I will keep doing my part the way I see fit, but I have definitely learned a lesson here and for that, I’m thankful.

Permalink

There is a Ideas.md in the RSC GitHub repo but I want to share on my blog some of the things currently in development :

  • Better user management Users should be able to cancel and remove their accounts and cascade removal of their posts and replies.

  • better moderation and governance for feeds

creating an open publishing system is easy, moderating it is a pain in the A, so before this goes into a direction I don’t want I want to be able to have the tools to moderate feeds the system ingest.

I want to be able to differentiate an RSS feed from a compatible textcasting instance and RSS feeds added by users.

Currently, there is no difference between a user a a “remote user” representing an RSS feed subscribed by a user, not all feeds are textcasting feeds so we need a way for admins to decide which other instance they federate to, think subscribe bidirectionally and users added RSS feeds.

If/when an item comes from a remote feed I want to be able to moderate it, hide it, remove it, block the source if needed.

Inevitably someone will use one the demo sites to publish unwanted content or subscribe to a dubious feed just to see How it goes…

  • Gated community Currently registration is open and users can even make temporary posts to try the app, these guest users without a formal registered account are wiped periodically unless they verify their email registration.

I want this to be configurable, each instance will have different requirements, RSC need to come up with tools to help operator handle an instance.

  • Better enclosure support Right now the system doesn’t support enclosure (podcasts) obviously the underlying tech support it, it’s RSS after all but the web front-end doesn’t know what to do with it, I want a shiny play button where needed and the ability to properly display media elements.

  • Better integration with YouTube, Funkwhale, SoundCloud, Spotify A link from there should display an embedded player and fallback to link if no JS

There is probably a tons of things I’m not including here, my brain is fried today.

Permalink

@wjmaggos@liberal.city it doesn’t have that… At most if a lot of different instances existed, and were interlinked you would have distributed reach, can that be called social media boost? I don’t know… So yes currently #RSC is a social network with integrated RSS feeds, literally made for small communities with specific topics… Albeit it could also be used in different ways

Permalink

The technical aspect of Odyssey IMAX filming is in itself astounding work.

I had no idea it was this complex and old-school to produce an IMAX movie.

Makes me want to watch it again… In a IMAX screen this time 😅

Permalink

Working on something really cool, but its too soon to show, all I can say is its about RSS Reader, Micropub and Webmentions

Permalink
View all posts

Skills

Music Production

Jeskola Buzz VST Ableton Live Ableton Push Erae 2 MIDI

OSINT

Telegram Twitter

Programming

HTML Python JavaScript Typescript

Interests

Personal

Politics Climate Human Rights News Information Books Music Technology Science Fiction Music Production Indieweb Democracy Justice Movies Series

Data Engineering & Automation Systems

Data pipeline PostgreSQL Baserow n8n OSINT Telegram archiving RSS aggregation Web scraping Archiving systems Data indexing Search & retrieval

Decentralized & Independent Web Ecosystem

Decentralized Web Indie Tech Fediverse Mastodon Bluesky RSS culture IndieWeb Webmentions Platform independence

Personal Projects

2022-02 – Present

Real-time monitoring and analysis platform for open-source intelligence The OSINTukraine initiative is a specialized endeavor dedicated to open-source intelligence (OSINT) pertaining to Ukraine. Its primary objectives are the collection, archiving, translation, analysis, and dissemination of critical information related to the ongoing conflict with Ukraine. Utilizing advanced OSINT techniques, the project offers in-depth insights into current events, potential security threats, and other relevant issues concerning Ukraine. This is achieved by monitoring numerous Russian telegram channels, followed by meticulous filtering, categorization, and archiving of data streams. These efforts are further enhanced by various OSINT analysis projects incubated within the initiative." Current sub-projects War crimes archive Drones research Location related alerts system

Docker Python NextJS LLM AI Telegram API PostgreSQL

2023-01 – Present

Chardons Bleus is a non-profit association created to raise and manage funds so that people victims of the Ogyen Kunzang Chöling cult and its criminal leader Robert Spatz can effectively access the justice system. The association exists to pool resources, cover legal and procedural costs, and provide a collective framework that makes long and complex judicial actions financially possible. It also acts as a point of coordination between contributors, legal representatives, and supporting professionals, with the clear purpose of enabling accountability through lawful proceedings that individuals could not sustain alone.

Justice Advocacy Fundraising Public Speaking

2002-11 – Present

BuzzWorkers is a long running personal project dedicated to curating, preserving, and publishing independent electronic music and DJ mixes spanning Techno, Electro, Trip Hop, Acid, and related experimental genres from the 1990s to today. Over more than twenty years, I designed, operated, migrated, and maintained the full technical stack behind the platform, evolving alongside the web itself. This included working with multiple generations of hosting, audio tooling, content management systems, databases, automation scripts, streaming and download infrastructures, and more recently federated platforms such as the fediverse and Funkwhale. Beyond music production and curation, the project taught me long term system design, data preservation, platform migration, interoperability, and the tradeoffs between centralized and decentralized architectures, while managing large media collections and making them reliably accessible on the web for community and educational use.

Ansible Docker Python Funkwhale ActivityPub

2023-10 – Present

“Skyfleet”, a fleet of thematic and news-oriented Bluesky accounts powered by RSS feeds and FreshRSS, with pages that track their sources and purpose, plus a hand-curated directory of custom feeds with clear inclusion criteria so people can discover active, maintained feeds and share their own

Bsky.rss Docker News Bluesky

2015-10 – 2022-10

OKCinfo was launched at the end of 2015 as a desperate last minute attempt in a 20 year long existing trial launched by the Belgian state against the OKC cult in 1997. The 23 of us – supported by more than 40 other former OKC-born young children – have since been supported by talented lawyers ready to champion our cause. The Belgian chapter of the justice battle against OKC was concluded in 2022, the pedocriminal Robert Spatz was condemned to a 5 years suspended sentence. The victims decided to engage a new Justice battle in france under the banner of Association Chardons Bleus

Justice Advocacy Fundraising Public Speaking Activism

Posting Activity

2026
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
2025
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
View full history