← Back to home

ProfileMe

ProfileMe: Web3 profiles with on-chain sound login and Fun AI.

Problem Statement

ProfileMe showcases a novel “sound login” for Web3 profiles on the Zircuit Garfield testnet, combining ultrasound-based verification with on-chain storage, The Graph’s Token API for wallet intelligence, OpenAI for playful summaries, and optional Ledger-based sound manipulation.What it does Uses ultrasound frequency patterns generated in the browser to authenticate a user. Stores and verifies a hash of the user’s sound signature on-chain via SingleUserSoundRegistry. Enriches the user’s profile with data from The Graph Token API (balances, transfers, first activity date, and more).Feeds on-chain + indexed data into OpenAI (GPT-4o-mini) to produce a fun wallet summary and generate a unique character name. Can take that character name into an ENS flow for minting. Optionally uses Ledger to manipulate sound patterns for creative and promotional use-cases. How sound login works The browser uses simple JavaScript + Web APIs to generate an ultrasound-frequency tone sequence. The sequence is reduced to a deterministic signature and hashed client-side. The hash is stored on Zircuit Garfield in SingleUserSoundRegistry, tied to the user’s address. On login/verification, the same tone sequence is played locally, hashed again, and compared against the on-chain hash using Wagmi/Viem reads. If the hashes match, the user is considered verified, enabling gated UI actions.Data and insights with The Graph ProfileMe queries The Graph Token API to enrich the user’s wallet profile: Transaction history and first-seen date Token balances and changes Transfers and NFT activity These results power charts and UI widgets, and are also passed into our AI summarizer. AI-generated summaries and names The app uses OpenAI’s GPT-4o-mini to produce: A narrative “personality” summary of the wallet A unique character-style name for the user This name can be taken through an ENS flow to mint an identity aligned with the generated persona.Ledger-driven sound manipulation With Ledger’s Device Management Kit, ProfileMe can manipulate the tone patterns used in login. These tuned patterns can be reused for campaigns or “ad-like” experiences that trigger distinct, verifiable audio signatures.

Solution

Frontend: Next.js (TypeScript) + React 19 + RainbowKit + Wagmi + Viem + Tailwind + Recharts RainbowKit/Wagmi handle wallet connections and contract reads. Viem provides typed EVM interactions and transport fallbacks. Tailwind and lightweight components for the UI/visualizations. Chain + contract: Zircuit Garfield Testnet + SingleUserSoundRegistry Minimal Solidity contract that stores one bytes32 hash per demo user and exposes soundHashOf and setSoundHash. Verified on Zircuit Garfield; the app reads from this registry to validate logins. Sound generation/verification (the fun bit): Browser-only using Web APIs: Web Audio API (AudioContext, OscillatorNode, envelopes) to synthesize a short ultrasonic pattern. Deterministic pattern generation (fixed seed, timing windows, and frequency bins) so the same user/device reproduces the same “signature.” Web Crypto API for hashing (SHA-256) → folded/encoded to bytes32 compatible value. On login: Regenerate tone sequence → hash locally → compare to on-chain soundHashOf(address). If equal, the UI treats the session as verified. Indexing/data: The Graph Token API Server-side Next.js API routes fetch wallet analytics (balances, transfers, first-seen date, NFT activity, OHLC samples). These endpoints normalize data for charts and the AI prompt. AI summarization: OpenAI GPT-4o-mini Backend routes combine on-chain + The Graph insights and prompt GPT-4o-mini to produce: A playful summary/persona of the wallet A unique character name that can be taken through an ENS flow. Ledger integration (optional): Device Management Kit (DMK) Allows controlled tweaks to the tone patterns (think “campaign modes”). Useful for demonstrations and “ad-like” audio patterns that remain verifiable. How it’s pieced together The app bootstraps Wagmi with a custom transport matrix (Infura if present, env-supplied RPCs, then chain defaults) and supports Zircuit Garfield out of the box. The sound login feature gates UI states: If NEXT_PUBLIC_SOUND_REGISTRY is set and the hash matches, actions in the Sound pages/cards are enabled. API routes: app/api/thegraph/*: fetch and cache wallet metrics from The Graph Token API. app/api/summary: crafts a structured prompt using those metrics and calls OpenAI for summaries + names. app/api/ens-suggest: small helper for ENS-related suggestions. ENS: Display root customization and L2 registry addresses are configurable via env. Partner technologies and benefits Zircuit Garfield: Reliable testnet with strong infra; low-latency reads/writes for quick demo loops. The Graph Token API: One-stop wallet intelligence (balances, transfers, first activity) that’s easy to consume in server routes. OpenAI GPT-4o-mini: Fast, cost-effective summarization that produces fun, consistent outputs for demos. Ledger DMK: Hardware-backed control over tone parameters for novel promotional experiences. RainbowKit + WalletConnect: Dead-simple wallet UX with multi-wallet support. Notable hacky bits Ultrasound in browsers is tricky: Auto-play policies: We gate playback behind an explicit user interaction to avoid browser blocks. Device variance: Speakers/mics differ wildly; we chose frequency windows that most consumer devices can render without clipping and discretized timing to avoid drift. Determinism under load: We quantize tone durations and envelope ramps, and debounce playback to get reproducible hashes. Robust hashing: We hash the intended synthesis parameters (not raw audio samples) to avoid device hardware variance while still proving the user can run the sequence. Transport resilience: Custom Wagmi/Viem transports that prioritize env-provided RPCs, then Infura, then known public endpoints—keeps the demo alive even if a provider hiccups. Cursor-assisted development: Used Cursor for rapid iteration: refactoring the sound flow, ABI surfacing, README-driven onboarding, and keeping env usage consistent across server/client. It made cross-file edits and doc updates much faster. Dev and ops quality-of-life Keys-only example: profileme/env.local.example for quick setup. SSR-safe config for Wagmi to avoid hydration issues. Clear contract README in contracts/ to deploy SingleUserSoundRegistry and wire NEXT_PUBLIC_SOUND_REGISTRY.

Hackathon

ETHGlobal New York 2025

2025

Contributors