Local-first, peer-to-peer blogging powered by OrbitDB, libp2p, and IPFS.
Status: alpha/experimental. Not security audited.
Production: https://blog.le-space.de
Deployments are published from GitHub Actions to Aleph IPFS and attached to the production domain automatically.
- Create a personal blog in the browser.
- Replicate posts, comments, and media directly between peers.
- Store media locally on IPFS (Helia).
- Share a blog address and subscribe from another peer.
- Markdown extensions:
docs/MARKDOWN_GUIDE.md - Remote Markdown imports:
docs/REMOTE_MARKDOWN_IMPORT.md - AI agent codebase map:
docs/AI_AGENTS.md - AI Manager NFR checklist (logging, crypto, bundle, external refs):
docs/ai-nfr-checklist.md
- Atlas Cloud — Kling image-to-video: model API (tab), video / queue docs
- EIP-8004 (ERC-8004 agent registry) — https://eips.ethereum.org/EIPS/eip-8004
- erc-8004-example — https://github.com/vistara-apps/erc-8004-example
npm i
npm run devRelay (local):
npm run relay:testnpm test
npm run test:e2eThe production site is built from dist/ and deployed by
.github/workflows/deploy-site.yml, which installs
@le-space/node@0.1.45 and runs its Node-based Aleph site runner.
Required repository secret:
ALEPH_PRIVATE_KEY
Optional repository variable:
ALEPH_SITE_DOMAINto override the defaultblog.le-space.de
The deploy workflow also keeps only the latest 10 Aleph site uploads for
the orbit-blog-prod site scope, so older uploads from this same site wallet
stream are forgotten automatically after a successful publish.
Browser console examples:
localStorage.setItem('debug', 'le-space:blog:*')
localStorage.setItem('debug', 'le-space:blog:p2p,le-space:blog:db,le-space:blog:posts')
localStorage.setItem('debug', 'libp2p:*,helia:*,le-space:blog:*')Local dev via env:
LOG_LEVEL=debug npm run devMIT
https://www.le-space.de