new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A working conference-prioritization, coverage-planning, field-lead-capture and
cross-conference relationship-tracking tool for Grain's sales team — built for
the AI Builder home assignment.README 전문 보기 ↗A working conference-prioritization, coverage-planning, field-lead-capture and cross-conference relationship-tracking tool for Grain's sales team — built for the AI Builder home assignment.
Live demo: https://grain-conference-intelligence-henna.vercel.app/conferences
Video walkthrough: https://drive.google.com/file/d/1NTkivtNT1dbP8QRAWRZEnKEGD8DyehIM/view
| Page | What it does |
|---|---|
Conferences (/conferences) | Sample database of 22 real fintech/payments/travel conferences, filterable by vertical/region/tier, each scored 0–100 against Grain's ICP with a visible weighted breakdown. |
Planning (/planning) | Coverage by quarter with gaps flagged against top-tier events, geographic/temporal clustering (trip-combining opportunities), and coverage-by-rep. |
Capture (/capture) | A mobile-first, thumb-speed lead form for the show floor — name + company is enough to save. |
Contacts (/contacts) | Every contact who's been met more than once, with a relationship-arc read (rule-based, instant) and an optional AI narrative summary, plus a HubSpot push per interaction. |
Calculator (/calculator) | Bonus, not one of the 7 core requirements: a live FX-hedging risk tool a rep pulls up mid-conversation — real ECB historical-rate chart, a rolling worst-case settlement-window stress calculation, an AI-drafted follow-up email, and a push to HubSpot, all on one page. |
Settings (/settings) | Where a rep pastes their own Gemini key and HubSpot token. Stored in the browser only — see Keys & storage. |
| Brief requirement | Where |
|---|---|
| Conference list + filtering, with name/date/location/vertical/audience fields | /conferences, data in data/seed.ts, types in lib/types.ts |
| Scoring / tiering system, defensible methodology | lib/scoring.ts (5 weighted axes, fully commented), visualized in /conferences ("How is the score calculated?") |
| Planning view — coverage, under-investment, clustering | /planning, logic in lib/planning.ts |
| Field lead-capture interface | /capture |
| Cross-conference contact tracking + nudge | /contacts, matching in lib/matching.ts, arc/nudge in lib/nudge.ts |
| At least one meaningful AI feature | Two real integrations, one multi-provider proxy (lib/ai-provider.ts): relationship-arc summarizer (app/api/ai/relationship-summary, in /contacts) and FX follow-up email drafter (app/api/ai/fx-followup, in /calculator) |
| Path to push leads into HubSpot | Three routes for three entry points: app/api/hubspot/push (per-interaction, from /capture and /contacts), push-lead (from /calculator), push-task (a follow-up Task, from the /contacts AI drawer) |
| Deployable without a complex build pipeline | Standard Next.js app, zero required env vars, one-click Vercel deploy — see Deploy |
| API keys configurable by the user, not hardcoded | lib/settings.ts (localStorage only) — see Keys & storage |
Five weighted axes, each normalized 0–1, summed to a 0–100 score, bucketed into
a tier. Every weight and lookup table lives in lib/scoring.ts with the
reasoning inline — nothing here is a black box:
Tiers: S (80–100, must attend) · A (65–79, strong fit) · B (45–64, opportunistic) · C (<45, skip unless clustering makes it nearly free).
The seed dataset deliberately includes a few low-ICP, high-headcount events (Web Summit, TechCrunch Disrupt, EmTech) specifically to demonstrate that the model down-ranks scale without fit, rather than just sorting by attendee count.
Goal: recognize the same person across conferences — through typos, nicknames,
and job changes — without silently merging two different people who share a
common name. Full logic and comments in lib/matching.ts.
Three-tier decision on every captured lead:
/contacts, never merged silently and never
dropped.Edge cases handled explicitly:
companyHistory[]), not just the
most recent one, so "same person, new company" still resolves correctly. A
changed company is called out as a signal ("Company changed since last
seen"), not treated as noise.lib/nudge.ts classifies each
relationship by touch count, time span, and temperature trend, not just a
raw count: warming (rising engagement), stagnant (3+ touches, 12+
months, flat/no progression — the "polite tire-kicker" case named in the
brief), cooling (engagement dropped), reengage-role-change (company
changed), or steady/insufficient-data. Each carries a specific,
actionable nudge sentence, not just a badge.Both below share one multi-provider proxy (lib/ai-provider.ts): paste a
Gemini, Claude, OpenAI, or OpenRouter key into /settings and the provider is
auto-detected from the key's own format — nothing is hardcoded to one vendor.
The Gemini path defaults to gemini-3.6-flash.
/contacts → "AI relationship summary" sends the contact's full interaction
history and asks for (1) a 2–3 sentence read of how the relationship has
actually evolved — including what the rule-based signal alone wouldn't catch
— and (2) one concrete next action.
Why AI is the right tool here, specifically: the rule-based nudge
(lib/nudge.ts) is fast, free, and reliable for the quantitative signal
(count, span, temperature trend) — that part doesn't need AI and shouldn't use
it. What rules can't do is read free-text notes across multiple visits and
notice that someone's objections changed, or that their language shifts
from curious to urgent — that's a synthesis task over unstructured text, which
is exactly what LLMs are good at and rule-based logic isn't. The two are shown
together deliberately: the rule-based nudge always works (no API key needed),
the AI layer adds judgment on top when a key is configured. Judge the AI
requirement on this feature — the other two exist but are lower-stakes.
/calculator fetches live ECB historical rates for the selected pair
(api.frankfurter.dev, no key needed) and runs a real rolling worst-case
settlement-window stress calculation — the actual worst swing that pair has
made historically over the selected window, not an assumed volatility
constant. "Generate AI Follow-Up Email" turns those real numbers (volume,
pair, vertical, settlement window, the real profit-at-risk figure) into a
short, prospect-ready email framed around rate-lock risk, not price. The
vertical-aware talking point above it is deterministic and instant, grounded
in the same real data — the AI call is reserved for the part a rep actually
needs mid-conversation: a send-ready draft, not another template they'd have
to rewrite by hand.
/settings, kept in
localStorage only, sent per-request as a header to this app's own two tiny
server proxies (app/api/ai/*, app/api/hubspot/*), never written to a
database or committed to source. This satisfies the assignment's
"configurable by the user, not hardcoded" constraint. A team that wants one
shared key baked in as a deployment default can instead set GEMINI_API_KEY
/ HUBSPOT_PRIVATE_APP_TOKEN as server env vars — see .env.example.lib/db.ts. Works with zero setup
(falls back to a local JSON file, seeded automatically). For a real
deployment where every rep on every device should see the same data, add a
free Upstash Redis database (below) — genuinely shared, persistent storage,
not per-browser.Push this folder to GitHub (create a new repository, upload these files — GitHub's web "upload files" works fine, no git command line required).
Go to vercel.com, sign in with GitHub, click "Add New → Project", and pick the repository. Leave every setting on its default — Vercel detects Next.js automatically. Click Deploy. You'll have a live URL in about a minute.
(Recommended for real team use) Add shared storage: go to upstash.com, create a free Redis database (no credit card), copy its REST URL and REST Token, then in your Vercel project go to Settings → Environment Variables and add:
UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKENRedeploy (Vercel → Deployments → ⋯ → Redeploy). Without this step the app
still works fully — it just uses a local fallback file instead of shared
storage (see lib/db.ts).
Give reps their keys: each rep opens /settings in the deployed app
and pastes their own Gemini key (free at
aistudio.google.com/apikey) and, if
syncing to HubSpot, a HubSpot private-app token. No redeploy needed for
this — it's per-browser.
To update the app later: edit files in GitHub's web editor (or push from your machine) — Vercel redeploys automatically on every push to the main branch.
npm install
npm run dev
# open http://localhost:3000
No environment variables are required to run locally — lib/db.ts falls back
to data/runtime.local.json, seeded automatically on first run.
Next.js 14 (App Router) + TypeScript + Tailwind CSS, a handful of small Next.js
API routes as thin server proxies, Upstash Redis (optional) for shared
storage. No ORM, no build step beyond next build, no separate backend
service to run or pay for.
Being upfront about what was cut for scope, and what real registration/CRM data would unlock:
npm audit flags additional Next.js advisories (beyond the one this
build already includes the patch for) that are fixed only in the Next 16
major line. I deliberately didn't do that migration blind inside a
time-boxed assignment — it's a reasonable next step, called out here rather
than silently left for someone else to discover.