new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A lead qualifier: Next.js, Trigger.dev, OpenRouter, Supabase auth and history, Stripe billing (test mode)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A full-stack app that takes a sales lead (name, company, role, budget, need, timeline, source, notes) and returns a structured verdict: qualified or not, a score out of 100, the reasoning, red flags and a suggested next step. Auth, saved history and a free/Pro billing tier are built in. It is a portfolio project: the point is a complete, deployed agent-style workflow, not a production CRM.
Live demo: https://lead-qualifier-taupe.vercel.app (create a free account to try it; use fictional data only)
Left to right: the lead form, a result for the spam sample, and the private history (phone width, dark mode).
Small teams get inbound leads of very uneven quality: real buyers, vague students, spam. Reading each one and deciding whether it deserves a sales call is slow and inconsistent. This app applies one written set of criteria to every lead and explains its answer, so a human can skim the verdict and spend time only on the good ones.
qualified, score, reasoning, next_step, red_flags.Browser form
| POST /api/analyze
v
Next.js route (Vercel, server-side) --tasks.trigger--> Trigger.dev task "qualify-lead"
^ |
| GET /api/runs/:id (polled) v
+-------------------- result JSON <------------------ OpenRouter (LLM)
Supabase: auth + lead_history + subscriptions Stripe (test mode): Checkout, portal, webhook
frontend/): Next.js App Router on Vercel. A proxy (frontend/proxy.ts) sends logged-out visitors to /login, and each API route checks the user again.tools/): a Trigger.dev task validates the lead with zod, calls the LLM through OpenRouter, validates the JSON it returns, and hands it back. The prompt lives in its own file (tools/prompt.ts).lead_history and subscriptions tables. Row-level security limits users to their own rows (supabase/schema.sql, supabase/billing.sql)./api/runs/:id for the result. The Trigger.dev secret key is only used in server routes./api/stripe/webhook) that keeps subscriptions in sync.openai/gpt-4o-mini), then falls back to free OpenRouter models on credit, rate limit or provider errors. Model ids live in tools/qualify-lead.ts.The repo is organised the way I work with Claude Code:
| Part | Folder | What it is |
|---|---|---|
| Workflows | workflows/ | Plain-language SOP: objective, inputs, steps, edge cases |
| Agent | Claude Code | Reads the workflow, writes and runs the tools, fixes errors |
| Tools | tools/ | The Trigger.dev task, prompt and schemas that do the work |
CLAUDE.md holds the standing instructions for the agent.
workflows/lead-qualifier.md what the workflow should do
tools/ Trigger.dev task, prompt, schemas
trigger.config.ts Trigger.dev project config
frontend/ Next.js app (deployed to Vercel)
evals/ model comparison: labelled fictional leads, runner, scorer
supabase/schema.sql history table and row-level security policies
supabase/billing.sql subscriptions table (written by the Stripe webhook)
docs/cv-bullets.md CV and LinkedIn wording for this project
Requires Node 20+, a Trigger.dev account, an OpenRouter API key, a Supabase project and a Stripe account in test mode.
npm install in the root and in frontend/.OPENROUTER_API_KEY in your Trigger.dev project (Development environment).supabase/schema.sql and supabase/billing.sql in the Supabase SQL Editor.frontend/.env.example to frontend/.env.local and fill in the variables below.npx trigger.dev@latest devstripe login, then stripe listen --forward-to localhost:3000/api/stripe/webhook. Put the signing secret it prints in STRIPE_WEBHOOK_SECRET.frontend/: npm run dev, then open http://localhost:3000. Pay with Stripe's test card 4242 4242 4242 4242.frontend/: npm run lint, npm test and npm run build. Tests run offline with Supabase, Stripe and Trigger.dev mocked, so they need no env vars or keys.npm run typecheck, npm test and npm run eval -- --mock. None of them needs a key.Names only. Values go in frontend/.env.local, Vercel, or the Trigger.dev dashboard. Never commit them.
| Variable | Where it is set | Notes |
|---|---|---|
OPENROUTER_API_KEY | Trigger.dev dashboard | Used by the task only |
TRIGGER_SECRET_KEY | Frontend server (.env.local / Vercel) | Server-side only |
NEXT_PUBLIC_SUPABASE_URL | Frontend | Public by design |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Frontend | Public by design; row-level security protects data |
SUPABASE_SERVICE_ROLE_KEY | Frontend server | Used by the webhook; never NEXT_PUBLIC_ |
STRIPE_SECRET_KEY | Frontend server | Test-mode key |
STRIPE_WEBHOOK_SECRET | Frontend server | From stripe listen or the webhook endpoint |
STRIPE_PRICE_ID | Frontend server | Test-mode Pro price |
npx trigger.dev@latest deploy. Set OPENROUTER_API_KEY in the Production environment.frontend, and add the variables above. In Supabase, set the Site URL and redirect URLs to the Vercel domain.The eval set compares models on the same leads. Each lead goes through the same prompt and schema as the Trigger.dev task. The answers are then scored against labels written in advance.
What it measures, per model, over 40 fictional leads:
qualified matches the expected label.score falls inside the expected band.score and the middle of the expected band, valid replies only.resultSchema in tools/schema.ts.An invalid reply counts as a miss for accuracy and band hits. Each model is called on its own, so the app's paid-then-free fallback is not tested.
Run it
Offline, with no keys and no cost. CI runs this mode:
npm run eval -- --mock
Live, through OpenRouter. This needs OPENROUTER_API_KEY and uses credit. CI never runs it:
OPENROUTER_API_KEY=your-key npm run eval
Models come from EVAL_MODELS (comma-separated ids), or from evals/models.json if that is not set. The default list is the models the app uses. Each run prints a Markdown table and writes it to evals/results/.
Mock mode uses two offline stand-ins. mock:keyword is a rule-based baseline. mock:flaky is the same baseline with deliberate faults. Neither is an LLM. They check the scorer and the parser, and they let the eval run in CI without keys.
Sample output (mock mode, not an LLM result)
No live run is committed, because that needs a key. The tables below come from mock mode. They describe the mock models only and say nothing about any AI model. The full file is evals/results/sample-mock.md.
| Model | Qualified accuracy | Score-band hit rate | MAE (points) | Schema-valid rate | HTTP/network errors | Schema failures | Median latency |
|---|---|---|---|---|---|---|---|
| mock:keyword | 92.5% | 50.0% | 9.3 | 100.0% | 0 | 0 | 0 ms |
| mock:flaky | 50.0% | 27.5% | 10.1 | 57.5% | 0 | 17 | 0 ms |
| Model | Strong | Medium | Weak | Spam |
|---|---|---|---|---|
| mock:keyword | 12/12 | 8/10 | 9/10 | 8/8 |
| mock:flaky | 7/12 | 3/10 | 5/10 | 5/8 |
Add a lead
evals/dataset/leads.json. It needs a unique id, a category (strong, medium, weak or spam), a lead that passes the app's lead schema, and an expected block.expected.qualified, and a score_min to score_max band. A qualified lead's band must start at 60 or higher. A lead that is not qualified must end at 59 or lower. This follows the rule in tools/prompt.ts.CATEGORY_COUNTS (evals/dataset.ts) to match. The tests fail if they differ.npm test.Limits
tools/prompt.ts. No second person has checked them.minimax/minimax-m3.1-flash:free is not in OpenRouter's public model list. It is also in the app's free fallback list. See REVIEW.md.The eval tests are separate from the frontend tests above. They cover the scorer, the parser, the dataset checks and the runner.
Honest list of what this is not:
/api/analyze, /api/stripe/webhook, /api/billing/*) with Supabase, Stripe and Trigger.dev mocked. Not tested yet: /api/runs/[id], the auth routes, the Trigger.dev task, the UI and any end-to-end flow.workflows/lead-qualifier.md). Next step: make them editable per user.Lead data can be personal data. Please enter fictional leads only. Leads you submit are stored in Supabase under your account.