Brain graph coming soon.
+diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index a634c85c..00000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.env.example b/.env.example
deleted file mode 100644
index 93fcbc16..00000000
--- a/.env.example
+++ /dev/null
@@ -1,2 +0,0 @@
-APPLICATION_ID=
-API_KEY=
diff --git a/.env.local.example b/.env.local.example
new file mode 100644
index 00000000..84443aee
--- /dev/null
+++ b/.env.local.example
@@ -0,0 +1,18 @@
+# ─── terp-docs local development environment ─────────────────────
+# Copy to .env.local and fill in values for local chain testing.
+#
+# Usage:
+# cp .env.local.example .env.local
+# # edit values, then:
+# pnpm dev
+
+# Chain environment: "local" for local devnet, unset for mainnet (morocco-1)
+NEXT_PUBLIC_CHAIN_ENV=local
+
+# Contract address overrides (deployed by local-test-env.sh)
+# terp721-account billboard contract
+NEXT_PUBLIC_TERP721_ACCOUNT=
+
+# DAO calendar contract (leave empty to resolve at runtime via billboard text records)
+NEXT_PUBLIC_CALENDAR=
+NEXT_PUBLIC_INFUSER=
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index cd6da0eb..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,5 +0,0 @@
-build
-node_modules
-*.cjs
-
-sidebars-*.js
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index efd1a26c..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "env": {
- "browser": true,
- "es2021": true,
- "node": true
- },
- "settings": {
- "react": {
- "version": "detect"
- }
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true
- },
- "ecmaVersion": "latest",
- "sourceType": "module"
- },
- "plugins": ["react"],
- "rules": {
- "react/prop-types": "off",
- "no-unused-vars": "warn"
- }
-}
diff --git a/.gitignore b/.gitignore
index 592206aa..df4f3a66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,21 +1,30 @@
-# Dependencies
+# deps
/node_modules
-# Production
-/build
-.env
+# generated content
+.source
+.vocs
+/dist
+# synced product docs (source of truth lives next to the code; see scripts/sync-product-docs.py)
+src/pages/guides/validators/frost-privval.mdx
-# Generated files
-.docusaurus
-.cache-loader
+# test & build
+/coverage
+/.next/
+/out/
+/build
+*.tsbuildinfo
-# Misc
+# misc
.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
+*.pem
+/.pnp
+.pnp.js
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+
+# others
+.env*.local
+.vercel
+next-env.d.ts
\ No newline at end of file
diff --git a/.gitpod.yml b/.gitpod.yml
deleted file mode 100644
index f2bf4259..00000000
--- a/.gitpod.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-# This configuration file was automatically generated by Gitpod.
-# Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml)
-# and commit this file to your remote git repository to share the goodness with others.
-
-# Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart
-
-tasks:
- - init: yarn install && yarn run build
- command: yarn run start
-
-
diff --git a/.husky/commit-msg b/.husky/commit-msg
deleted file mode 100755
index fe4c17a2..00000000
--- a/.husky/commit-msg
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx --no-install commitlint --edit ""
diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100755
index 6d395b88..00000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npm run lint:fix
diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg
deleted file mode 100755
index 847dd3e7..00000000
--- a/.husky/prepare-commit-msg
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-exec < /dev/tty && npx git-cz --hook || true
diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc
new file mode 100644
index 00000000..d97428cb
--- /dev/null
+++ b/.markdownlint-cli2.jsonc
@@ -0,0 +1,38 @@
+{
+ "config": {
+ "default": true,
+ "MD013": false,
+ "MD033": false,
+ "MD041": false,
+ "MD024": false,
+ "MD025": false,
+ "MD026": false,
+ "MD029": false,
+ "MD034": false,
+ "MD036": false,
+ "MD040": true,
+ "MD001": true,
+ "MD022": true,
+ "MD031": true,
+ "MD032": false,
+ "MD012": false,
+ "MD060": false,
+ "MD046": false,
+ "MD047": false,
+ "MD009": false,
+ "MD010": false,
+ "MD018": true,
+ "MD019": true,
+ "MD023": true,
+ "MD045": false,
+ "MD051": false,
+ "MD052": false,
+ "MD053": false,
+ "MD055": false,
+ "MD056": false,
+ "MD028": false,
+ "MD042": false
+ },
+ "globs": ["content/docs/**/*.{md,mdx}"],
+ "ignores": ["**/node_modules/**"]
+}
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 00000000..d9fdfb57
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,41 @@
+{
+ "default": true,
+ "MD001": true,
+ "MD003": false,
+ "MD004": false,
+ "MD007": false,
+ "MD009": false,
+ "MD010": false,
+ "MD012": false,
+ "MD013": false,
+ "MD014": false,
+ "MD022": false,
+ "MD024": false,
+ "MD025": false,
+ "MD026": false,
+ "MD028": false,
+ "MD029": false,
+ "MD030": false,
+ "MD031": false,
+ "MD032": false,
+ "MD033": false,
+ "MD034": false,
+ "MD035": false,
+ "MD036": false,
+ "MD037": false,
+ "MD039": false,
+ "MD040": true,
+ "MD041": false,
+ "MD042": false,
+ "MD045": false,
+ "MD046": false,
+ "MD047": false,
+ "MD051": false,
+ "MD052": false,
+ "MD053": false,
+ "MD055": false,
+ "MD056": false,
+ "MD058": false,
+ "MD059": false,
+ "MD060": false
+}
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index 97186f4a..00000000
--- a/.prettierignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# autogenerated files
-docs/*ui-kit/reference/**/*.md
diff --git a/.releaserc.js b/.releaserc.js
deleted file mode 100644
index 46f74d25..00000000
--- a/.releaserc.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const mainConfig = {
- branches: ['main'],
- plugins: [
- '@semantic-release/commit-analyzer',
- '@semantic-release/release-notes-generator',
- '@semantic-release/changelog',
- [
- '@semantic-release/npm',
- {
- npmPublish: false,
- tarballDir: 'dist'
- }
- ],
- [
- '@semantic-release/git',
- {
- assets: [
- 'package.json',
- 'package-lock.json',
- 'CHANGELOG.md'
- ],
- message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}\n\n\nskip-checks: true'
- }
- ],
- [
- '@semantic-release/github',
- {
- assets: 'dist/*.tgz'
- }
- ]
- ],
- repositoryUrl: 'https://github.com/terpnetwork/docs'
-};
-
-module.exports = mainConfig;
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 8f19618b..00000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "emmet.includeLanguages": {
- "mdx": "javascriptreact"
- }
-}
diff --git a/CHANGELOG.md b/ADDING_TO_ECO.md
similarity index 100%
rename from CHANGELOG.md
rename to ADDING_TO_ECO.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 14c49b48..304fce2c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,86 +1,199 @@
# Contributing
-The following is a set of guidelines for contributing. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
+We are thankful for you helping build the Terp Network docs. This guide covers the project layout, how to add things, and what we expect from contributions.
-## Table of Contents
-1. [Styleguides](#styleguides)
-2. [What should I know before I get started?](#what-should-i-know-before-i-get-started)
-3. [How Can I contribute?](#how-can-i-contribute)
-4. [Code Contribution](#code-contribution)
+## Requirements
-# Guidelines
+Be respectful. With our documentation, comes the relance on a stable, veriiable basis. If we are inaccurate or unorganized, we are not being respectful of our users time.
-The following are the guidelines we request you to follow in order to contribute to this project.
+## Expectations
-## Styleguides
+- Run `pnpm dev` and check your changes render before opening a PR.
+- Every MDX file needs valid frontmatter. At minimum: `title` (string). Empty files or null fields break the build.
+- Interactive components must be `'use client'` and wrapped in `not-prose` when used inside MDX.
+- Keep PRs focused. One feature or fix per branch.
-### Commit Messages
+## Page status and completeness
-The commit messages should follow the following pattern:
+Frontmatter `status` tells readers (and CI) how ready a page is:
+
+| Value | Meaning |
+|-------|---------|
+| `complete` | Runnable steps or full reference; links work |
+| `partial` | Real prose but gaps, TODOs, or scaffold markers |
+| `stub` | Heading outline only — **required** if the body is headings without substantive content |
+
+```yaml
+---
+title: Example
+description: One-line expectation for the reader
+status: complete
+---
+```
+
+**Every non-stub page should include:**
+
+- Accurate `description` (sets expectations; no “10 minutes” if empty)
+- `## Related Concepts` and/or `## Further Reading` with **real** links (siblings + cross-section when relevant)
+- For on-chain operations: a short verify habit — build/compare/decide (see trustlessness guides)
+
+**Heading-only pages** must set `status: stub`. Prefer linking the front door to complete pages instead of promising depth that does not exist.
+
+```bash
+# Detect unlabeled heading-only pages (exit 1 if any)
+bash scripts/check-stubs.sh
+
+# Frontmatter-only empties
+pnpm check-empty
+```
+
+### Scaffold markers (interactive TODOs)
+
+When a diagram/demo is planned but not built, use **exactly** this line form (machine-scanned):
+
+```markdown
+> **Scaffold:** `diagram` · id:`stable-kebab-id` · P2 · one-line purpose
+```
+
+| Field | Values |
+|-------|--------|
+| type | `diagram`, `flow`, `visualizer`, `demo`, `chart`, `other` |
+| id | unique kebab-case (`scf-…` auto-ids are fine) |
+| priority | `P1` front-door, `P2` core, `P3` polish |
+
+| Type | When | Prefer |
+|------|------|--------|
+| `diagram` | Static structure | Mermaid / `DynamicMermaidDiagram` |
+| `flow` | Ordered steps over time | Mermaid sequence/flowchart |
+| `visualizer` | User-tweaked inputs → outputs | `components/diagrams/` |
+| `demo` | Live chain/API interaction | Client component + query hooks |
+| `chart` | Distribution / timeline | Chart component or static SVG |
```bash
-feat: Description # if a new feature is added
-fix: Description # if a bug is fixed
-refactor: Description # if code is refactored
-docs: Description # if documentation is added
-lint: Description # if a lint issue is fixed
+# List / fail on unlabeled scaffolds
+pnpm check-scaffolds
+
+# Auto-label + regenerate inventory page
+pnpm check-scaffolds --label --write
+# → content/docs/resources/scaffolds.md
+# → scripts/scaffold-inventory.json
+```
+
+Do not invent product behavior on stub pages. Fill content only from source of truth (chain params, shipped tools, existing complete guides).
+
+## Project Layout
+
```
+app/
+ layout.tsx — root layout (QueryProvider + RootProvider only — no wallet)
+ global.css — all CSS: Tailwind imports, fumadocs + shadcn vars, brand theme
+ docs/ — Next.js route for doc pages
+
+lib/
+ queries/ — TanStack Query client, fetchers, provider (see its README)
+ hooks/ — React Query hooks, one file per domain (see its README)
+ openapi.ts — OpenAPI spec config and source generation
+ source.ts — fumadocs source loader (MDX + OpenAPI combined)
+ utils.ts — cn() via clsx + twMerge (used by shadcn components)
+ cn.ts — cn() via twMerge only (older code)
+
+components/
+ ui/ — shadcn primitives, managed by CLI (don't hand-edit)
+ calendar/ — community calendar feature
+ ai/ — AI page actions (copy, open-in-Claude, etc.)
+
+content/docs/ — MDX documentation pages
+static/api/ — OpenAPI YAML specs
+```
+
+Each `lib/` subfolder has its own README with usage examples and conventions. Start there when working on data fetching or hooks.
+
+## Adding Things
+
+### New hook
+
+Create `lib/hooks/use-
- Terp-Core' documentation portal, built with Docusaurus and inspired bye Dyte's configuration and template.
+ Terp-Core' documentation portal,
Terp-Core Docs
Explore the docs »
View Demo
·
- Report Bug
+ Report Bug
·
- Request Feature
+ Request Feature
+ You can open{' '} + + /docs + {' '} + and see the documentation. +
+Brain graph coming soon.
+No routes are defined in this OpenAPI specification yet.
+Topics:<\/p>\s*
Relevant Notes:<\/p>\s*
{fm.description}
} + +// {/* Body */} +// + +// {/* Topics */} +// {topics.length > 0 && ( +//+ Working group meetings & events +
++ Register Event +
+ +{dateStr}
+ {isLoading ? ( ++ {productMessage || + 'Query plane unavailable — day events cannot be listed right now.'} +
+ ) : !data?.events.length ? ( ++ No events on this day. +
+ ) : ( ++ {er.event.title} + {er.is_live && ( + + LIVE + + )} +
++ {safeTime(er.event.start_time)} + {' \u2013 '} + {safeTime(er.event.end_time)} + {er.event.timezone && ( + + {er.event.timezone} + + )} + {er.event.location && ( + + {' \u00b7 '} + {er.event.location} + + )} +
+ {er.event.description && ( ++ {er.event.description} +
+ )} +Community calendar
++ Live calendar + wallet connect is not hosted inside the docs (avoids + browser extension and third-party access prompts). Use community + channels under{' '} + + Get involved + + . +
++ Index lag: on-chain creates may take a short time to appear on the query + plane. +
+
+ {displayHex}
+
+
+ SHA-256 — Standard NIST hash function. Used for block headers, IBC commitments, and transaction hashing. Computed via @noble/hashes/sha256.
+
+ BLAKE3 — Fast hash function. Used for CosmWasm code hash and content-addressed storage. Computed via @noble/hashes/blake3.
+
+ Poseidon — ZK-friendly hash function. Used for ZK circuits and Merkle proofs inside proofs. Input is split into 31-byte BN254 field elements and hashed via poseidon-lite.
+
+ {mermaidDefinition}
+
+ Diagram render error
+{error}
+
+ {definition}
+
+ {shortHash(trie.hash)}
+ {description}
+
+ {href.split('/').pop()}
+
+ - -#### This is the output from `terpd status` - -```json -{ - "NodeInfo": { - "protocol_version": { - "p2p": "8", - "block": "11", - "app": "12" - }, - "id": "4017c243549b8bb4ad2b4cfe5d685aea450dcbcd", - "listen_addr": "209.34.206.35:26656", - "network": "tbd", - "version": "0.34.21", - "channels": "40202122233038606100", - "moniker": "artifact-rpc", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "SyncInfo": { - "latest_block_hash": "FBA710794C5A9C61523D7CCE78F2F51C7CD7A6C33A154C078E423859D7243E30", - "latest_app_hash": "EC15E54C7BF66EDC9FEF561969B756CAA58933598FCBF72FE7727DE78F0D8DCF", - "latest_block_height": "6335644", - "latest_block_time": "2022-10-07T08:45:15.929540892Z", - "earliest_block_hash": "38EAF21C7C4A786D73FFAADA32FD3D4B2B683AF2050B41CF5E5924D20AF4EEBC", - "earliest_app_hash": "808B1D7123C385D52E6A5BC544FD763D156526751DEB401DADB18C717D567DC0", - "earliest_block_height": "6287475", - "earliest_block_time": "2022-10-03T22:54:17.633996278Z", - "catching_up": false - }, - "ValidatorInfo": { - "Address": "369E2DCC99CD68400753812BBDF54CD5380FBAC7", - "PubKey": { - "type": "tendermint/PubKeyEd25519", - "value": "mhb68/B38wFLH/5pDgvPKNbKyKdwduIKxJySz0GV/uI=" - }, - "VotingPower": "0" - } -} -``` - -
-