Soledade

Um blog textual, quieto e feito à mão.

Publicar com ncat

Guia simples para registrar cidadania e publicar textos em Soledade usando terminal e ncat (ou nc).

Servidor: soledade.city · Porta de publicação: 1915

Antes de tudo: instale o ncat → teste a porta → registre → guarde identidade e recovery → publique.


Antes de começar


Instalar ncat

Windows

  1. Instale o Nmap e marque Ncat.
  2. Teste no PowerShell:
& "C:\Program Files (x86)\Nmap\ncat.exe" --version

Linux (Debian / Ubuntu)

sudo apt update
sudo apt install ncat
ncat --version

macOS

brew install nmap
ncat --version

Testar se a porta responde

Antes de registrar ou publicar, confira se sua rede alcança a 1915.

Windows (PowerShell)

Test-NetConnection soledade.city -Port 1915

Procure TcpTestSucceeded : True. Se for False, a porta pode estar fechada no firewall do servidor ou bloqueada na sua rede — tente outra rede ou fale com quem administra a cidade.

Linux ou macOS

nc -zv soledade.city 1915

ou:

timeout 3 bash -c 'cat < /dev/null > /dev/tcp/soledade.city/1915' && echo OK || echo falhou

O que o ncat faz (e o que não faz)

Funciona: enviar um pacote completo (várias linhas + corpo + linha final .) pelo pipe para ncat soledade.city 1915 e ler a resposta do servidor (200 registered, 200 published, erros, etc.).

Não funciona:

Fluxo correto: montar pacote → pipe para ncat → copiar credenciais da resposta → guardar em arquivos locais → publicar com SOLED/2.


Registrar cidadania

Escolha um handle: minúsculas, números, hífen ou underscore — por exemplo maria ou ana_clara. Handles como pablo ou admin estão reservados.

Windows (PowerShell)

Substitua maria e o nome público:

$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$payload = @"
SOLED/2
ACTION REGISTER
HANDLE maria
NAME Maria Silva

.
"@
$response = $payload | & $ncat soledade.city 1915
Write-Host $response

Ou use o script do repositório:

.\scripts\register.ps1 maria "Maria Silva"

(O script salva a identidade em %USERPROFILE%\.soledade-identidade se a resposta contiver IDENTITY.)

Linux ou macOS (bash)

{
  echo "SOLED/2"
  echo "ACTION REGISTER"
  echo "HANDLE maria"
  echo "NAME Maria Silva"
  echo
  echo "."
} | ncat soledade.city 1915

Com script:

./scripts/soledade-register maria "Maria Silva"

Resposta esperada

200 registered
HANDLE maria
IDENTITY <string-longa-secreta>
RECOVERY <codigo-de-recuperacao>
HOUSE https://soledade.city/@maria/
SAVE ~/.soledade-identidade

Copie agora as linhas IDENTITY e RECOVERY. O servidor não mostra a identidade em claro de novo depois.

Resposta Significado
200 registered Cidadania criada; você já pode publicar
409 handle taken Alguém já usa esse handle — escolha outro
403 handle reserved Handle reservado (ex.: pablo)
400 bad request Handle inválido ou pedido malformado
403 ip banned IP bloqueado pelo Prefeito
429 rate limited Muitos registros do mesmo IP — espere e tente de novo

Guardar a identidade

Crie dois arquivos com apenas uma linha cada (sem aspas, sem espaço extra):

Arquivo Conteúdo
Windows: %USERPROFILE%\.soledade-identidade string da linha IDENTITY
Windows: %USERPROFILE%\.soledade-recovery string da linha RECOVERY
Linux/macOS: ~/.soledade-identidade idem
Linux/macOS: ~/.soledade-recovery idem

Detalhes e recuperação se perdeu a identidade: Identidade cidadã.


Validar rascunho (ACTION PREVIEW)

Antes de publicar de verdade, você pode validar o pacote. O servidor responde com WARN ou ERR e não grava nada.

Substitua handle, identidade e PATH:

$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$Identidade = (Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw).Trim()
$payload = @"
SOLED/2
ACTION PREVIEW
CITIZEN maria
IDENTITY $Identidade
PATH citizens/maria/posts/rascunho.md

---
title: "Rascunho"
district: geral
status: published
---

# Rascunho

.
"@
$payload | & $ncat soledade.city 1915

Resposta típica: 200 preview ok seguido de linhas WARN ou ERR se houver problema de bairro, front matter ou caminho.

