diff --git a/profile/README.md b/profile/README.md
index 0a97fff..1f8858b 100644
--- a/profile/README.md
+++ b/profile/README.md
@@ -48,22 +48,23 @@
|
| [**nix-os**](https://github.com/piabrota/nix-os) | The NixOS configuration of the small VPS that serves piabrota.art/nixos. Every change is judged by what it adds to the closure and to memory. | [piabrota.art/nixos](https://piabrota.art/nixos) | MPL-2.0 |
| 🤖 | [**agents**](https://github.com/piabrota/agents) | Small agents that watch nix-os and its VPS, and report on GitHub as piabrota-ops. They open pull requests and never merge. | none | MPL-2.0 |
|
| [**mu**](https://github.com/piabrota/mu) | The company chart: the dogma, the standards, the journal and the index of the org's repositories. | none | CC BY 4.0, AGPL-3.0, MPL-2.0 |
-| 道場 | [**dojo**](https://github.com/piabrota/dojo) | The umbrella of the piabrota projects. Being set up. | none yet | MPL-2.0 |
+| 道場 | [**dojo**](https://github.com/piabrota/dojo) | The umbrella and the common layer: every repository is a submodule here. | none yet | MPL-2.0 |
The drawings load from each project's repository at a pinned commit; none is copied here. ihero,
agents and dojo have no drawing yet.
## How it fits
-
+
How to read this figure
-**Takeaway.** Ten open projects, each on its own; three of them meet the web at piabrota.art.
+**Takeaway.** Ten open projects, each on its own. dojo is the common layer that pins them all, and three of them meet the web at piabrota.art.
-**How to read.** One lane per kind of work. An arrow means "is served at", and its label is the
-path; "coming" means planned, not live. The red border marks the domain.
+**How to read.** The top lane is the common layer, and each other lane is a kind of work. Below it, an arrow
+means "is served at", and its label is the path; "coming" means planned, not live. A red border marks
+dojo and the domain.
**Not shown.** Each project's own site on GitHub Pages, and the tools they share: Nix, Rust,
archify.
diff --git a/profile/README.pt-BR.md b/profile/README.pt-BR.md
index 4f2a0a2..47352c2 100644
--- a/profile/README.pt-BR.md
+++ b/profile/README.pt-BR.md
@@ -49,22 +49,23 @@
|
| [**nix-os**](https://github.com/piabrota/nix-os) | A configuração NixOS da pequena VPS que serve piabrota.art/nixos. Cada mudança é julgada pelo que adiciona à closure e à memória. | [piabrota.art/nixos](https://piabrota.art/nixos) | MPL-2.0 |
| 🤖 | [**agents**](https://github.com/piabrota/agents) | Agentes pequenos que vigiam o nix-os e a VPS, e relatam no GitHub como piabrota-ops. Os agentes abrem pull requests e nunca fazem merge. | nenhum | MPL-2.0 |
|
| [**mu**](https://github.com/piabrota/mu) | O chart da empresa: o dogma, os padrões, o diário e o índice dos repositórios da org. | nenhum | CC BY 4.0, AGPL-3.0, MPL-2.0 |
-| 道場 | [**dojo**](https://github.com/piabrota/dojo) | O umbrella dos projetos do piabrota. Em montagem. | ainda não | MPL-2.0 |
+| 道場 | [**dojo**](https://github.com/piabrota/dojo) | O umbrella e a camada comum: cada repositório é um submódulo aqui. | ainda não | MPL-2.0 |
Os desenhos carregam do repositório de cada projeto, em um commit fixado. Nenhum desenho é copiado
para cá. ihero, agents e dojo ainda não têm desenho.
## Como se encaixa
-
+
Como ler esta figura
-**Em uma frase.** São dez projetos abertos, cada um por conta própria. Três deles chegam à web em piabrota.art.
+**Em uma frase.** São dez projetos abertos, cada um por conta própria. O dojo é a camada comum que fixa todos eles, e três deles chegam à web em piabrota.art.
-**Como ler.** Cada faixa é um tipo de trabalho. Uma seta significa "é servido em", e o rótulo da seta
-é o caminho. "Em breve" significa planejado, ainda não publicado. A borda vermelha marca o domínio.
+**Como ler.** A faixa de cima é a camada comum, e cada outra faixa é um tipo de trabalho. Abaixo dela, uma
+seta significa "é servido em", e o rótulo da seta é o caminho. "Em breve" significa planejado, ainda não
+publicado. Uma borda vermelha marca o dojo e o domínio.
**Fora da figura.** O site de cada projeto no GitHub Pages e as ferramentas em comum: Nix, Rust e
archify.
diff --git a/profile/archify/fabric.json b/profile/archify/fabric.json
index 453f152..d382988 100644
--- a/profile/archify/fabric.json
+++ b/profile/archify/fabric.json
@@ -1 +1 @@
-{"schema_version": 2, "diagram_type": "workflow", "meta": {"title": "The piabrota fabric: ten open projects, and where they meet the web", "locale": "en", "quality_profile": "showcase", "legend": {"mode": "hidden"}, "output": "fabric.html"}, "lanes": [{"id": "company", "label": "The company"}, {"id": "think", "label": "Think and write"}, {"id": "serve", "label": "Warn and host"}, {"id": "play", "label": "Play and listen"}, {"id": "web", "label": "On the web"}], "mainPath": ["pirsig", "site"], "nodes": [{"id": "mu", "lane": "company", "col": 0, "type": "database", "label": "mu", "sublabel": "the company chart", "width": 200}, {"id": "dojo", "lane": "company", "col": 1, "type": "database", "label": "dojo", "sublabel": "the umbrella, being set up", "width": 200}, {"id": "gramatico", "lane": "think", "col": 0, "type": "backend", "label": "gramatico", "sublabel": "plain pt-BR, a plugin", "width": 200}, {"id": "pirsig", "lane": "think", "col": 1, "type": "frontend", "label": "pirsig", "sublabel": "a second brain", "width": 200}, {"id": "closed", "lane": "think", "col": 2, "type": "backend", "label": "closed-source", "sublabel": "a book, md in, PDF out", "width": 200}, {"id": "alerts", "lane": "serve", "col": 0, "type": "backend", "label": "alerts", "sublabel": "official flood alerts", "width": 200}, {"id": "rax", "lane": "serve", "col": 1, "type": "backend", "label": "rax", "sublabel": "an agentic runtime", "width": 200}, {"id": "nixos", "lane": "serve", "col": 2, "type": "database", "label": "nix-os", "sublabel": "the NixOS VPS", "width": 200}, {"id": "ihero", "lane": "play", "col": 2, "type": "frontend", "label": "ihero", "sublabel": "music and a game, Rust", "width": 200}, {"id": "site", "lane": "web", "col": 1, "type": "external", "label": "piabrota.art", "sublabel": "the org's domain", "width": 200}, {"id": "agents", "lane": "serve", "col": 3, "type": "backend", "label": "agents", "sublabel": "watch nix-os, report", "width": 200}], "edges": [{"id": "e1", "from": "alerts", "to": "site", "label": "/alerts"}, {"id": "e2", "from": "pirsig", "to": "site", "label": "/pirsig, coming"}, {"id": "e3", "from": "nixos", "to": "site", "label": "/nixos"}]}
+{"schema_version": 2, "diagram_type": "workflow", "meta": {"title": "The piabrota fabric: dojo is the common layer of ten open projects", "locale": "en", "quality_profile": "showcase", "legend": {"mode": "hidden"}, "output": "fabric.html"}, "lanes": [{"id": "company", "label": "The common layer: dojo pins every repo below"}, {"id": "think", "label": "Think and write"}, {"id": "serve", "label": "Warn and host"}, {"id": "play", "label": "Play and listen"}, {"id": "web", "label": "On the web"}], "mainPath": ["pirsig", "site"], "nodes": [{"id": "mu", "lane": "company", "col": 0, "type": "database", "label": "mu", "sublabel": "the company chart", "width": 200}, {"id": "dojo", "lane": "company", "col": 1, "type": "external", "label": "dojo", "sublabel": "the umbrella, pins them all", "width": 200}, {"id": "gramatico", "lane": "think", "col": 0, "type": "backend", "label": "gramatico", "sublabel": "plain pt-BR, a plugin", "width": 200}, {"id": "pirsig", "lane": "think", "col": 1, "type": "frontend", "label": "pirsig", "sublabel": "a second brain", "width": 200}, {"id": "closed", "lane": "think", "col": 2, "type": "backend", "label": "closed-source", "sublabel": "a book, md in, PDF out", "width": 200}, {"id": "alerts", "lane": "serve", "col": 0, "type": "backend", "label": "alerts", "sublabel": "official flood alerts", "width": 200}, {"id": "rax", "lane": "serve", "col": 1, "type": "backend", "label": "rax", "sublabel": "an agentic runtime", "width": 200}, {"id": "nixos", "lane": "serve", "col": 2, "type": "database", "label": "nix-os", "sublabel": "the NixOS VPS", "width": 200}, {"id": "ihero", "lane": "play", "col": 2, "type": "frontend", "label": "ihero", "sublabel": "music and a game, Rust", "width": 200}, {"id": "site", "lane": "web", "col": 1, "type": "external", "label": "piabrota.art", "sublabel": "the org's domain", "width": 200}, {"id": "agents", "lane": "serve", "col": 3, "type": "backend", "label": "agents", "sublabel": "watch nix-os, report", "width": 200}], "edges": [{"id": "e1", "from": "alerts", "to": "site", "label": "/alerts"}, {"id": "e2", "from": "pirsig", "to": "site", "label": "/pirsig, coming"}, {"id": "e3", "from": "nixos", "to": "site", "label": "/nixos"}, {"id": "e4", "from": "mu", "to": "dojo", "label": "the rules"}, {"id": "e5", "from": "dojo", "to": "pirsig", "label": "pins every repo"}]}
diff --git a/profile/archify/figures.lock b/profile/archify/figures.lock
index de27264..34874fb 100644
--- a/profile/archify/figures.lock
+++ b/profile/archify/figures.lock
@@ -1,2 +1,2 @@
-fabric 8f7431072134975f-208acba
-pt/fabric 7f1c436bc32c482e-208acba
+fabric a0d098d673ed2144-208acba
+pt/fabric f908689982a357b6-208acba
diff --git a/profile/archify/pt/fabric.json b/profile/archify/pt/fabric.json
index 71e1da0..3a2ca4f 100644
--- a/profile/archify/pt/fabric.json
+++ b/profile/archify/pt/fabric.json
@@ -1 +1 @@
-{"schema_version": 2, "diagram_type": "workflow", "meta": {"title": "A fábrica piabrota: dez projetos abertos, e onde eles chegam à web", "locale": "pt-BR", "quality_profile": "showcase", "legend": {"mode": "hidden"}, "output": "fabric.html"}, "lanes": [{"id": "company", "label": "A empresa"}, {"id": "think", "label": "Pensar e escrever"}, {"id": "serve", "label": "Alertar e hospedar"}, {"id": "play", "label": "Tocar e ouvir"}, {"id": "web", "label": "Na web"}], "mainPath": ["pirsig", "site"], "nodes": [{"id": "mu", "lane": "company", "col": 0, "type": "database", "label": "mu", "sublabel": "o chart da empresa", "width": 200}, {"id": "dojo", "lane": "company", "col": 1, "type": "database", "label": "dojo", "sublabel": "o umbrella, em montagem", "width": 200}, {"id": "gramatico", "lane": "think", "col": 0, "type": "backend", "label": "gramatico", "sublabel": "pt-BR claro, um plugin", "width": 200}, {"id": "pirsig", "lane": "think", "col": 1, "type": "frontend", "label": "pirsig", "sublabel": "um segundo cérebro", "width": 200}, {"id": "closed", "lane": "think", "col": 2, "type": "backend", "label": "closed-source", "sublabel": "um livro, md vira PDF", "width": 200}, {"id": "alerts", "lane": "serve", "col": 0, "type": "backend", "label": "alerts", "sublabel": "alertas oficiais", "width": 200}, {"id": "rax", "lane": "serve", "col": 1, "type": "backend", "label": "rax", "sublabel": "um runtime agêntico", "width": 200}, {"id": "nixos", "lane": "serve", "col": 2, "type": "database", "label": "nix-os", "sublabel": "a VPS NixOS", "width": 200}, {"id": "ihero", "lane": "play", "col": 2, "type": "frontend", "label": "ihero", "sublabel": "música e jogo, em Rust", "width": 200}, {"id": "site", "lane": "web", "col": 1, "type": "external", "label": "piabrota.art", "sublabel": "o domínio da org", "width": 200}, {"id": "agents", "lane": "serve", "col": 3, "type": "backend", "label": "agents", "sublabel": "vigiam o nix-os", "width": 200}], "edges": [{"id": "e1", "from": "alerts", "to": "site", "label": "/alerts"}, {"id": "e2", "from": "pirsig", "to": "site", "label": "/pirsig, em breve"}, {"id": "e3", "from": "nixos", "to": "site", "label": "/nixos"}]}
+{"schema_version": 2, "diagram_type": "workflow", "meta": {"title": "A fábrica piabrota: o dojo é a camada comum de dez projetos abertos", "locale": "pt-BR", "quality_profile": "showcase", "legend": {"mode": "hidden"}, "output": "fabric.html"}, "lanes": [{"id": "company", "label": "A camada comum: o dojo fixa cada repo abaixo"}, {"id": "think", "label": "Pensar e escrever"}, {"id": "serve", "label": "Alertar e hospedar"}, {"id": "play", "label": "Tocar e ouvir"}, {"id": "web", "label": "Na web"}], "mainPath": ["pirsig", "site"], "nodes": [{"id": "mu", "lane": "company", "col": 0, "type": "database", "label": "mu", "sublabel": "o chart da empresa", "width": 200}, {"id": "dojo", "lane": "company", "col": 1, "type": "external", "label": "dojo", "sublabel": "o umbrella, fixa todos", "width": 200}, {"id": "gramatico", "lane": "think", "col": 0, "type": "backend", "label": "gramatico", "sublabel": "pt-BR claro, um plugin", "width": 200}, {"id": "pirsig", "lane": "think", "col": 1, "type": "frontend", "label": "pirsig", "sublabel": "um segundo cérebro", "width": 200}, {"id": "closed", "lane": "think", "col": 2, "type": "backend", "label": "closed-source", "sublabel": "um livro, md vira PDF", "width": 200}, {"id": "alerts", "lane": "serve", "col": 0, "type": "backend", "label": "alerts", "sublabel": "alertas oficiais", "width": 200}, {"id": "rax", "lane": "serve", "col": 1, "type": "backend", "label": "rax", "sublabel": "um runtime agêntico", "width": 200}, {"id": "nixos", "lane": "serve", "col": 2, "type": "database", "label": "nix-os", "sublabel": "a VPS NixOS", "width": 200}, {"id": "ihero", "lane": "play", "col": 2, "type": "frontend", "label": "ihero", "sublabel": "música e jogo, em Rust", "width": 200}, {"id": "site", "lane": "web", "col": 1, "type": "external", "label": "piabrota.art", "sublabel": "o domínio da org", "width": 200}, {"id": "agents", "lane": "serve", "col": 3, "type": "backend", "label": "agents", "sublabel": "vigiam o nix-os", "width": 200}], "edges": [{"id": "e1", "from": "alerts", "to": "site", "label": "/alerts"}, {"id": "e2", "from": "pirsig", "to": "site", "label": "/pirsig, em breve"}, {"id": "e3", "from": "nixos", "to": "site", "label": "/nixos"}, {"id": "e4", "from": "mu", "to": "dojo", "label": "as regras"}, {"id": "e5", "from": "dojo", "to": "pirsig", "label": "fixa cada repo"}]}
diff --git a/profile/img/fabric.png b/profile/img/fabric.png
index ab270a0..297f86e 100644
Binary files a/profile/img/fabric.png and b/profile/img/fabric.png differ
diff --git a/profile/img/pt/fabric.png b/profile/img/pt/fabric.png
index 454c2fb..58666a9 100644
Binary files a/profile/img/pt/fabric.png and b/profile/img/pt/fabric.png differ