{"id":35311375,"url":"https://github.com/bitkarrot/nip05-service","last_synced_at":"2026-04-08T12:33:05.406Z","repository":{"id":330420623,"uuid":"1122215324","full_name":"bitkarrot/nip05-service","owner":"bitkarrot","description":"NIP-05 semi-automation microsite","archived":false,"fork":false,"pushed_at":"2026-03-19T03:01:31.000Z","size":1689,"stargazers_count":1,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"standard-deploy","last_synced_at":"2026-03-19T17:35:50.632Z","etag":null,"topics":["nip05","nostr","service"],"latest_commit_sha":null,"homepage":"https://nip05-service.vercel.app/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitkarrot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-24T09:46:19.000Z","updated_at":"2026-03-19T03:01:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bitkarrot/nip05-service","commit_stats":null,"previous_names":["bitkarrot/bitkarrot.github.io"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bitkarrot/nip05-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitkarrot%2Fnip05-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitkarrot%2Fnip05-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitkarrot%2Fnip05-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitkarrot%2Fnip05-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitkarrot","download_url":"https://codeload.github.com/bitkarrot/nip05-service/tar.gz/refs/heads/standard-deploy","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitkarrot%2Fnip05-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31556232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nip05","nostr","service"],"created_at":"2025-12-30T17:45:55.069Z","updated_at":"2026-04-08T12:33:05.395Z","avatar_url":"https://github.com/bitkarrot.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NIP-05 Automated PR Service\n\nDeploy with Vercel \n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fbitkarrot%2Fnip05-service) \n\nAutomates NIP-05 identifier registration via pull requests. Users submit their Nostr pubkey through a web form, and the system automatically creates a PR to add them to the `nostr.json` file.\n\n## For Users\n\nVisit the registration form to request your NIP-05 identifier. Once your PR is approved and merged, your identifier will be active.\n\n## Architecture\n\n```\n┌─────────────────┐     ┌──────────────────────┐     ┌─────────────────────┐\n│   Web Form      │────▶│  Express Server      │────▶│  GitHub Actions     │\n│ (add-nip05.html)│     │  (/api/submit-nip05) │     │  (add-nip05.yml)    │\n└─────────────────┘     └──────────────────────┘     └─────────────────────┘\n                                                               │\n                                                               ▼\n                                                      ┌─────────────────────┐\n                                                      │  Pull Request       │\n                                                      │  (nostr.json)       │\n                                                      └─────────────────────┘\n```\n\n\n1. User submits username + pubkey via the web form\n2. Express server validates input and triggers a GitHub `repository_dispatch` event\n3. GitHub Actions workflow updates `nostr.json` and creates a PR using `peter-evans/create-pull-request`\n4. Repository owner reviews and merges the PR\n\n## Setup Instructions\n\n### 0. Fork this repo\n\nClone the repository in your github by forking this repository.\nIf you have already forked this repo, you can skip this step.\n\n### 1. Create a GitHub Personal Access Token\n\n1. Go to [GitHub Settings \u003e Developer settings \u003e Personal access tokens \u003e Fine-grained tokens](https://github.com/settings/tokens?type=beta)\n2. Create a new token with:\n   - **Repository access**: Only select this repository\n   - **Permissions**:\n     - **Actions**: Read and write (required to trigger `repository_dispatch`)\n     - **Contents**: Read and write\n     - **Metadata**: Read-only (auto-granted)\n     - **Pull requests**: Read and write\n3. Copy the token (starts with `github_pat_`)\n\n### 2. Enable GitHub Actions Workflow Permissions\n\n1. Go to your repository's **Settings** → **Actions** → **General**\n2. Scroll to **\"Workflow permissions\"**\n3. Select **\"Read and write permissions\"**\n4. Check **\"Allow GitHub Actions to create and approve pull requests\"**\n5. Click **Save**\n\n### 3. Deployment Options\n\nChoose one of the following deployment methods:\n\n#### Option A: Deploy to Zeabur\n\n1. Go to [Zeabur Dashboard](https://zeabur.com)\n2. Create a new project or select an existing one\n3. Click **Add Service** and select **Git**\n4. Connect your GitHub repository\n5. Zeabur will automatically detect the `Dockerfile` and deploy\n\n#### Option B: Deploy to Vercel\n\n1. Go to [Vercel Dashboard](https://vercel.com)\n2. Click **New Project**\n3. Import your forked repository\n4. Vercel will automatically detect the project configuration (`vercel.json` and `api/` directory)\n5. Click **Deploy**\n\n### 4. Set Environment Variables\n\nRegardless of your deployment method, you must set these environment variables in your hosting provider's dashboard:\n\n- **`GITHUB_TOKEN`**: Your GitHub personal access token (required)\n- **`GITHUB_OWNER`**: Your GitHub username (default: `bitkarrot`)\n- **`GITHUB_REPO`**: Your repository name (default: `nip05-service`)\n- **`ALLOWED_ORIGIN`**: CORS origin (default: `*`)\n\n### 5. Configure Your Domain (Optional)\n\nAdd a custom domain in your provider's settings (Zeabur **Domains** section or Vercel **Settings \u003e Domains**). The service will be accessible at the provided URL.\n\n### 6. Configure Repository (For Forks)\n\nIf you fork this repository, update the environment variables in your deployment dashboard:\n- `GITHUB_OWNER`: Your GitHub username\n- `GITHUB_REPO`: Your repository name\n\n## Files\n\n- **`.well-known/nostr.json`** - The NIP-05 identifier mapping\n- **`add-nip05.html`** - User-facing registration form\n- **`api/submit-nip05.js`** - API handler for form submissions\n- **`server.js`** - Express server entry point\n- **`Dockerfile`** - Container configuration for Zeabur\n- **`.github/workflows/add-nip05.yml`** - GitHub Actions workflow\n\n## Security Notes\n\n- The GitHub token is stored as a Zeabur environment variable, never exposed to users\n- Input validation happens both client-side and server-side\n- The workflow validates username and pubkey format before making changes\n- PRs require manual approval before merging\n\n## NIP-05 Format\n\nOnce registered, users can set their NIP-05 identifier in their Nostr profile as:\n\n```\nusername@yourdomain.com\n```\n\nFor the root identifier `_`, it displays as just the domain.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitkarrot%2Fnip05-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitkarrot%2Fnip05-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitkarrot%2Fnip05-service/lists"}