Community project
Jonosakti
A free, MIT licensed site where organisers run petitions, unions, boycotts, mutual aid networks and campaigns from one account.
Jonosakti gathers the practical tools of collective action into five sections: organising, democracy, digital, economic action and knowledge. Petitions, referendums, forums, union pages, boycotts, cooperatives, citizen journalism and crowdfunding all sit behind one login, and the whole thing is free with no premium tier. Usage is still tiny and most of what you see on the site today is seeded content, not real activity.
What it does
- Petitions with signature counts and goal progress
- Referendums with recorded votes, plus public forums
- Union, movement and community group pages with join actions
- Boycotts, cooperatives, mutual aid networks and buy-local listings
- Citizen journalism, fact checks, courses and a resource library
- Crowdfunding campaigns that record pledges only, with no payment processing built
- Accounts with email verification, Google and Facebook sign-in and TOTP two-factor
- Comments, likes, bookmarks, follows, direct messages and content reporting
- Summarising, categorising, moderation checks and writing help from a small instruct model
- MIT licensed, free to use and free to self-host
A group organising a rent strike or a supplier boycott currently runs it across four tools that were built for something else: a petition site that owns the signatures, a messaging group nobody can search, a spreadsheet of members, and a payment link. None of those tools was designed for collective action and one of them usually charges for the privilege. Jonosakti puts the whole set in one place, free to use, MIT licensed, and honest about the fact that hardly anybody is using it yet.
Why it exists
Organising tools that charge rent on participation have quietly changed sides. A petition platform that puts a signature behind a paywall, or sells the list of people who signed, is not neutral infrastructure. So this one costs nothing, has no premium tier and no billing code of any kind, and the licence means that a union which stops trusting the hosted version can take the source, run its own copy, and never ask us. That is the actual guarantee. Free hosting is a promise; a permissive licence is a fact.
The initial focus is Bangladesh and the seeded material reflects that, from utility tariffs to garment factory campaigns. The interface is in English only. There is no internationalisation framework and no translation files, and Bengali appears in the branding and nowhere else, so describing the product as bilingual would be a lie in a place where the lie would matter.
How it works
The site is organised into five sections that between them carry more than twenty content types.
| Section | What lives in it |
|---|---|
| Organising | unions, movements, community groups, direct actions |
| Democracy | petitions, votes, referendums, public forums |
| Digital | crowdfunding campaigns, mobilisation events, open source projects, data commons |
| Economic action | boycotts, cooperatives, mutual aid networks, buy-local listings |
| Knowledge | citizen journalism, fact checks, courses, a resource library |
Twenty content types sounds like twenty products. It is one, because every type has the same four pages and the same four routes behind it, with no exceptions granted to anybody:
listing page -> GET /api/<type>
create form -> POST /api/<type>
detail page -> GET /api/<type>/<id>
edit page -> PATCH /api/<type>/<id>
DELETE /api/<type>/<id>
All of it sits on one SQLite database at the edge, with sessions and cache in a key-value store, uploads in object storage, and email going out through a transactional provider. The homepage is a tabbed feed rather than a marketing hero, one tab per section plus a timeline, pulling live counts from the API, so a visitor lands on whatever people are doing rather than on whatever a copywriter last approved. Signed-in members sign petitions, join unions and boycotts, pledge support, comment, like, bookmark, follow each other, send direct messages, report content and receive notifications. Accounts carry email verification, Google and Facebook sign-in, password reset, and TOTP two-factor with backup codes, which is not a luxury on a site where an account may be tied to a union membership.
The decision that shaped it
Sameness was the first decision and it is the reason one person can maintain this. Adding a content type is a table, a set of routes that look exactly like the last set, and four pages that look exactly like the last four. There is no design exercise, no bespoke controller and no clever exception for the type somebody feels strongly about.
What it costs is real and visible in use. A petition and a course get the same affordances, the same detail layout and the same edit form, when a petition wants a signature ladder at the top and a course wants a syllabus. The generic detail page is nobody's favourite page. We took that trade knowingly: twenty adequate sections that all work beat four excellent ones and sixteen that never got built.
The second decision was the size of the model. Summarising a submission, suggesting a category, running a moderation check and helping someone draft their petition all run through an eight billion parameter instruct model rather than a large one. A large model writes better copy. It also costs enough per submission that the moderation check becomes the first thing switched off when the invoice lands, and that is precisely the check you most want left running. Cheap and always on beats excellent and disabled. The opposite call was right on 360nutri, where the estimate coming back from the photograph is the entire product and a cheaper model would have made the app pointless. Same question, different answer, and the thing that decides it is whether the model output is the product or a helper beside it.
Privacy is the third. An account here can be attached to a boycott, a union or a piece of citizen journalism, and in some places that is not a small thing to have public. The settings expose a small number of understandable states rather than a wall of switches, for the reasons set out in four visibility levels beat a page of toggles; we took the same approach further on ClassProfile, where the whole network is scoped to an organisation.
Where it stands today
Live, free, wide, and almost entirely unused. The numbers on the site do not describe anything that happened.
The headline figures, several hundred thousand signatures and a raised total in the tens of millions, come from a seed migration that populated the site with example Bangladeshi campaigns before launch. The live statistics endpoint, which counts what real accounts have done, returns eight users, eight comments, two likes and fifteen shares. Both sets of numbers come out of the same codebase and only one of them is real. The petition identifiers on the live site still carry the prefix from the seed file that created them, so anyone curious works it out in a minute. Nobody should quote the large figures as adoption, us included, and the full account of what that shortcut costs is in launching an empty community site without faking it. The same demo-account problem sits on atHeartbeat, which was seeded for the same reason and has the same lack of real traffic behind it.
Crowdfunding records a pledge and nothing more. There is no payment integration, and the campaign page tells the user so directly rather than showing a total that implies money moved. The help pages mention a possible small platform fee on contributions one day, which is aspirational, given that nothing in the product can currently take a payment at all.
Moderation is a rule-based library plus a user report flow, sitting behind CSRF tokens, a content security policy, a CORS allowlist and rate limiting. There is no moderation team, and a site that invited real volume would need one within a week. A notifications file for a stateful coordination object exists in the source with no binding declared in the deployment config, so that path is probably dead code. Everything behind the login, including the dashboard and messaging, works as far as we know and has been exercised in development rather than by strangers.
What this says about how we work
The engineering worth copying here is the repetition. One shape applied twenty times is the difference between a platform a single maintainer can keep alive and a platform that needs a team it will never have. Most of the products that die young die of variety, not of missing features.
The rest is about how we describe things. A project with no revenue attached gets the same accuracy as a paying one: the licence stays permissive, the free tier stays free, and nobody rewrites the traction paragraph because the entry would read better. If you are weighing us up, that is the useful signal on this page, more so than the feature list. A studio that inflates its own numbers on its own portfolio will do it in a status report too.
If a campaign group, union or cooperative wants to run its own copy, the code is public and no permission is required. If you would rather someone stood it up, configured the domains and handed it over working, get in touch and we will tell you what that involves before anybody signs anything.
What we wrote about building it
Want something like this?
Tell us the shape of the problem and we will tell you honestly whether we are the right people for it.
Start a conversation