new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
클라이언트를 위한 추적 가능하고 PIN 보호 PDF 보고서 링크를 생성하며, 참여 분석·텔레그램 알림·MCP 기반 링크 관리를 제공합니다
Generate trackable, PIN-protectable PDF report links for clients with engagement analytics, Telegram alerts, and MCP-driven link management
마케팅TypeScript · JavaScriptGitHub @firaen22온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
This web application lets wealth advisors generate personalized, trackable PDF report links (/l/ and /s/) for clients, optionally PIN-protected, captures client-reading telemetry (scroll depth, dwell time, zoom, device type, tab switches, return visits), analyzes engagement behavior via the Gemini API, offers an in-viewer jargon explainer for report terms, and notifies advisors in real time through Telegram. Links can be listed and revoked at any time, from the dashboard or via the MCP server.README 전문 보기 ↗This web application lets wealth advisors generate personalized, trackable PDF report links (/l/<id> and /s/<id>) for clients, optionally PIN-protected, captures client-reading telemetry (scroll depth, dwell time, zoom, device type, tab switches, return visits), analyzes engagement behavior via the Gemini API, offers an in-viewer jargon explainer for report terms, and notifies advisors in real time through Telegram. Links can be listed and revoked at any time, from the dashboard or via the MCP server.
Load-bearing changes in this repo are cross-reviewed before ship with Codex gpt-6.1-sol and Grok grok-4.7 (see AGENTS.md and behavioral gates such as scripts/session-end-injection-gate/PREREG.md).
src/) — Vite React single-page app (Tailwind CSS). Key entrypoints: src/App.tsx (advisor dashboard / link creator) and src/Viewer.tsx (client-facing PDF viewer that captures telemetry).server.ts + api/) — an Express app exposed as a single Vercel serverless function through api/[...path].ts. In production there is no long-running Node process; Vercel routes /api/*, /s/*, and /l/* through that one function.mcp/) — a Node Model Context Protocol server (mcp/server.mjs) for conversational link generation, listing, revoking, and WhatsApp short-link creation from Claude/Codex. See mcp/README.md.@google/generative-ai: behavior analytics + jargon explanation), Cloudflare R2 (@aws-sdk/client-s3: report file storage), Firebase Firestore & Storage (link metadata), Telegram Bot API (alerts), Dub.co API (short links).npm install
npm run dev # tsx server.ts on port 3000 — Express + Vite dev middleware
npm run build # build frontend assets
npm start # run the built app locally (tsx server.ts)
Server-side (process.env):
GEMINI_API_KEY — accepts comma-separated multiple keys; requests rotate across themTELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_IDPWP_API_KEYS — comma-separated name:key client authorization allowlistPWP_TELEGRAM_CHATS — comma-separated name:chatId per-advisor routingR2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAMEVITE_FIREBASE_PROJECT_ID/FIREBASE_PROJECT_ID, VITE_FIREBASE_STORAGE_BUCKET/FIREBASE_STORAGE_BUCKET, VITE_FIREBASE_API_KEY/FIREBASE_API_KEYVITE_APP_URL/APP_URL, DUB_API_KEY, PORT, NODE_ENV, VERCELClient-side (import.meta.env): VITE_APP_URL, VITE_FIREBASE_API_KEY, VITE_FIREBASE_AUTH_DOMAIN, VITE_FIREBASE_PROJECT_ID, VITE_FIREBASE_STORAGE_BUCKET, VITE_FIREBASE_MESSAGING_SENDER_ID, VITE_FIREBASE_APP_ID, VITE_GA_ID (optional).
Deploys run through the Vercel Git integration (the GitHub Actions workflow only builds and tests).
CRITICAL RULE — every relative import in serverless code (server.ts and anything it imports at runtime) must end with an explicit .js extension (e.g. import app from '../server.js'). Omitting the extension works locally with tsx but crashes every route on Vercel at module load (ERR_MODULE_NOT_FOUND → FUNCTION_INVOCATION_FAILED). See skills-staging/serverless-deploy-contract.md. This is mechanized: npm run check:serverless (also run in CI) greps for extensionless relative imports and type-checks the serverless surface with tsconfig.server.json.
npm test # viewer jargon parser + glossary tests
npm run lint # tsc --noEmit (frontend surface)
npm run check:serverless # import-extension guard + serverless type-check