Decentralized websites with Dash Platform metadata, IPFS content, a local editor, and owner-approved publishing.
  • TypeScript 69.5%
  • Kotlin 19.6%
  • JavaScript 7.3%
  • Shell 2.7%
  • CSS 0.5%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-05 06:58:41 -04:00
acceptance/demo-site feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
apps feat: export public Stub settings from Auth publications 2026-10-04 20:33:43 -04:00
assets feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
config feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
docs docs: plan shared contracts and report mainnet publishing costs 2026-10-05 06:58:41 -04:00
packages feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
scripts feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
tests feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
.gitignore feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
.npmrc feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
.nvmrc feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
AGENTS.md feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
LICENSE feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
package-lock.json feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
package.json feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00
README.md docs: plan shared contracts and report mainnet publishing costs 2026-10-05 06:58:41 -04:00
tsconfig.base.json feat: initial Decent Site public source release 2026-10-04 19:45:33 -04:00

Decent Site

Source code: git.ronhelwig.com/rhelwig/DecentSite.

Decentralized websites: metadata on Dash Platform, content on pluggable storage, served by a Stub as simple HTML.

Status

Local workspace is the official free draft/build path (create and preview sites without chain or storage fees). Owner-controlled Kubo/IPFS publication is implemented and live-tested. Device-approved contract registration and release publishing have been verified on Dash mainnet, with public and LAN Stubs serving the published release. Automated storage payments and DEX conversion remain planned.

Layer Local workspace (default) Go-live publish target
Content Local mutable draft store Owner-controlled Kubo/IPFS (working); Filecoin replicas next
Metadata Local JSON store Dash Platform
Payments Local Dash QR / mark-paid Real Dash + DEX conversion for storage currencies
Admin UX Browser URL / npm Desktop menu launcher (Solvent-style)
Public serve Stub / static export Stub with simple config install

Install: docs/INSTALL.md · copy-ready AI setup prompt
Research: docs/DASH-RESEARCH-2026-07-15.md · docs/DEX-STORAGE-PAYMENTS-RESEARCH-2026-07-16.md
Specs: docs/SPECS.md · MVP: docs/MVP.md · Deploy: docs/DEPLOY.md · Plan: docs/IMPLEMENTATION-PLAN.md · Release: docs/RELEASING.md

Costs: mainnet publishing example · Near-term plan: shared contracts and optional migrations (not implemented).

The built-in AI is a site authoring and management agent. Its accepted harness policy defines draft autonomy, explicit publish/payment approval, Undo and tool boundaries, and distinguishes existing capabilities from enforcement still to be implemented.

DecentSite Auth is the Android approval companion. Its separate mainnet and testnet builds support identity import, reviewed contract setup, encrypted IPFS QR handoff and frozen content review with current/proposed previews, source and HTML views. Review controls collapse for phone-sized screens. Publishing review checks the owner key, available credits and remaining writes, then offers a version-specific fee estimate and device-authenticated publication. Durable receipts support interrupted-transaction recovery. Admin's Auth publication status saves prepared requests, checks their exact Platform publication after restart, and identifies drafts edited since review. See desktop publication checks. The estimate is not an enforced cap; see fee and recovery limits. Payment-wallet capabilities remain pending; the mainnet publication pilot is complete.

Dash names and separate ownership

Use a Dash name to identify a site owner. Names are the intended everyday interface; Decent Site resolves the underlying Dash identity for verification. The current deployment pilot still requires technical identity and contract configuration in some setup steps.

Different names belonging to one Dash identity are publicly linkable, as are sites published by that identity. To keep ownership personas separate, use separate Dash identities and keys, each with its own Dash name. Separate names alone are insufficient. Separate identities are not a guarantee of anonymity; funding activity, reused content and other information may still connect them. “Unlisted” means omitted from ordinary site lists, not hidden from public records.

For site owners (preferred)

One-time setup (needs Node 20+ on the machine once):

