From 4e9394d406969793cbc42a233bd4c2f3088a12f1 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Wed, 13 May 2026 09:56:36 -0400 Subject: [PATCH 1/6] Update and remove various links --- pages/_meta.js | 20 ++++---------------- theme.config.tsx | 5 ++--- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/pages/_meta.js b/pages/_meta.js index 8101508..237d74b 100644 --- a/pages/_meta.js +++ b/pages/_meta.js @@ -31,8 +31,8 @@ export default { "type": "separator", "title": "Resources" }, - "-- ext-use-tally-6": { - "title": "Use Tally", + "-- ext-use-platform-6": { + "title": "Use Platform", "type": "page", "href": "https://www.tally.xyz", "newWindow": true @@ -40,25 +40,13 @@ export default { "-- ext-blog-7": { "title": "Blog", "type": "page", - "href": "https://blog.tally.xyz", - "newWindow": true - }, - "-- ext-the-tally-podcast-8": { - "title": "The Tally podcast", - "type": "page", - "href": "https://t.co/rOkH3FYeYA", - "newWindow": true - }, - "-- ext-newsletter-9": { - "title": "Newsletter", - "type": "page", - "href": "https://newsletter.tally.xyz", + "href": "https://scopelift.co/blog", "newWindow": true }, "-- ext-twitter-x-10": { "title": "Twitter / X", "type": "page", - "href": "https://x.com/tallyxyz", + "href": "https://x.com/scopelift", "newWindow": true }, "-- hr-11": { diff --git a/theme.config.tsx b/theme.config.tsx index d0a728c..d04a534 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -11,11 +11,10 @@ const config: DocsThemeConfig = { Column, } as never, logo: Tally Docs, - project: { - link: "https://github.com/withtally/gov-platform-docs", - }, docsRepositoryBase: "https://github.com/withtally/gov-platform-docs/tree/main", + editLink: { component: null }, + feedback: { content: null }, footer: { content: `© ${new Date().getFullYear()} Tally`, }, From ac582c0f4842ff057403a41e6447e5f9bc77c629 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Wed, 13 May 2026 17:24:37 -0400 Subject: [PATCH 2/6] Improve link appearence & move notifications content --- components/link.tsx | 7 ++++--- pages/_app.tsx | 1 + pages/_meta.js | 1 - pages/how-to-use-tally/_meta.js | 1 + .../get-notifications-on-tally.mdx} | 0 pages/tally-features/_meta.js | 3 --- pages/tally-features/enterprise-features/_meta.js | 3 --- styles/globals.css | 15 +++++++++++++++ 8 files changed, 21 insertions(+), 10 deletions(-) rename pages/{tally-features/enterprise-features/notifications.mdx => how-to-use-tally/get-notifications-on-tally.mdx} (100%) delete mode 100644 pages/tally-features/_meta.js delete mode 100644 pages/tally-features/enterprise-features/_meta.js create mode 100644 styles/globals.css diff --git a/components/link.tsx b/components/link.tsx index b0c4f1c..08df136 100644 --- a/components/link.tsx +++ b/components/link.tsx @@ -5,18 +5,19 @@ const EXTERNAL = /^(?:https?:)?\/\//i; const PROTOCOLS = /^(?:mailto|tel):/i; export function Link(props: AnchorHTMLAttributes) { - const { href = "", children, ...rest } = props; + const { href = "", children, className, ...rest } = props; + const cls = ["prose-link", className].filter(Boolean).join(" "); if (EXTERNAL.test(href) || PROTOCOLS.test(href)) { return ( - + {children} ); } return ( - + {children} ); diff --git a/pages/_app.tsx b/pages/_app.tsx index 956fa84..6d7d078 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,4 +1,5 @@ import type { AppProps } from "next/app"; +import "../styles/globals.css"; export default function App({ Component, pageProps }: AppProps) { return ; diff --git a/pages/_meta.js b/pages/_meta.js index 237d74b..d2ce1a4 100644 --- a/pages/_meta.js +++ b/pages/_meta.js @@ -16,7 +16,6 @@ export default { "title": "How to Use Tally" }, "how-to-use-tally": "How to Use Tally", - "tally-features": "Tally Features", "-- sep-3": { "type": "separator", "title": "Set up & Technical Documentation" diff --git a/pages/how-to-use-tally/_meta.js b/pages/how-to-use-tally/_meta.js index d7a903f..13628ee 100644 --- a/pages/how-to-use-tally/_meta.js +++ b/pages/how-to-use-tally/_meta.js @@ -6,6 +6,7 @@ export default { "stake-on-tally": "Stake on Tally", "participate-in-security-council-elections": "Participate in Security Council Elections", "use-tally-as-a-safe-multisig": "Use Tally as a Safe multisig", + "get-notifications-on-tally": "Get notifications on Tally", "using-ledger-with-solana": "Using Ledger with Solana", "creating-proposals": "Creating Proposals", "proposals": "Proposals" diff --git a/pages/tally-features/enterprise-features/notifications.mdx b/pages/how-to-use-tally/get-notifications-on-tally.mdx similarity index 100% rename from pages/tally-features/enterprise-features/notifications.mdx rename to pages/how-to-use-tally/get-notifications-on-tally.mdx diff --git a/pages/tally-features/_meta.js b/pages/tally-features/_meta.js deleted file mode 100644 index f4a8596..0000000 --- a/pages/tally-features/_meta.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - "enterprise-features": "Enterprise Features" -}; diff --git a/pages/tally-features/enterprise-features/_meta.js b/pages/tally-features/enterprise-features/_meta.js deleted file mode 100644 index 11c368f..0000000 --- a/pages/tally-features/enterprise-features/_meta.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - "notifications": "Get notifications on Tally" -}; diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..60d6558 --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,15 @@ +.prose-link { + color: #2563eb; + text-decoration: underline; + text-decoration-color: rgba(37, 99, 235, 0.4); + text-underline-offset: 2px; +} + +.prose-link:hover { + text-decoration-color: currentColor; +} + +.dark .prose-link { + color: #60a5fa; + text-decoration-color: rgba(96, 165, 250, 0.4); +} From 24b1eccbf7d88b0c234457614a26428e32024999 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Wed, 13 May 2026 17:41:27 -0400 Subject: [PATCH 3/6] Avoid dupelication and unneccessary collapse of side menu headers --- pages/_meta.js | 10 +++++----- styles/globals.css | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/pages/_meta.js b/pages/_meta.js index d2ce1a4..56f667a 100644 --- a/pages/_meta.js +++ b/pages/_meta.js @@ -5,27 +5,27 @@ export default { "type": "separator", "title": "Token sales" }, - "token-sales": "Token sales", + "token-sales": { "title": "Token sales", "display": "children" }, "-- sep-1": { "type": "separator", "title": "On-chain operations" }, - "on-chain-operations": "On-chain operations", + "on-chain-operations": { "title": "On-chain operations", "display": "children" }, "-- sep-2": { "type": "separator", "title": "How to Use Tally" }, - "how-to-use-tally": "How to Use Tally", + "how-to-use-tally": { "title": "How to Use Tally", "display": "children" }, "-- sep-3": { "type": "separator", "title": "Set up & Technical Documentation" }, - "set-up-and-technical-documentation": "Set up & Technical Documentation", + "set-up-and-technical-documentation": { "title": "Set up & Technical Documentation", "display": "children" }, "-- sep-4": { "type": "separator", "title": "Education" }, - "user-guides": "Education", + "user-guides": { "title": "Education", "display": "children" }, "-- sep-5": { "type": "separator", "title": "Resources" diff --git a/styles/globals.css b/styles/globals.css index 60d6558..838a985 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -13,3 +13,33 @@ color: #60a5fa; text-decoration-color: rgba(96, 165, 250, 0.4); } + +/* Sidebar: enlarge section header separators */ +.nextra-sidebar-container ._font-semibold._text-sm { + font-size: 0.9375rem; + letter-spacing: 0.005em; +} + +/* Sidebar: indent each section's items + faint vertical line. + The line is a pseudo-element that extends 0.25rem past the bottom of each + li to bridge the gap-1 between siblings, so the line reads as continuous. */ +.nextra-sidebar-container .nextra-menu-desktop > li:not(._font-semibold) { + position: relative; + margin-left: 0.5rem; + padding-left: 0.75rem; +} + +.nextra-sidebar-container .nextra-menu-desktop > li:not(._font-semibold)::before { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: -0.25rem; + width: 1px; + background: rgba(0, 0, 0, 0.08); + pointer-events: none; +} + +.dark .nextra-sidebar-container .nextra-menu-desktop > li:not(._font-semibold)::before { + background: rgba(255, 255, 255, 0.1); +} From 2170bafc4095476077d2846b8aee74351f1cf476 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Wed, 13 May 2026 17:58:40 -0400 Subject: [PATCH 4/6] Fix broken airdrops section and typo --- .../delegate-on-tally/delegates-page.mdx | 2 +- .../navigate-the-tally-homepage.mdx | 2 +- .../custom-actions/index.mdx | 8 +- .../proposals/creating-proposals/index.mdx | 2 +- .../creating-proposals/swaps/index.mdx | 6 +- .../creating-proposals/swaps/swaps-faqs.mdx | 2 +- .../how-to-use-tally/stake-on-tally/index.mdx | 6 +- .../vote-with-a-gnosis-safe.mdx | 2 +- .../advanced-voting/index.mdx | 6 +- .../advanced-voting/signal-voting/index.mdx | 2 +- .../relay/gasless-voting.mdx | 2 +- pages/on-chain-operations/_meta.js | 2 +- .../governance/features.mdx | 8 +- .../on-chain-operations/governance/index.mdx | 26 +++---- .../governance/integrations/index.mdx | 2 +- .../governance/integrations/safe.mdx | 2 +- ...m-dao-security-council-elections-guide.mdx | 10 +-- .../delegate-compensation.mdx | 2 +- .../incentives-and-staking/faq.mdx | 2 +- .../incentives-and-staking/index.mdx | 18 ++--- .../staking-customizations.mdx | 2 +- .../tally-partner-benefits.mdx | 12 +-- .../on-chain-operations/token-launch/_meta.js | 2 +- .../token-launch/airdrops.mdx | 2 +- .../token-launch/features.mdx | 6 +- .../token-launch/index.mdx | 14 ++-- .../vesting-and-disitribution.mdx | 2 +- .../deploy-a-governance-token.mdx | 2 +- .../deploy-a-dao-with-token-voting/index.mdx | 2 +- .../how-to-pick-governor-parameters.mdx | 10 +-- .../deploying-daos/index.mdx | 8 +- .../compound-governor-bravo.mdx | 8 +- .../smart-contract-compatibility/index.mdx | 8 +- .../supported-use-cases-faq.mdx | 2 +- .../governor-proposals/index.mdx | 2 +- .../managing-a-dao/dao-admins.mdx | 4 +- .../managing-a-dao/dao-settings.mdx | 4 +- .../managing-a-dao/index.mdx | 6 +- .../liquid-staking/index.mdx | 2 +- .../staking-contracts/index.mdx | 10 +-- .../gnosis-safe.mdx | 8 +- .../using-governor-with-gnosis-safe/index.mdx | 6 +- ...module-for-subdaos-and-grants-programs.mdx | 4 +- pages/token-sales/getting-started.mdx | 14 ++-- .../user-guides/dao-best-practices/index.mdx | 4 +- .../user-guides/governance-concepts/index.mdx | 10 +-- .../governance-frameworks/index.mdx | 8 +- .../index-of-daos/daos-on-tally/index.mdx | 16 ++-- pages/user-guides/index-of-daos/index.mdx | 2 +- .../user-guides/intro-to-governance/index.mdx | 4 +- scripts/links-to-absolute.mjs | 75 +++++++++++++++++++ 51 files changed, 222 insertions(+), 149 deletions(-) create mode 100644 scripts/links-to-absolute.mjs diff --git a/pages/how-to-use-tally/delegate-on-tally/delegates-page.mdx b/pages/how-to-use-tally/delegate-on-tally/delegates-page.mdx index 2845cf4..53cd415 100644 --- a/pages/how-to-use-tally/delegate-on-tally/delegates-page.mdx +++ b/pages/how-to-use-tally/delegate-on-tally/delegates-page.mdx @@ -7,7 +7,7 @@ description: >- # Delegates Page \ -To navigate to the Delegates page, click Community in the [organization homepage.](../navigate-the-tally-homepage) +To navigate to the Delegates page, click Community in the [organization homepage.](/how-to-use-tally/navigate-the-tally-homepage) diff --git a/pages/how-to-use-tally/navigate-the-tally-homepage.mdx b/pages/how-to-use-tally/navigate-the-tally-homepage.mdx index 899e4d9..760c717 100644 --- a/pages/how-to-use-tally/navigate-the-tally-homepage.mdx +++ b/pages/how-to-use-tally/navigate-the-tally-homepage.mdx @@ -44,7 +44,7 @@ Below, the Gnosis Safes section displays information on any linked Gnosis Safes. ![](/images/dao-homepage-screenshot-5-1.png) -The Admins section at the bottom shows the [organization admins](../set-up-and-technical-documentation/managing-a-dao/dao-admins) - users who are able to update settings on the organization's homepage. +The Admins section at the bottom shows the [organization admins](/set-up-and-technical-documentation/managing-a-dao/dao-admins) - users who are able to update settings on the organization's homepage. ### More diff --git a/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx index 9c240e1..e8947fa 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx +++ b/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx @@ -12,10 +12,10 @@ Custom Actions on Tally provide a versatile way to create and manage organizatio Tally has recipe books for the following custom actions: -* [Deploying protocols like Uniswap v3 on new chains](chain-deployment-of-uniswap-v3) -* [Implementing token vesting schemes](token-vesting-with-hedgey) -* [Setting up token grants](token-grants-with-hedgey) -* [Managing streaming payments](streaming-payments-with-sablier) +* [Deploying protocols like Uniswap v3 on new chains](/how-to-use-tally/proposals/creating-proposals/custom-actions/chain-deployment-of-uniswap-v3) +* [Implementing token vesting schemes](/how-to-use-tally/proposals/creating-proposals/custom-actions/token-vesting-with-hedgey) +* [Setting up token grants](/how-to-use-tally/proposals/creating-proposals/custom-actions/token-grants-with-hedgey) +* [Managing streaming payments](/how-to-use-tally/proposals/creating-proposals/custom-actions/streaming-payments-with-sablier) Each action involves targeting specific contract addresses, selecting appropriate contract methods, and setting calldata according to the needs of the specific operation being proposed. This flexibility allows for a wide range of governance activities to be conducted seamlessly. diff --git a/pages/how-to-use-tally/proposals/creating-proposals/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals/index.mdx index 3be6497..3a50cde 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/index.mdx +++ b/pages/how-to-use-tally/proposals/creating-proposals/index.mdx @@ -14,7 +14,7 @@ To submit an on-chain proposal, you must have sufficient voting power to meet th ### Create a Proposal -Visit the [organization page](../../navigate-the-tally-homepage) of the organization you'd like to create a proposal for, then click the **Create new proposal** button at the top of the page. +Visit the [organization page](/how-to-use-tally/navigate-the-tally-homepage) of the organization you'd like to create a proposal for, then click the **Create new proposal** button at the top of the page. ![](/images/screenshot-2023-08-25-at-2-10-18-pm.png) diff --git a/pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx index a2b68e0..33e8ef5 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx +++ b/pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx @@ -8,10 +8,10 @@ Empower your organization by creating an on-chain proposal on Tally using the Sw ### Swap Proposal in 5 Steps -1. A organization member formulates a swap proposal, specifying the assets to trade and the amount to sell. The UI provides an [estimated quote](./#where-do-the-quotes-come-from) for the trade. -2. After running validations, the recipe prepares [executable](./#what-is-in-the-swap-recipe-executable) code – including a call to [Milkman](./#what-is-milkman) – for execution upon proposal execution. +1. A organization member formulates a swap proposal, specifying the assets to trade and the amount to sell. The UI provides an [estimated quote](/how-to-use-tally/proposals/creating-proposals/swaps/#where-do-the-quotes-come-from) for the trade. +2. After running validations, the recipe prepares [executable](/how-to-use-tally/proposals/creating-proposals/swaps/#what-is-in-the-swap-recipe-executable) code – including a call to [Milkman](/how-to-use-tally/proposals/creating-proposals/swaps/#what-is-milkman) – for execution upon proposal execution. 3. Upon proposal passage and execution, the proposal puts the Milkman market order on-chain. 4. An offchain [Milkman bot](https://github.com/charlesndalton/milkman-bot) listens for the swap request and forwards it to the CoW protocol. 5. CoW solvers compete to fill the order at the best price. -### _More questions? See_ [swaps-faqs.md](swaps-faqs.md "mention")_._ +### _More questions? See_ [swaps-faqs.md](/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs.md "mention")_._ diff --git a/pages/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs.mdx b/pages/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs.mdx index 7cea46b..abf3e87 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs.mdx +++ b/pages/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs.mdx @@ -28,7 +28,7 @@ The default price checker on Tally uses Uniswap v3 as a price oracle and sets a ### What happens if the price checker doesn't see a good price? -If the price checker rejects fills with unfavorable prices, the assets to sell remain in the Milkman order contract. To return those funds to the organization's treasury, the Milkman order needs to be canceled with another on-chain proposal. See [How do I cancel an order?](swaps-faqs#how-do-i-cancel-an-order). +If the price checker rejects fills with unfavorable prices, the assets to sell remain in the Milkman order contract. To return those funds to the organization's treasury, the Milkman order needs to be canceled with another on-chain proposal. See [How do I cancel an order?](/how-to-use-tally/proposals/creating-proposals/swaps/swaps-faqs#how-do-i-cancel-an-order). *** diff --git a/pages/how-to-use-tally/stake-on-tally/index.mdx b/pages/how-to-use-tally/stake-on-tally/index.mdx index 6a25737..4d77f26 100644 --- a/pages/how-to-use-tally/stake-on-tally/index.mdx +++ b/pages/how-to-use-tally/stake-on-tally/index.mdx @@ -4,15 +4,15 @@ description: Stake tokens on Tally. # Stake on Tally -Staking is the easiest way to earn rewards and participate in governance. To learn more about why protocols are using Tally Staking to accrue value, visit [Incentives & staking](../../on-chain-operations/incentives-and-staking/). +Staking is the easiest way to earn rewards and participate in governance. To learn more about why protocols are using Tally Staking to accrue value, visit [Incentives & staking](/on-chain-operations/incentives-and-staking/). ### Protocols with Active Staking Token holders can now stake OBOL and RARI on Tally and earn rewards. To learn more, read the full announcements for [stOBOL](https://x.com/tallyxyz/status/1928152996099088727) and [stRARI](https://x.com/rarifoundation/status/1935322769509822969). -[How To Stake Obol](how-to-stake-obol) +[How To Stake Obol](/how-to-use-tally/stake-on-tally/how-to-stake-obol) -[How To Stake Obol](how-to-stake-obol) +[How To Stake Obol](/how-to-use-tally/stake-on-tally/how-to-stake-obol) ### ZKsync staking diff --git a/pages/how-to-use-tally/use-tally-as-a-safe-multisig/vote-with-a-gnosis-safe.mdx b/pages/how-to-use-tally/use-tally-as-a-safe-multisig/vote-with-a-gnosis-safe.mdx index 075c2f6..fcd8f17 100644 --- a/pages/how-to-use-tally/use-tally-as-a-safe-multisig/vote-with-a-gnosis-safe.mdx +++ b/pages/how-to-use-tally/use-tally-as-a-safe-multisig/vote-with-a-gnosis-safe.mdx @@ -18,7 +18,7 @@ Next, select the Safe you want to sign in as from the menu: ![](/images/cleanshot-2023-05-02-at-12-35-46-2x.png) -Now you can update your Safe's profile and make onchain transactions. To learn more about making onchain transactions using your Safe, see [.](./ "mention"). +Now you can update your Safe's profile and make onchain transactions. To learn more about making onchain transactions using your Safe, see [.](/how-to-use-tally/use-tally-as-a-safe-multisig/ "mention"). To switch back to your personal profile, simply select **Switch to...** from the profile drop-down menu. diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx index 7e8fe1d..8ff4085 100644 --- a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx +++ b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx @@ -3,8 +3,8 @@ Tally supports a variety of on-chain voting mechanisms. -[Flexible Voting Extension](flexible-voting-extension) +[Flexible Voting Extension](/how-to-use-tally/voting-on-proposals/advanced-voting/flexible-voting-extension) -[signal-voting](signal-voting/) +[signal-voting](/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/) -[Private Voting](private-voting) +[Private Voting](/how-to-use-tally/voting-on-proposals/advanced-voting/private-voting) diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx index 97b9c47..436b343 100644 --- a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx +++ b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx @@ -1,7 +1,7 @@ # Signal voting -[Multisig governance](../../../use-tally-as-a-safe-multisig/) is typically paired with a signal voting mechanism to maintain legitimacy. As an example, Yearn, Synthetix, and Sushiswap all use the Snapshot voting tool to let token holders make key decisions and delegate authority. +[Multisig governance](/how-to-use-tally/use-tally-as-a-safe-multisig/) is typically paired with a signal voting mechanism to maintain legitimacy. As an example, Yearn, Synthetix, and Sushiswap all use the Snapshot voting tool to let token holders make key decisions and delegate authority. After considering a proposal in the community's discussion venue, a signal vote will be held to assess support. While this typically involves voting with Snapshot, in some cases communities may use on-chain signal voting (eg. early Yearn [ygov.finance voting tool](https://ygov.finance/vote)) or off chain voting which is weighted by user accounts instead of token holdings (eg. polls in Discourse forums or Discord). diff --git a/pages/how-to-use-tally/voting-on-proposals/relay/gasless-voting.mdx b/pages/how-to-use-tally/voting-on-proposals/relay/gasless-voting.mdx index bf363cd..7ddc6e0 100644 --- a/pages/how-to-use-tally/voting-on-proposals/relay/gasless-voting.mdx +++ b/pages/how-to-use-tally/voting-on-proposals/relay/gasless-voting.mdx @@ -6,7 +6,7 @@ description: Gasless voting enables free voting for tokenholder on Tally Voting has [become unaffordable](https://x.com/LefterisJP/status/1766881140713935136?s=20) for many delegates on Ethereum L1. Tally provides the infrastructure for organizations to fund a budget for gasless voting and execute voting transactions via a relayer service. The mechanism operates seamlessly as the allocated budget is submitted to Tally for the facilitation of these transactions. -To learn more about how relay works & why it's important read the [Relay section.](./) +To learn more about how relay works & why it's important read the [Relay section.](/how-to-use-tally/voting-on-proposals/relay/) diff --git a/pages/on-chain-operations/_meta.js b/pages/on-chain-operations/_meta.js index 71cfa59..0a88e69 100644 --- a/pages/on-chain-operations/_meta.js +++ b/pages/on-chain-operations/_meta.js @@ -1,5 +1,5 @@ export default { - "token-launch": "Airdops", + "token-launch": "Token launch", "incentives-and-staking": "Incentives & staking", "governance": "Governance", "tally-partner-benefits": "Tally partner benefits", diff --git a/pages/on-chain-operations/governance/features.mdx b/pages/on-chain-operations/governance/features.mdx index b11e6f8..0dfd11f 100644 --- a/pages/on-chain-operations/governance/features.mdx +++ b/pages/on-chain-operations/governance/features.mdx @@ -8,21 +8,21 @@ description: Key features of Tally's governance solutions Secure, transparent, and efficient voting mechanisms ensure all governance decisions reflect the will of the community. Collaborative proposal creation tools enable multiple contributors to work together seamlessly, while no-code fund transfers simplify complex governance actions without requiring coding skills. Approved proposals execute automatically with support for arbitrary executable actions that run directly through the governance system. -Learn more about [voting](../../how-to-use-tally/voting-on-proposals/) and delegating on [Tally](../../how-to-use-tally/delegate-on-tally/). +Learn more about [voting](/how-to-use-tally/voting-on-proposals/) and delegating on [Tally](/how-to-use-tally/delegate-on-tally/). ### Delegation -Enable token holders to delegate voting power to trusted representatives without transferring token ownership. Tally's delegation system supports full delegation, [partial delegation](../../how-to-use-tally/delegate-on-tally/partial-delegation) across multiple delegates, and integrations with [staking](../incentives-and-staking/) and [token launch.](../token-launch/) +Enable token holders to delegate voting power to trusted representatives without transferring token ownership. Tally's delegation system supports full delegation, [partial delegation](/how-to-use-tally/delegate-on-tally/partial-delegation) across multiple delegates, and integrations with [staking](/on-chain-operations/incentives-and-staking/) and [token launch.](/on-chain-operations/token-launch/) ### **Multichain support** -Enable cross-chain governance with [Multigov](multigov) to meet token holders where they are. Organization members can govern from any chain, with support for Solana, Ethereum, and EVM-compatible L2s. MultiGov lowers barriers to participation by reducing gas costs for L1 governance and allows protocols to expand to new networks while maintaining unified governance. +Enable cross-chain governance with [Multigov](/on-chain-operations/governance/multigov) to meet token holders where they are. Organization members can govern from any chain, with support for Solana, Ethereum, and EVM-compatible L2s. MultiGov lowers barriers to participation by reducing gas costs for L1 governance and allows protocols to expand to new networks while maintaining unified governance. ### **Gasless voting and delegation (Relay)** Remove financial barriers to governance participation by eliminating gas fees for voting and delegation. Relay is a sponsorship system where organizations cover transaction costs for members' governance activities. -[Learn more](../../how-to-use-tally/voting-on-proposals/relay/). +[Learn more](/how-to-use-tally/voting-on-proposals/relay/). ### **Chain integration** diff --git a/pages/on-chain-operations/governance/index.mdx b/pages/on-chain-operations/governance/index.mdx index 396460a..878407d 100644 --- a/pages/on-chain-operations/governance/index.mdx +++ b/pages/on-chain-operations/governance/index.mdx @@ -10,26 +10,26 @@ Protocols use Tally's governance solutions to enable decentralized decision-maki #### **Key features of Tally's governance solutions:** -* [Voting and proposal management](features)**:** Secure, transparent voting mechanisms with collaborative proposal creation tools and no-code fund transfers. Approved proposals execute automatically with support for arbitrary executable actions. -* [Delegation](features)**:** Enable token holders to delegate voting power to trusted representatives without transferring token ownership. Supports full delegation, partial delegation across multiple delegates, and integrations with staking and token launch. -* [Security council elections](security-council-elections/arbitrum-dao-security-council-elections-guide)**:** Establish democratic elections for security councils that safeguard protocol interests. Tally's custom-built council elections ensure the highest standards of integrity in selecting leadership. -* [Optimstic governance:](optimistic-governance) Streamline decision-making by assuming proposals pass unless explicitly vetoed by delegates, enabling faster execution while maintaining community oversight for critical decisions. -* [Delegate compensation](../incentives-and-staking/delegate-compensation)**:** Reward active governance participants for their time, expertise, and contributions. Systems ensure only engaged and accountable delegates are rewarded through minimum reputation scores or participation thresholds. -* [Multichain support](multigov)**:** Enable cross-chain governance with MultiGov to meet token holders where they are. Organization members can govern from any chain, with support for Solana, Ethereum, and EVM-compatible L2s. -* [Gasless voting and delegation](features#gasless-voting-and-delegation-relay)**:** Remove financial barriers to governance participation by eliminating gas fees for voting and delegation. Organizations cover transaction costs for members' governance activities. +* [Voting and proposal management](/on-chain-operations/governance/features)**:** Secure, transparent voting mechanisms with collaborative proposal creation tools and no-code fund transfers. Approved proposals execute automatically with support for arbitrary executable actions. +* [Delegation](/on-chain-operations/governance/features)**:** Enable token holders to delegate voting power to trusted representatives without transferring token ownership. Supports full delegation, partial delegation across multiple delegates, and integrations with staking and token launch. +* [Security council elections](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide)**:** Establish democratic elections for security councils that safeguard protocol interests. Tally's custom-built council elections ensure the highest standards of integrity in selecting leadership. +* [Optimstic governance:](/on-chain-operations/governance/optimistic-governance) Streamline decision-making by assuming proposals pass unless explicitly vetoed by delegates, enabling faster execution while maintaining community oversight for critical decisions. +* [Delegate compensation](/on-chain-operations/incentives-and-staking/delegate-compensation)**:** Reward active governance participants for their time, expertise, and contributions. Systems ensure only engaged and accountable delegates are rewarded through minimum reputation scores or participation thresholds. +* [Multichain support](/on-chain-operations/governance/multigov)**:** Enable cross-chain governance with MultiGov to meet token holders where they are. Organization members can govern from any chain, with support for Solana, Ethereum, and EVM-compatible L2s. +* [Gasless voting and delegation](/on-chain-operations/governance/features#gasless-voting-and-delegation-relay)**:** Remove financial barriers to governance participation by eliminating gas fees for voting and delegation. Organizations cover transaction costs for members' governance activities. ## Get started -[Optimistic Governance](optimistic-governance) +[Optimistic Governance](/on-chain-operations/governance/optimistic-governance) -[security-council-elections](security-council-elections/) +[security-council-elections](/on-chain-operations/governance/security-council-elections/) -[Multigov](multigov) +[Multigov](/on-chain-operations/governance/multigov) -[Staking Customizations](../incentives-and-staking/staking-customizations) +[Staking Customizations](/on-chain-operations/incentives-and-staking/staking-customizations) -[integrations](integrations/) +[integrations](/on-chain-operations/governance/integrations/) -[intro-to-governance](../../user-guides/intro-to-governance/) +[intro-to-governance](/user-guides/intro-to-governance/) Ready to launch governance? [Talk to our team to get started](http://tally.xyz/contact). diff --git a/pages/on-chain-operations/governance/integrations/index.mdx b/pages/on-chain-operations/governance/integrations/index.mdx index 436cbce..a233fc9 100644 --- a/pages/on-chain-operations/governance/integrations/index.mdx +++ b/pages/on-chain-operations/governance/integrations/index.mdx @@ -10,7 +10,7 @@ Extend Tally's governance platform with integrations that enhance security, comm Create or link a Safe to your organization for secure multi-signature treasury management. Managing your Safe through Tally enables access to all governance features maintaining the security of multi-sig approvals. -For help using Tally as a Safe multisig, [read more](../../../how-to-use-tally/use-tally-as-a-safe-multisig/). +For help using Tally as a Safe multisig, [read more](/how-to-use-tally/use-tally-as-a-safe-multisig/). ### **Discourse** diff --git a/pages/on-chain-operations/governance/integrations/safe.mdx b/pages/on-chain-operations/governance/integrations/safe.mdx index 05cd344..ddd42f4 100644 --- a/pages/on-chain-operations/governance/integrations/safe.mdx +++ b/pages/on-chain-operations/governance/integrations/safe.mdx @@ -13,7 +13,7 @@ Creating a Gnosis Safe on Tally creates the exact same instance of Gnosis’s sm -For help using Tally as a Safe multisig, read or watch our [tutorial](../../../how-to-use-tally/use-tally-as-a-safe-multisig/). +For help using Tally as a Safe multisig, read or watch our [tutorial](/how-to-use-tally/use-tally-as-a-safe-multisig/). diff --git a/pages/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide.mdx b/pages/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide.mdx index 8b22d5c..2619398 100644 --- a/pages/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide.mdx +++ b/pages/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide.mdx @@ -19,15 +19,15 @@ Elections are conducted every 6 months to appoint members to these groups. Each On this page, you can learn about: -[#election-rounds](arbitrum-dao-security-council-elections-guide#election-rounds "mention") +[#election-rounds](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide#election-rounds "mention") -[#navigating-the-election](arbitrum-dao-security-council-elections-guide#navigating-the-election "mention") +[#navigating-the-election](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide#navigating-the-election "mention") -[#becoming-a-candidate](arbitrum-dao-security-council-elections-guide#becoming-a-candidate "mention") +[#becoming-a-candidate](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide#becoming-a-candidate "mention") -[#registering-a-candidate-profile](arbitrum-dao-security-council-elections-guide#registering-a-candidate-profile "mention") +[#registering-a-candidate-profile](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide#registering-a-candidate-profile "mention") -[#voting-for-nominees](arbitrum-dao-security-council-elections-guide#voting-for-nominees "mention") +[#voting-for-nominees](/on-chain-operations/governance/security-council-elections/arbitrum-dao-security-council-elections-guide#voting-for-nominees "mention") ### Election Rounds diff --git a/pages/on-chain-operations/incentives-and-staking/delegate-compensation.mdx b/pages/on-chain-operations/incentives-and-staking/delegate-compensation.mdx index 903c798..879f423 100644 --- a/pages/on-chain-operations/incentives-and-staking/delegate-compensation.mdx +++ b/pages/on-chain-operations/incentives-and-staking/delegate-compensation.mdx @@ -21,7 +21,7 @@ Design compensation structures that reward quality participation, not just votin ### Case study: Obol's delegate compensation -Obol uses Tally's infrastructure to reward governance participants based on [Delegate Reputation Score (DRS)](../governance/delegate-reputation-score-drs). +Obol uses Tally's infrastructure to reward governance participants based on [Delegate Reputation Score (DRS)](/on-chain-operations/governance/delegate-reputation-score-drs). **How it works:** diff --git a/pages/on-chain-operations/incentives-and-staking/faq.mdx b/pages/on-chain-operations/incentives-and-staking/faq.mdx index 6e9b5bd..de5824f 100644 --- a/pages/on-chain-operations/incentives-and-staking/faq.mdx +++ b/pages/on-chain-operations/incentives-and-staking/faq.mdx @@ -20,7 +20,7 @@ Staking is the crypto-native way to align a protocol with its token. It lets pro Yes. The [native staking](https://github.com/withtally/staker) and [LST](https://github.com/withtally/stgov) contracts are code-complete, audited and open source. Tally's app includes a frontend for staking. -See [OBOL](../../how-to-use-tally/stake-on-tally/how-to-stake-obol) & [RARI Staking](../../how-to-use-tally/stake-on-tally/how-to-stake-obol). +See [OBOL](/how-to-use-tally/stake-on-tally/how-to-stake-obol) & [RARI Staking](/how-to-use-tally/stake-on-tally/how-to-stake-obol). diff --git a/pages/on-chain-operations/incentives-and-staking/index.mdx b/pages/on-chain-operations/incentives-and-staking/index.mdx index 56abe48..263f266 100644 --- a/pages/on-chain-operations/incentives-and-staking/index.mdx +++ b/pages/on-chain-operations/incentives-and-staking/index.mdx @@ -10,26 +10,26 @@ Protocols use Tally's incentives and staking solution to return protocol revenue #### Key features of Tally's incentive and staking solutions: -* [Staking for value accrual](staking-for-value-accrual): Return protocol revenue or treasury assets to token holders through staking rewards. Distribute value from protocol fees, native token emissions, or treasury holdings. -* [Delegate compensation](delegate-compensation): Reward active governance participants based on their contributions and engagement. Integrate reputation scoring to gate compensation. +* [Staking for value accrual](/on-chain-operations/incentives-and-staking/staking-for-value-accrual): Return protocol revenue or treasury assets to token holders through staking rewards. Distribute value from protocol fees, native token emissions, or treasury holdings. +* [Delegate compensation](/on-chain-operations/incentives-and-staking/delegate-compensation): Reward active governance participants based on their contributions and engagement. Integrate reputation scoring to gate compensation. * Multiple reward sources: Distribute rewards from protocol revenue, treasury assets, token emissions, or combine all three—in any ERC20 token or multiple tokens simultaneously * Governance integration: Staked tokens retain full voting power, so holders don't have to choose between earning rewards and participating in governance. Optionally, make rewards conditional on active governance participation * Liquid staking support**:** Enable token holders to earn rewards while keeping their tokens transferable and usable across DeFi. * Flexible eligibility criteria**:** Design custom requirements for earning rewards based on specific behaviors that benefit your protocol. -* [**Battle-tested contracts**](../../set-up-and-technical-documentation/staking-contracts/)**:** Deploy with confidence using audited, open-source smart contracts. +* [**Battle-tested contracts**](/set-up-and-technical-documentation/staking-contracts/)**:** Deploy with confidence using audited, open-source smart contracts. ## Get started -[Staking For Value Accrual](staking-for-value-accrual) +[Staking For Value Accrual](/on-chain-operations/incentives-and-staking/staking-for-value-accrual) -[Delegate Compensation](delegate-compensation) +[Delegate Compensation](/on-chain-operations/incentives-and-staking/delegate-compensation) -[Staking Customizations](staking-customizations) +[Staking Customizations](/on-chain-operations/incentives-and-staking/staking-customizations) -[staking-contracts](../../set-up-and-technical-documentation/staking-contracts/) +[staking-contracts](/set-up-and-technical-documentation/staking-contracts/) -[Faq](faq) +[Faq](/on-chain-operations/incentives-and-staking/faq) -[Glossary](glossary) +[Glossary](/on-chain-operations/incentives-and-staking/glossary) Ready to launch incentives and staking? [Talk to our team to get started](http://tally.xyz/contact). diff --git a/pages/on-chain-operations/incentives-and-staking/staking-customizations.mdx b/pages/on-chain-operations/incentives-and-staking/staking-customizations.mdx index 641536e..bdb5fce 100644 --- a/pages/on-chain-operations/incentives-and-staking/staking-customizations.mdx +++ b/pages/on-chain-operations/incentives-and-staking/staking-customizations.mdx @@ -27,7 +27,7 @@ Customer example: Obol implemented staking with governance integration, ensuring ### Delegate reputation scores -Tally's staking system integrates with [Delegate Reputation Score (DRS)](../governance/delegate-reputation-score-drs) tracking to measure and reward quality governance participation. +Tally's staking system integrates with [Delegate Reputation Score (DRS)](/on-chain-operations/governance/delegate-reputation-score-drs) tracking to measure and reward quality governance participation. **How it works:** diff --git a/pages/on-chain-operations/tally-partner-benefits.mdx b/pages/on-chain-operations/tally-partner-benefits.mdx index db6084d..ae22b70 100644 --- a/pages/on-chain-operations/tally-partner-benefits.mdx +++ b/pages/on-chain-operations/tally-partner-benefits.mdx @@ -9,9 +9,9 @@ hidden: true Tally drives growth for your chain, protocol, or ecosystem. We provide the following value to teams in your ecosystem: -* [Token launch services](token-launch/) -* [End-to-end governance application](governance/) -* [Incentive and staking](incentives-and-staking/) infrastructure including: +* [Token launch services](/on-chain-operations/token-launch/) +* [End-to-end governance application](/on-chain-operations/governance/) +* [Incentive and staking](/on-chain-operations/incentives-and-staking/) infrastructure including: * Staking contracts * Revenue collection and distribution * Staking application layer @@ -20,9 +20,9 @@ Tally drives growth for your chain, protocol, or ecosystem. We provide the follo ### Partner Discounts -* 10% off [token launch](token-launch/) and claim infrastructure products -* 10% off protocol operations and [governance](governance/) products -* 20% protocol [incentive and staking](incentives-and-staking/) products +* 10% off [token launch](/on-chain-operations/token-launch/) and claim infrastructure products +* 10% off protocol operations and [governance](/on-chain-operations/governance/) products +* 20% protocol [incentive and staking](/on-chain-operations/incentives-and-staking/) products diff --git a/pages/on-chain-operations/token-launch/_meta.js b/pages/on-chain-operations/token-launch/_meta.js index 6452182..6e99644 100644 --- a/pages/on-chain-operations/token-launch/_meta.js +++ b/pages/on-chain-operations/token-launch/_meta.js @@ -1,5 +1,5 @@ export default { - "index": "Airdops", + "index": "Token launch", "airdrops": "Airdrops", "vesting-and-disitribution": "Vesting & disitribution", "exchange-listing-and-compliance-documentation": "Exchange listing & compliance documentation", diff --git a/pages/on-chain-operations/token-launch/airdrops.mdx b/pages/on-chain-operations/token-launch/airdrops.mdx index da475e1..b89c7cd 100644 --- a/pages/on-chain-operations/token-launch/airdrops.mdx +++ b/pages/on-chain-operations/token-launch/airdrops.mdx @@ -45,6 +45,6 @@ Tally's airdrop infrastructure uses Merkle tree-based claim processing to minimi * **Merkle tree optimization:** Tally's airdrops use Merkle tree data structures to store recipient eligibility off-chain while enabling on-chain verification. * **Multichain architecture:** Deploy the same airdrop across multiple EVM chains with consistent claiming logic. Recipients can claim on their preferred network without complex bridging or wrapped token mechanics. * **Claim window controls:** Set custom start and end dates for claim periods, with optional extensions and emergency pause functionality. -* [**Vesting integration**](vesting-and-disitribution)**:** Combine airdrops with vesting schedules to distribute tokens over time while maintaining a seamless claiming experience. +* [**Vesting integration**](/on-chain-operations/token-launch/vesting-and-disitribution)**:** Combine airdrops with vesting schedules to distribute tokens over time while maintaining a seamless claiming experience. Ready to airdrop? [Talk to our team to get started](http://tally.xyz/contact). diff --git a/pages/on-chain-operations/token-launch/features.mdx b/pages/on-chain-operations/token-launch/features.mdx index c95a9de..74ee4dc 100644 --- a/pages/on-chain-operations/token-launch/features.mdx +++ b/pages/on-chain-operations/token-launch/features.mdx @@ -7,7 +7,7 @@ hidden: true ### Modular architecture -Launch just the token, pair it with [staking](../incentives-and-staking/) from day one to incentivize long-term commitment, add [governance](../governance/) to enable decentralized decision-making immediately, or progressively enable components later as your protocol matures. +Launch just the token, pair it with [staking](/on-chain-operations/incentives-and-staking/) from day one to incentivize long-term commitment, add [governance](/on-chain-operations/governance/) to enable decentralized decision-making immediately, or progressively enable components later as your protocol matures. ### Branded claim experience @@ -20,8 +20,8 @@ Tally deploys your protocol's governance smart contracts, including Governor and * **Launch with ERC20Votes** * Tally deploys your token, a non-fungible, non-transferable token that can be minted and revoked by the Governor. The ERC20Votes extension ensures your governance token supports vote delegation and efficient tracking of voting power over time. * **Deploy Governor and Timelock contracts** - * Tally deploys the [Governor and Timelock contracts](../../set-up-and-technical-documentation/deploying-daos/). The Governor contract facilitates the proposal and voting process, while the Timelock contract enforces a delay between the proposal's passage and its execution. - * [Flexible Voting](../../how-to-use-tally/voting-on-proposals/advanced-voting/flexible-voting-extension)**:** Tally's flexible voting setup prepares protocols for advanced governance structures. Flexible voting enables sophisticated governance models like MultiGov and partial delegation. + * Tally deploys the [Governor and Timelock contracts](/set-up-and-technical-documentation/deploying-daos/). The Governor contract facilitates the proposal and voting process, while the Timelock contract enforces a delay between the proposal's passage and its execution. + * [Flexible Voting](/how-to-use-tally/voting-on-proposals/advanced-voting/flexible-voting-extension)**:** Tally's flexible voting setup prepares protocols for advanced governance structures. Flexible voting enables sophisticated governance models like MultiGov and partial delegation. * **Claim & delegate** * To ensure a smooth and convenient transition from token claim to active governance participation, Tally provides a post-claim delegation experience to enhance user engagement and simplify the delegation process. * **Launch with expert guidance** diff --git a/pages/on-chain-operations/token-launch/index.mdx b/pages/on-chain-operations/token-launch/index.mdx index a4976db..929fbeb 100644 --- a/pages/on-chain-operations/token-launch/index.mdx +++ b/pages/on-chain-operations/token-launch/index.mdx @@ -2,12 +2,10 @@ description: Tally handles your airdrop so you can focus on building --- -# Airdops +# Token launch -#### - -* [Airdrops](airdrops): Distribute tokens to millions of recipients with gas-optimized claim processing -* [Branded claim experiences](features#branded-claim-experience): Ship custom-designed claim pages with your branding and domain that provide clarity and consistency across all token operations -* [Vesting & distribution integration](vesting-and-disitribution): Implement lockup periods and vesting schedules that integrate seamlessly with on-chain providers and custodians -* [Multichain support](features#multichain-support): Launch tokens simultaneously across multiple EVM chains with unified supply management. Recipients claim on their preferred network without wrapped assets or bridging -* [Modular architecture](features#modular-architecture): Launch just the token, pair it with [staking](../incentives-and-staking/) from day one to incentivize long-term commitment, add [governance](../governance/) to enable decentralized decision-making immediately, or progressively enable components later as your protocol matures. +* [Airdrops](/on-chain-operations/token-launch/airdrops): Distribute tokens to millions of recipients with gas-optimized claim processing +* [Branded claim experiences](/on-chain-operations/token-launch/features#branded-claim-experience): Ship custom-designed claim pages with your branding and domain that provide clarity and consistency across all token operations +* [Vesting & distribution integration](/on-chain-operations/token-launch/vesting-and-disitribution): Implement lockup periods and vesting schedules that integrate seamlessly with on-chain providers and custodians +* [Multichain support](/on-chain-operations/token-launch/features#multichain-support): Launch tokens simultaneously across multiple EVM chains with unified supply management. Recipients claim on their preferred network without wrapped assets or bridging +* [Modular architecture](/on-chain-operations/token-launch/features#modular-architecture): Launch just the token, pair it with [staking](/on-chain-operations/incentives-and-staking/) from day one to incentivize long-term commitment, add [governance](/on-chain-operations/governance/) to enable decentralized decision-making immediately, or progressively enable components later as your protocol matures. diff --git a/pages/on-chain-operations/token-launch/vesting-and-disitribution.mdx b/pages/on-chain-operations/token-launch/vesting-and-disitribution.mdx index 4b36209..bfc792d 100644 --- a/pages/on-chain-operations/token-launch/vesting-and-disitribution.mdx +++ b/pages/on-chain-operations/token-launch/vesting-and-disitribution.mdx @@ -6,7 +6,7 @@ description: >- # Vesting & disitribution -How you distribute tokens matters as much as how many you create. Vesting schedules, lockups, and release mechanisms signal credibility to investors, regulators, and your community. Tally integrates with on-chain vesting providers like [Hedgey](../../how-to-use-tally/proposals/creating-proposals/custom-actions/token-vesting-with-hedgey) and [Sablier](../../how-to-use-tally/proposals/creating-proposals/custom-actions/streaming-payments-with-sablier) plus custodians including [Fireblocks](https://www.fireblocks.com/), [Anchorage](https://www.anchorage.com/), and [BitGo](https://www.bitgo.com/), to enforce your token release schedule transparently and automatically. +How you distribute tokens matters as much as how many you create. Vesting schedules, lockups, and release mechanisms signal credibility to investors, regulators, and your community. Tally integrates with on-chain vesting providers like [Hedgey](/how-to-use-tally/proposals/creating-proposals/custom-actions/token-vesting-with-hedgey) and [Sablier](/how-to-use-tally/proposals/creating-proposals/custom-actions/streaming-payments-with-sablier) plus custodians including [Fireblocks](https://www.fireblocks.com/), [Anchorage](https://www.anchorage.com/), and [BitGo](https://www.bitgo.com/), to enforce your token release schedule transparently and automatically. ## Token vesting best practices diff --git a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/deploy-a-governance-token.mdx b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/deploy-a-governance-token.mdx index 0687928..cd9c175 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/deploy-a-governance-token.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/deploy-a-governance-token.mdx @@ -15,7 +15,7 @@ Deploy your token with [EIP-5805 compatibility](https://eips.ethereum.org/EIPS/e [OpenZeppelin's ERC20Votes extension](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Votes.sol) is a canonical implementation of EIP-5805. [OpenZeppelin Governor](https://blog.openzeppelin.com/governor-smart-contract/) – or a custom Governor contract – uses the extension to calculate voting power. -[Learn more about Governor, the leading organization smart contact setup.](../smart-contract-compatibility/openzeppelin-governor) +[Learn more about Governor, the leading organization smart contact setup.](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) ### Deploying a token with voting is safe and easy diff --git a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx index 4fe2ebf..d2c3a6a 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx @@ -40,7 +40,7 @@ You may also find the [OpenZeppelin wizard](https://wizard.openzeppelin.com/) us Check out our guide to ensure your OpenZeppelin Governor is compatible with the Tally platform: -[Openzeppelin Governor](../smart-contract-compatibility/openzeppelin-governor) +[Openzeppelin Governor](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) #### _Helpful Links from OpenZeppelin_ diff --git a/pages/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters.mdx b/pages/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters.mdx index cc2130c..280c868 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters.mdx @@ -12,11 +12,11 @@ A Governor contract has several important parameters that affect the lifecycles Here's a guide to picking these parameters to set a DAO up for success by picking the right parameters: -* [Proposal Threshold](how-to-pick-governor-parameters#how-to-pick-the-proposal-threshold) -* [Quorum](how-to-pick-governor-parameters#how-to-pick-the-quorum) -* [Voting Period](how-to-pick-governor-parameters#how-to-pick-the-voting-period) -* [Voting Delay](how-to-pick-governor-parameters#how-to-pick-the-voting-delay) -* [Timelock Delay](how-to-pick-governor-parameters#how-to-pick-the-timelock-delay) +* [Proposal Threshold](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters#how-to-pick-the-proposal-threshold) +* [Quorum](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters#how-to-pick-the-quorum) +* [Voting Period](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters#how-to-pick-the-voting-period) +* [Voting Delay](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters#how-to-pick-the-voting-delay) +* [Timelock Delay](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters#how-to-pick-the-timelock-delay) #### Governors can generally update their parameters with an onchain proposal. diff --git a/pages/set-up-and-technical-documentation/deploying-daos/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos/index.mdx index 9af50bc..8f9c7a5 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/index.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/index.mdx @@ -4,10 +4,10 @@ description: How to configure and deploy a Governor # Deploy a governor -[deploy-a-dao-with-token-voting](deploy-a-dao-with-token-voting/) +[deploy-a-dao-with-token-voting](/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/) -[Add A Dao To An Existing Token](add-a-dao-to-an-existing-token) +[Add A Dao To An Existing Token](/set-up-and-technical-documentation/deploying-daos/add-a-dao-to-an-existing-token) -[smart-contract-compatibility](smart-contract-compatibility/) +[smart-contract-compatibility](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/) -[How To Pick Governor Parameters](how-to-pick-governor-parameters) +[How To Pick Governor Parameters](/set-up-and-technical-documentation/deploying-daos/how-to-pick-governor-parameters) diff --git a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/compound-governor-bravo.mdx b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/compound-governor-bravo.mdx index 085c4c3..10d9831 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/compound-governor-bravo.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/compound-governor-bravo.mdx @@ -4,7 +4,7 @@ description: How to deploy a Governor Bravo or Alpha that's compatible with Tall # Compound Governor Bravo -Tally supports [Compound Governor Bravo](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorBravoDelegate.sol) and Alpha, but we consider it deprecated. If you are deploying a new Governor, we recommend [OpenZeppelin's Governor.](openzeppelin-governor) OZ Governor is more actively maintained and has all of Bravo's features. +Tally supports [Compound Governor Bravo](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorBravoDelegate.sol) and Alpha, but we consider it deprecated. If you are deploying a new Governor, we recommend [OpenZeppelin's Governor.](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) OZ Governor is more actively maintained and has all of Bravo's features. If you're already using a direct fork of Governor Bravo, then your organization should work with Tally out of the box. If you insist on making changes to the base contract, then you can use this guide to make sure that your changes are compatible with Tally's API and web interface. @@ -96,7 +96,7 @@ Tally expects a `quorum` constant: uint public constant quorumVotes; ``` -_Note that the_ [_OpenZeppelin interface_](openzeppelin-governor) _uses a function instead of a constant for quorum._ +_Note that the_ [_OpenZeppelin interface_](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) _uses a function instead of a constant for quorum._ #### Voting Delay @@ -106,7 +106,7 @@ For Governor Bravo, Tally uses the voting delay to know when voting starts. Gove uint public votingDelay; ``` -_Note that the_ [_OpenZeppelin interface_](openzeppelin-governor) _uses a function instead of a constant for voting delay._ +_Note that the_ [_OpenZeppelin interface_](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) _uses a function instead of a constant for voting delay._ #### Voting Period @@ -116,7 +116,7 @@ Tally uses the voting period to correctly show the end of voting. A `votingPerio uint public votingPeriod; ``` -_Note that the_ [_OpenZeppelin interface_](openzeppelin-governor) _uses a function instead of a constant for voting period._ +_Note that the_ [_OpenZeppelin interface_](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) _uses a function instead of a constant for voting period._ ### Proposal state lifecycle diff --git a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx index 7d178a1..4323b8c 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx @@ -12,12 +12,12 @@ Here, we describe the interface that your contracts need to follow to be compati If you do need to change something, check that your contracts implement the methods and event logs in the sections below to make sure that your changes are compatible with Tally’s data indexing and transaction calls. -[Tokens Erc20 And Nfts](tokens-erc20-and-nfts) +[Tokens Erc20 And Nfts](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/tokens-erc20-and-nfts) -[Openzeppelin Governor](openzeppelin-governor) +[Openzeppelin Governor](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) -[Compound Governor Bravo](compound-governor-bravo) +[Compound Governor Bravo](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/compound-governor-bravo) [Broken link](/broken/pages/GHXQ6k3biAumJ9XZPY3Z) -[Supported Use Cases Faq](supported-use-cases-faq) +[Supported Use Cases Faq](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/supported-use-cases-faq) diff --git a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/supported-use-cases-faq.mdx b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/supported-use-cases-faq.mdx index fbc000d..637c8e5 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/supported-use-cases-faq.mdx +++ b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/supported-use-cases-faq.mdx @@ -21,4 +21,4 @@ You can enable DAO governance for your existing token by adding an OpenZeppelin ### How can I make onchain votes private? -You can implement private voting top of a Governor with Flexible Voting. Implement the [Flexible Voting Extension](../../../how-to-use-tally/voting-on-proposals/advanced-voting/flexible-voting-extension) in the Governor, then you can deploy a shielded pool that uses zero-knowledge proofs or MPC to keep votes private. Voters can move their votes into the pool. Then, pool can send its vote totals back to the Governor without revealing the votes. +You can implement private voting top of a Governor with Flexible Voting. Implement the [Flexible Voting Extension](/how-to-use-tally/voting-on-proposals/advanced-voting/flexible-voting-extension) in the Governor, then you can deploy a shielded pool that uses zero-knowledge proofs or MPC to keep votes private. Voters can move their votes into the pool. Then, pool can send its vote totals back to the Governor without revealing the votes. diff --git a/pages/set-up-and-technical-documentation/governor-proposals/index.mdx b/pages/set-up-and-technical-documentation/governor-proposals/index.mdx index 04430c2..287080b 100644 --- a/pages/set-up-and-technical-documentation/governor-proposals/index.mdx +++ b/pages/set-up-and-technical-documentation/governor-proposals/index.mdx @@ -22,4 +22,4 @@ Understand the Governor Contract: Before integrating a third-party app, it is es * **Compatibility:** Ensure that the integration is compatible with the existing functions and capabilities of the Governor contract * **Upgradability:** Design the integration in such a way that it can be easily upgraded in the future to accommodate changes in the Governor contract or the third-party app. -[Whats The Standard For Governor Proposal Descriptions](whats-the-standard-for-governor-proposal-descriptions) +[Whats The Standard For Governor Proposal Descriptions](/set-up-and-technical-documentation/governor-proposals/whats-the-standard-for-governor-proposal-descriptions) diff --git a/pages/set-up-and-technical-documentation/managing-a-dao/dao-admins.mdx b/pages/set-up-and-technical-documentation/managing-a-dao/dao-admins.mdx index a7ceeb1..26baf98 100644 --- a/pages/set-up-and-technical-documentation/managing-a-dao/dao-admins.mdx +++ b/pages/set-up-and-technical-documentation/managing-a-dao/dao-admins.mdx @@ -15,11 +15,11 @@ Admins for a given organization are displayed at the bottom of the [Broken link] ## Admin Abilities * Adjust organization settings, including logo, description, and links. -* [Link Gnosis Safes](../using-governor-with-gnosis-safe/gnosis-safe). +* [Link Gnosis Safes](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe). ## Superadmin Abilities -* All [Admin abilities](dao-admins#admin-abilities). +* All [Admin abilities](/set-up-and-technical-documentation/managing-a-dao/dao-admins#admin-abilities). * Appoint additional Admins and Superadmins. ## Add an Admin diff --git a/pages/set-up-and-technical-documentation/managing-a-dao/dao-settings.mdx b/pages/set-up-and-technical-documentation/managing-a-dao/dao-settings.mdx index 47df350..925e6a1 100644 --- a/pages/set-up-and-technical-documentation/managing-a-dao/dao-settings.mdx +++ b/pages/set-up-and-technical-documentation/managing-a-dao/dao-settings.mdx @@ -18,7 +18,7 @@ From the **Basics** tab of organization Settings, you can update all of your org ![Admins tab.](/images/cleanshot-2023-02-22-at-20-21-13-2x.png) -From the **Admins** tab, view your organization's [Admins and Superadmins](dao-admins). If you have the Superadmin role, you can also add these roles for other wallet addresses. +From the **Admins** tab, view your organization's [Admins and Superadmins](/set-up-and-technical-documentation/managing-a-dao/dao-admins). If you have the Superadmin role, you can also add these roles for other wallet addresses. ## Safes @@ -26,4 +26,4 @@ From the **Admins** tab, view your organization's [Admins and Superadmins](dao-a From the **Safes** tab, you can create or link a Gnosis Safe: -[Gnosis Safe](../using-governor-with-gnosis-safe/gnosis-safe) +[Gnosis Safe](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe) diff --git a/pages/set-up-and-technical-documentation/managing-a-dao/index.mdx b/pages/set-up-and-technical-documentation/managing-a-dao/index.mdx index 058bbc3..71af6c8 100644 --- a/pages/set-up-and-technical-documentation/managing-a-dao/index.mdx +++ b/pages/set-up-and-technical-documentation/managing-a-dao/index.mdx @@ -16,8 +16,8 @@ Enter your organization's info: its name, description, and Governor Contract det ## Updating organization Details -[Dao Admins](dao-admins) +[Dao Admins](/set-up-and-technical-documentation/managing-a-dao/dao-admins) -[Dao Settings](dao-settings) +[Dao Settings](/set-up-and-technical-documentation/managing-a-dao/dao-settings) -[Gnosis Safe](../using-governor-with-gnosis-safe/gnosis-safe) +[Gnosis Safe](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe) diff --git a/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx b/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx index 5b4f998..64c5ec8 100644 --- a/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx +++ b/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx @@ -18,7 +18,7 @@ Check out the code in the open-source [stGOV repo](https://github.com/withtally/ * Holder stake tokens to receive LST tokens. * Optionally, they can delegate the governance token voting power * The LST contracts deposit the staked tokens in Staker. The LST assigns the voting power to the holder's chosen delegate, if any. Otherwise, it assigns the voting power using the [default auto-](https://app.gitbook.com/o/zHytzWx2o7DjCP8sQY76/s/-MQO0N_aitpkSUyz4BYE/~/changes/699/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking-tokens/lst-auto-delegates)delegate -* The [auto-delegate](lst-auto-delegates) can be configured by governance. This keeps the default voting power aligned with the organization and mitigates capture risk. +* The [auto-delegate](/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/lst-auto-delegates) can be configured by governance. This keeps the default voting power aligned with the organization and mitigates capture risk. * The LST contract claims Staker's rewards regularly. * The position compounds. The rewards are auctioned off for more of the staked token, which is added to each user's staked position. e.g. a deposit worth 100 GOV tokens might grow to be worth 105 GOV tokens. diff --git a/pages/set-up-and-technical-documentation/staking-contracts/index.mdx b/pages/set-up-and-technical-documentation/staking-contracts/index.mdx index 705043b..92cc919 100644 --- a/pages/set-up-and-technical-documentation/staking-contracts/index.mdx +++ b/pages/set-up-and-technical-documentation/staking-contracts/index.mdx @@ -6,12 +6,12 @@ description: Learn how to deploy, configure and operate Tally staking contracts. These technical guides go in-depth on how staking works, how to set it up, and how to operate a staking system. -[Stgov Lst](stgov-lst) +[Stgov Lst](/set-up-and-technical-documentation/staking-contracts/stgov-lst) -[How Staking Works](how-staking-works) +[How Staking Works](/set-up-and-technical-documentation/staking-contracts/how-staking-works) -[Staking Operators Guide](staking-operators-guide) +[Staking Operators Guide](/set-up-and-technical-documentation/staking-contracts/staking-operators-guide) -[Defi Integration Guide](defi-integration-guide) +[Defi Integration Guide](/set-up-and-technical-documentation/staking-contracts/defi-integration-guide) -[Faq And Troubleshooting](faq-and-troubleshooting) +[Faq And Troubleshooting](/set-up-and-technical-documentation/staking-contracts/faq-and-troubleshooting) diff --git a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe.mdx b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe.mdx index 3456ba4..90e0be2 100644 --- a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe.mdx +++ b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe.mdx @@ -4,7 +4,7 @@ description: Understand what Gnosis Safes are and how they work on Tally. # Gnosis Safe overview -> _It's easy to create or link a Gnosis Safe on Tally from_ [dao-settings.md](../managing-a-dao/dao-settings.md "mention")_. Learn more about Gnosis Safes below, or skip right to the_ [_step-by-step instructions_](gnosis-safe#tally)_._ +> _It's easy to create or link a Gnosis Safe on Tally from_ [dao-settings.md](/set-up-and-technical-documentation/managing-a-dao/dao-settings.md "mention")_. Learn more about Gnosis Safes below, or skip right to the_ [_step-by-step instructions_](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe#tally)_._ ## Understanding Gnosis Safes @@ -48,15 +48,15 @@ Creating a Gnosis Safe on Tally creates the exact same instance of Gnosis’s sm ### Create a Gnosis Safe -To create a new Gnosis Safe, simply select the **Create Safe** button from the Safes tab of the [dao-settings.md](../managing-a-dao/dao-settings.md "mention") page. +To create a new Gnosis Safe, simply select the **Create Safe** button from the Safes tab of the [dao-settings.md](/set-up-and-technical-documentation/managing-a-dao/dao-settings.md "mention") page. ![Create a Gnosis Safe.](/images/cleanshot-2023-02-22-at-20-40-12-2x.png) -Select the Safe's network, give it a name, add [Safe owners](gnosis-safe#owner) and set its [threshold](gnosis-safe#threshold). Then click the **Create Safe** button! +Select the Safe's network, give it a name, add [Safe owners](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe#owner) and set its [threshold](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe#threshold). Then click the **Create Safe** button! ### Link a Gnosis Safe -To link an existing Gnosis Safe, select the **Link Safe** button from the Safes tab of the [dao-settings.md](../managing-a-dao/dao-settings.md "mention") page. +To link an existing Gnosis Safe, select the **Link Safe** button from the Safes tab of the [dao-settings.md](/set-up-and-technical-documentation/managing-a-dao/dao-settings.md "mention") page. ![Link a Gnosis Safe.](/images/cleanshot-2023-02-22-at-20-35-55-2x.png) diff --git a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx index 5a75023..fea4caf 100644 --- a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx +++ b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx @@ -6,8 +6,8 @@ description: Controlling multisig Safes with Governor Governor is composable with Gnosis Safe, which has led to an emerging ecosystem of Governor <> Safe integrations that enable new organization use cases. -[Gnosis Safe](gnosis-safe) +[Gnosis Safe](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe) -[Zodiac Governor Module For Subdaos And Grants Programs](../../how-to-use-tally/use-tally-as-a-safe-multisig/zodiac-governor-module-for-subdaos-and-grants-programs) +[Zodiac Governor Module For Subdaos And Grants Programs](/how-to-use-tally/use-tally-as-a-safe-multisig/zodiac-governor-module-for-subdaos-and-grants-programs) -[Upgrade Gnosis Safe To Governor With Zodiac](../../how-to-use-tally/use-tally-as-a-safe-multisig/upgrade-gnosis-safe-to-governor-with-zodiac) +[Upgrade Gnosis Safe To Governor With Zodiac](/how-to-use-tally/use-tally-as-a-safe-multisig/upgrade-gnosis-safe-to-governor-with-zodiac) diff --git a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/zodiac-governor-module-for-subdaos-and-grants-programs.mdx b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/zodiac-governor-module-for-subdaos-and-grants-programs.mdx index 9719489..012d65b 100644 --- a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/zodiac-governor-module-for-subdaos-and-grants-programs.mdx +++ b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/zodiac-governor-module-for-subdaos-and-grants-programs.mdx @@ -51,5 +51,5 @@ The Safe App will automatically create your Governor SubDAO and add it to your m Finally, a couple of steps are needed to get your new SubDAO fully represented on Tally. -1. Copy the contract address of the Governor that was created by the Zodiac Governor Module no-code tool and [add it directly to Tally](../managing-a-dao/). -2. [Link the contract address](gnosis-safe) of the multisig that was created via the Zodiac Governor Module to your Parent DAO, making it easily visible from the parent DAO on Tally. +1. Copy the contract address of the Governor that was created by the Zodiac Governor Module no-code tool and [add it directly to Tally](/set-up-and-technical-documentation/managing-a-dao/). +2. [Link the contract address](/set-up-and-technical-documentation/using-governor-with-gnosis-safe/gnosis-safe) of the multisig that was created via the Zodiac Governor Module to your Parent DAO, making it easily visible from the parent DAO on Tally. diff --git a/pages/token-sales/getting-started.mdx b/pages/token-sales/getting-started.mdx index 9fd86a6..5e57e3d 100644 --- a/pages/token-sales/getting-started.mdx +++ b/pages/token-sales/getting-started.mdx @@ -22,43 +22,43 @@ Before launching, make sure you have legal counsel engaged, token economics defi -### [Choose your mechanism](choose-your-mechanism) +### [Choose your mechanism](/token-sales/choose-your-mechanism) How will price be discovered? How will you handle oversubscription? Different mechanisms offer different trade-offs between simplicity, fairness, and market-driven pricing. -### [Set sale parameters](set-sale-parameters) +### [Set sale parameters](/token-sales/set-sale-parameters) Duration, tokens for sale, floor price, bid currency, allocation limits. These decisions shape your sale economics and participant experience. -### [Design your tokenomics](design-tokenomics) +### [Design your tokenomics](/token-sales/design-tokenomics) Map your full allocation: public sale, investors, treasury, and ecosystem incentives. Finalize and document before announcing. -### [Configure post-sale](configure-post-sale) +### [Configure post-sale](/token-sales/configure-post-sale) Define where proceeds go, how liquidity is seeded, and how purchased tokens unlock over time. -### [Integrate compliance](integrate-compliance) +### [Integrate compliance](/token-sales/integrate-compliance) KYC/KYB verification, geographic restrictions, lockups by jurisdiction. Work with legal counsel to determine requirements, then implement through Tally. -### [Build your sale page](build-your-sale-page) +### [Build your sale page](/token-sales/build-your-sale-page) Branded, white-labeled experience on your domain. Custom design, real-time participation tracking, integrated registration and KYC flows. -### [Launch and monitor](launch-and-monitor) +### [Launch and monitor](/token-sales/launch-and-monitor) Go live with launch-day support. Real-time dashboards, live participation metrics, and direct support from the Tally team throughout your sale. diff --git a/pages/user-guides/dao-best-practices/index.mdx b/pages/user-guides/dao-best-practices/index.mdx index 615d411..bf10869 100644 --- a/pages/user-guides/dao-best-practices/index.mdx +++ b/pages/user-guides/dao-best-practices/index.mdx @@ -8,6 +8,6 @@ Running an effective on-chain organization requires thoughtful design, secure im Explore the following resources: -[Running An Onchain Dao Using Openzeppelin Governor](running-an-onchain-dao-using-openzeppelin-governor) +[Running An Onchain Dao Using Openzeppelin Governor](/user-guides/dao-best-practices/running-an-onchain-dao-using-openzeppelin-governor) -[Seatbelt For Governance](seatbelt-for-governance) +[Seatbelt For Governance](/user-guides/dao-best-practices/seatbelt-for-governance) diff --git a/pages/user-guides/governance-concepts/index.mdx b/pages/user-guides/governance-concepts/index.mdx index 74c45c1..6470e81 100644 --- a/pages/user-guides/governance-concepts/index.mdx +++ b/pages/user-guides/governance-concepts/index.mdx @@ -4,12 +4,12 @@ description: Learn about what decentralized governance is and why it matters. # Governance concepts -[Decentralized Governance Overview](decentralized-governance-overview) +[Decentralized Governance Overview](/user-guides/governance-concepts/decentralized-governance-overview) -[Application Layer Vs Base Layer Governance](application-layer-vs-base-layer-governance) +[Application Layer Vs Base Layer Governance](/user-guides/governance-concepts/application-layer-vs-base-layer-governance) -[Governance Execution Methods](governance-execution-methods) +[Governance Execution Methods](/user-guides/governance-concepts/governance-execution-methods) -[Procedural Governance](procedural-governance) +[Procedural Governance](/user-guides/governance-concepts/procedural-governance) -[Vote Delegation](vote-delegation) +[Vote Delegation](/user-guides/governance-concepts/vote-delegation) diff --git a/pages/user-guides/governance-frameworks/index.mdx b/pages/user-guides/governance-frameworks/index.mdx index 78d2b23..7dc4207 100644 --- a/pages/user-guides/governance-frameworks/index.mdx +++ b/pages/user-guides/governance-frameworks/index.mdx @@ -1,9 +1,9 @@ # Governance frameworks -[Openzeppelin Governor](../../set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) +[Openzeppelin Governor](/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/openzeppelin-governor) -[Curve Voting Escrow](curve-voting-escrow) +[Curve Voting Escrow](/user-guides/governance-frameworks/curve-voting-escrow) -[Multisigs](multisigs) +[Multisigs](/user-guides/governance-frameworks/multisigs) -[Snapshot Polls](snapshot-polls) +[Snapshot Polls](/user-guides/governance-frameworks/snapshot-polls) diff --git a/pages/user-guides/index-of-daos/daos-on-tally/index.mdx b/pages/user-guides/index-of-daos/daos-on-tally/index.mdx index 356f132..5404484 100644 --- a/pages/user-guides/index-of-daos/daos-on-tally/index.mdx +++ b/pages/user-guides/index-of-daos/daos-on-tally/index.mdx @@ -1,17 +1,17 @@ # DAOs on Tally -[Aave Aave](aave-aave) +[Aave Aave](/user-guides/index-of-daos/daos-on-tally/aave-aave) -[Ampleforth Forth](ampleforth-forth) +[Ampleforth Forth](/user-guides/index-of-daos/daos-on-tally/ampleforth-forth) -[Compound Comp](compound-comp) +[Compound Comp](/user-guides/index-of-daos/daos-on-tally/compound-comp) -[Gitcoin Gtc](gitcoin-gtc) +[Gitcoin Gtc](/user-guides/index-of-daos/daos-on-tally/gitcoin-gtc) -[Idle Finance Idle](idle-finance-idle) +[Idle Finance Idle](/user-guides/index-of-daos/daos-on-tally/idle-finance-idle) -[Inverse Finance Inv](inverse-finance-inv) +[Inverse Finance Inv](/user-guides/index-of-daos/daos-on-tally/inverse-finance-inv) -[Pooltogether Pool](pooltogether-pool) +[Pooltogether Pool](/user-guides/index-of-daos/daos-on-tally/pooltogether-pool) -[Uniswap Uni](uniswap-uni) +[Uniswap Uni](/user-guides/index-of-daos/daos-on-tally/uniswap-uni) diff --git a/pages/user-guides/index-of-daos/index.mdx b/pages/user-guides/index-of-daos/index.mdx index c208d6a..9193542 100644 --- a/pages/user-guides/index-of-daos/index.mdx +++ b/pages/user-guides/index-of-daos/index.mdx @@ -1,3 +1,3 @@ # Index of on-chain organizations -[daos-on-tally](daos-on-tally/) +[daos-on-tally](/user-guides/index-of-daos/daos-on-tally/) diff --git a/pages/user-guides/intro-to-governance/index.mdx b/pages/user-guides/intro-to-governance/index.mdx index 79bcc02..891343d 100644 --- a/pages/user-guides/intro-to-governance/index.mdx +++ b/pages/user-guides/intro-to-governance/index.mdx @@ -6,6 +6,6 @@ description: >- # Intro to governance -[General Ecosystem Info](general-ecosystem-info) +[General Ecosystem Info](/user-guides/intro-to-governance/general-ecosystem-info) -[Participating In Governance](participating-in-governance) +[Participating In Governance](/user-guides/intro-to-governance/participating-in-governance) diff --git a/scripts/links-to-absolute.mjs b/scripts/links-to-absolute.mjs new file mode 100644 index 0000000..dd686d7 --- /dev/null +++ b/scripts/links-to-absolute.mjs @@ -0,0 +1,75 @@ +#!/usr/bin/env node +// One-off: convert relative markdown links in pages/*.mdx to absolute paths. +// Next.js's relative URL resolution with trailingSlash:true + basePath drops +// the last path segment, breaking every relative link. Making them absolute +// sidesteps the whole issue. +import { readdir, readFile, writeFile } from "node:fs/promises"; +import { join, resolve, posix } from "node:path"; + +const REPO = resolve(new URL("..", import.meta.url).pathname); +const PAGES = join(REPO, "pages"); + +async function walk(dir) { + const out = []; + for (const e of await readdir(dir, { withFileTypes: true })) { + if (e.name.startsWith(".") || e.name.startsWith("_")) continue; + const full = join(dir, e.name); + if (e.isDirectory()) out.push(...(await walk(full))); + else if (e.name.endsWith(".mdx")) out.push(full); + } + return out; +} + +function pageDir(absPath) { + // /repo/pages/X/Y/Z.mdx -> /X/Y/ (regardless of filename, even index.mdx) + const rel = absPath.slice(PAGES.length).replace(/\.mdx$/, ""); + const dir = rel.replace(/\/[^/]+$/, "") || ""; + return dir.endsWith("/") ? dir : dir + "/"; +} + +function isRelative(url) { + if (!url) return false; + if (/^[a-z][a-z0-9+.-]*:/i.test(url)) return false; + if (url.startsWith("//")) return false; + if (url.startsWith("/")) return false; + if (url.startsWith("#")) return false; + return true; +} + +function resolveLink(currentDir, url) { + const [pathPart, hashPart = ""] = url.split("#", 2); + if (pathPart === "") return url; + const trailingSlash = pathPart.endsWith("/"); + const resolved = posix.resolve(currentDir, pathPart); + const out = trailingSlash && !resolved.endsWith("/") ? resolved + "/" : resolved; + return hashPart ? `${out}#${hashPart}` : out; +} + +const LINK_RE = /\[([^\]]+)\]\(([^)]+)\)/g; +const HTML_HREF_RE = /\bhref=("|')([^"']+)\1/g; +const HTML_SRC_RE = /\bsrc=("|')([^"']+)\1/g; + +let filesChanged = 0; +let linkCount = 0; + +for (const file of await walk(PAGES)) { + const dir = pageDir(file); + const before = await readFile(file, "utf8"); + let after = before.replace(LINK_RE, (m, text, url) => { + if (!isRelative(url)) return m; + linkCount += 1; + return `[${text}](${resolveLink(dir, url)})`; + }); + after = after.replace(HTML_HREF_RE, (m, q, url) => { + if (!isRelative(url)) return m; + linkCount += 1; + return `href=${q}${resolveLink(dir, url)}${q}`; + }); + // Don't touch — those use /images/... and Next handles them via Image pipeline anyway. + if (after !== before) { + await writeFile(file, after); + filesChanged += 1; + } +} + +console.log(`Rewrote ${linkCount} relative links in ${filesChanged} files`); From 7d743d2b4123a2aff8482351e72cc2a8e5b1e767 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Wed, 13 May 2026 18:10:45 -0400 Subject: [PATCH 5/6] Selectable, non-duplicated collapsible sections --- .../index.mdx => delegate-on-tally.mdx} | 0 .../delegate-on-tally/_meta.js | 1 - .../index.mdx => creating-proposals.mdx} | 0 .../proposals/creating-proposals/_meta.js | 1 - .../index.mdx => custom-actions.mdx} | 0 .../custom-actions/_meta.js | 1 - .../{swaps/index.mdx => swaps.mdx} | 0 .../creating-proposals/swaps/_meta.js | 1 - .../index.mdx => managing-proposals.mdx} | 0 .../proposals/managing-proposals/_meta.js | 1 - .../index.mdx => stake-on-tally.mdx} | 0 .../how-to-use-tally/stake-on-tally/_meta.js | 1 - ...x.mdx => use-tally-as-a-safe-multisig.mdx} | 0 .../use-tally-as-a-safe-multisig/_meta.js | 1 - .../index.mdx => voting-on-proposals.mdx} | 0 .../voting-on-proposals/_meta.js | 1 - .../index.mdx => advanced-voting.mdx} | 0 .../advanced-voting/_meta.js | 1 - .../index.mdx => signal-voting.mdx} | 0 .../advanced-voting/signal-voting/_meta.js | 1 - .../{relay/index.mdx => relay.mdx} | 0 .../voting-on-proposals/relay/_meta.js | 1 - .../{governance/index.mdx => governance.mdx} | 0 pages/on-chain-operations/governance/_meta.js | 1 - .../index.mdx => integrations.mdx} | 0 .../governance/integrations/_meta.js | 1 - ...dex.mdx => security-council-elections.mdx} | 0 .../security-council-elections/_meta.js | 1 - .../index.mdx => incentives-and-staking.mdx} | 0 .../incentives-and-staking/_meta.js | 1 - .../index.mdx => token-launch.mdx} | 0 .../on-chain-operations/token-launch/_meta.js | 1 - .../index.mdx => deploying-daos.mdx} | 0 .../deploying-daos/_meta.js | 1 - ...mdx => deploy-a-dao-with-token-voting.mdx} | 0 .../deploy-a-dao-with-token-voting/_meta.js | 1 - ...x.mdx => smart-contract-compatibility.mdx} | 0 .../smart-contract-compatibility/_meta.js | 1 - .../index.mdx => governor-proposals.mdx} | 0 .../governor-proposals/_meta.js | 1 - .../index.mdx => managing-a-dao.mdx} | 0 .../managing-a-dao/_meta.js | 1 - .../index.mdx => staking-contracts.mdx} | 0 .../staking-contracts/_meta.js | 1 - .../index.mdx => liquid-staking.mdx} | 0 .../how-staking-works/liquid-staking/_meta.js | 1 - ...dx => using-governor-with-gnosis-safe.mdx} | 0 .../using-governor-with-gnosis-safe/_meta.js | 1 - .../{welcome/index.mdx => welcome.mdx} | 0 .../welcome/_meta.js | 1 - .../index.mdx => dao-best-practices.mdx} | 0 pages/user-guides/dao-best-practices/_meta.js | 1 - .../index.mdx => governance-concepts.mdx} | 0 .../user-guides/governance-concepts/_meta.js | 1 - .../index.mdx => governance-frameworks.mdx} | 0 .../governance-frameworks/_meta.js | 1 - .../index.mdx => index-of-daos.mdx} | 0 pages/user-guides/index-of-daos/_meta.js | 1 - .../index.mdx => daos-not-on-tally.mdx} | 0 .../index-of-daos/daos-not-on-tally/_meta.js | 1 - .../index.mdx => daos-on-tally.mdx} | 0 .../index-of-daos/daos-on-tally/_meta.js | 1 - .../index.mdx => intro-to-governance.mdx} | 0 .../user-guides/intro-to-governance/_meta.js | 1 - scripts/promote-folder-indexes.mjs | 64 +++++++++++++++++++ scripts/strip-index-entries.mjs | 50 +++++++++++++++ 66 files changed, 114 insertions(+), 32 deletions(-) rename pages/how-to-use-tally/{delegate-on-tally/index.mdx => delegate-on-tally.mdx} (100%) rename pages/how-to-use-tally/proposals/{creating-proposals/index.mdx => creating-proposals.mdx} (100%) rename pages/how-to-use-tally/proposals/creating-proposals/{custom-actions/index.mdx => custom-actions.mdx} (100%) rename pages/how-to-use-tally/proposals/creating-proposals/{swaps/index.mdx => swaps.mdx} (100%) rename pages/how-to-use-tally/proposals/{managing-proposals/index.mdx => managing-proposals.mdx} (100%) rename pages/how-to-use-tally/{stake-on-tally/index.mdx => stake-on-tally.mdx} (100%) rename pages/how-to-use-tally/{use-tally-as-a-safe-multisig/index.mdx => use-tally-as-a-safe-multisig.mdx} (100%) rename pages/how-to-use-tally/{voting-on-proposals/index.mdx => voting-on-proposals.mdx} (100%) rename pages/how-to-use-tally/voting-on-proposals/{advanced-voting/index.mdx => advanced-voting.mdx} (100%) rename pages/how-to-use-tally/voting-on-proposals/advanced-voting/{signal-voting/index.mdx => signal-voting.mdx} (100%) rename pages/how-to-use-tally/voting-on-proposals/{relay/index.mdx => relay.mdx} (100%) rename pages/on-chain-operations/{governance/index.mdx => governance.mdx} (100%) rename pages/on-chain-operations/governance/{integrations/index.mdx => integrations.mdx} (100%) rename pages/on-chain-operations/governance/{security-council-elections/index.mdx => security-council-elections.mdx} (100%) rename pages/on-chain-operations/{incentives-and-staking/index.mdx => incentives-and-staking.mdx} (100%) rename pages/on-chain-operations/{token-launch/index.mdx => token-launch.mdx} (100%) rename pages/set-up-and-technical-documentation/{deploying-daos/index.mdx => deploying-daos.mdx} (100%) rename pages/set-up-and-technical-documentation/deploying-daos/{deploy-a-dao-with-token-voting/index.mdx => deploy-a-dao-with-token-voting.mdx} (100%) rename pages/set-up-and-technical-documentation/deploying-daos/{smart-contract-compatibility/index.mdx => smart-contract-compatibility.mdx} (100%) rename pages/set-up-and-technical-documentation/{governor-proposals/index.mdx => governor-proposals.mdx} (100%) rename pages/set-up-and-technical-documentation/{managing-a-dao/index.mdx => managing-a-dao.mdx} (100%) rename pages/set-up-and-technical-documentation/{staking-contracts/index.mdx => staking-contracts.mdx} (100%) rename pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/{liquid-staking/index.mdx => liquid-staking.mdx} (100%) rename pages/set-up-and-technical-documentation/{using-governor-with-gnosis-safe/index.mdx => using-governor-with-gnosis-safe.mdx} (100%) rename pages/set-up-and-technical-documentation/{welcome/index.mdx => welcome.mdx} (100%) rename pages/user-guides/{dao-best-practices/index.mdx => dao-best-practices.mdx} (100%) rename pages/user-guides/{governance-concepts/index.mdx => governance-concepts.mdx} (100%) rename pages/user-guides/{governance-frameworks/index.mdx => governance-frameworks.mdx} (100%) rename pages/user-guides/{index-of-daos/index.mdx => index-of-daos.mdx} (100%) rename pages/user-guides/index-of-daos/{daos-not-on-tally/index.mdx => daos-not-on-tally.mdx} (100%) rename pages/user-guides/index-of-daos/{daos-on-tally/index.mdx => daos-on-tally.mdx} (100%) rename pages/user-guides/{intro-to-governance/index.mdx => intro-to-governance.mdx} (100%) create mode 100644 scripts/promote-folder-indexes.mjs create mode 100644 scripts/strip-index-entries.mjs diff --git a/pages/how-to-use-tally/delegate-on-tally/index.mdx b/pages/how-to-use-tally/delegate-on-tally.mdx similarity index 100% rename from pages/how-to-use-tally/delegate-on-tally/index.mdx rename to pages/how-to-use-tally/delegate-on-tally.mdx diff --git a/pages/how-to-use-tally/delegate-on-tally/_meta.js b/pages/how-to-use-tally/delegate-on-tally/_meta.js index 591c74d..a34b8eb 100644 --- a/pages/how-to-use-tally/delegate-on-tally/_meta.js +++ b/pages/how-to-use-tally/delegate-on-tally/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Delegate on Tally", "delegates-page": "Delegates Page", "delegate-voting-power": "Delegate Voting Power", "create-a-delegate-statement": "Create a Delegate Statement", diff --git a/pages/how-to-use-tally/proposals/creating-proposals/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals.mdx similarity index 100% rename from pages/how-to-use-tally/proposals/creating-proposals/index.mdx rename to pages/how-to-use-tally/proposals/creating-proposals.mdx diff --git a/pages/how-to-use-tally/proposals/creating-proposals/_meta.js b/pages/how-to-use-tally/proposals/creating-proposals/_meta.js index 0e0882c..fe6ad0a 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/_meta.js +++ b/pages/how-to-use-tally/proposals/creating-proposals/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Create proposals", "custom-actions": "Custom actions", "swaps": "Swaps", "draft-proposals": "Draft proposals" diff --git a/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals/custom-actions.mdx similarity index 100% rename from pages/how-to-use-tally/proposals/creating-proposals/custom-actions/index.mdx rename to pages/how-to-use-tally/proposals/creating-proposals/custom-actions.mdx diff --git a/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/_meta.js b/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/_meta.js index bac0a3d..cb99329 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/_meta.js +++ b/pages/how-to-use-tally/proposals/creating-proposals/custom-actions/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Custom actions", "chain-deployment-of-uniswap-v3": "Chain Deployment of Uniswap v3", "token-vesting-with-hedgey": "Token vesting with Hedgey", "token-grants-with-hedgey": "Token grants with Hedgey", diff --git a/pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx b/pages/how-to-use-tally/proposals/creating-proposals/swaps.mdx similarity index 100% rename from pages/how-to-use-tally/proposals/creating-proposals/swaps/index.mdx rename to pages/how-to-use-tally/proposals/creating-proposals/swaps.mdx diff --git a/pages/how-to-use-tally/proposals/creating-proposals/swaps/_meta.js b/pages/how-to-use-tally/proposals/creating-proposals/swaps/_meta.js index e2c323a..afee817 100644 --- a/pages/how-to-use-tally/proposals/creating-proposals/swaps/_meta.js +++ b/pages/how-to-use-tally/proposals/creating-proposals/swaps/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Swaps", "swaps-faqs": "Swaps: FAQs" }; diff --git a/pages/how-to-use-tally/proposals/managing-proposals/index.mdx b/pages/how-to-use-tally/proposals/managing-proposals.mdx similarity index 100% rename from pages/how-to-use-tally/proposals/managing-proposals/index.mdx rename to pages/how-to-use-tally/proposals/managing-proposals.mdx diff --git a/pages/how-to-use-tally/proposals/managing-proposals/_meta.js b/pages/how-to-use-tally/proposals/managing-proposals/_meta.js index 2262cc8..e83f8d1 100644 --- a/pages/how-to-use-tally/proposals/managing-proposals/_meta.js +++ b/pages/how-to-use-tally/proposals/managing-proposals/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Execute Proposals", "advanced-execution": "Advanced Execution" }; diff --git a/pages/how-to-use-tally/stake-on-tally/index.mdx b/pages/how-to-use-tally/stake-on-tally.mdx similarity index 100% rename from pages/how-to-use-tally/stake-on-tally/index.mdx rename to pages/how-to-use-tally/stake-on-tally.mdx diff --git a/pages/how-to-use-tally/stake-on-tally/_meta.js b/pages/how-to-use-tally/stake-on-tally/_meta.js index 8eca072..034623d 100644 --- a/pages/how-to-use-tally/stake-on-tally/_meta.js +++ b/pages/how-to-use-tally/stake-on-tally/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Stake on Tally", "how-to-stake-obol": "How to Stake OBOL", "how-to-stake-rari": "How to Stake RARI" }; diff --git a/pages/how-to-use-tally/use-tally-as-a-safe-multisig/index.mdx b/pages/how-to-use-tally/use-tally-as-a-safe-multisig.mdx similarity index 100% rename from pages/how-to-use-tally/use-tally-as-a-safe-multisig/index.mdx rename to pages/how-to-use-tally/use-tally-as-a-safe-multisig.mdx diff --git a/pages/how-to-use-tally/use-tally-as-a-safe-multisig/_meta.js b/pages/how-to-use-tally/use-tally-as-a-safe-multisig/_meta.js index 595fcb8..3210e75 100644 --- a/pages/how-to-use-tally/use-tally-as-a-safe-multisig/_meta.js +++ b/pages/how-to-use-tally/use-tally-as-a-safe-multisig/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Use Tally as a Safe multisig", "vote-with-a-gnosis-safe": "Vote with a Gnosis Safe", "zodiac-governor-module-for-subdaos-and-grants-programs": "Zodiac Governor Module for SubDAOs and Grants Programs", "upgrade-gnosis-safe-to-governor-with-zodiac": "Upgrade Gnosis Safe to Governor with Zodiac" diff --git a/pages/how-to-use-tally/voting-on-proposals/index.mdx b/pages/how-to-use-tally/voting-on-proposals.mdx similarity index 100% rename from pages/how-to-use-tally/voting-on-proposals/index.mdx rename to pages/how-to-use-tally/voting-on-proposals.mdx diff --git a/pages/how-to-use-tally/voting-on-proposals/_meta.js b/pages/how-to-use-tally/voting-on-proposals/_meta.js index 9539fc2..5656b95 100644 --- a/pages/how-to-use-tally/voting-on-proposals/_meta.js +++ b/pages/how-to-use-tally/voting-on-proposals/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Vote on Tally", "advanced-voting": "Advanced voting", "relay": "Gasless voting and delegation (Relay)" }; diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx b/pages/how-to-use-tally/voting-on-proposals/advanced-voting.mdx similarity index 100% rename from pages/how-to-use-tally/voting-on-proposals/advanced-voting/index.mdx rename to pages/how-to-use-tally/voting-on-proposals/advanced-voting.mdx diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/_meta.js b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/_meta.js index 107a8a7..73320ff 100644 --- a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/_meta.js +++ b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Advanced voting", "flexible-voting-extension": "Flexible voting extension", "signal-voting": "Signal voting", "private-voting": "Private voting" diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting.mdx similarity index 100% rename from pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/index.mdx rename to pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting.mdx diff --git a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/_meta.js b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/_meta.js index 7643082..f5b4c80 100644 --- a/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/_meta.js +++ b/pages/how-to-use-tally/voting-on-proposals/advanced-voting/signal-voting/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Signal voting", "diff-checker": "Snapshot" }; diff --git a/pages/how-to-use-tally/voting-on-proposals/relay/index.mdx b/pages/how-to-use-tally/voting-on-proposals/relay.mdx similarity index 100% rename from pages/how-to-use-tally/voting-on-proposals/relay/index.mdx rename to pages/how-to-use-tally/voting-on-proposals/relay.mdx diff --git a/pages/how-to-use-tally/voting-on-proposals/relay/_meta.js b/pages/how-to-use-tally/voting-on-proposals/relay/_meta.js index 11c3239..adf0bd6 100644 --- a/pages/how-to-use-tally/voting-on-proposals/relay/_meta.js +++ b/pages/how-to-use-tally/voting-on-proposals/relay/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Gasless voting and delegation (Relay)", "gasless-voting": "Gasless voting", "free-delegation": "Gasless delegation" }; diff --git a/pages/on-chain-operations/governance/index.mdx b/pages/on-chain-operations/governance.mdx similarity index 100% rename from pages/on-chain-operations/governance/index.mdx rename to pages/on-chain-operations/governance.mdx diff --git a/pages/on-chain-operations/governance/_meta.js b/pages/on-chain-operations/governance/_meta.js index ac196b7..309b949 100644 --- a/pages/on-chain-operations/governance/_meta.js +++ b/pages/on-chain-operations/governance/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Governance", "security-council-elections": "Security Council elections", "optimistic-governance": "Optimistic governance", "multigov": "MultiGov", diff --git a/pages/on-chain-operations/governance/integrations/index.mdx b/pages/on-chain-operations/governance/integrations.mdx similarity index 100% rename from pages/on-chain-operations/governance/integrations/index.mdx rename to pages/on-chain-operations/governance/integrations.mdx diff --git a/pages/on-chain-operations/governance/integrations/_meta.js b/pages/on-chain-operations/governance/integrations/_meta.js index e58b956..187354e 100644 --- a/pages/on-chain-operations/governance/integrations/_meta.js +++ b/pages/on-chain-operations/governance/integrations/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Integrations", "karma-delegate-scoring": "Karma - Delegate Scoring", "forum-bot": "Discourse", "safe": "Safe" diff --git a/pages/on-chain-operations/governance/security-council-elections/index.mdx b/pages/on-chain-operations/governance/security-council-elections.mdx similarity index 100% rename from pages/on-chain-operations/governance/security-council-elections/index.mdx rename to pages/on-chain-operations/governance/security-council-elections.mdx diff --git a/pages/on-chain-operations/governance/security-council-elections/_meta.js b/pages/on-chain-operations/governance/security-council-elections/_meta.js index 1907f2c..751947a 100644 --- a/pages/on-chain-operations/governance/security-council-elections/_meta.js +++ b/pages/on-chain-operations/governance/security-council-elections/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Security Council elections", "arbitrum-dao-security-council-elections-guide": "Arbitrum DAO Security Council Elections Guide" }; diff --git a/pages/on-chain-operations/incentives-and-staking/index.mdx b/pages/on-chain-operations/incentives-and-staking.mdx similarity index 100% rename from pages/on-chain-operations/incentives-and-staking/index.mdx rename to pages/on-chain-operations/incentives-and-staking.mdx diff --git a/pages/on-chain-operations/incentives-and-staking/_meta.js b/pages/on-chain-operations/incentives-and-staking/_meta.js index bd0935a..7806d98 100644 --- a/pages/on-chain-operations/incentives-and-staking/_meta.js +++ b/pages/on-chain-operations/incentives-and-staking/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Incentives & staking", "staking-for-value-accrual": "Staking for value accrual", "delegate-compensation": "Delegate compensation", "staking-customizations": "Features", diff --git a/pages/on-chain-operations/token-launch/index.mdx b/pages/on-chain-operations/token-launch.mdx similarity index 100% rename from pages/on-chain-operations/token-launch/index.mdx rename to pages/on-chain-operations/token-launch.mdx diff --git a/pages/on-chain-operations/token-launch/_meta.js b/pages/on-chain-operations/token-launch/_meta.js index 6e99644..f63771d 100644 --- a/pages/on-chain-operations/token-launch/_meta.js +++ b/pages/on-chain-operations/token-launch/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Token launch", "airdrops": "Airdrops", "vesting-and-disitribution": "Vesting & disitribution", "exchange-listing-and-compliance-documentation": "Exchange listing & compliance documentation", diff --git a/pages/set-up-and-technical-documentation/deploying-daos/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/deploying-daos/index.mdx rename to pages/set-up-and-technical-documentation/deploying-daos.mdx diff --git a/pages/set-up-and-technical-documentation/deploying-daos/_meta.js b/pages/set-up-and-technical-documentation/deploying-daos/_meta.js index 4680609..1d5d9ee 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/_meta.js +++ b/pages/set-up-and-technical-documentation/deploying-daos/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Deploy a governor", "deploy-a-dao-with-token-voting": "Deploy a governor", "add-a-dao-to-an-existing-token": "Add a Governor to an existing token", "smart-contract-compatibility": "Check for token contract compatibility", diff --git a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/index.mdx rename to pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting.mdx diff --git a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/_meta.js b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/_meta.js index f4f5e15..a4ed59b 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/_meta.js +++ b/pages/set-up-and-technical-documentation/deploying-daos/deploy-a-dao-with-token-voting/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Deploy a governor", "deploy-a-governance-token": "Deploy a Governor with a new token" }; diff --git a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/index.mdx rename to pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility.mdx diff --git a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/_meta.js b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/_meta.js index d8d8916..39c400c 100644 --- a/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/_meta.js +++ b/pages/set-up-and-technical-documentation/deploying-daos/smart-contract-compatibility/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Check for token contract compatibility", "tokens-erc20-and-nfts": "Tokens: ERC-20 and NFTs", "openzeppelin-governor": "OpenZeppelin Governor", "compound-governor-bravo": "Compound Governor Bravo", diff --git a/pages/set-up-and-technical-documentation/governor-proposals/index.mdx b/pages/set-up-and-technical-documentation/governor-proposals.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/governor-proposals/index.mdx rename to pages/set-up-and-technical-documentation/governor-proposals.mdx diff --git a/pages/set-up-and-technical-documentation/governor-proposals/_meta.js b/pages/set-up-and-technical-documentation/governor-proposals/_meta.js index 053156b..0d07e6e 100644 --- a/pages/set-up-and-technical-documentation/governor-proposals/_meta.js +++ b/pages/set-up-and-technical-documentation/governor-proposals/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Governor proposal standards", "whats-the-standard-for-governor-proposal-descriptions": "Governor proposal descriptions standards" }; diff --git a/pages/set-up-and-technical-documentation/managing-a-dao/index.mdx b/pages/set-up-and-technical-documentation/managing-a-dao.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/managing-a-dao/index.mdx rename to pages/set-up-and-technical-documentation/managing-a-dao.mdx diff --git a/pages/set-up-and-technical-documentation/managing-a-dao/_meta.js b/pages/set-up-and-technical-documentation/managing-a-dao/_meta.js index 37920c9..6d81dce 100644 --- a/pages/set-up-and-technical-documentation/managing-a-dao/_meta.js +++ b/pages/set-up-and-technical-documentation/managing-a-dao/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Add an organization to Tally", "dao-admins": "Organization admins", "dao-settings": "Organization settings" }; diff --git a/pages/set-up-and-technical-documentation/staking-contracts/index.mdx b/pages/set-up-and-technical-documentation/staking-contracts.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/staking-contracts/index.mdx rename to pages/set-up-and-technical-documentation/staking-contracts.mdx diff --git a/pages/set-up-and-technical-documentation/staking-contracts/_meta.js b/pages/set-up-and-technical-documentation/staking-contracts/_meta.js index 5784daf..c414580 100644 --- a/pages/set-up-and-technical-documentation/staking-contracts/_meta.js +++ b/pages/set-up-and-technical-documentation/staking-contracts/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Staking contracts", "stgov-lst": "Get started", "how-staking-works": "How staking works", "staking-operators-guide": "Staking operator's guide", diff --git a/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx b/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/index.mdx rename to pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking.mdx diff --git a/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/_meta.js b/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/_meta.js index f4b831a..e10103c 100644 --- a/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/_meta.js +++ b/pages/set-up-and-technical-documentation/staking-contracts/how-staking-works/liquid-staking/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Liquid staking", "lst-auto-delegates": "LST auto delegates" }; diff --git a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/index.mdx rename to pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe.mdx diff --git a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/_meta.js b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/_meta.js index 922e810..1deb346 100644 --- a/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/_meta.js +++ b/pages/set-up-and-technical-documentation/using-governor-with-gnosis-safe/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Use Governor with Gnosis Safe", "gnosis-safe": "Gnosis Safe overview", "voting-with-a-gnosis-safe": "Vote with a Gnosis Safe", "arbitrum-gnosis-safes": "Arbitrum Gnosis Safes", diff --git a/pages/set-up-and-technical-documentation/welcome/index.mdx b/pages/set-up-and-technical-documentation/welcome.mdx similarity index 100% rename from pages/set-up-and-technical-documentation/welcome/index.mdx rename to pages/set-up-and-technical-documentation/welcome.mdx diff --git a/pages/set-up-and-technical-documentation/welcome/_meta.js b/pages/set-up-and-technical-documentation/welcome/_meta.js index 38e57d1..3233312 100644 --- a/pages/set-up-and-technical-documentation/welcome/_meta.js +++ b/pages/set-up-and-technical-documentation/welcome/_meta.js @@ -1,4 +1,3 @@ export default { - "index": "Tally API", "how-to-use-the-tally-api": "How to use the Tally API" }; diff --git a/pages/user-guides/dao-best-practices/index.mdx b/pages/user-guides/dao-best-practices.mdx similarity index 100% rename from pages/user-guides/dao-best-practices/index.mdx rename to pages/user-guides/dao-best-practices.mdx diff --git a/pages/user-guides/dao-best-practices/_meta.js b/pages/user-guides/dao-best-practices/_meta.js index e5d955b..69db3ba 100644 --- a/pages/user-guides/dao-best-practices/_meta.js +++ b/pages/user-guides/dao-best-practices/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Organizational best practices", "running-an-onchain-dao-using-openzeppelin-governor": "Running an on-chain organization using OpenZeppelin Governor", "seatbelt-for-governance": "Seatbelt for governance" }; diff --git a/pages/user-guides/governance-concepts/index.mdx b/pages/user-guides/governance-concepts.mdx similarity index 100% rename from pages/user-guides/governance-concepts/index.mdx rename to pages/user-guides/governance-concepts.mdx diff --git a/pages/user-guides/governance-concepts/_meta.js b/pages/user-guides/governance-concepts/_meta.js index 36f0a1a..8d7ec74 100644 --- a/pages/user-guides/governance-concepts/_meta.js +++ b/pages/user-guides/governance-concepts/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Governance concepts", "decentralized-governance-overview": "Decentralized governance overview", "onchain-vs-offchain-voting": "On-chain vs off-chain voting", "application-layer-vs-base-layer-governance": "Application layer vs. base layer overnance", diff --git a/pages/user-guides/governance-frameworks/index.mdx b/pages/user-guides/governance-frameworks.mdx similarity index 100% rename from pages/user-guides/governance-frameworks/index.mdx rename to pages/user-guides/governance-frameworks.mdx diff --git a/pages/user-guides/governance-frameworks/_meta.js b/pages/user-guides/governance-frameworks/_meta.js index 2401789..f1b56a4 100644 --- a/pages/user-guides/governance-frameworks/_meta.js +++ b/pages/user-guides/governance-frameworks/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Governance frameworks", "openzeppelin-governor": "OpenZeppelin Governor", "curve-voting-escrow": "Curve voting escrow", "multisigs": "Multisigs", diff --git a/pages/user-guides/index-of-daos/index.mdx b/pages/user-guides/index-of-daos.mdx similarity index 100% rename from pages/user-guides/index-of-daos/index.mdx rename to pages/user-guides/index-of-daos.mdx diff --git a/pages/user-guides/index-of-daos/_meta.js b/pages/user-guides/index-of-daos/_meta.js index d08c677..3e46a37 100644 --- a/pages/user-guides/index-of-daos/_meta.js +++ b/pages/user-guides/index-of-daos/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Index of on-chain organizations", "daos-on-tally": "Organizations on Tally", "daos-not-on-tally": "DAOs Not on Tally" }; diff --git a/pages/user-guides/index-of-daos/daos-not-on-tally/index.mdx b/pages/user-guides/index-of-daos/daos-not-on-tally.mdx similarity index 100% rename from pages/user-guides/index-of-daos/daos-not-on-tally/index.mdx rename to pages/user-guides/index-of-daos/daos-not-on-tally.mdx diff --git a/pages/user-guides/index-of-daos/daos-not-on-tally/_meta.js b/pages/user-guides/index-of-daos/daos-not-on-tally/_meta.js index 05500ef..6cb5372 100644 --- a/pages/user-guides/index-of-daos/daos-not-on-tally/_meta.js +++ b/pages/user-guides/index-of-daos/daos-not-on-tally/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "DAOs Not on Tally", "balancer-bal": "Balancer (BAL)", "curve-crv": "Curve (CRV)", "index-coop-index": "Index Coop (INDEX)", diff --git a/pages/user-guides/index-of-daos/daos-on-tally/index.mdx b/pages/user-guides/index-of-daos/daos-on-tally.mdx similarity index 100% rename from pages/user-guides/index-of-daos/daos-on-tally/index.mdx rename to pages/user-guides/index-of-daos/daos-on-tally.mdx diff --git a/pages/user-guides/index-of-daos/daos-on-tally/_meta.js b/pages/user-guides/index-of-daos/daos-on-tally/_meta.js index dde0410..725d183 100644 --- a/pages/user-guides/index-of-daos/daos-on-tally/_meta.js +++ b/pages/user-guides/index-of-daos/daos-on-tally/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Organizations on Tally", "aave-aave": "Aave (AAVE)", "ampleforth-forth": "Ampleforth (FORTH)", "arbitrum-arb": "Arbitrum (ARB)", diff --git a/pages/user-guides/intro-to-governance/index.mdx b/pages/user-guides/intro-to-governance.mdx similarity index 100% rename from pages/user-guides/intro-to-governance/index.mdx rename to pages/user-guides/intro-to-governance.mdx diff --git a/pages/user-guides/intro-to-governance/_meta.js b/pages/user-guides/intro-to-governance/_meta.js index b41ca61..a7e1e88 100644 --- a/pages/user-guides/intro-to-governance/_meta.js +++ b/pages/user-guides/intro-to-governance/_meta.js @@ -1,5 +1,4 @@ export default { - "index": "Intro to governance", "general-ecosystem-info": "General ecosystem info", "participating-in-governance": "Participating in governance" }; diff --git a/scripts/promote-folder-indexes.mjs b/scripts/promote-folder-indexes.mjs new file mode 100644 index 0000000..bce0cb4 --- /dev/null +++ b/scripts/promote-folder-indexes.mjs @@ -0,0 +1,64 @@ +#!/usr/bin/env node +// One-off: for every nested directory under pages/ that contains an index.mdx, +// move that file up one level (pages/A/X/index.mdx -> pages/A/X.mdx) and +// remove the now-stale "index" entry from the directory's _meta.js. +// +// Why: Nextra v3 auto-merges a sibling file+folder pair with the same name +// into a single sidebar entry with `withIndexPage: true` — clicking expands +// AND navigates to the index. The pages/X/index.mdx pattern doesn't trigger +// that merge. +// +// The root pages/index.mdx is exempt — it's the site's home page, no parent. +import { readdir, readFile, writeFile, rename, stat } from "node:fs/promises"; +import { join, resolve, dirname, basename } from "node:path"; + +const REPO = resolve(new URL("..", import.meta.url).pathname); +const PAGES = join(REPO, "pages"); + +async function walk(dir) { + const out = [dir]; + for (const e of await readdir(dir, { withFileTypes: true })) { + if (e.name.startsWith(".") || e.name.startsWith("_")) continue; + if (e.isDirectory()) out.push(...(await walk(join(dir, e.name)))); + } + return out; +} + +async function exists(p) { + try { await stat(p); return true; } catch { return false; } +} + +const INDEX_LINE_RE = /^\s*"index"\s*:\s*[^,\n]+,?\s*\n/m; + +let moved = 0; +let metasUpdated = 0; + +const dirs = await walk(PAGES); +for (const dir of dirs) { + if (dir === PAGES) continue; // root home page stays put + const indexFile = join(dir, "index.mdx"); + if (!(await exists(indexFile))) continue; + + const folderName = basename(dir); + const parentDir = dirname(dir); + const newFile = join(parentDir, `${folderName}.mdx`); + + if (await exists(newFile)) { + console.warn(`SKIP ${dir}: target ${newFile} already exists`); + continue; + } + + await rename(indexFile, newFile); + moved += 1; + + const meta = join(dir, "_meta.js"); + if (await exists(meta)) { + const before = await readFile(meta, "utf8"); + if (INDEX_LINE_RE.test(before)) { + await writeFile(meta, before.replace(INDEX_LINE_RE, "")); + metasUpdated += 1; + } + } +} + +console.log(`Promoted ${moved} index.mdx files; cleaned ${metasUpdated} _meta.js files`); diff --git a/scripts/strip-index-entries.mjs b/scripts/strip-index-entries.mjs new file mode 100644 index 0000000..e874429 --- /dev/null +++ b/scripts/strip-index-entries.mjs @@ -0,0 +1,50 @@ +#!/usr/bin/env node +// One-off: for every nested folder under pages/ that has an index.mdx, set its +// _meta.js entry for "index" to { display: "hidden" }. This removes the +// duplicate sidebar child without losing the page — the parent folder header +// stays clickable + expandable and routes to the index. +// The root pages/_meta.js is exempt — its "index" is the real Welcome page. +import { readdir, readFile, writeFile, stat } from "node:fs/promises"; +import { join, resolve, dirname } from "node:path"; + +const REPO = resolve(new URL("..", import.meta.url).pathname); +const PAGES = join(REPO, "pages"); +const ROOT_META = join(PAGES, "_meta.js"); + +async function walk(dir) { + const out = []; + for (const e of await readdir(dir, { withFileTypes: true })) { + if (e.name.startsWith(".")) continue; + const full = join(dir, e.name); + if (e.isDirectory()) out.push(...(await walk(full))); + else if (e.name === "_meta.js") out.push(full); + } + return out; +} + +async function exists(p) { + try { await stat(p); return true; } catch { return false; } +} + +const EXISTING_INDEX_LINE_RE = /^\s*"index"\s*:\s*[^,\n]+,?\s*\n/m; +const EXPORT_DEFAULT_RE = /export\s+default\s+\{\s*\n/; +const HIDDEN_LINE = ' "index": { "display": "hidden" },\n'; + +let changed = 0; +for (const file of await walk(PAGES)) { + if (file === ROOT_META) continue; + const dir = dirname(file); + if (!(await exists(join(dir, "index.mdx")))) continue; + + let content = await readFile(file, "utf8"); + if (EXISTING_INDEX_LINE_RE.test(content)) { + content = content.replace(EXISTING_INDEX_LINE_RE, HIDDEN_LINE); + } else if (EXPORT_DEFAULT_RE.test(content)) { + content = content.replace(EXPORT_DEFAULT_RE, (m) => m + HIDDEN_LINE); + } else { + continue; + } + await writeFile(file, content); + changed += 1; +} +console.log(`Updated ${changed} _meta.js files to hide index entries`); From a206c14216d8dcaf10b6aaba05fdb8a7f2a97590 Mon Sep 17 00:00:00 2001 From: Ben DiFrancesco Date: Thu, 14 May 2026 17:45:06 -0400 Subject: [PATCH 6/6] Add warning banner to top of docs page --- styles/globals.css | 36 ++++++++++++++++++++++++++++++++++++ theme.config.tsx | 27 +++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/styles/globals.css b/styles/globals.css index 838a985..7f1df97 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -14,6 +14,42 @@ text-decoration-color: rgba(96, 165, 250, 0.4); } +/* Banner: pale yellow background with darker yellow bottom border */ +.nextra-banner-container { + background-color: #fef9c3; + background-image: none; + border-bottom: 1px solid #eab308; + color: #422006; + height: auto; + min-height: var(--nextra-banner-height); + padding-block: 0.4rem; +} + +.dark .nextra-banner-container { + background-color: #854d0e !important; + background-image: none !important; + border-bottom-color: #facc15; + color: #fef9c3; +} + +/* Banner content: allow wrapping instead of truncating */ +.nextra-banner-container > div { + white-space: normal; + overflow: visible; + text-overflow: clip; + line-height: 1.4; +} + +@media (max-width: 768px) { + .nextra-banner-container { + padding-inline-start: 0.75rem; + padding-inline-end: 0.75rem; + } + .nextra-banner-container > div { + font-size: 0.8125rem; + } +} + /* Sidebar: enlarge section header separators */ .nextra-sidebar-container ._font-semibold._text-sm { font-size: 0.9375rem; diff --git a/theme.config.tsx b/theme.config.tsx index d04a534..1bb7ee3 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -10,6 +10,33 @@ const config: DocsThemeConfig = { Columns, Column, } as never, + banner: { + key: "docs-revamp-2026", + dismissible: false, + content: ( + <> + These docs are being revamped as part of the platform{" "} + + transition + {" "} + and may be out of date. Reach out to{" "} + + support + {" "} + if assistance is needed. + + ), + }, logo: Tally Docs, docsRepositoryBase: "https://github.com/withtally/gov-platform-docs/tree/main",