本文へ移動
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(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

このスキルの問題を報告する