The Relay app: a poster in your pocket, and a bouncer that reads La app de Relay: un cartel en el bolsillo y un portero que lee
IssueNúmero 05
The mobile app, one codebase for every node, drawn like a Constructivist poster, and the planned AI moderation that keeps an open node from filling with spam. La app móvil, un único código para todos los nodos, dibujada como un cartel constructivista, y la moderación con IA planeada para que un nodo abierto no se llene de spam.
Este texto todavía solo está en inglés.
1A phone feature
Relay's locality model depends on knowing, roughly, where you are, so the main client is a phone app. We are building it with Expo and React Native, which gives iOS and Android from one codebase.
Status, plainly: mockups of about thirty screens are done, the Expo project is set up, and the screens themselves are in progress. The pictures below are the mockups, not screenshots of a shipped app.
Feed, headed Pinheiros 10 km
Compose, with a location chip
Communities nearby
Events, map view
2What is in it
Four tabs: Feed, Communities, Events and Settings, with a floating "+" to compose.
- Feed. Posts from within the node's radius, with threaded replies three levels deep, reactions, and live updates over server-sent events.
- Communities. Nearby communities sorted by distance. You join with an optional pseudonym, or create one with a location and a radius.
- Events. A list and a map toggle, pins on the map, and RSVP.
- Settings. Including the server switcher, below.
- Admin. A moderation queue for whoever runs the node.
3One app, any node
Settings has a server URL field. Point it at a node and the app talks to that node; point it somewhere else and it talks there. The default is relay.mansus.org. There is no per-node build, so a neighbourhood that starts a node does not need to publish an app or ask anyone's permission.
Settings: server switcher
Admin moderation queue
Feed with location off
4How it looks
The visual design is a Constructivist and Bauhaus poster: cream paper, ink black, signal red and ochre, square corners, thick borders, hard offset shadows and huge condensed headlines. It is a different look from the dithered pages of this site, but it comes from the same place: a screen should look like something someone made.
5The bouncer
Open membership invites spam. Anyone can join a node from anywhere, so a node needs a way to screen what comes in. This part is planned. Nothing here is built yet.
The idea is to use small decision models, such as Laya or SemIf/OpenJev, rather than a text-generating LLM.1 A model like that does a single forward pass and returns a yes, a no or a score. It runs on a CPU and can be self-hosted as a sidecar next to the node.
The policy is a plain-text list of questions: "is this an advert for something unrelated to the community?" and so on. The operator edits the list without redeploying. A post that scores badly goes to the moderation queue in the app.
Two safety choices are fixed in the plan. Moderation is switched by MODERATION_ENABLED; when it is false, posts go live immediately. And it fails open: if the sidecar is down, posts go through, so a crashed container never silences a neighbourhood.
6The risk we are watching
The risk is false positives on political content. A model that quietly hides a post about a council vote is worse than spam. So before anything ships, a spike will measure how the models behave on political text, in Portuguese, Spanish and English. If the numbers are bad, we will say so and not ship it.
7The backend, briefly
The node server has been rewritten from Go to Python with FastAPI, with SQLite by default, Postgres as an option, JWT authentication and one Docker image. This is in progress.
8How to help
React Native and Expo developers are the clearest need: the screens are the biggest piece of work left. After that, people who can help evaluate moderation on real posts in three languages, and anyone who would run a node. The code is at github.com/nemoNoboru/relay. It has no licence file yet, so we do not call it open source. Open an issue on this site's repository to talk to us.