chore: reword README.md, cleanup .gitignore, remove .env.example

This commit is contained in:
2025-12-26 14:24:37 -06:00
parent dd9433283e
commit f308cbea4a
4 changed files with 41 additions and 177 deletions
+29 -136
View File
@@ -8,15 +8,15 @@
[![Next.js][badge-nextjs]][nextjs]
[![React][badge-react]][react]
[badge-version]: https://img.shields.io/badge/version-0.9.0-blue
[badge-version]: https://img.shields.io/badge/version-0.9.1-blue
[badge-license]: https://img.shields.io/badge/license-MIT-green
[badge-ci]: https://github.com/Xevion/rdap/actions/workflows/ci.yml/badge.svg
[badge-codecov]: https://codecov.io/gh/Xevion/rdap/branch/master/graph/badge.svg
[badge-typescript]: https://img.shields.io/badge/TypeScript-5.9-blue
[badge-nextjs]: https://img.shields.io/badge/Next.js-15.5-black
[badge-react]: https://img.shields.io/badge/React-19.2-blue
[badge-nextjs]: https://img.shields.io/badge/Next.js-16-black
[badge-react]: https://img.shields.io/badge/React-19-blue
A modern RDAP query client built with Next.js and React. Query domains, IP addresses, ASNs, and more. Now with **dark mode**.
A web-based RDAP client for querying domains, IP addresses, and ASNs. Has dark mode.
[![Domain query screenshot](.media/domain.png)][live-demo]
[![IPv4 query screenshot](.media/ipv4.png)][live-demo]
@@ -26,165 +26,58 @@ A modern RDAP query client built with Next.js and React. Query domains, IP addre
## What is RDAP?
RDAP (Registration Data Access Protocol) is the modern successor to WHOIS, providing structured, machine-readable access to domain registration and network resource data. Instead of parsing inconsistent text output, RDAP delivers standardized JSON responses with richer metadata.
RDAP (Registration Data Access Protocol) is the successor to WHOIS. It returns structured JSON instead of inconsistent plaintext, making it easier to parse and use programmatically.
## Why?
The tool hosted by [rdap.org][rdap-client] is fantastic, but it's too simple, and isn't as overly-complicated and annoying as I want it to be. So, I built my own. **Mine has dark mode.**
The [rdap.org client][rdap-client] works fine, but I wanted something with dark mode and shareable URLs. Plus it was a good excuse to learn Next.js 16.
Inspired by the [rdap.org client][rdap-client], this project adds several features I wanted:
Main additions:
- **🌙 Dark Mode**: Because the blistering white of other RDAP clients is painful to look at
- **🔗 Shareable Links**: Every query generates a unique URL you can bookmark or share
- **🎨 Modern Interface**: Intuitive type detection, status badges, and responsive design
- **📊 Rich Data Display**: Comprehensive support for all RDAP entity types, DNSSEC, JSContact, vCard, and more
- **⚡ Advanced Features**: Follow referrals to registrars, modern JSContact format support, export/copy JSON responses
- **🏠 Self-Hostable**: Static site that you can deploy anywhere for complete control
- Dark mode (actually important when you stare at this stuff all day)
- Every query gets a shareable URL
- Better type detection for inputs
- Cleaner UI with status badges and collapsible sections
- JSContact support alongside vCard
- Static export, no backend needed
## Features
### Query Capabilities
**Query types**: domains, IPv4/IPv6 (with CIDR), ASNs, entity handles, nameservers, or raw RDAP URLs. Type detection is automatic but can be overridden.
- **Multiple Input Types**: IPv4/IPv6 (with CIDR notation), domain names, TLDs, ASNs, entity handles, or raw RDAP URLs
- **Smart Auto-Detection**: Automatically identifies query types with visual feedback
- **Manual Override**: Lock query type when auto-detection isn't enough
- **Follow Referrals**: Automatically follows redirects to registrar RDAP servers for complete data
- **JSContact Support**: Modern JSContact (RFC 9553) format alongside traditional vCard
**Supported objects**: domains, IP networks, autonomous systems, entities (contacts/registrars), and nameservers. Shows all the standard RDAP fields plus DNSSEC info when available.
### Supported Entity Types
**Contacts**: Displays both vCard (jCard) and JSContact (RFC 9553) formats. Shows names, organizations, emails, phones, addresses, etc.
Full rendering support for all RDAP object classes:
**UI stuff**: Dark/light mode, copy buttons everywhere, collapsible sections, status badges with hover tooltips, relative timestamps ("2 days ago"), responsive layout.
- **Domains**: Name, status, nameservers, DNSSEC, registrar info, creation/expiry dates
- **IP Networks**: IPv4/IPv6 ranges, allocation dates, network types, parent/child relationships
- **Autonomous Systems**: AS numbers, names, registration details
- **Entities**: Contacts, registrars, registrants with role information and public IDs
- **Nameservers**: Hostnames with IPv4/IPv6 address mappings
**Technical**: Uses IANA bootstrap files to resolve RDAP server URLs. All queries happen client-side from your browser. Zod schemas for validation. Fully static build.
### Contact Information
## Development
- **Dual Format Support**: Both legacy vCard (jCard) and modern JSContact (RFC 9553)
- **Rich Contact Data**: Names, organizations, emails, phone numbers, addresses, URLs, titles, and roles
- **Structured Display**: Clean presentation of hierarchical contact information
### DNS Security (DNSSEC)
- Zone signing and delegation status indicators
- DS (Delegation Signer) records with key tags, algorithms, digest types
- DNSKEY records with flags, protocols, and public keys
- Maximum signature lifetime display
### User Experience
- **🎨 Theme Toggle**: Full dark mode and light mode support with persistence
- **📋 Data Export**: Copy individual values, entire JSON responses, or download as files
- **🔍 Raw View Toggle**: Switch between formatted display and raw JSON
- **📊 Status Badges**: Interactive badges for 28+ RDAP status types with hover definitions
- **⏱️ Relative Timestamps**: Human-readable event times with precise date fallback
- **📱 Responsive Design**: Mobile-first layout that adapts from phone to desktop
### Error Handling & Validation
- **Comprehensive HTTP Error Messages**: Clear explanations for 302, 400, 403, 404, 500 responses
- **Input Validation**: Type checking with helpful warnings when manual type doesn't match input
- **Schema Validation**: Zod-based validation with readable error messages
- **Bootstrap Integration**: Automatic IANA registry bootstrap for URL resolution
### Technical Details
- **Registry Bootstrap**: Automatic fetching from IANA bootstrap files (DNS, IPv4, IPv6, ASN, object tags)
- **CIDR Matching**: Proper network range matching for IP lookups
- **Internationalization**: Full Unicode domain name support
- **Type Safety**: Comprehensive TypeScript types inferred from Zod schemas
- **Static Site**: No backend required for basic usage, fully client-side queries
## Installation & Usage
This project uses [pnpm][pnpm] as its package manager. Make sure you have [Node.js][nodejs] installed, then run:
Uses pnpm:
```bash
# Install dependencies
pnpm install
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm start
pnpm dev # localhost:3000
pnpm build # static export
pnpm test # vitest
pnpm check # tsc + eslint
```
The development server will be available at `http://localhost:3000`.
### Additional Commands
```bash
# Run tests
pnpm test
# Run tests with coverage
pnpm test:coverage
# Type checking and linting
pnpm check
# Fix linting issues
pnpm lint:fix
# Code formatting
pnpm format
pnpm format:check
```
## Tech Stack
- **[Next.js 15][nextjs]**: React framework with static site generation (SSG only)
- **[React 19][react]**: UI library with modern hooks
- **[TypeScript 5.9][typescript]**: Type-safe development
- **[Radix UI Themes][radix]**: Accessible component primitives and design system
- **[Tailwind CSS 4][tailwind]**: Utility-first styling
- **[Zod 4][zod]**: Runtime schema validation
- **[Vitest][vitest]**: Fast unit testing framework
- **[next-themes][next-themes]**: Theme management
## Self-Hosting
This is a **fully static site** with no backend required for basic usage. It generates all HTML at build time and queries RDAP servers directly from your browser.
Fully static. Queries go directly from your browser to RDAP servers (no backend). Just run `pnpm build` and host the output anywhere.
**Key characteristics**:
CORS issue: Some RDAP servers don't set CORS headers, so those queries will fail in the browser. Might add an optional proxy later.
- ✅ All RDAP queries made directly from your browser to source servers
- ✅ No intermediary servers logging your lookups
- ✅ Minimal local storage (theme preference only)
- ✅ Fully self-hostable for complete control
## Privacy
**Note on CORS**: Some RDAP servers don't enable CORS headers, preventing direct browser access. For these servers, you'll see an error. Future versions may include an optional proxy for these cases.
To self-host:
```bash
# Build the static site
pnpm build
```
## Privacy & Telemetry
The hosted demo at [rdap.xevion.dev][live-demo] collects optional telemetry to improve the service. Self-hosted deployments have no telemetry by default.
**What's tracked:** Page views, query metadata (type, success/failure, timing), user interactions, and errors.
**Privacy protections:** Successful query targets are never logged—only the query type and timing. Failed queries may include targets for debugging. Copy actions track text length only.
The demo at [rdap.xevion.dev][live-demo] has telemetry (PostHog) to track what breaks. Query targets aren't logged for successful queries, only type/timing. Failed queries might include the target for debugging. Self-hosted builds have no telemetry.
## Contributing
Issues and pull requests are welcome! This project uses:
- **ESLint** for linting
- **Prettier** for code formatting
- **Husky** for git hooks
- **Conventional Commits** for commit messages
PRs welcome. Uses ESLint, Prettier, Husky git hooks, and conventional commits.
## License