Getting an open-source project noticed is harder than building it. You push to GitHub, maybe post once on Reddit, and watch the stars stay at zero. There's no distribution engine for indie open source. Marketing feels gross. Growth hacking feels fake. The result: great projects die in obscurity.
Mycelium Kit turns any GitHub repo into a self-propagating network node. Like mycelium in nature, it builds invisible infrastructure that connects, nourishes, and grows.
One command. It scans your repo, upgrades your README, builds an embeddable Passport widget, pins everything to IPFS, publishes to decentralized networks, generates 30-50 ready-to-post seeding assets, and registers your project in the Mycelium Index. Every site that embeds your Passport becomes a node in the network, automatically registering itself and strengthening the mesh.
No algorithms. No gatekeepers. No tracking. Just code propagating code.
You provide: GitHub repo + Live URL + Description
│
v
┌─────────────────────────────────────────┐
│ Mycelium Kit Pipeline │
├─────────────────────────────────────────┤
│ │
│ 1. Repo Autopsy ── scan & upgrade │
│ 2. Passport Build ── <10kb widget │
│ 3. IPFS Pinning ── permanent │
│ 4. Nostr / Bluesky ── decentralized │
│ 5. Seeding Pack ── 30-50 assets │
│ 6. Radicle Mirror ── p2p Git │
│ 7. Index Update ── network effect │
│ │
└─────────────────────────────────────────┘
│
v
README + Widget + IPFS Pins + Seeding Pack + Registry
│
v
┌──────────────────────┐
│ Self-Replicating │
│ Flywheel │
│ │
│ Widget embedded on │
│ external sites ──> │
│ beacon registers │
│ back to Index ──> │
│ more visibility ──> │
│ more embeds ──> │
│ stronger network │
└──────────────────────┘
- Node.js 18+ and Git
git clone https://github.com/SativusCrocus/Mycelium-Kit.git
cd Mycelium-Kit
npm install
node src/cli.js \
--repo https://github.com/YOU/YOUR_REPO \
--live-url https://your-site.com \
--description "What your project does"All integrations degrade gracefully. Set what you have, skip what you don't.
cp .env.example .env| Variable | Service | Free Tier |
|---|---|---|
PINATA_JWT |
IPFS pinning | 1GB free |
NOSTR_PRIVATE_KEY |
Nostr publishing | Free |
BLUESKY_HANDLE |
Bluesky posting | Free |
MASTODON_INSTANCE |
ActivityPub posting | Free |
GITHUB_TOKEN |
Higher API limits | Free |
| File | What |
|---|---|
README.md |
Upgraded — problem/solution/demo/benefits format |
dist/passport-widget.js |
Embeddable <mycelium-passport> web component |
seeding-pack.json |
30-50 ready-to-post growth assets |
.mycelium-meta.json |
Project metadata for all modules |
Scans your GitHub repo via API. Analyzes README quality, fetches stars/forks/languages/topics, and generates an upgraded README in problem → solution → demo → benefits format. Suggests optimal topics for discoverability.
Generates a self-contained vanilla JS web component:
- Shadow DOM — zero CSS conflicts with host pages
- < 10kb total, mobile-responsive
- Live stats fetched client-side from GitHub API
- 7 Propagate buttons — X, Reddit, LinkedIn, HN, dev.to, Bluesky, Mastodon
- UTM + referral tracking on every share link
- Auto-registers embedding site with Mycelium Index via beacon
<script src="dist/passport-widget.js"></script>
<mycelium-passport></mycelium-passport>Pins widget and metadata to IPFS via Pinata (free tier). Optional permanent archival to Arweave via Irys. Creates immutable, censorship-resistant hosting.
One module, three protocols:
- Nostr — kind-1 events to 5 well-connected relays
- Bluesky — AT Protocol with rich text facets
- Mastodon — ActivityPub status posting
All posts are manual-trigger only. Zero auto-posting to closed platforms.
Generates 30-50 ready-to-post assets across 10 niches:
| Platform | Assets | Style |
|---|---|---|
| Reddit (general + language-specific) | 7 posts | Value-first, non-shill |
| Hacker News | 3 posts | Show HN + reply templates |
| dev.to | 3 articles | Tutorial + comparison format |
| X / Twitter | 5 tweets/threads | Problem-solution hooks |
| 3 posts | Professional narrative | |
| Discord | 3 messages | Community-appropriate |
| Indie Hackers | 3 posts | Builder journey |
| Mastodon + Bluesky | 6 posts | Platform-native |
| Reply templates | 10 templates | Contextual, helpful |
Mirrors your repo to the Radicle P2P network for censorship resistance. Sets up rad remote for ongoing sync.
The live directory of every project in the network:
- Glassmorphism dark theme with animated mesh gradients
- Real-time search, language filtering, sorting
/api/register— Vercel serverless function that receives widget beacons- Zero tracking, zero cookies, zero frameworks
Live at mycelium-index.vercel.app
mycelium-kit/
├── .github/workflows/
│ └── mycelium-autopsy.yml ······· Full 8-step GitHub Action pipeline
├── src/
│ ├── cli.js ····················· CLI orchestrator
│ ├── repo-autopsy.js ············ Scan + upgrade README
│ ├── passport-builder.js ········ Shadow DOM widget builder
│ ├── ipfs-pinner.js ············· Pinata IPFS + Arweave archival
│ ├── nostr-publisher.js ········· Nostr + Bluesky + Mastodon
│ ├── seeding-generator.js ······· 30-50 growth assets
│ ├── radicle-mirror.js ·········· P2P Git mirror
│ ├── index-updater.js ··········· Registry updater
│ └── utils.js ··················· Zero-dep shared utilities
├── mycelium-index/
│ ├── api/register.js ············ Vercel serverless beacon endpoint
│ ├── index.html ················· Static directory site
│ ├── style.css ·················· Glassmorphism design system
│ ├── app.js ····················· Client-side search + filtering
│ ├── registry.json ·············· Live project registry
│ └── vercel.json ················ Routing + CORS + caching
├── assets/
│ ├── logo.svg ··················· Project logo
│ ├── favicon.svg ················ Favicon
│ └── banner.svg ················· README banner
└── test/
└── utils.test.js ·············· 21 passing unit tests
The included workflow runs the full pipeline on every push to main or via manual trigger. Copy it to any repo.
# .github/workflows/mycelium-autopsy.yml — already included
# Trigger manually with publishing:
gh workflow run "Mycelium Autopsy & Upgrade" \
-f repo_url="https://github.com/you/repo" \
-f live_url="https://your-site.com" \
-f publish="yes"Required secrets:
| Secret | Purpose |
|---|---|
PINATA_JWT |
IPFS pinning |
NOSTR_PRIVATE_KEY |
Nostr publishing (optional) |
BLUESKY_HANDLE + BLUESKY_APP_PASSWORD |
Bluesky posting (optional) |
MASTODON_INSTANCE + MASTODON_TOKEN |
Mastodon posting (optional) |
GITHUB_TOKENis provided automatically by GitHub Actions.
Mycelium Kit runs on itself. The Action on this repo:
- Scans itself and upgrades its own README
- Builds and pins its own Passport widget to IPFS
- Registers itself in the Mycelium Index
- Generates its own seeding pack
- Publishes to Nostr (when triggered manually)
The Index at mycelium-index.vercel.app shows Mycelium-Kit as the first node in the network.
Full analysis in SECURITY.md.
- No secrets in code — env vars and GitHub Secrets only
- No auto-posting — all social posts require manual trigger
- No tracking — beacon sends hostname only, zero PII
- No cookies — the Index and widget are stateless
- Shadow DOM — widget sandboxed from host page
- Rate-limited API — 5 req/min/IP on
/api/register - Input validation — hostname sanitization, blocklists, size caps
| Scenario | Behavior | Fix |
|---|---|---|
| Private repo | 404 from API | Set GITHUB_TOKEN with repo scope |
| No README | Creates from scratch | Review generated README |
| Rate limited | Waits up to 2min, retries | Use GITHUB_TOKEN for 5000 req/hr |
| Nostr relay down | Publishes to fewer relays | Kit tries 5, succeeds if 1+ works |
| Bluesky auth fail | Skips with warning | Check handle + app password |
| Radicle missing | Prints install instructions | Install CLI, run rad auth |
| Widget CSS conflict | None | Shadow DOM isolates styles |
| CSP blocks widget | Won't load | Allowlist script domain in CSP |
| Concurrent beacon writes | 409 with retry hint | Client retries automatically |
npm test # 21 unit tests, all passing
# Integration smoke tests
node src/repo-autopsy.js --repo https://github.com/sindresorhus/got
node src/passport-builder.js && ls -la dist/passport-widget.js
node src/seeding-generator.jsContributions welcome. Fork, branch, PR.
- Fork the repo
git checkout -b feature/your-featuregit commit -m 'Add your feature'git push origin feature/your-feature- Open a Pull Request
MIT — use it, fork it, grow it.