尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Paste a London tech event. Get the sponsors and venues most likely to back it, a drafted pitch for each, and a pipeline to chase them.
Live demo · For agents · Run it
Event organisers lose weeks working out who might sponsor them. Backer has already read the sponsor sections of hundreds of London tech events, so it can answer from evidence: who backed similar events, in what role, and where we saw it.
Built at the Grok Bot Community Engineering London Hackathon, 22 Oct 2026. Track 5: Front Desk & Revenue.
Paste an event URL or describe the event. Backer ranks London sponsors and venues by fit (topic, audience, past backing, distance) and shows why each one is on the list. Every reason points at a real past backing with a source link.
Open any lead to get a personal email that names the events that company backed, plus a suggested tier and price. Grok writes the draft and can only cite backings that exist in the map. Send it through Resend, or log a reply when the sponsor answers.
Leads move through contacted, replied, call and signed on a board, and sync to a Notion database. A repeat push reuses the existing page for the same event and company, so a status you changed by hand is kept.
Every sponsor and venue on the map in one table: how many events they backed, the latest one, and every backing with its source link. Open one to draft outreach.
The map as a graph: events, sponsors and the backings between them. Companies that backed the same events sit close together, so you can see who your event shares sponsors with. Outreach and replies are layered on top as memory, stored in Supabase and written to Cognee, which has an "Ask memory" box.
The value is the data. data/london.json is a committed, reproducible map of London tech events, built by scripts/scrape-events.ts from ten sources.
| Events | 316 |
| Sponsors and venues | 547 |
| Backings (sponsor backed event) | 635 |
| Backings with a source URL | 635 of 635 |
Sources: Luma, Devpost, Meetup, Eventbrite, BuilderBase, MLH, dev.events, confs.tech, GDG and Hack Club. Each lives in lib/scrape/sources/ and returns the same RawEvent shape. A source that fails is logged and skipped.
Tech filter. A classifier keeps London tech events and drops the rest. Measured against hand labels:
| Set | Precision | Recall |
|---|---|---|
| Held-out | 1.00 | 0.93 |
| Fresh | 1.00 | 0.95 |
Reproduce with node --env-file-if-exists=.env.local --import ./scripts/register.mjs scripts/eval-tech-filter.ts.
No invented data. A sponsor name only counts if it is literally in the page text or the event's own links. Every backing keeps the URL of the page it was read from, and pitches may only mention backings that are in the data. Details in docs/07-event-scraper.md.
Tell Backer where you are (GPS or a place search) and it uses that for everything.
localStorage. It is never sent to a server to be saved. Without it, Backer assumes central London.Backer is readable by other agents, for example Grok Bot. The MCP server is read-only and uses Streamable HTTP.
| Tool | Does |
|---|---|
search_events | Find scraped events by text, date range, upcoming only, or distance from a point |
find_backers | Rank likely sponsors for an event URL or description, with real past backings as reasons |
get_sponsor | One company by domain: kind, tags, and every event it backed with source links |
MCP client config:
{
"mcpServers": {
"backer": {
"url": "https://grokhack.vercel.app/api/mcp"
}
}
}
REST, same data:
| Route | Query |
|---|---|
GET /api/v1/events | q, lat, lng, radiusKm, from, to, upcoming, limit |
GET /api/v1/backers | event (URL or description), lat, lng, radiusKm, limit |
GET /api/v1/calendar.ics | Events as an iCalendar feed to subscribe to |
curl "https://grokhack.vercel.app/api/v1/backers?event=https://luma.com/your-event&limit=5"
If the server sets BACKER_API_KEY, send it as Authorization: Bearer <key>:
curl -H "Authorization: Bearer $BACKER_API_KEY" \
"https://grokhack.vercel.app/api/v1/events?upcoming=1&lat=51.5236&lng=-0.0786&radiusKm=5"
npm install
cp .env.example .env.local # then fill in the keys you have
npm run dev # http://localhost:3000
Ranking works with no keys at all, because leads come from the committed data/london.json (loaded by lib/seed.ts). Keys switch on the rest:
| Key | Unlocks |
|---|---|
MODEL, XAI_API_KEY | Grok pitch drafts and chat |
SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY | Shared map and memory storage |
NOTION_TOKEN, NOTION_DATA_SOURCE_ID | Pipeline sync (setup guide) |
RESEND_API_KEY, RESEND_FROM | Sending drafts |
COGNEE_BASE_URL, COGNEE_API_KEY, COGNEE_TENANT_ID | Cognee knowledge graph and "Ask memory" |
Anything unset falls back to the baseline behaviour, so the demo never shows an error.
Refresh the map:
node --env-file-if-exists=.env.local --disable-warning=MODULE_TYPELESS_PACKAGE_JSON \
--import ./scripts/register.mjs scripts/scrape-events.ts
Flags: --past, --future, --limit, --only luma,meetup, --dry-run. XAI_API_KEY adds a Grok pass that finds partners named in event descriptions.
Check types with npx tsc --noEmit. Design and contribution rules are in AGENTS.md; the plan is in docs/PLAN.md.
| App | Next.js 16 (App Router, TypeScript) on Vercel |
| Model | Grok via xAI |
| Data | Supabase Postgres, with the committed data/london.json as fallback |
| Pipeline | Notion API |
| Memory | Cognee |
| Resend |
| Area | Owner | Doc |
|---|---|---|
| Scraper (the map) | Jawad | docs/01-scraper.md |
| Matching and scoring | Avi | docs/02-matching.md |
| Pitch drafts and pricing | Vidit | docs/03-pitch.md |
| Notion pipeline | Joel | docs/04-pipeline.md |
| UI | Dhrishiv | docs/05-ui.md |
| Glue, deploy, demo | Jawad | docs/06-demo.md |
| Event scraper | Avi | docs/07-event-scraper.md |
MIT.