agentleFS
pamelafoxpamelafox/presentation-skills/skills/make-speaker-promo-cards/SKILL.md

make-speaker-promo-cards

Skill129 starsChanged 7 months agoMITView on GitHub

Create social media promo graphics (LinkedIn, X, Bluesky) for speakers at Microsoft events (Microsoft Ignite, Microsoft Build), listing every session a speaker is giving with the day(s) and small co-speaker headshots. Pulls sessions, co-speakers, and headshots from the event's speaker page (e.g. ignite.microsoft.com/en-US/speakers/<id>). USE FOR: Ignite/Build speaker card, session promo graphic, "join me at Microsoft Ignite" image, LinkedIn/Twitter graphic for my Microsoft event talks, promo for co-speakers.

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 2 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run the fetcher on the speaker's Microsoft event page (e.g.

    line 22
  2. Very specific:

    If the fetcher fails, for example because the catalog API changed or the session isn't published yet, write config.json by hand.

    line 31
  3. Distinctive:

    Style every session the same: Don't highlight one session with a special color unless the user asks.

    line 101
  4. Very specific:

    For X/Bluesky, keep it casual: Use the compact style: no corporate header or slogan, just the sessions on black.

    line 103
  5. Very specific:

    Don't reuse an event's brand template art unless the user supplies it.

    line 104
  6. Distinctive:

    After rendering, offer a plain-text session list for the post.

    line 108

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Make speaker promo cards for Microsoft events

Generate PNG promo cards for Microsoft events (Ignite, Build) that show all of a speaker's sessions, not just one. Each session shows its code, type, title, day(s), and the co-speakers' headshots.

Workflow

1. Gather the session data

Run the fetcher on the speaker's Microsoft event page (e.g. https://ignite.microsoft.com/en-US/speakers/<id>). It calls the site's public catalog APIs, groups repeated deliveries of the same session code, works out the day(s) in the event's time zone, and downloads headshots.

uv run scripts/fetch_microsoft_event_speaker.py "<speaker_url>" <work_dir> [--tz America/Los_Angeles]

This writes <work_dir>/config.json and <work_dir>/headshots/.

If the fetcher fails, for example because the catalog API changed or the session isn't published yet, write config.json by hand. Use assets/example_config.json as the template.

2. Confirm the session list with the speaker

Public catalogs are often incomplete, so show the speaker the sessions you found and ask whether anything is missing. Common gaps:

  • Pre-day workshops and partner-only sessions that aren't in the main catalog.
  • Labs where the speaker is a proctor rather than a listed presenter. Add these with "proctors": ["<key>"] and keep the presenters in speakers.
  • Extra deliveries of a repeated lab that are only on the speaker's calendar.
  • Session codes that differ from what the speaker remembers (e.g. ILL667 vs LAB667). Search the catalog by title or session ID from a session URL.

Edit config.json to add the missing sessions or dates, and ask for missing co-speakers' names.

3. Render

uv run scripts/make_promo_cards.py <work_dir>/config.json <out_dir> [--owner KEY] [--style tiles list landscape compact]

Output files are named <owner>_<style>.png. Each image's height is trimmed to fit its content.

StyleSizeBest for
tiles1080 wide, portraitLinkedIn. Big headshot and header; sessions in a 2-column grid. With an odd number of sessions, the first spans the full width.
list1080 wide, portraitLinkedIn. One row per session with co-speaker headshots on the right. Set subheadline for a second header line.
landscape1200 wide, shortLinkedIn or blog banners. Headshot panel on the left, one column per session.
compact960 wide, shortX, Bluesky, Mastodon. Plain black background, emoji type labels, and paired headshots with first names on each card.

To make cards for a co-speaker, re-run with --owner <their key>. It shows only that person's sessions, so first fetch their own speaker page or add their other sessions to the config.

4. Review and iterate

View every PNG before sharing it. Check for clipped text, awkward line breaks, and empty space. Adjust the config, such as shorter short_dates, a different accent, or announce text, then re-render.

Config format

{
  "event": "Microsoft Ignite",            // used in the default headline
  "headline": "Join me at Microsoft Ignite", // optional
  "subheadline": "",                       // optional second header line (list style)
  "footer": "Find session times at ignite.microsoft.com", // optional; "" to omit
  "accent": "#C03BC4",                     // header and tag color
  "background_image": "",                  // optional image path, relative to config
  "announce": "",                          // optional banner, e.g. "Announcing the FY27 OpenHack!"
  "owner": "pamela",                       // default --owner
  "people": {
    "pamela": {"name": "Pamela Fox", "title": "Principal Cloud Advocate, Microsoft", "photo": "headshots/pamela.jpg"}
  },
  "sessions": [
    {
      "code": "LAB673",
      "type": "Lab",
      "title": "Turning data into agent-ready knowledge with Foundry IQ",
      "dates": "Tue, Nov 17 · Wed, Nov 18 · Fri, Nov 20",
      "short_dates": "Nov 17, 18 & 20",  // optional; used by narrow styles
      "speakers": ["pamela", "ayca"],      // presenters
      "proctors": []                       // optional; makes the session appear on proctors' cards
    }
  ]
}

photo can be a path relative to the config file or an https:// URL. If it's missing, the card shows the person's initials.

Design guidance (learned from user feedback)

  • Show days, not times or rooms. Labs and repeated sessions run several times, so times clutter the card and go stale. Put the day(s) under each title and point to the catalog in the footer.
  • Show every session. Single-session templates under-sell a speaker with several sessions.
  • Keep co-speaker headshots small, and show co-speakers on every session they share.
  • Style every session the same. Don't highlight one session with a special color unless the user asks.
  • Trim empty space. Size cards to their content, not a fixed canvas.
  • For X/Bluesky, keep it casual. Use the compact style: no corporate header or slogan, just the sessions on black. The post text carries the "join me" message.
  • Don't reuse an event's brand template art unless the user supplies it. Pass it as background_image.

Writing the post text

After rendering, offer a plain-text session list for the post. LinkedIn doesn't render markdown, so use emoji bullets:

🛠️ PREL42 · Pre-day Workshop (Mon, Nov 16)
Build with Microsoft IQ: A hands-on workshop for context-aware AI, with Ayca Bas

Suggest @-mentioning co-speakers and linking the speaker page.

Prerequisites

  • uv to run the scripts (Python 3.11+). Dependencies are declared inline.
  • Playwright Chromium: uv run --with playwright playwright install chromium
  • Internet access to load the Noto Sans web font. Rendering falls back to system fonts if offline.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.