new-term-radar
Daily radar for new AI terms: names of new models, products and repos, caught on X, Hugging Face, GitHub and sitemaps before keyword tools list them.
DR Checker, Bulk Ahrefs Domain Rating Tool.
Translation pending
MarketingTypeScript · VueGitHub @braanjOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
DR Checker — Ahrefs Domain Rating Directory
Nuxt 3 + Supabase app: type a few domains or upload a CSV of URLs, watch
server-side processing sync live to the browser, then download DR results as
CSV. No accounts. Every domain with a DR lands in a public domain directory
that doubles as a 30-day cache, so repeat lookups are instant.
Design decisions are recorded in specs/adr/0001-domain-directory.md.
Why a Postgres queue + Edge Function (not just an in-process worker)?Read the full README ↗Nuxt 3 + Supabase app: type a few domains or upload a CSV of URLs, watch server-side processing sync live to the browser, then download DR results as CSV. No accounts. Every domain with a DR lands in a public domain directory that doubles as a 30-day cache, so repeat lookups are instant.
┌─────────────┐ 1. typed list / CSV ┌───────────────────────┐
│ Browser │ ───────────────────▶ │ POST /api/check │
│ (Nuxt UI) │ │ (Nitro server route) │
└─────────────┘ └──────────┬────────────┘
▲ │ per-IP rate limit
│ 3. realtime │ reads `domains` cache (30 days)
│ broadcast on │ inserts batch + url rows
│ channel batch:<id> ▼ (cache hits already done)
│ ┌───────────────────────┐
│ │ Supabase Postgres │
├───────── triggers ────────────┤ batches/urls/domains │
│ realtime.send() └──────────┬────────────┘
│ │ kick_worker(): trigger + pg_cron
│ ▼
│ ┌───────────────────────┐
└───────────────────────────────┤ Edge Function: │
│ process-queue (Deno) │
│ - claims due urls │
│ - cache check, then │
│ Ahrefs free DR │
│ - retries w/ backoff │
│ - upserts `domains` │
└───────────────────────┘
Design decisions are recorded in specs/adr/0001-domain-directory.md.
Nitro server routes on most hosts (Vercel/Netlify functions, edge runtimes)
do not keep running after the HTTP response is sent. If we tried to loop
over a thousand URLs inside /api/check, the request would time out and the
client would hang waiting for a response.
Instead:
/api/check does only fast work (rate-limit check, cache lookup, row
inserts) and returns immediately with the new batch id and whether to show
the results inline (typed checks of up to 10 domains) or on a results page.
A Supabase Edge Function (process-queue) does the actual work. It's
started two ways, both through public.kick_worker(), so processing starts
fast and survives retries:
trg_urls_kick_worker starts it once per INSERT
that adds pending rows.kick_worker() every 10s, which only starts the worker
when rows are due (retries after backoff, rows stuck in processing for
more than 2 minutes).Both send a shared secret held in Vault, and a single-row lease keeps one paced drain loop at a time (ADR 0002).
Every batch's URLs land in the same urls table, so the queue naturally
interleaves rows from different checks. Row claiming uses
FOR UPDATE SKIP LOCKED, so concurrent invocations never process the same
URL twice.
DB triggers push each row change with realtime.send() to the private
broadcast channel batch:<id>, and the browser subscribes to it (RLS lets
anon receive but never send). If websockets fail or go quiet, the page polls
/api/status until the batch finishes. The tables themselves are not
readable with the anon key.
Ahrefs' free endpoint (GET https://api.ahrefs.com/v3/public/domain-rating-free ?target=<domain>&output=json) is rate-limited. So:
www. is
stripped; hosts without a dot are rejected).domains for 30 days ("no data" results for 7 days) and
served from there before Ahrefs is called. Transient failures are never
cached.30s × attempts backoff; after that the last known (stale) DR is served if
one exists.supabase/schema.sql End-state schema for fresh installs
supabase/migrations/ Upgrade for existing projects
supabase/functions/
_shared/cache.ts Cache TTLs + freshness rules (shared with Nitro)
process-queue/index.ts Edge Function: claims + processes due URLs
process-queue/outcome.ts Pure retry / stale-fallback / cache-write rules
server/api/check.post.ts Typed or CSV check: rate limit, cache lookup, inserts
server/api/domains.get.ts Public domain directory (filters, sort, pagination)
server/api/status/[batchId].get.ts Batch snapshot for first paint
server/api/download/[batchId].get.ts CSV export
server/utils/*.ts Input parsing, check creation, rate limit, admin client
components/CheckResults.vue Live progress + results table + download button
pages/index.vue Check form, inline results, domain directory
pages/results/[batchId].vue Results page for larger checks
composables/useBatchRealtime.ts Realtime broadcast subscription hook
tests/ Vitest unit tests (npm test)
supabase init / link this repo to your Supabase project.supabase/schema.sql in the SQL editor. Existing
project: run supabase/migrations/20261007000000_domain_directory.sql.schema.sql); "Private channels only" may be enabled.supabase functions deploy process-queue --no-verify-jwt
SUPABASE_ACCESS_TOKEN=... scripts/provision-worker-secret.sh <project-ref>.env.example to .env and fill in:
SUPABASE_URL, SUPABASE_ANON_KEY (public, client-side)SUPABASE_SERVICE_ROLE_KEY (server-only — all table access goes
through it, since the tables have no anon policies)nvm use reads .nvmrc), then npm install && npm run dev; npm test runs the unit tests.