factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live feed of which Nostr apps/clients people are using, minute by minute. Like zaplife.lol, but for apps.
Live at radarnostr.vercel.app.
npm install
npm run dev
# http://localhost:3000
Deploy: as-is to Vercel (everything runs in the browser, there's no backend). Every push to main deploys.
client tag (NIP-89): if the event has one, it's attributed to that app. If it points to a 31990:pubkey:d, the app listing is fetched (name, logo, website).lib/kinds.js.description tag). A zap counts for the app that receives it or, if it goes to a person, for the app it was sent from. Zaps with neither are dropped.On startup it preloads ~500 kind 31990 listings (to recognize zaps to apps) and fetches the last 5 minutes of events, so the screen doesn't start empty.
lib/engine.js: the core, shared by the page and the worker. Classifies each event (which app, bot or not, zap amount) with no React and no database.lib/relays.js: relay lists (live, profiles, Zapstore).lib/nostr.js: pure parsing helpers (zap invoices, app listings).lib/useRadar.js: the page's hook: connects to relays (NDK), feeds events to the engine, and builds what the UI shows (bubbles, feed, pulse, ranking, zap stream).lib/kinds.js: kind -> category/verb map. Add kinds here.lib/bots.js: bot detection (by app name, by "bot": true profile, and by posting rate). Their events don't count anywhere.lib/format.js: small display helpers (time ago, short npub, compact sats).lib/knownApps.js: known apps (name, website and verified icon) and name normalization so "Primal Android" and "Primal Web" are a single bubble. Add apps here.components/Bubbles.js: one bubble per app (area = activity over the last 5 min, beats on every event). They arrange themselves with a small simulation (pull to center + collisions) that sleeps when everything is still. Tapping one opens its details.components/AppDetail.js: panel with an app's details (website, live activity, stored hour / 24 h / 7 days with a 24 h chart, latest events).components/Ranking.js: top 10 for the last hour, 24 h and 7 days, read from Supabase (counted 24/7 by the worker, the same for everyone).lib/supabase.js / lib/useHistory.js: read-only access to the database (public anon key) and the hooks for the ranking and each app's history.components/Feed.js: live ticker (each item opens the event on njump.me).components/Zaps.js: zap stream with every zap (not only app-related ones), newest on top, bigger zaps glow more.components/Pulse.js: per-minute bars stacked by category; the legend filters the feed.app/opengraph-image.js / app/icon.js: share preview image and tab icon, generated at build time.worker/ listens to the relays 24/7 with the same engine as the page and stores aggregated
counts in Supabase every minute (schema in supabase/schema.sql). Events wait 5 minutes
before being counted, so accounts caught by the rate-based bot filter don't make it in.
cp .env.example .env # then fill in SUPABASE_SECRET_KEY
npm run worker # DRY_RUN=1 npm run worker prints what it would send, writes nothing
git clone https://github.com/Negr087/radar-nostr.git && cd radar-nostr
cp .env.example .env && nano .env && chmod 600 .env # paste the secret key
docker compose -f worker/docker-compose.yml up -d --build
docker logs -f radar-nostr-worker # first "flushed" after ~6 min
Update: git pull && docker compose -f worker/docker-compose.yml up -d --build.
Run only one worker at a time: two would count every event twice.
npm test
Covers the shared core: app attribution, zaps, bot detection, DVMs and app listings.
RELAYS (live listening) and PROFILE_RELAYS (profiles) in lib/relays.js.lib/useRadar.js.WATCHED_KINDS if you want them.