Contribute
The site is a static site and the repository is the CMS. Every fish is a
block of data in src/data/fishes.ts; every page is generated
from that file at build time. No admin panel, no database, no runtime —
just the repo, a PR, and a build.
Add a fish
- Open
src/data/fishes.ts. - Copy any fish block and fill every field (see the table below).
- Run
npm run build— the new page is generated at/fishes/<your-id>/. - Open a pull request. The school grows by PR.
Fish fields
| field | meaning |
|---|---|
| id | URL slug — kebab-case, unique |
| emoji | one glyph that swims with the post |
| title / subtitle | the hook |
| domain | tech · culture · economy · geopolitics |
| depth | SURFACE · MID-WATER · ABYSSAL · HADAL |
| layer | which iceberg layer the fish lives in |
| pill | blue · red · black · white · grey |
| schools | one or more currents — neural-net · memetic-engine · attention-mine · supply-chain |
| date | ISO date, used for ordering |
| excerpt | one-line teaser for cards and <meta> |
| anatomy.tail | observed effects — what is on the surface |
| anatomy.ribs | four variables: UPSTREAM_CAUSE · DOWNSTREAM_EFFECT · HIDDEN_VARIABLE · REFLEX_ACTION, each with a value |
| anatomy.spine | the mechanism — the thread connecting head to tail |
| anatomy.head | the distilled conclusion |
| links | ids of real fish this one relates to, with a label |
What makes a good fish
- Every rib filled. The spine must connect head to tail — effects traced to variables, variables to a mechanism, mechanism to a paradigm.
- Links point to existing fish ids. The school is a network, not a pile.
- One dominant pill, one dominant layer. A fish that says everything says nothing.
- Pills are hypotheses, not facts. Write as if you could be wrong — because you are, eventually.
The community
Community lives on GitHub: the public repository plus its Discussions forum. This site is the distillation; the repo is where the school is actually written.
- Repository — github.com/Pilagrigea/pilagrigea.com (create it, then this link goes live).
- Discussions — propose fish, argue with pills, split a current. Anything that should become a post starts as a discussion.
Activate comments (giscus)
- Create the public repo on GitHub and enable Discussions.
- Install the giscus app on the repo.
- Open giscus.app, select the repo, mapping = pathname, and create a Discussions category.
- Copy the four values — repo, repo id, category, category id — and set them as build variables:
GISCUS_REPO=Pilagrigea/pilagrigea.com GISCUS_REPO_ID=<from giscus.app> GISCUS_CATEGORY=<name of your category> GISCUS_CATEGORY_ID=<from giscus.app>
Set them in Cloudflare Pages (Settings → Environment variables) or in a
local .env, then rebuild. Every fish page
gains a comment thread. Until then the site ships with a
// DISCUSSION OFFLINE placeholder.
// OBSERVE → INFER → ANALYZE → DISTILL — then write it down and open a PR.