- TypeScript 69.5%
- Kotlin 19.6%
- JavaScript 7.3%
- Shell 2.7%
- CSS 0.5%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| acceptance/demo-site | ||
| apps | ||
| assets | ||
| config | ||
| docs | ||
| packages | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| AGENTS.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.base.json | ||
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.