For data indexing and smart contract metadata, we used The Graph. We configured subgraphs to collect contract events and structured data, which we then queried via HyperGraph for live updates within the application.