Building Soledade
A while ago I saw something extremely interesting, a project called Nightfall City by someone who goes by the pseudonym m15o, and I thought it was fantastic, I found it fascinating.

I started following m15o's projects closely, and the more I learned, the more I wanted to understand their creativity and their knack for reworking things and creating new ones.
One thing caught my attention more than anything else I saw: the protocol used for Nightfall City.
So it occurred to me that maybe I could create my own protocol and start a similar project built entirely on it.
So I started building SOLED/2.
What it is #
Soledade describes itself as “a textual blog, quiet and handmade”. Beneath that sentence there's a metaphor that organizes the whole system: the site is a small city.
- Each author is a citizen, with their own textual house at
/@nome/. - Each topic is a neighborhood — Cinema, History, Books, Programming, General.
- The home page is the Central Square, where the latest writings gather.
- Texts can become letters addressed to another citizen, and curation becomes a newspaper and collections.
None of this depends on JavaScript in the browser. The visitor only gets HTML and CSS — the city is static, and all the logic lives earlier, at the moment the text is published.
The city from the inside #
Citizens, neighborhoods and houses #
Citizenship is open: anyone registers from the terminal, picks a handle and gets a technical identity (a secret hashed with SHA-256 — not an official document). From then on they can publish. The Mayor moderates afterwards, if needed.
Each published text corresponds to a .md file inside content/, with a small YAML header (the front matter) that gives the title, the neighborhood, the tags and the date:
1---
2title: "A canção de Cassilda"
3citizen: "pablo"
4district: "cinema"
5tags: ["ensaio", "carcosa"]
6date: "2026-06-01"
7---
8
1# O corpo do texto vem aqui, em Markdown.
2
How it works #
The architecture in one sentence #
Publishing is writing a file. Reading is a cat. From that idea, the system has three pieces of infrastructure and a Python package that stitches it all together — no Django, no Flask, no web framework.
Two TCP ports, two roles #
The city has no login in the browser. All the writing and reading “from the inside” happens over plain TCP, handled by two small servers written with nothing but Python's standard library:
- Port 1900 — reading (inspired by Nex-style servers): you send a path and get back the raw Markdown, or a directory listing. No authentication: whoever reaches the port, reads.
- Port 1915 — publishing: accepts the SOLED/2 protocol (citizen identity) and a legacy protocol for the Mayor. Every successful publish triggers a rebuild right away.
The path of a text to the web #
1você, no terminal (ncat)
2 |
3 | porta 1915 · SOLED/2 + identidade
4 v
5
6public/ ── HTML estático
7 |
8 v
9
10Caddy :443 ── HTTPS automático
11 |
12 v
13
14navegador
15
build.py wipes the public/ folder and regenerates the whole thing every time: pages, indexes by year/month, neighborhood pages, tags, RSS feeds (global, per citizen and per neighborhood), sitemap.xml, a 404 and a health endpoint. The end visitor only touches static files served by Caddy, which takes care of HTTPS on its own.
The experience #
Publishing from the command line #
Since there's no form, the citizen puts together a “text package” and sends it with ncat (or nc). The site includes a whole guide for this. A SOLED/2 submission looks like this — the real identity goes in place of the placeholder:
1# enviar um texto para a cidade (porta 1915)
2
3SOLED/2
4CITIZEN pablo
5IDENTITY <sua-identidade-cidadã>
6PATH citizens/pablo/posts/meu-texto.md
7
8---
9title: "Meu texto"
10district: "cinema"
11---
12
13# Corpo do texto
14
15.
16
The protocol has more verbs: REGISTER (become a citizen), PREVIEW (validate without saving), LIST (list your files) and RECOVER (recover your identity). There's rate limiting per IP and moderation — banning an IP or a citizen — when needed.
Spec sheet #
What the city is made of #
The presentation is a single base.html file: dark theme, monospaced font, embedded CSS, no front-end pipeline. The whole server installation is an idempotent bash script that sets up packages, venv, systemd, Caddy and the firewall in one go.
Why this way #
The design philosophy #
- Text first. Publishing is writing a file; reading is a
cator a line of TCP. - Static on the web. The visitor gets HTML and CSS. Zero logic in the HTTP request.
- Synchronous rebuild. Every publish regenerates the site immediately.
- Few dependencies. The fewer the pieces, the less there is to break or age.
- Security in layers. Citizen identity, rate limiting, moderation and path traversal blocking on reads and writes.
Made of text. Served by silence. Read by browser or terminal.
— the footer of every page in Soledade
Soledade is, in the end, a calm bet: that a place for writing can exist without metrics, without infinite scroll and without an algorithm — just houses, neighborhoods and words. The city is open, and so is citizenship.
Visit the city at soledade.city :)