cd /path/to/DecentSite
npm run install-launcher    # builds, menu entry “Decent Site”, starts admin on login
npm run storage-setup      # choose local/remote Kubo or offline test storage

Then open Decent Site from the application menu (or Favorites).
URL: http://127.0.0.1:8791/

Private LAN access for a tablet/phone:

npm run admin-setup       # choose lan; receive generated password + LAN URL
npm run install-launcher

Admin refuses non-loopback binding without a strong password.

Public Stub on this or another machine:

npm run stub-setup          # interactive config → ~/.config/decent-site/
npm run install-stub        # user systemd service for the Stub

See docs/DEPLOY.md. Stop admin: scripts/decent-site-stop.sh or systemctl --user stop decent-site-admin.service.

Quick start (local workspace)

cd /path/to/DecentSite
export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh"   # if needed
npm install
npm run build
npm run seed                 # small demo site + publish
# or
npm run import:acceptance    # demo-site fixture (pages, posts, images, theme) + publish
npm run start:stub    # http://127.0.0.1:8790/
npm run start:admin   # http://127.0.0.1:8791/
# or: npm run launch  (admin + browser, Solvent-style)

Or use npm run dev:stub / npm run dev:admin for watch mode.

After import/publish, refresh the Stub URL (cache invalidates on lastUpdate).

URL Role
http://127.0.0.1:8791/ Admin (multi-site switcher, EasyMDE, local preview, AI chat, mock pay, publish, theme, static export)
http://127.0.0.1:8791/settings AI Settings (SpaceXAI / OpenAI / Venice / OpenRouter; API keys + SuperGrok/ChatGPT OAuth)
http://127.0.0.1:8791/preview/{siteId}/ Local themed preview (no Stub required; includes drafts)
http://127.0.0.1:8790/ Public Stub (one site per process via DECENT_SITE_KEY, default demo)

Data lives under ~/.local/share/decent-site/ (override with DECENT_SITE_DATA).

Put a site online

See docs/DEPLOY.md for VPS + reverse proxy (Stub) or static hosting (export).

# After publish: static files for nginx / Netlify / S3
npm run export:static -- --site-key=demo --out=./export/demo --base=https://your.domain

Layout

apps/
  admin/          # site owner UI
  stub/           # public HTML server
packages/
  core/           # shared types + data paths
  dash/           # DashMetadataStore + LocalDash*
  storage/        # ContentStorage + LocalContentStorage
  payments/       # PaymentService + LocalPaymentService
  render/         # Markdown → HTML + default theme
docs/
  contracts/      # document shape notes
acceptance/       # demo-site fixture (npm run import:acceptance)

License

CC0 1.0 Universal — public domain dedication. Use, modify, and redistribute freely. Trademarks (if any) are not waived.

Architecture (current)

Admin ──► Local drafts and previews
      └─► Prepare review ──► IPFS content + encrypted review QR
                                  │
Auth  ◄───────────────────────────┘
  └─► Owner review, fees and signing ──► Dash Platform metadata

Stub ──► Read Dash metadata + verified IPFS content ──► Cached public HTML

Start with Prepare review on the site page. Enter the owner’s Dash name and network once; Admin resolves the identity and remembers the publishing destination. First-time registration uses a separate setup QR approved in Auth. After registration, prepare a content review QR for Auth, then use Publication status to verify the result. An existing contract from another Admin can be connected through advanced setup using its Auth receipt; full global contract discovery remains future work. Admin never needs the owner’s signing keys.

Goals (product)

  • Dash identity owns site metadata; multi-site per user
  • Several people and AIs may draft; only the identity keyholder approves canonical publish
  • Optional Sign in with Dash on a published site is visitor login, not Admin publishing
  • Markdown content + assets off-chain (content-addressed)
  • Immutable releases select canonical published versions; local drafts remain private
  • Stub fetches, caches, serves plain HTML (minimal JS)
  • Real Dash metadata/payments and additional durable replicas

Prior art

dashpay/dash-website-sdk — mine for contracts/patterns; do not fork as this codebase.