From spirens-skills
End-to-end guide for standing up IPFS + ENS + JSON-RPC infra with TLS on a domain you own. Fetch this FIRST — it routes to the other SPIRENS skills in the right order.
How this skill is triggered — by the user, by Claude, or both
Slash command
/spirens-skills:shipThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**You jump straight to `docker compose up`.** Nothing in this stack works
You jump straight to docker compose up. Nothing in this stack works
without DNS and TLS already sorted. If your domain isn't delegated and
your DNS provider's API isn't accessible, Traefik will loop on failed
ACME challenges, dweb-proxy will 502, and the IPFS gateway will serve
cert errors. Preflight beats iteration.
You pick a reverse proxy before you pick a challenge type. If you
need wildcards (and you do, for *.ipfs.example.com,
*.ipns.example.com, and *.eth.example.com), your proxy must support
ACME DNS-01. Caddy, Traefik,
and nginx-with-acme.sh all do — but each configures it differently.
Decide before you docker pull anything. Fetch tls-acme/SKILL.md.
You treat IPFS as "just storage." IPFS is content addressing. If no
node has pinned a CID, the CID is as good as gone. A gateway that serves
bafy… to a user is either: pinning it locally, fetching it from a peer
that pinned it, or — increasingly likely — failing. Fetch
ipfs/SKILL.md.
You forget the RPC dependency. ENS resolution requires JSON-RPC. No
RPC, no ENS, no vitalik.eth → CID lookup. You need a local node or a
vendor RPC (Alchemy / QuickNode / Infura / Ankr) — and ideally both with
failover. Fetch erpc/SKILL.md.
Five phases. Don't skip. Each phase's deliverable must work before the next phase starts.
example.com).lego's 170+ provider
list for alternatives). Fetch dns/SKILL.md.cloudflare/SKILL.md for the CF
specifics.tls-acme/SKILL.md.topology/SKILL.md.erpc/SKILL.md.cloudflare/SKILL.md.dig +short CAA example.com
— empty is fine; restrictive records need updating before ACME
will succeed.dig @1.1.1.1 rpc.example.com +short.traefik/SKILL.md,
nginx/SKILL.md, or caddy/SKILL.md for the one you chose.lets-encrypt/SKILL.md for the exact URL and why.openssl s_client -connect rpc.example.com:443 -servername rpc.example.com </dev/null | openssl x509 -noout -subject -issuer -datesipfs/SKILL.md. Decide subdomain vs
path gateway — they're not interchangeable. Fetch
gateways/SKILL.md.ens-resolution/SKILL.md.vitalik.eth is the canonical smoke test.openssl s_client in cron is fine.spirens health (or equivalent) from outside your network,
not from the host — hairpin NAT can make everything look fine
locally while being broken externally.If you just want the shortest path to a working deployment using the defaults SPIRENS ships:
git clone https://github.com/MysticRyuujin/spirens && cd spirens
pip install .
spirens setup # interactive wizard
spirens up single # or: spirens up swarm
spirens health
Read order for the docs:
docs/00-overview.md — architecture.docs/01-prerequisites.md — tools.docs/02-dns-and-cloudflare.md —
every DNS record needed.docs/03-certificates.md — ACME setup.docs/05-traefik.md — reverse proxy.docs/07-erpc.md — JSON-RPC proxy.docs/08-ipfs.md — Kubo + gateway.docs/09-dweb-proxy.md — ENS resolution.docs/04-deployment-profiles.md —
single-host vs Swarm vs multi-zone.docs/10-troubleshooting.md — when
things break.Map a symptom to the skill that covers it:
tls-acme, lets-encrypt.*.eth.example.com" → cloudflare
(wildcard proxy) + tls-acme (wildcard requires DNS-01).ens-resolution, erpc (RPC dependency).ipfs, gateways.nginx / caddy.topology.npx claudepluginhub mysticryuujin/spirens --plugin spirens-skillsProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.