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(원문)
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
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/upcomingGET 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
namecase-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).
apiURLcan 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 anapiURL.- 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.
| Need | Endpoint |
|---|---|
| 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.idequals a talk'sidin/talks. - A talk's
speakers[]and a speaker'sproposals[]link talks ↔ speakers. /talkscarries content (description, track, level, favourites) but itstimeSlotsis 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:
- Talk:
https://m.devoxx.com/events/{event-slug}/talks/{talkId}/{slug(title)}— e.g. Top 10 Event-Driven Architecture Pitfalls - Speaker:
https://m.devoxx.com/events/{event-slug}/speaker/{speakerId}/{slug(fullName)}(note:speaker, singular) — e.g. Victor Rentea
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
/speakersto find the id, thenGET /speakers/{id}for bio + proposals. - "Who's speaking about <topic>" / "find <topic> talks" → fetch
/talks, case-insensitively match acrosstitle,summary,description,keywords[].name,track.name. - "What's on <day>" / "what's in <room>" →
GET /schedulesfor valid days, then/schedules/{day}, filter by room, sort byfromDate. - "Most popular talks" → sort
/talksbytotalFavouritesdescending. - "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 /eventand readcfpOpening/cfpClosing(UTC ISO). Compare to now to label open / closed / opens-later; an event whoseapiURLis 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.
리뷰
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
댓글
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.