Your data, your node
No SaaS account, no API key, no hosted backend. The dashboard talks to a Radicle daemon you control.
Open source · self-hosted
An open-source Next.js dashboard for radicle-httpd. Point it at your local seed and ship a polished public profile.
See it live
A live glance at the top of /profile on this node — open full size for the heatmap and repo grid.
No SaaS account, no API key, no hosted backend. The dashboard talks to a Radicle daemon you control.
Laptop, home server, VPS. Anywhere Node.js runs. Caddy + Cloudflare Tunnel publish it for free.
Generative avatar, search, sort, copy-as-clone. Familiar to anyone who's used a code-hosting profile.
Works even when /repos returns empty. Configure the RIDs you care about and they show up.
App Router, Tailwind v4, lucide-react. Tweak the components, theme, fonts. No proprietary primitives.
Zero analytics, zero third-party scripts, zero hosted backend. Just static HTML rendered from your node.
Quickstart
Get it running, then point it at your repos.
git clone <repo-url> radprofile
cd radprofile/dashboard
cp .env.example .env.local
npm install
npm run dev # http://localhost:3100# .env.local — make it yours
RADICLE_HTTP_BASE=http://127.0.0.1:8090
RADICLE_PROFILE_ALIAS=your_alias
RADICLE_DELEGATE_DID=did:key:z6Mk...
RADICLE_REPO_IDS=\
rad:zAbCd...,\
rad:zEfGh...Bring your own node — point this at it.
Run a Radicle node + HTTP daemon
rad node start && radicle-httpd --listen 0.0.0.0:8090
Point the dashboard at it
Set RADICLE_HTTP_BASE and an optional RADICLE_REPO_IDS.
Build & start
npm run build && npm start
FAQ
radicle.network/nodes/<seed>/<rid>. The Explorer page then asks that seed for your repo over the network. If the seed has not replicated your RID yet (or your browser blocks the request), fetches fail with that error. Set NEXT_PUBLIC_RADICLE_EXPLORER_NODE in env to a hostname that actually hosts your repository, try another public seed (e.g. iris.radicle.xyz, iris.radicle.network, or seed.radicle.dev), or wait for replication. You can also set NEXT_PUBLIC_RADICLE_EXPLORER_ORIGIN if you use a different Explorer deployment. Try a normal browser if an embedded preview blocks cross-site loads.radicle.network). This dashboard is your personal homepage on the network: a curated profile of your repos, plus a whole-node view that respects pinning and search. Both read the same JSON API, so they’re complementary, not competing.npm run dev and visit localhost. To make it public, use Cloudflare Tunnel (free, no port-forward) or open ports 80/443 on your router. See the project repo’s infra/PUBLISH_WITH_CLOUDFLARE.md.RADICLE_HTTP_BASE at any reachable radicle-httpd. You give up sovereignty (you’re trusting that node’s data), but you can stand up a profile in minutes against e.g. a friend’s seed.RADICLE_REPO_IDS in your env to a comma-separated list of RIDs, or edit src/lib/profileRepos.ts and redeploy. The page fetches each one in parallel from /api/v1/repos/<rid>./api/v1/repos?show=all — if that list is empty, your HTTP daemon’s node inventory may not match what you expect (wrong RADICLE_HTTP_BASE, different machine, or the daemon needs a restart). The Pinned tab uses show=pinned, which follows web.pinned.repositories in $RAD_HOME/config.json (often ~/.radicle/config.json). There is no rad pin command — add RIDs to that JSON array, then restart radicle-httpd if needed. For /profile, repos come from RADICLE_REPO_IDS in .env.local, not the pinned list.Clone it, point at radicle-httpd, and you’re live in about two minutes.