3 min de leitura

Construindo Soledade

Não é um blog comum, nem uma rede social. É uma cidade textual: um lugar feito de palavras, casas e bairros, sem banco de dados, sem painel e sem algoritmo. Este é o relato do que ela é e de como o sistema foi construído.
Construindo Soledade
Soledade City

Há um tempo eu vi algo extremamente interessante, um projeto chamado Nightfall City e achei fantástico de uma pessoa que usa o pseudônimo de m15o, e achei fascinante.

Comecei a seguir de perto os projetos do m15o e quanto mais eu aprendia, mais queria entender sua criatividade e capacidade de modificar recursos e criar coisas novas.

Uma coisa me chamou mais atenção, dentre todas as coisas que vi: o protocolo que foi utilizado para Nightfall City.

Então me ocorreu que eu poderia talvez criar meu próprio protocolo e iniciar um projeto similar baseado inteiramente nele.

Então iniciei a construção do SOLED/2.

O que é

Soledade se apresenta como “um blog textual, quieto e feito à mão”. Por baixo dessa frase existe uma metáfora que organiza o sistema inteiro: o site é uma pequena cidade.

  • Cada autor é um cidadão, com uma casa textual própria em /@nome/.
  • Cada tema é um bairro — Cinema, História, Livros, Programação, Geral.
  • A home é a Praça Central, onde se reúnem os últimos escritos.
  • Textos podem virar cartas endereçadas a outro cidadão, e a curadoria vira jornal e coleções.

Nada disso depende de JavaScript no navegador. O visitante recebe apenas HTML e CSS — a cidade é estática, e a lógica toda vive antes, no momento em que o texto é publicado.


A cidade por dentro

Cidadãos, bairros e casas

A cidadania é aberta: qualquer pessoa se registra por terminal, escolhe um handle e recebe uma identidade técnica (um segredo com hash SHA-256 — não é documento oficial). A partir daí já pode publicar. O Prefeito modera depois, se precisar.

A cada texto publicado corresponde um arquivo .md dentro de content/, com um pequeno cabeçalho YAML (o front matter) que diz o título, o bairro, as tags e a data:

---
title: "A canção de Cassilda"
citizen: "pablo"
district: "cinema"
tags: ["ensaio", "carcosa"]
date: "2026-06-01"
---
# O corpo do texto vem aqui, em Markdown.

Como funciona

A arquitetura em uma frase

Publicar é gravar um arquivo. Ler é um cat. A partir dessa ideia, o sistema tem três peças de infraestrutura e um pacote Python que costura tudo — sem Django, sem Flask, sem framework web.

Duas portas TCP, dois papéis

A cidade não tem login no navegador. Toda a escrita e leitura “por dentro” acontece por TCP puro, atendido por dois pequenos servidores escritos só com a biblioteca padrão do Python:

  • Porta 1900 — leitura (inspirada nos servidores estilo Nex): você manda um caminho e recebe o Markdown bruto, ou a listagem de um diretório. Não autentica: quem alcança a porta, lê.
  • Porta 1915 — publicação: aceita o protocolo SOLED/2 (identidade cidadã) e um protocolo legado do Prefeito. Cada publicação bem-sucedida dispara um rebuild na hora.

O caminho de um texto até a web

você, no terminal (ncat)
        |
        | porta 1915 · SOLED/2 + identidade
        v

public/         ── HTML estático
        |
        v

Caddy :443      ── HTTPS automático
        |
        v

navegador

O build.py limpa a pasta public/ e a regenera inteira a cada vez: páginas, índices por ano/mês, páginas de bairro, tags, feeds RSS (global, por cidadão e por bairro), sitemap.xml, 404 e um endpoint de saúde. O visitante final só toca em arquivos estáticos servidos pelo Caddy, que cuida do HTTPS sozinho.


A experiência

Publicar por linha de comando

Como não há formulário, o cidadão monta um “pacote de texto” e envia com ncat (ou nc). O site inclui um guia inteiro para isso. Um envio SOLED/2 tem esta forma — a identidade real fica no lugar do marcador:

# enviar um texto para a cidade (porta 1915)

SOLED/2
CITIZEN pablo
IDENTITY <sua-identidade-cidadã>
PATH citizens/pablo/posts/meu-texto.md

---
title: "Meu texto"
district: "cinema"
---

# Corpo do texto

.

O protocolo tem mais verbos: REGISTER (virar cidadão), PREVIEW (validar sem gravar), LIST (listar seus arquivos) e RECOVER (recuperar a identidade). Há limite de taxa por IP e moderação — banir IP ou cidadão — quando necessário.


Ficha técnica

Do que a cidade é feita

A apresentação é um único arquivo base.html: tema escuro, fonte monoespaçada, CSS embutido, nenhum pipeline de front-end. Toda a instalação em servidor é um script bash idempotente que prepara pacotes, venv, systemd, Caddy e firewall de uma vez.


Por que assim

A filosofia de design

  • Texto primeiro. Publicar é gravar um arquivo; ler é um cat ou uma linha de TCP.
  • Estático na web. O visitante recebe HTML e CSS. Zero lógica no request HTTP.
  • Rebuild síncrono. Cada publicação regenera o site imediatamente.
  • Poucas dependências. Quanto menos peças, menos coisa para quebrar ou envelhecer.
  • Segurança por camadas. Identidade cidadã, limite de taxa, moderação e bloqueio de path traversal na leitura e na escrita.

Feito em texto. Servido por silêncio. Lido por navegador ou terminal.

— o rodapé de toda página em Soledade

Soledade é, no fim, uma aposta calma: que um lugar de escrita pode existir sem métricas, sem infinito scroll e sem algoritmo — só casas, bairros e palavras. A cidade está aberta, e a cidadania também.

Visite a cidade em soledade.city :)