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.

Nightfall City

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.

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:

*

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, with no Django, no Flask and 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:

The path of a text to the web

`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):

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

Made of text. Served by silence. Read by browser or terminal.
(the footer of every page in Soledade)

Soledade bets that a place for writing can exist without metrics, infinite scroll or an algorithm, with only houses, neighborhoods and words. The city is open, and so is citizenship.

Visit the city at soledade.city :)

soledade.city

Gemlog

Home

Proxied content from gemini://pablomurad.com/gemlog/construindo-soledade.gmi

Gemini request details:

Original URL
gemini://pablomurad.com/gemlog/construindo-soledade.gmi
Status code
Success
Meta
text/gemini;lang=en
Proxied by
kineto

Be advised that no attempt was made to verify the remote SSL certificate.