diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx
index db8a7d36a..cf1def15c 100644
--- a/app/(home)/page.tsx
+++ b/app/(home)/page.tsx
@@ -67,7 +67,7 @@ export default function HomePage(): JSX.Element {
- ORDHOOK
+ BITCOIN INDEXER
ORDINALS API
diff --git a/app/cookbook/[id]/page.tsx b/app/cookbook/[id]/page.tsx
index 292a83c40..12e753ba4 100644
--- a/app/cookbook/[id]/page.tsx
+++ b/app/cookbook/[id]/page.tsx
@@ -16,6 +16,8 @@ import {
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
+import { Metadata } from "next/types";
+import { getRouteMetadata, createMetadata } from "@/utils/metadata";
interface Param {
id: string;
@@ -23,6 +25,15 @@ interface Param {
export const dynamicParams = false;
+export async function generateMetadata({
+ params,
+}: {
+ params: { id: string };
+}): Promise {
+ const routeMetadata = getRouteMetadata("/cookbook");
+ return createMetadata(routeMetadata);
+}
+
export default async function Page({
params,
}: {
diff --git a/app/cookbook/page.tsx b/app/cookbook/page.tsx
index da53a11f6..2fbc01e9c 100644
--- a/app/cookbook/page.tsx
+++ b/app/cookbook/page.tsx
@@ -5,6 +5,8 @@ import { Recipe } from "@/types/recipes";
import Link from "next/link";
import { Badge } from "@/components/ui/badge";
import { CopyButton } from "@/components/docskit/copy-button";
+import { Metadata } from "next/types";
+import { getRouteMetadata, createMetadata } from "@/utils/metadata";
function RecipeCard({
recipe,
@@ -49,6 +51,11 @@ function RecipeCard({
);
}
+export async function generateMetadata(): Promise {
+ const routeMetadata = getRouteMetadata("/cookbook");
+ return createMetadata(routeMetadata);
+}
+
export default async function Page() {
// Pre-render the recipe cards with Code components on the server
const recipes = await loadRecipes();
diff --git a/content/docs/bitcoin/get-started.mdx b/content/docs/bitcoin/get-started.mdx
index 8b1ea1bb3..fa6cbf61b 100644
--- a/content/docs/bitcoin/get-started.mdx
+++ b/content/docs/bitcoin/get-started.mdx
@@ -22,10 +22,10 @@ import { API, Container, Chainhook, BitcoinIcon } from '@/components/ui/icon';
}
- href="/bitcoin/ordinals/ordhook/quickstart"
+ href="/bitcoin/indexer"
title="Stream custom blockchain events"
- description="Use Ordhook to filter and stream for contract deployments."
- tag='Ordhook'
+ description="Use the Bitcoin Indexer to filter and stream for contract deployments."
+ tag='Bitcoin Indexer'
/>
-
-
-
-
----
-
-
- }
- href="/guides/sync-a-bitcoin-node"
- title="Sync a Bitcoin node"
- description="Set up and run a Bitcoin node to use tools like Ordhook."
- />
-
-
-
-
For more, check out our [guides](/guides) section.
diff --git a/content/docs/bitcoin/index.mdx b/content/docs/bitcoin/index.mdx
index 45b56bfcd..5498714fc 100644
--- a/content/docs/bitcoin/index.mdx
+++ b/content/docs/bitcoin/index.mdx
@@ -49,8 +49,8 @@ import heroImage from '@/public/bitcoin-hero.svg';
-
- Explore Ordinals
+
---
@@ -58,9 +58,9 @@ import heroImage from '@/public/bitcoin-hero.svg';
}
- href="/bitcoin/ordinals/api"
- title="Ordinals API"
- description="Fetch on-chain data for Ordinals and meta-protocols with our hosted API."
+ href="/bitcoin/indexer"
+ title="Bitcoin Indexer"
+ description="Use the Bitcoin Indexer to index and query Bitcoin blockchain data."
/>
}
@@ -70,23 +70,10 @@ import heroImage from '@/public/bitcoin-hero.svg';
/>
}
- href="/ordinals/explorer"
- title="Explorer"
+ href="https://ordinals.hiro.so/"
+ title="Ordinals Explorer"
description="View on-chain data for Ordinals and meta-protocols with our explorer."
/>
-
-
-
-
-
-
-
-
----
-
-
}
href="/bitcoin/runes/api"
diff --git a/content/docs/bitcoin/indexer/guides/run-indexer.mdx b/content/docs/bitcoin/indexer/guides/run-indexer.mdx
new file mode 100644
index 000000000..b3ecb004b
--- /dev/null
+++ b/content/docs/bitcoin/indexer/guides/run-indexer.mdx
@@ -0,0 +1,5 @@
+---
+title: TBD
+description: TBD
+---
+
diff --git a/content/docs/bitcoin/indexer/index.mdx b/content/docs/bitcoin/indexer/index.mdx
new file mode 100644
index 000000000..ff118f009
--- /dev/null
+++ b/content/docs/bitcoin/indexer/index.mdx
@@ -0,0 +1,52 @@
+---
+title: Overview
+description: The Bitcoin Indexer enables you to build ordinals event streams, so you can create accurate, lightweight databases that gracefully handle Bitcoin forks and reorgs.
+---
+
+import { SecondaryCard } from '@/components/card';
+import { Step, Steps } from 'fumadocs-ui/components/steps';
+
+The Bitcoin Indexer is a reorg-aware indexer that automatically handles chain forks, so you don't need to waste time or resources reindexing your database yourself.
+
+You can customize what ordinals data you index in order to create lightweight databases for faster query responses and a better user experience.
+
+## Installation
+
+```terminal
+$ git clone https://github.com/hirosystems/bitcoin-indexer.git
+$ cd bitcoin-indexer
+$ cargo bitcoin-indexer-install
+```
+
+Alternatively, you can use Docker images from [Docker Hub](https://hub.docker.com/r/hirosystems/bitcoin-indexer).
+
+## Get started
+
+
+
+
+
+## System Requirements
+
+Before running the indexer, ensure your system meets these requirements:
+
+- **CPU**: Multi-core support for parallel processing
+- **Memory**: Minimum 16GB RAM
+- **Storage**: SSD or NVMe recommended
+- **OS**: Support for 4096+ open file descriptors
+- **Postgres**: Version 17+ recommended
+
+## Related tools
+
+- **[Ordinals API](/bitcoin/ordinals/api)**: Skip the infrastructure setup and get the ordinals data you need from our Ordinals API, which is powered by the Bitcoin Indexer.
+- **[Ordinals Explorer](https://ordinals.hiro.so/)**: Explore ordinals inscriptions and BRC-20 tokens rapidly in our Ordinals Explorer.
+
+
+
+
+Reach out to us on the #indexer channel on [Discord](https://stacks.chat/) under the Hiro Developer Tools section. There's also a [weekly office hours](https://www.addevent.com/event/kI22007085) call every Wednesday at 1pm ET.
+
diff --git a/content/docs/bitcoin/indexer/meta.json b/content/docs/bitcoin/indexer/meta.json
new file mode 100644
index 000000000..2493ef638
--- /dev/null
+++ b/content/docs/bitcoin/indexer/meta.json
@@ -0,0 +1,10 @@
+{
+ "title": "Bitcoin Indexer",
+ "root": true,
+ "pages": [
+ "---Bitcoin Indexer---",
+ "index",
+ "installation",
+ "quickstart"
+ ]
+}
diff --git a/content/docs/bitcoin/indexer/quickstart.mdx b/content/docs/bitcoin/indexer/quickstart.mdx
new file mode 100644
index 000000000..64c7e2732
--- /dev/null
+++ b/content/docs/bitcoin/indexer/quickstart.mdx
@@ -0,0 +1,72 @@
+---
+title: Quickstart
+description: Learn how to scan the Bitcoin blockchain for Ordinals activity.
+---
+
+import { Steps, Step } from 'fumadocs-ui/components/steps';
+
+In this quickstart guide, you will set up the Bitcoin Indexer to index Ordinals or Runes activity on the Bitcoin blockchain.
+
+
+
+ Clone the repository and install the indexer:
+ ```terminal
+ $ git clone https://github.com/hirosystems/bitcoin-indexer.git
+ $ cd bitcoin-indexer
+ $ cargo bitcoin-indexer-install
+ ```
+
+
+
+ Generate a new configuration file:
+ ```terminal
+ $ bitcoin-indexer config new
+ ```
+
+ Configure your Postgres database in the generated TOML file:
+ ```toml
+ [ordinals.db]
+ database = "metaprotocols"
+ host = "localhost"
+ port = 5432
+ username = "postgres"
+ password = "postgres"
+ ```
+
+
+
+ Run the following command to start indexing Ordinals activity:
+ ```terminal
+ $ bitcoin-indexer ordinals service start --config-path
+ ```
+
+ For Runes indexing, use:
+ ```terminal
+ $ bitcoin-indexer runes service start --config-path
+ ```
+
+
+
+
+ A fully synced Bitcoin node is required for indexing to start.
+
+
+## Next steps
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/docs/bitcoin/meta.json b/content/docs/bitcoin/meta.json
index 7f6218143..301226879 100644
--- a/content/docs/bitcoin/meta.json
+++ b/content/docs/bitcoin/meta.json
@@ -5,7 +5,7 @@
"index",
"get-started",
"---Tools---",
- "ordinals/ordhook",
+ "indexer",
"---APIs---",
"ordinals/api",
"runes/api",
diff --git a/content/docs/bitcoin/ordinals/api/index.mdx b/content/docs/bitcoin/ordinals/api/index.mdx
index 8079af16f..ed2508d8b 100644
--- a/content/docs/bitcoin/ordinals/api/index.mdx
+++ b/content/docs/bitcoin/ordinals/api/index.mdx
@@ -41,7 +41,7 @@ The Ordinals API uses REST endpoints and cached responses in order to optimize p
## Related tools
-- **[Ordhook](/bitcoin/ordinals/ordhook)**: Want to run your own infra? [Set up your own Ordhook](/bitcoin/ordinals/ordhook/guides/ordhook-as-a-service), the indexer that powers the Ordinals API.
+- **[Bitcoin Indexer](/bitcoin/indexer)**: Want to run your own infra? [Set up your own Bitcoin Indexer](/bitcoin/indexer), the indexer that powers the Ordinals API.
- **[Ordinals Explorer](https://ordinals.hiro.so/)**: The Ordinals API powers Hiro’s Ordinals Explorer, which lets you rapidly discover inscriptions and verify on-chain activity.
diff --git a/content/docs/bitcoin/ordinals/ordhook/guides/ordhook-as-a-service.mdx b/content/docs/bitcoin/ordinals/ordhook/guides/ordhook-as-a-service.mdx
deleted file mode 100644
index 46023e62a..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/guides/ordhook-as-a-service.mdx
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: Run Ordhook as a service
-description: Learn how to run Ordhook to evaluate your "if this, then that" predicates for Ordinals.
----
-
-In order to build out a more robust and secure web app, you can run Chainhook as a service to stream your events continously to a server you designate.
-
-In this guide, you will learn how to:
-
-1. [Generate a Ordhook predicate to target specific transactions](#configure-ordhook).
-2. [Initiate a Ordhook service to watch for matching transactions](#initiate-a-ordhook-service).
-3. [Dynamically register your predicate with Ordhook](#dynamically-register-predicates).
-
----
-
-## Configure Ordhook
-
-In this section, you will configure Ordhook to match the network configurations with the bitcoin config file. First, [install the latest version of Ordhook](/bitcoin/ordinals/ordhook/installation).
-
-Next, you will generate a `Ordhook.toml` file to connect Ordhook with your bitcoind node. Navigate to the directory where you want to generate the `Ordhook.toml` file and use the following command in your terminal:
-
-```terminal
-$ ordhook config generate --mainnet
-```
-
-Several network parameters in the generated `Ordhook.toml` configuration file need to match those in the `bitcoin.conf` file created earlier in the [setting up a Bitcoin node](#setting-up-a-bitcoin-node) section. Please update the following parameters accordingly:
-
-1. Update `bitcoind_rpc_username` with the username set for `rpcuser` in `bitcoin.conf`.
-2. Update `bitcoind_rpc_password` with the password set for `rpcpassword` in `bitcoin.conf`.
-3. Update `bitcoind_rpc_url` with the same host and port used for `rpcport` in `bitcoin.conf`.
-
-Additionally, if you want to receive events from the configured Bitcoin node, substitute `stacks_node_rpc_url` with `bitcoind_zmq_url`, as follows:
-
-```toml
-[storage]
-working_dir = "ordhook"
-
-# The http API allows you to register / deregister predicates dynamically.
-# This is disabled by default.
-#
-# [http_api]
-# http_port = 20456
-# database_uri = "redis://localhost:6379/"
-
-[network]
-mode = "mainnet"
-bitcoind_rpc_url = "http://0.0.0.0:8332"
-bitcoind_rpc_username = "devnet"
-bitcoind_rpc_password = "devnet"
-# Bitcoin block events can be received by Chainhook
-# either through a Bitcoin node's ZeroMQ interface,
-# or through the Stacks node. Zmq is being
-# used by default:
-bitcoind_zmq_url = "tcp://0.0.0.0:18543"
-# but stacks can also be used:
-# stacks_node_rpc_url = "http://0.0.0.0:20443"
-
-[limits]
-max_number_of_bitcoin_predicates = 100
-max_number_of_concurrent_bitcoin_scans = 100
-max_number_of_processing_threads = 16
-bitcoin_concurrent_http_requests_max = 16
-max_caching_memory_size_mb = 32000
-
-# Disable the following section if the state
-# must be built locally
-[bootstrap]
-download_url = "https://archive.hiro.so/mainnet/ordhook/mainnet-ordhook-sqlite-latest"
-
-[logs]
-ordinals_internals = true
-chainhook_internals = true
-```
-
-Here is a table of the relevant parameters this guide changes in our configuration files.
-
-| bitcoin.conf | Ordhook.toml |
-| --------------- | --------------------- |
-| rpcuser | bitcoind_rpc_username |
-| rpcpassword | bitcoind_rpc_password |
-| rpcport | bitcoind_rpc_url |
-| zmqpubhashblock | bitcoind_zmq_url |
-
-## Initiate Ordhook service
-
-In this section, you'll learn how to run Ordhook as a service using the [Ordhook SDK](https://github.com/hirosystems/ordhook/tree/develop/components/ordhook-sdk-js) to post events to a server.
-
-Use the following command to start the Ordhook service for streaming and processing new blocks appended to the Bitcoin blockchain:
-
-`ordhook service start --post-to=http://localhost:3000/api/events --config-path=./Ordhook.toml`
-
-When the Ordhook service starts, it is initiated in the background to augment the blocks from Bitcoin. Bitcoind sends ZeroMQ notifications to Ordhook to retrieve the inscriptions.
-
-### Add `http-post` endpoints dynamically
-
-To enable dynamically posting endpoints to the server, you can spin up the Redis server by enabling the following lines of code in the `Ordhook.toml` file:
-
-```toml
-[http_api]
-http_port = 20456
-database_uri = "redis://localhost:6379/"
-```
-
-## Dynamically register predicates
-
-Based on the `Ordhook.toml` file configuration, the Ordhook service spins up an HTTP API to manage event destinations. Use the following command to start the Ordhook service:
-
-`ordhook service start --config-path=./Ordhook.toml`
-
-A comprehensive OpenAPI specification explaining how to interact with this HTTP REST API can be found [here](https://github.com/hirosystems/ordhook/blob/develop/docs/ordhook-openapi.json).
-
----
-
-## Next steps
-
-
-
-
diff --git a/content/docs/bitcoin/ordinals/ordhook/guides/scan-ordinals-activity.mdx b/content/docs/bitcoin/ordinals/ordhook/guides/scan-ordinals-activity.mdx
deleted file mode 100644
index 3dde35779..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/guides/scan-ordinals-activity.mdx
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Scan Ordinal activity in your terminal
-description: Learn how to scan activity and view data in your terminal.
----
-
-Ordhook is a tool that helps you find ordinal activity on the Bitcoin chain. Think of it like a detective that can find and track this activity for you. Once it finds any activity, that data can be used to help build your own database. This guide will show you how to use Ordhook to scan this activity on the Bitcoin chain in your terminal.
-
-## Explore Ordinal activity
-
-You can use the following command to scan a range of blocks on mainnet or testnet:
-
-`ordhook scan blocks 767430 767753 --mainnet`
-
-The above command generates a `hord.sqlite.gz` file in your directory and displays inscriptions and transfers activities occurring in the range of the specified blocks.
-
-
-By default, Ordhook creates a folder named `ordhook` in your current directory and stores the `hord.sqlite` file there. This file is used to pull in the latest ordinal data and scan against it based on the block numbers you provide.
-
-
-The output of the above command looks like this:
-
-```
-Inscription 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0 revealed at block #767430 (inscription_number 0, ordinal_number 1252201400444387)
-Inscription 26482871f33f1051f450f2da9af275794c0b5f1c61ebf35e4467fb42c2813403i0 revealed at block #767753 (inscription_number 1, ordinal_number 727624168684699)
-```
-
-You can also get activity for a given inscription by using the following command:
-
-`ordhook scan inscription 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0 --mainnet`
-
-The above command returns ordinal activity for that inscription and also the number of transfers in the transactions.
-
-```
-Inscription 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0 revealed at block #767430 (inscription_number 0, ordinal_number 1252201400444387)
- → Transferred in transaction 0x2c8a11858825ae2056be90c3e49938d271671ac4245b452cd88b1475cbea8971 (block #785391)
- → Transferred in transaction 0xbc4c30829a9564c0d58e6287195622b53ced54a25711d1b86be7cd3a70ef61ed (block #785396)
-Number of transfers: 2
-```
-
----
-
-## Next steps
-
-
-
-
-
diff --git a/content/docs/bitcoin/ordinals/ordhook/guides/stream-ordinals-activity.mdx b/content/docs/bitcoin/ordinals/ordhook/guides/stream-ordinals-activity.mdx
deleted file mode 100644
index 835e74a48..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/guides/stream-ordinals-activity.mdx
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Stream Ordinals activity to an API
-description: Learn how to stream data and post it to an external endpoint.
----
-
-Ordhook is a tool that helps you find Ordinals activity on the Bitcoin chain and build your own customized database with that data. This guide will show you how to use Ordhook to stream Ordinals activity.
-
-## Configure Ordhook
-
-This section walks you through streaming Ordinals activity. To post that activity, you'll need to configure bitcoind. Refer to [setting up a bitcoin node](/guides/sync-a-bitcoin-node) to understand the steps to configure Bitcoind.
-
-
-Ordhook is applicable to the Bitcoin chain only.
-
-
-Once the Bitcoin node is configured, you can use the following command in your terminal to create a configuration for Ordhook:
-
-`ordhook config new --mainnet`
-
-You will see a success message "Created file Ordhook.toml" in your terminal.
-
-The generated `Ordhook.toml` file looks like this:
-
-```toml
-[storage]
-working_dir = "ordhook"
-
-# The http API allows you to register / deregister predicates dynamically.
-# This is disabled by default.
-#
-# [http_api]
-# http_port = 20456
-# database_uri = "redis://localhost:6379/"
-
-[network]
-mode = "mainnet"
-bitcoind_rpc_url = "http://0.0.0.0:8332"
-bitcoind_rpc_username = "devnet"
-bitcoind_rpc_password = "devnet"
-# Bitcoin block events can be received by Chainhook
-# either through a Bitcoin node's ZeroMQ interface,
-# or through the Stacks node. Zmq is being
-# used by default:
-bitcoind_zmq_url = "tcp://0.0.0.0:18543"
-# but stacks can also be used:
-# stacks_node_rpc_url = "http://0.0.0.0:20443"
-
-[limits]
-max_number_of_bitcoin_predicates = 100
-max_number_of_concurrent_bitcoin_scans = 100
-max_number_of_processing_threads = 16
-bitcoin_concurrent_http_requests_max = 16
-max_caching_memory_size_mb = 32000
-
-# Disable the following section if the state must be built locally
-[bootstrap]
-download_url = "https://archive.hiro.so/mainnet/ordhook/mainnet-ordhook-sqlite-latest"
-
-[logs]
-ordinals_internals = true
-chainhook_internals = true
-```
-
-Observe that the bitcoind configured fields will appear in the `Ordhook.toml` file. Now, ensure that these fields are configured with the right values and URLs, as shown below:
-
-```toml
-bitcoind_rpc_url = "http://0.0.0.0:8332"
-bitcoind_rpc_username = "devnet"
-bitcoind_rpc_password = "devnet"
-bitcoind_zmq_url = "tcp://0.0.0.0:18543"
-```
-
-## Post Ordinals activity to an external endpoint
-
-After adjusting the `Ordhook.toml` settings to make them match the bitcoind configuration, the following command can be run to scan blocks and post events to a local server:
-
-`ordhook scan blocks 767430 767753 --post-to=http://localhost:3000/api/events --config-path=./Ordhook.toml`
-
-The above command uses Ordhook to stream and then post Ordinals activity to `http://localhost:3000/api/events` where you can build out your own database or custom views.
-
----
-
-## Next steps
-
-
-
-
-
diff --git a/content/docs/bitcoin/ordinals/ordhook/index.mdx b/content/docs/bitcoin/ordinals/ordhook/index.mdx
deleted file mode 100644
index a722947ee..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/index.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Overview
-description: Ordhook enables you to build ordinals event streams, so you can create accurate, lightweight databases that gracefully handle Bitcoin forks and reorgs.
----
-
-import { SecondaryCard } from '@/components/card';
-import { Step, Steps } from 'fumadocs-ui/components/steps';
-
-Ordhook is a reorg-aware indexer that automatically handles chain forks, so you don’t need to waste time or resources reindexing your database yourself.
-
-With a familiar event-driven framework, you can customize what ordinals data you index in order to create lightweight databases for faster query responses and a better user experience.
-
-## Create event streams
-
-
-
-
-
-
-
-## Related tools
-
-- **[Ordinals API](/bitcoin/ordinals/api)**: Skip the infrastructure setup and get the ordinals data you need from our Ordinals API, which is powered by Ordhook.
-- **[Ordinals Explorer](https://ordinals.hiro.so/)**: Explore ordinals inscriptions and BRC-20 tokens rapidly in our Ordinals Explorer.
-
-
-
-
-Reach out to us on the #chainhook channel on [Discord](https://stacks.chat/) under the Hiro Developer Tools section. There's also a [weekly office hours](https://www.addevent.com/event/kI22007085) call every Wednesday at 1pm ET.
-
diff --git a/content/docs/bitcoin/ordinals/ordhook/installation.mdx b/content/docs/bitcoin/ordinals/ordhook/installation.mdx
deleted file mode 100644
index 2ab37d465..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/installation.mdx
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Installation
-description: Ordhook was developed to be environment-agnostic. Below are the different ways to install and build Ordhook on your machine.
-toc: false
----
-Clone the [Ordhook repository](https://github.com/hirosystems/ordhook) to your local machine and install via `cargo`.
-
-```terminal
-$ git clone https://github.com/hirosystems/ordhook.git
-$ cd ordhook
-$ cargo ordhook-install
-```
\ No newline at end of file
diff --git a/content/docs/bitcoin/ordinals/ordhook/meta.json b/content/docs/bitcoin/ordinals/ordhook/meta.json
deleted file mode 100644
index 50af9fb86..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/meta.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "title": "Ordhook",
- "root": true,
- "pages": [
- "---Ordhook---",
- "index",
- "installation",
- "quickstart",
- "---Guides---",
- "guides/ordhook-as-a-service",
- "guides/scan-ordinals-activity",
- "guides/stream-ordinals-activity"
- ]
-}
diff --git a/content/docs/bitcoin/ordinals/ordhook/quickstart.mdx b/content/docs/bitcoin/ordinals/ordhook/quickstart.mdx
deleted file mode 100644
index 63db02bc8..000000000
--- a/content/docs/bitcoin/ordinals/ordhook/quickstart.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Quickstart
-description: Learn how to scan the Bitcoin blockchain for Ordinals activity.
----
-
-import { Steps, Step } from 'fumadocs-ui/components/steps';
-
-In this quickstart guide, you will set up `ordhook` to explore and index Ordinal activity on the Bitcoin blockchain. You will learn how to install, configure, and run basic commands to scan and stream Ordinal inscriptions and transfers.
-
-Check out the [Ordhook as a service](/bitcoin/ordinals/ordhook/guides/ordhook-as-a-service) for a more advanced use case.
-
-
-
- ## Scanning for Ordinal activity
-
- To scan blocks for Ordinal activity, you can use the `scan blocks` command. The output will show details of the inscription, including the block number it was revealed at, `ordinal_number`, and `inscription_number`.
-
- ```terminal
- $ ordhook scan blocks --interval 767430:767753 --mainnet
- ```
-
- The `--interval` flag is used to specify a block range. The range is inclusive, meaning both the start and end blocks will be included in the scan. And the `--mainnet` flag is used to specify the Bitcoin network to scan.
-
-
- When running `scan` for the first time, an archive of Bitcoin blockchain data will be downloaded. The subsequent scans will use the cached chainstate if already present, speeding up iterations and the overall feedback loop. To learn more, check out the [Hiro Archive](/stacks/archive) section.
-
-
-
- ## Inspecting a specific inscription
-
- To inspect an inscription, you can run a similar command, `scan inscription` and pass in the inscription's ID.
-
- ```terminal
- $ ordhook scan inscription 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0 --mainnet
- Inscription 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0 revealed at block #767430 (ordinal_number 1252201400444387, inscription_number 0)
- Transferred in transaction bc4c30829a9564c0d58e6287195622b53ced54a25711d1b86be7cd3a70ef61ed at block 785396
- ```
-
- The output will show where and when the inscription was revealed and any subsequent transfer events.
-
-
-
----
-
-## Next steps
-
-
-
-
-
\ No newline at end of file
diff --git a/content/docs/bitcoin/runes/runehook/index.mdx b/content/docs/bitcoin/runes/runehook/index.mdx
index 9a0c1fbc0..02d8b226c 100644
--- a/content/docs/bitcoin/runes/runehook/index.mdx
+++ b/content/docs/bitcoin/runes/runehook/index.mdx
@@ -11,23 +11,6 @@ With a familiar event-driven framework, you can customize what Rune data you ind
### Create event streams
-{/*
-
-
-
- */}
### Related tools
diff --git a/content/docs/bitcoin/runes/runehook/installation.mdx b/content/docs/bitcoin/runes/runehook/installation.mdx
index bbafe5fa7..97a2e068c 100644
--- a/content/docs/bitcoin/runes/runehook/installation.mdx
+++ b/content/docs/bitcoin/runes/runehook/installation.mdx
@@ -1,6 +1,6 @@
---
title: Installation
-description: Runehook was developed to be environment-agnostic. Below are the different ways to install and build Ordhook on your machine.
+description: Runehook was developed to be environment-agnostic. Below are the different ways to install and build the Bitcoin Indexer on your machine.
toc: false
---
Clone the [Runehook repository](https://github.com/hirosystems/runehook) to your local machine and install via `cargo`.
diff --git a/content/docs/stacks/chainhook/index.mdx b/content/docs/stacks/chainhook/index.mdx
index 1772c5f68..1f3051b20 100644
--- a/content/docs/stacks/chainhook/index.mdx
+++ b/content/docs/stacks/chainhook/index.mdx
@@ -46,7 +46,7 @@ To get started, check out our [installation guide](/stacks/chainhook/installatio
## Related tools
-- **[Ordhook](/bitcoin/ordinals/ordhook)**: Simplify your testing with the Clarinet JS SDK.
+- **[Bitcoin Indexer](/bitcoin/indexer)**: Simplify your testing with the Clarinet JS SDK.
- **[Hiro Platform](/stacks/platform)**: A developer platform for building, deploying and scaling Bitcoin apps.
diff --git a/content/docs/stacks/chainhook/quickstart.mdx b/content/docs/stacks/chainhook/quickstart.mdx
index 11b392059..14d943164 100644
--- a/content/docs/stacks/chainhook/quickstart.mdx
+++ b/content/docs/stacks/chainhook/quickstart.mdx
@@ -98,9 +98,9 @@ Check out the [run Chainhook as a service](/stacks/chainhook/guides/chainhook-as
description="Learn how to run Chainhook as a service."
/>
0) {
diff --git a/utils/data.ts b/utils/data.ts
index ec1d0e2c2..bc582e2fe 100644
--- a/utils/data.ts
+++ b/utils/data.ts
@@ -20,13 +20,6 @@ export const guides = [
tags: ["sbtc"],
createdAt: new Date().toLocaleDateString(),
},
- {
- title: "Host your own Ordhook Service",
- description:
- "Set up and run your own Ordhook service to handle blockchain webhooks with ease.",
- tags: ["chainhook"],
- createdAt: new Date().toLocaleDateString(),
- },
{
title: "Validate off-chain price feeds with Pyth",
description:
diff --git a/utils/metadata.ts b/utils/metadata.ts
index 74fa171ff..ee15c85c4 100644
--- a/utils/metadata.ts
+++ b/utils/metadata.ts
@@ -30,14 +30,35 @@ const defaultMetadata: Metadata = {
},
};
+const apiKeysMetadata: Partial = {
+ title: "API keys",
+ description: "Learn how to get and use API keys for Hiro tools.",
+ openGraph: {
+ title: "API keys",
+ description: "Learn how to get and use API keys for Hiro tools.",
+ images: [
+ {
+ url: "/images/api-keys-og.jpg",
+ width: 800,
+ height: 600,
+ },
+ ],
+ },
+ twitter: {
+ title: "API keys",
+ description: "Learn how to get and use API keys for Hiro tools.",
+ images: ["/images/api-keys-og.jpg"],
+ },
+};
+
const hiroHacksMetadata: Partial = {
- title: "Hiro Hacks - Season 1",
+ title: "Hiro Hacks",
description:
- "Join Hiro Hacks Season 1 and build on Bitcoin layers with our monthly themed challenges.",
+ "Join Hiro Hacks and build on Bitcoin layers with our monthly themed challenges.",
openGraph: {
- title: "Hiro Hacks - Season 1",
+ title: "Hiro Hacks",
description:
- "Join Hiro Hacks Season 1 and build on Bitcoin layers with our monthly themed challenges.",
+ "Join Hiro Hacks and build on Bitcoin layers with our monthly themed challenges.",
images: [
{
url: "/images/hh-og.png",
@@ -47,13 +68,251 @@ const hiroHacksMetadata: Partial = {
],
},
twitter: {
- title: "Hiro Hacks - Season 1",
+ title: "Hiro Hacks",
description:
- "Join Hiro Hacks Season 1 and build on Bitcoin layers with our monthly themed challenges.",
+ "Join Hiro Hacks and build on Bitcoin layers with our monthly themed challenges.",
images: ["/images/hh-og.png"],
},
};
+const chainhookMetadata: Partial = {
+ title: "Chainhook",
+ description: "Learn how to use Chainhook for blockchain event streaming.",
+ openGraph: {
+ title: "Chainhook",
+ description: "Learn how to use Chainhook for blockchain event streaming.",
+ images: [{ url: "/images/chainhook-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Chainhook",
+ description: "Learn how to use Chainhook for blockchain event streaming.",
+ images: ["/images/chainhook-og.jpg"],
+ },
+};
+
+const clarinetMetadata: Partial = {
+ title: "Clarinet",
+ description:
+ "Build and test Clarity smart contracts with Clarinet's development tools.",
+ openGraph: {
+ title: "Clarinet",
+ description:
+ "Build and test Clarity smart contracts with Clarinet's development tools.",
+ images: [{ url: "/images/clarinet-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Clarinet",
+ description:
+ "Build and test Clarity smart contracts with Clarinet's development tools.",
+ images: ["/images/clarinet-og.jpg"],
+ },
+};
+
+const clarinetJsSdkMetadata: Partial = {
+ title: "Clarinet JS SDK",
+ description:
+ "Integrate Clarinet's testing capabilities into your development workflow.",
+ openGraph: {
+ title: "Clarinet JS SDK",
+ description:
+ "Integrate Clarinet's testing capabilities into your development workflow.",
+ images: [
+ { url: "/images/clarinet-js-sdk-og.jpg", width: 800, height: 600 },
+ ],
+ },
+ twitter: {
+ title: "Clarinet JS SDK",
+ description:
+ "Integrate Clarinet's testing capabilities into your development workflow.",
+ images: ["/images/clarinet-js-sdk-og.jpg"],
+ },
+};
+
+const cookbookMetadata: Partial = {
+ title: "Hiro Cookbook",
+ description: "Practical recipes and examples for building on Bitcoin layers.",
+ openGraph: {
+ title: "Hiro Cookbook",
+ description: "Practical recipes and examples for building on Stacks.",
+ images: [{ url: "/images/cookbook-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Hiro Cookbook",
+ description:
+ "Practical recipes and examples for building on Bitcoin layers.",
+ images: ["/images/cookbook-og.jpg"],
+ },
+};
+
+const guidesMetadata: Partial = {
+ title: "Hiro Guides",
+ description:
+ "Comprehensive guides for building on Bitcoin layers with Hiro tools.",
+ openGraph: {
+ title: "Hiro Guides",
+ description:
+ "Comprehensive guides for building on Bitcoin layers with Hiro tools.",
+ images: [{ url: "/images/guides-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Hiro Guides",
+ description:
+ "Comprehensive guides for building on Bitcoin layers with Hiro tools.",
+ images: ["/images/guides-og.jpg"],
+ },
+};
+
+const ordinalsApiMetadata: Partial = {
+ title: "Ordinals API",
+ description: "Interact with Bitcoin Ordinals using Hiro's Ordinals API.",
+ openGraph: {
+ title: "Ordinals API",
+ description: "Interact with Bitcoin Ordinals using Hiro's Ordinals API.",
+ images: [{ url: "/images/ordinals-api-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Ordinals API",
+ description: "Interact with Bitcoin Ordinals using Hiro's Ordinals API.",
+ images: ["/images/ordinals-api-og.jpg"],
+ },
+};
+
+const platformApiMetadata: Partial = {
+ title: "Platform API",
+ description: "Build applications with Hiro's Platform API services.",
+ openGraph: {
+ title: "Platform API",
+ description: "Build applications with Hiro's Platform API services.",
+ images: [{ url: "/images/platform-api-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Platform API",
+ description: "Build applications with Hiro's Platform API services.",
+ images: ["/images/platform-api-og.jpg"],
+ },
+};
+
+const runesApiMetadata: Partial = {
+ title: "Runes API",
+ description: "Interact with Bitcoin Runes using Hiro's Runes API.",
+ openGraph: {
+ title: "Runes API",
+ description: "Interact with Bitcoin Runes using Hiro's Runes API.",
+ images: [{ url: "/images/runes-api-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Runes API",
+ description: "Interact with Bitcoin Runes using Hiro's Runes API.",
+ images: ["/images/runes-api-og.jpg"],
+ },
+};
+
+const signerMetricsApiMetadata: Partial = {
+ title: "Signer Metrics API",
+ description:
+ "Monitor and analyze Stacks signing metrics with the Signer Metrics API.",
+ openGraph: {
+ title: "Signer Metrics API",
+ description:
+ "Monitor and analyze Stacks signing metrics with the Signer Metrics API.",
+ images: [
+ {
+ url: "/images/signer-metrics-api-og.jpg",
+ width: 800,
+ height: 600,
+ },
+ ],
+ },
+ twitter: {
+ title: "Signer Metrics API",
+ description:
+ "Monitor and analyze Stacks signing metrics with the Signer Metrics API.",
+ images: ["/images/signer-metrics-api-og.jpg"],
+ },
+};
+
+const stacksApiMetadata: Partial = {
+ title: "Stacks API",
+ description: "Interact with the Stacks blockchain using Hiro's Stacks API.",
+ openGraph: {
+ title: "Stacks API",
+ description: "Interact with the Stacks blockchain using Hiro's Stacks API.",
+ images: [{ url: "/images/stacks-api-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Stacks API",
+ description: "Interact with the Stacks blockchain using Hiro's Stacks API.",
+ images: ["/images/stacks-api-og.jpg"],
+ },
+};
+
+const stacksConnectMetadata: Partial = {
+ title: "Stacks Connect",
+ description:
+ "Integrate Stacks authentication and transactions in your applications.",
+ openGraph: {
+ title: "Stacks Connect",
+ description:
+ "Integrate Stacks authentication and transactions in your applications.",
+ images: [{ url: "/images/stacks-connect-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Stacks Connect",
+ description:
+ "Integrate Stacks authentication and transactions in your applications.",
+ images: ["/images/stacks-connect-og.jpg"],
+ },
+};
+
+const stacksJsMetadata: Partial = {
+ title: "Stacks.js",
+ description: "Build Stacks applications with the Stacks.js library.",
+ openGraph: {
+ title: "Stacks.js",
+ description: "Build Stacks applications with the Stacks.js library.",
+ images: [{ url: "/images/stacks-js-og.jpg", width: 800, height: 600 }],
+ },
+ twitter: {
+ title: "Stacks.js",
+ description: "Build Stacks applications with the Stacks.js library.",
+ images: ["/images/stacks-js-og.jpg"],
+ },
+};
+
+const stacksNodeRpcMetadata: Partial = {
+ title: "Stacks Node RPC API",
+ description: "Interact directly with Stacks nodes using the RPC API.",
+ openGraph: {
+ title: "Stacks Node RPC API",
+ description: "Interact directly with Stacks nodes using the RPC API.",
+ images: [
+ { url: "/images/stacks-node-rpc-og.jpg", width: 800, height: 600 },
+ ],
+ },
+ twitter: {
+ title: "Stacks Node RPC API",
+ description: "Interact directly with Stacks nodes using the RPC API.",
+ images: ["/images/stacks-node-rpc-og.jpg"],
+ },
+};
+
+const tokenMetadataApiMetadata: Partial = {
+ title: "Token Metadata API",
+ description: "Access and manage token metadata on the Stacks blockchain.",
+ openGraph: {
+ title: "Token Metadata API",
+ description: "Access and manage token metadata on the Stacks blockchain.",
+ images: [
+ { url: "/images/token-metadata-api-og.jpg", width: 800, height: 600 },
+ ],
+ },
+ twitter: {
+ title: "Token Metadata API",
+ description: "Access and manage token metadata on the Stacks blockchain.",
+ images: ["/images/token-metadata-api-og.jpg"],
+ },
+};
+
export function createMetadata(override: Partial): Metadata {
return {
...defaultMetadata,
@@ -75,8 +334,33 @@ export const baseUrl =
: new URL(`https://${process.env.NEXT_PUBLIC_VERCEL_URL!}`);
export function getRouteMetadata(path: string): Partial {
- if (path.startsWith("/stacks/hacks")) {
- return hiroHacksMetadata;
+ if (
+ path.startsWith("/stacks/api-keys") ||
+ path.startsWith("/bitcoin/api-keys")
+ ) {
+ return apiKeysMetadata;
}
+ if (path.startsWith("/stacks/hacks")) return hiroHacksMetadata;
+ if (path.startsWith("/stacks/chainhook")) return chainhookMetadata;
+ if (
+ path.startsWith("/stacks/clarinet") &&
+ !path.startsWith("/stacks/clarinet-js-sdk")
+ )
+ return clarinetMetadata;
+ if (path.startsWith("/stacks/clarinet-js-sdk")) return clarinetJsSdkMetadata;
+ if (path.startsWith("/cookbook")) return cookbookMetadata;
+ if (path.startsWith("/guides")) return guidesMetadata;
+ if (path.startsWith("/bitcoin/ordinals/api")) return ordinalsApiMetadata;
+ if (path.startsWith("/stacks/platform-api")) return platformApiMetadata;
+ if (path.startsWith("/bitcoin/runes/api")) return runesApiMetadata;
+ if (path.startsWith("/stacks/signer-metrics-api"))
+ return signerMetricsApiMetadata;
+ if (path.startsWith("/stacks/api")) return stacksApiMetadata;
+ if (path.startsWith("/stacks/connect")) return stacksConnectMetadata;
+ if (path.startsWith("/stacks/stacks.js")) return stacksJsMetadata;
+ if (path.startsWith("/stacks/rpc-api")) return stacksNodeRpcMetadata;
+ if (path.startsWith("/stacks/token-metadata-api"))
+ return tokenMetadataApiMetadata;
+
return {};
}
diff --git a/vercel.json b/vercel.json
index 4d7b816d6..cf0abf3bd 100644
--- a/vercel.json
+++ b/vercel.json
@@ -47,7 +47,7 @@
{ "source": "/build-apps/:path*", "destination": "/stacks", "permanent": true },
{ "source": "/get-started/:path*", "destination": "/stacks/get-started", "permanent": true },
{ "source": "/tutorials/:path*", "destination": "/stacks/get-started", "permanent": true },
- { "source": "/ordhook/:path*", "destination": "/bitcoin/ordinals/ordhook", "permanent": true },
+ { "source": "/ordhook/:path*", "destination": "/bitcoin/indexer", "permanent": true },
{ "source": "/ordinals-api", "destination": "/bitcoin/ordinals/api", "permanent": true },
{ "source": "/nakamoto/:path*", "destination": "/stacks/nakamoto", "permanent": true },
{ "source": "/nakamoto-api/:path*", "destination": "/stacks/api", "permanent": true },