跳到正文
cccskills
免费在 GitHub 公开

devoxx-voxxed-cfp

Use when the user asks about speakers, talks, schedules, or CFP dates for any Devoxx or VoxxedDays conference. Covers: speaker bios/socials, talk topics/tracks/levels, daily program or room agenda, most popular talks, upcoming or past events, and CFP open/close dates. Queries the public CFP API at [event-slug].cfp.dev and the devoxxians.com event registry. Example triggers: who speaks about Kubernetes at Devoxx UK, what is on Wednesday in Room 8, find AI talks at Voxxed Zurich, when does the CFP open for Devoxx Belgium.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(2)

  • SKILL.md5.7 KB
  • references/api.md11.5 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Devoxx / VoxxedDays — CFP API

Answer the user's question by querying public, no-auth REST APIs. Each Devoxx and VoxxedDays event has its own CFP instance at https://{event-slug}.cfp.dev/api/public. Fetch live data with curl in the bash tool and parse JSON with python3. Never invent talk titles, times, rooms, or speaker facts — always pull from the API.

Step 0 — resolve the event slug

Discover events from the Devoxxians registry (no auth):

  • GET https://devoxxians.com/api/public/events/upcoming
  • GET https://devoxxians.com/api/public/events/past

Each event has name (e.g. "Devoxx UK 2026"), eventCategory (DEVOXX or VOXXED), fromDate/toDate, location, website, and apiURL (e.g. https://devoxxuk26.cfp.dev/api/). The slug is the hostname prefix of apiURL — extract with re.match(r"https://([^.]+)\.cfp\.dev", apiURL).

Resolution rules:

  • Match the user's event mention against name case-insensitively (fetch both lists; "Devoxx UK" without a year → prefer the nearest upcoming edition, else the most recent past one).
  • No event mentioned at all → use conversation context; if still ambiguous, ask which event (and offer the upcoming list).
  • apiURL can be null for announced events whose CFP isn't live yet (e.g. a next-year edition) — say so and fall back to the most recent edition that has an apiURL.
  • Cache the slug for the rest of the conversation; don't re-resolve on every question.

Questions like "when is the next Devoxx" or "which Voxxed events are coming up" are answered directly from these two registry endpoints.

Per-event endpoints

Base: https://{slug}.cfp.dev/api/public — all GET, no auth.

NeedEndpoint
Event metadata + CFP open/close dates/event
All talks (content)/talks
All speakers (summary, paginated)/speakers?page=N
One speaker + their talks/speakers/{id}
Available schedule days/schedules (returns day links — days VARY per event, never assume monday–friday)
Schedule for a day/schedules/{day}
Rooms / Tracks/rooms, /tracks

Full field reference, gotchas, and worked curl+python3 recipes are in references/api.md — read it before composing a non-trivial query.

Key joins

  • A schedule slot's proposal.id equals a talk's id in /talks.
  • A talk's speakers[] and a speaker's proposals[] link talks ↔ speakers.
  • /talks carries content (description, track, level, favourites) but its timeSlots is usually empty — get times and rooms from /schedules/{day}.

Times

Display times in the event's local timezone. Every schedule slot carries fromDate/toDate in UTC plus a timezone field (e.g. Europe/London, Europe/Brussels). Convert with zoneinfo:

from datetime import datetime
from zoneinfo import ZoneInfo
def local(ts, tz): return datetime.fromisoformat(ts.replace("Z","+00:00")).astimezone(ZoneInfo(tz)).strftime("%H:%M")

Linking to the public website (mandatory)

Every talk and every speaker referenced in an answer MUST be a clickable markdown link to https://m.devoxx.com, using the same event slug:

Routing is by id (the trailing slug is cosmetic), but generate it properly:

import re
def slug(s): return re.sub(r"[^a-z0-9]+", "-", (s or "").lower()).strip("-")

Format every talk as [Talk Title](https://m.devoxx.com/events/{slug}/talks/{id}/{slug(title)}) and every speaker as [Speaker Name](https://m.devoxx.com/events/{slug}/speaker/{id}/{slug(name)}) — including in lists and schedule overviews. For event-level answers, link the event's website from the registry payload.

Answering patterns

  • "Tell me about <speaker>" → page through /speakers to find the id, then GET /speakers/{id} for bio + proposals.
  • "Who's speaking about <topic>" / "find <topic> talks" → fetch /talks, case-insensitively match across title, summary, description, keywords[].name, track.name.
  • "What's on <day>" / "what's in <room>" → GET /schedules for valid days, then /schedules/{day}, filter by room, sort by fromDate.
  • "Most popular talks" → sort /talks by totalFavourites descending.
  • "When/where is the next Devoxx or Voxxed event" → registry endpoints on devoxxians.com.
  • "When does/did the CFP open or close?" / "is the CFP open for <event>?" → resolve the slug, then GET /event and read cfpOpening/cfpClosing (UTC ISO). Compare to now to label open / closed / opens-later; an event whose apiURL is null has no CFP instance yet. The registry does NOT carry CFP dates — always use /event.

Keep answers focused on what was asked. Every talk title and speaker name in the answer must be a markdown link per the linking rules above.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

报告此技能的问题