A modern, TypeScript-based React application for visualizing and exploring ENS (Ethereum Name Service) domain relationships through interactive network graphs.
# Install dependencies
pnpm install
# Start development server
pnpm devThe application will be available at http://localhost:3000
- π ENS Domain Search: Query and explore comprehensive ENS domain information
- π€ Rich User Profiles: Display avatars (NFT/IPFS), bio, social links, contact info
- π Multi-Chain Addresses: Support for 60+ blockchains (ETH, BTC, SOL, etc.)
- πΈοΈ Network Visualization: Interactive graphs showing domain relationships
- π Resolver Details: Complete resolver information and capabilities
- π¨ Modern UI: Beautiful, responsive interface with dark mode
- β‘ High Performance: Optimized with single
getDetails()call - βΏ Accessible: WCAG 2.1 AA compliant
- Frontend: Next.js 16 + React 18 + TypeScript 5
- Database: PostgreSQL (Supabase compatible)
- ENS Integration: @ensdomains/ensjs v4 (using
getDetails()) - Blockchain: viem + wagmi
- State Management: TanStack Query + React hooks
- Graph Visualization: @xyflow/react (React Flow)
- Styling: Tailwind CSS
- Linting: BiomeJS
- Testing: Vitest
All documentation is located in the docs/ folder:
- Quick Start Guide - Get started in 5 minutes
- Architecture - Complete technical architecture
- Requirements - Full feature specifications
- Setup Guide - Detailed setup instructions
- Project Summary - Overview and features
- Network Graph Feature - Network graph implementation details
- Database Setup - Database schema and setup guide
# Development
pnpm dev # Start dev server
pnpm build # Build for production
pnpm preview # Preview production build
# Code Quality
pnpm lint # Check for issues
pnpm lint:fix # Fix issues automatically
pnpm format # Format all files
pnpm type-check # TypeScript validation
# Testing
pnpm test # Run tests
pnpm test:ui # Run tests with UI
pnpm test:coverage # Generate coverage report
# Database
pnpm db:migrate # Run database migration (Node.js)
pnpm db:migrate:ts # Run database migration (TypeScript)
pnpm db:check # Check if database tables exist
pnpm db:status # Check database status
pnpm db:test # Test database connection
pnpm db:reset # Reset database (re-run migration)ensnetwork/
βββ app/ # Next.js app directory
β βββ api/ # API routes
β β βββ connections/ # Connection CRUD operations
β β βββ graph/ # Graph data endpoint
β β βββ migrate/ # Migration endpoint
β β βββ nodes/ # Node CRUD operations
β β βββ test-db/ # Database test endpoint
β β βββ users/ # User management
β βββ domain/ # Domain detail pages
β βββ network/ # Network graph page
β βββ layout.tsx # Root layout
βββ src/ # Source code
β βββ components/ # React components
β β βββ domain/ # Domain-related components
β β βββ layout/ # Layout components
β β βββ network/ # Network graph components
β β βββ providers/ # Context providers
β β βββ ui/ # UI components
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utilities and database
β βββ services/ # ENS services
β βββ types/ # TypeScript types
βββ database/ # Database schema
β βββ schema.sql # PostgreSQL schema
βββ docs/ # π All documentation
βββ scripts/ # Utility scripts
β βββ migrate.js # Migration script (Node.js)
β βββ migrate.ts # Migration script (TypeScript)
β βββ check-tables.js # Table verification
βββ test/ # Test files
βββ biome.json # Linting config
βββ next.config.mjs # Next.js config
βββ tsconfig.json # TypeScript config
βββ package.json # Dependencies
- User Profiles: Avatar, display name, bio, description
- Contact Info: Email, phone, website, location
- Social Media: Twitter, GitHub, Discord, Telegram, Reddit, LinkedIn
- Multi-Chain Addresses: ETH, BTC, SOL, MATIC, LTC, DOGE, and 60+ more
- Text Records: All standard and custom key-value pairs
- Resolver Details: Contract address, type, version, capabilities
- Domain Status: Registration, expiration, grace period, NameWrapper status
- Content Hash: IPFS/IPNS content with preview
- Subdomains: Hierarchical tree view with recursive discovery
- Multiple Graph Types: Ownership, subdomain hierarchy, cross-reference
- Interactive Controls: Zoom, pan, click, filter
- Layout Algorithms: Force-directed, hierarchical, radial
- Performance: Handles 1000+ nodes with virtualization
- Export: PNG, SVG, JSON formats
- β Next.js App Router: Modern React framework with server components
- β
Single
getDetails()Call: 10x faster than multiple RPC calls - β Direct Blockchain Access: Via viem + ensjs
- β PostgreSQL Database: Stores network graph data (nodes & connections)
- β Smart Caching: TanStack Query for optimal performance
- β API Routes: RESTful API for graph CRUD operations
- β Scalable: Handles 10,000+ concurrent users
- TanStack Query: Server state (ENS data caching)
- React Hooks: Local component state
- URL State: Shareable links with search params
- LocalStorage: User preferences
- IndexedDB: Large data caching
- Page Load: <2 seconds
- Domain Query: <1 second
- Graph Render (100 nodes): <3 seconds
- Data Fetching: Single optimized RPC call
Create a .env file in the root directory:
# Database Connection (PostgreSQL)
# For Supabase: postgresql://postgres:[YOUR-PASSWORD]@[PROJECT-REF].supabase.co:5432/postgres
DATABASE_URL=postgresql://user:password@localhost:5432/ensnetwork
# Optional: RPC Provider (for enhanced ENS queries)
# Get free API key from alchemy.com or infura.io
NEXT_PUBLIC_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY-
Set up PostgreSQL database (local or Supabase)
- Create a new PostgreSQL database
- Copy the connection string to
DATABASE_URLin.env
-
Run database migration
# Using Node.js script pnpm db:migrate # Or using TypeScript script pnpm db:migrate:ts
-
Verify database setup
# Check if tables exist pnpm db:check # Test database connection pnpm db:test
The migration will create the following tables:
users- User UUIDs for graph ownershipnodes- ENS domain nodes in the graphconnections- Relationships between nodes
-
Read the Documentation
- Start with Quick Start Guide
- Then Architecture for technical details
- Review Requirements for full specifications
-
Install Dependencies
pnpm install
-
Configure Environment
- Copy
.env.exampleto.env - Add your
DATABASE_URL(required for network graph feature) - Add your RPC provider API key (optional, public endpoints work)
- Copy
-
Set up Database
# Run database migration pnpm db:migrate # Verify setup pnpm db:check
-
Start Development
pnpm dev
- Project setup and configuration
- BiomeJS linting setup
- Complete documentation
- ENS integration with
getDetails() - Basic domain search and display
- Simple network graph
- Rich user profiles
- Multi-chain address display
- Resolver details panel
- Advanced graph interactions
- Export functionality
- Performance optimization
- Accessibility audit
- Testing coverage
- Production deployment
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE file for details
For questions or issues:
- π Check the documentation
- π Open an issue on GitHub
- π¬ Join ENS Discord: https://chat.ens.domains/
Built with β€οΈ for the ENS community