Modelos copiáveis também em Assistente de publicação (final desta página).


Publicar um texto

  1. Escreva um arquivo .md, por exemplo meu-texto.md:
---
title: "Meu primeiro texto"
district: "geral"
status: "published"
date: "2026-06-02"
description: "Minha estreia na cidade."
---

# Meu primeiro texto

Corpo em Markdown.

Se o arquivo ficar em citizens/SEU_HANDLE/posts/, não precisa de citizen: no YAML — o sistema usa a pasta.

  1. Envie com SOLED/2:

Windows (PowerShell)

$ncat = "C:\Program Files (x86)\Nmap\ncat.exe"
$Cidadao = "maria"
$Identidade = (Get-Content "$env:USERPROFILE\.soledade-identidade" -Raw).Trim()
$Markdown = Get-Content ".\meu-texto.md" -Raw

$Payload = @"
SOLED/2
CITIZEN $Cidadao
IDENTITY $Identidade
PATH citizens/$Cidadao/posts/meu-texto.md

$Markdown
.
"@

$Payload | & $ncat soledade.city 1915

Linux (bash)

CIDADAO=maria
IDENTIDADE="$(tr -d '\r\n' < ~/.soledade-identidade)"
ARQUIVO=meu-texto.md
DESTINO="citizens/$CIDADAO/posts/meu-texto.md"

{
  echo "SOLED/2"
  echo "CITIZEN $CIDADAO"
  echo "IDENTITY $IDENTIDADE"
  echo "PATH $DESTINO"
  echo
  cat "$ARQUIVO"
  echo "."
} | ncat soledade.city 1915

Resposta esperada: 200 published

Seu texto aparece em https://soledade.city/@maria/meu-texto/ (troque handle e slug).

Bairros disponíveis: geral, cinema, historia, livros, programacao — use district: no front matter.

PATH no servidor e URL no site

PATH (relativo a content/) URL no site
citizens/maria/posts/meu-texto.md https://soledade.city/@maria/meu-texto/
posts/meu-texto.md (legado) https://soledade.city/posts/meu-texto/
about.md https://soledade.city/about/

O slug da URL é o nome do arquivo sem .md.

Mais campos de front matter: Guia de publicação.


Formato do pacote SOLED/2

Publicação e preview usam o mesmo esqueleto:

SOLED/2
CITIZEN <seu-handle>
IDENTITY <conteúdo de ~/.soledade-identidade>
PATH citizens/<handle>/posts/arquivo.md

<corpo Markdown completo, pode incluir --- front matter --- >
.

Regras:


Respostas do servidor (publicação)

Resposta Significado
200 published Gravou e reconstruiu o site
401 invalid identity Identidade errada, arquivo com espaço extra ou identidade revogada
401 invalid token Só no protocolo legado do Prefeito — token errado
403 forbidden Caminho ou bairro não permitido
403 citizen banned Cidadão banido
400 bad path Caminho inválido (.., não é .md, etc.)
413 payload too large Texto maior que 128 KiB (padrão)
429 rate limited Muitas publicações por minuto do mesmo IP

Atualizar ou apagar

Atualizar: reenvie o mesmo PATH com o .md completo atualizado.

Apagar: mesmo cabeçalho SOLED/2 (CITIZEN, IDENTITY, PATH); corpo só com:

DELETE

Ler Markdown (porta 1900, opcional)

A porta 1900 serve só para ler arquivos .md no servidor — não publica.

"index.md" | & "C:\Program Files (x86)\Nmap\ncat.exe" soledade.city 1900
echo "citizens/maria/posts/meu-texto.md" | ncat soledade.city 1900

Atenção: rascunhos (status: draft) ainda podem ser lidos aqui se o caminho for conhecido. Use private: true no front matter para bloquear também na 1900 (detalhes na página de identidade).


Segurança


Assistente de publicação

No final desta página há modelos REGISTER, PREVIEW e publicar prontos para copiar, com seletor de handle e bairro: ir para o assistente.


Como adquirir cidadania · Guia de publicação · Identidade cidadã · Ajuda

Assistente de publicação

Modelos prontos para copiar e enviar com ncat soledade.city 1915 (pipe do pacote). Abrir ncat sem enviar um pacote não gera credencial. Substitua sua-identidade-aqui pelo conteúdo de ~/.soledade-identidade. Use ACTION PREVIEW antes de publicar.

Registrar cidadão

Recuperar identidade (RECOVER)

Publicar texto

Pré-visualizar (PREVIEW)