add-event
Add an event/conference to your CV's relevant events list with intelligent data extraction, validation, and automatic commit generation
Best use case
add-event is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Add an event/conference to your CV's relevant events list with intelligent data extraction, validation, and automatic commit generation
Teams using add-event should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/add-event/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How add-event Compares
| Feature / Agent | add-event | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Add an event/conference to your CV's relevant events list with intelligent data extraction, validation, and automatic commit generation
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Add Event to CV
Add an event or conference to your CV's relevant events list with intelligent data extraction and validation.
## Usage
```
/add-event <event identifier>
```
Where `<event identifier>` can be:
- Event title (e.g., "AWS re:Invent 2024")
- URL to event page (Eventbrite, Meetup, Luma, conference websites, etc.)
- Path to screenshot containing event information
- Leave empty to enter manual mode with prompts
## Behavior
When invoked, this skill will:
### 1. **Extract Event Information**
- If a URL is provided: Fetch and parse the page for title, location, and date
- If a screenshot is provided: Parse the image using vision capabilities to extract event details
- If a title is provided: Search the web for the event to get accurate location and date
- If empty: Prompt user for title, location, and date manually
### 2. **Validate the Event**
- Confirm the event exists and information is accurate
- Check for duplicates in the existing `relevantEvents` array
- Alert if the event is already present
- Validate date and location formats
### 3. **Format the Entry**
Properly format the event entry following existing conventions:
- **Location format**: "City, Country" or "Virtual"
- Examples: "San Francisco, USA", "Berlin, Germany", "Virtual"
- Standardize country names (USA not US, etc.)
- **Date format**:
- Single day: "DD MMM YYYY" (e.g., "21 Oct 2015")
- Multi-day same month: "DD-DD MMM YYYY" (e.g., "27-28 Aug 2024")
- Multi-day cross-month: "DD MMM - DD MMM YYYY" (e.g., "30 Jan - 2 Feb 2024")
- **Title**: Use official event name, preserve capitalization and special characters
Example formats:
```typescript
{
title: 'Engineering Leadership Community Annual 2024',
location: 'San Francisco, USA',
date: '27-28 Aug 2024',
}
{
title: 'TEDx Goiânia',
location: 'Goiânia, Brazil',
date: '21 Oct 2015',
}
{
title: 'ELC Match & Learn: increasing velocity without losing quality',
location: 'Virtual',
date: '25 Apr 2024',
}
```
### 4. **Determine Insertion Position**
- Parse existing event dates to determine chronological position
- Events are sorted newest first (reverse chronological order)
- Insert in the correct position to maintain order
- Show where in the list it will be inserted
### 5. **Show Proposed Changes**
- Display the complete diff showing:
- The formatted event entry
- Its position in the list (with before/after context)
- Line numbers for reference
- Highlight that events are in reverse chronological order
### 6. **Request User Approval**
- Present the changes and ask for explicit confirmation
- Options: "approve", "edit", "cancel"
- If "edit" is selected, allow user to modify title, location, or date
### 7. **Commit Changes**
- If approved, use the Edit tool to add the event to `src/components/cv/cvData.ts`
- Create a descriptive commit message:
```
Add event to CV: [Event Title]
Location: [Location]
Date: [Date]
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
```
- Run `npm run lint` to ensure code formatting is correct
### 8. **Offer to Push**
- After successful commit, ask if the user wants to push to the remote branch
- If yes, execute: `git push -u origin <branch-name>`
## Important Notes
- **File Location**: Events are stored in `src/components/cv/cvData.ts`
- **Structure**: Single array at `cvData.relevantEvents[]` (around lines 797-850)
- **Ordering**: Events MUST be in reverse chronological order (newest first)
- **Date Parsing**:
- Accept various input formats (MM/DD/YYYY, DD-MM-YYYY, "Month DD, YYYY", etc.)
- Always convert to CV format: "DD MMM YYYY" or "DD-DD MMM YYYY"
- Use 3-letter month abbreviations (Jan, Feb, Mar, etc.)
- **Location Standardization**:
- Always use full country names: "USA" not "US"
- Format: "City, Country" - capitalize appropriately
- Use "Virtual" for online-only events (not "Online", "Remote", etc.)
- **Linting**: Always run `npm run lint` before committing to maintain code quality
- **PDF Generation**: Remind user they may want to rebuild the CV PDF with `npm run build`
## Supported Event Platforms
The skill can parse event information from:
- Eventbrite (eventbrite.com)
- Meetup (meetup.com)
- Luma (lu.ma)
- LinkedIn Events
- Conference websites (via HTML/JSON-LD parsing)
- Generic event pages with structured data
## Error Handling
- If event information cannot be found or validated, ask user to provide details manually
- If duplicate is detected, inform user and ask if they want to continue anyway
- If date format is ambiguous, ask user to clarify
- If location format is unclear, suggest standard format and confirm
- If web search/URL fetch fails, fall back to manual entry mode
## Examples
```bash
# Add by title (will search for event details)
/add-event AWS re:Invent 2024
# Add by URL
/add-event https://www.eventbrite.com/e/example-event-tickets-123456
# Add by Luma URL
/add-event https://lu.ma/example-event
# Add by screenshot
/add-event /path/to/event-screenshot.png
# Manual mode (prompts for all details)
/add-event
```
## Date Format Examples
Input formats accepted:
- "August 27-28, 2024"
- "27-28 Aug 2024"
- "2024-08-27 to 2024-08-28"
- "27/08/2024 - 28/08/2024"
- "Aug 27, 2024"
Output formats (standardized):
- Single day: "21 Oct 2015"
- Multi-day (same month): "27-28 Aug 2024"
- Multi-day (cross month): "30 Jan - 2 Feb 2024"
## Configuration
Default behavior can be customized:
- **auto-push**: Set to `true` to automatically push after commit (default: `false`)
- **auto-approve**: Set to `true` to skip approval step (default: `false`, not recommended)
- **date-format-preference**: Preferred input date format for ambiguous dates (default: `auto-detect`)
- **sort-order**: Maintain chronological order (default: `newest-first`, do not change)
## Workflow Tips
1. **Batch Adding**: If adding multiple events, you can invoke the skill multiple times in succession
2. **Recent Events**: When adding recent events, dates are usually easier to find and validate
3. **Historical Events**: For older events, you may need to rely on manual entry if details are not online
4. **Virtual Events**: Always use "Virtual" as the location for online-only events
5. **Event Series**: For recurring events (e.g., "Annual Conference 2024"), include the year in the title
## Related Commands
- `npm run dev` - Preview changes locally
- `npm run build` - Build production site and generate updated PDF
- `npm run lint` - Format code (automatically run by skill)
- `git log` - View commit history
## Troubleshooting
**Problem**: Date format not recognized
- **Solution**: Provide date in "DD MMM YYYY" format directly or let the skill prompt for clarification
**Problem**: Event marked as duplicate but seems different
- **Solution**: Check if the event title is slightly different (e.g., year included or not)
**Problem**: Location format incorrect
- **Solution**: Use "City, Country" format exactly, or "Virtual" for online events
**Problem**: Commit fails
- **Solution**: Check that you're on a clean branch and have no uncommitted changes
## Testing Checklist
Before considering the skill complete, verify:
- [ ] Can add event by title (web search)
- [ ] Can add event by URL (multiple platforms)
- [ ] Can add multi-day event with correct date format
- [ ] Can add single-day event
- [ ] Can add virtual event
- [ ] Duplicate detection works
- [ ] Events inserted in correct chronological position (newest first)
- [ ] Date format conversion works for various inputs
- [ ] Location standardization works
- [ ] Commit message generated correctly
- [ ] Linting runs successfully
- [ ] Changes show correct diff with contextRelated Skills
adding-persistent-event
Adds a new type of event that gets persisted to the event log. Use this when adding new kinds of write operations to the system or when adding new events to existing code.
add-event-type
Add a new event type to the frontend feed system with corresponding React component. Use when user mentions "new event", "add event type", "event block", "new block type", or wants to display new agent output types.
abuse-prevention
Abuse prevention - rate limiting, moderation, bad actors. Use when fighting abuse.
1k-adding-socket-events
Adds new WebSocket event subscriptions to OneKey. Use when implementing new socket events, handling server push messages, or adding real-time data subscriptions. Socket, WebSocket, event, subscription, push, real-time.
event-store-design
Design and implement event stores for event-sourced systems. Use when building event sourcing infrastructure, choosing event store technologies, or implementing event persistence patterns.
event-sourcing-architect
Expert in event sourcing, CQRS, and event-driven architecture patterns. Masters event store design, projection building, saga orchestration, and eventual consistency patterns. Use PROACTIVELY for e...
asyncredux-events
Use the Event class to interact with Flutter's stateful widgets (TextField, ListView, etc.). Covers creating Event objects in state, consuming events with `context.event()`, scrolling lists, changing text fields, and the event lifecycle.
event-driven
Event-driven architecture patterns including message queues, pub/sub, event sourcing, CQRS, and sagas. Use when implementing async messaging, distributed transactions, event stores, command query separation, domain events, integration events, data streaming, choreography, orchestration, or integrating with RabbitMQ, Kafka, Apache Pulsar, AWS SQS, AWS SNS, NATS, event buses, or message brokers.
create-event-handlers
Sets up RabbitMQ event publishers and consumers following ModuleImplementationGuide.md Section 9. RabbitMQ only (no Azure Service Bus). Creates publishers with DomainEvent (tenantId preferred), consumers with handlers, naming {domain}.{entity}.{action}, required fields (id, type, version, timestamp, tenantId, source, data). Use when adding event-driven communication, async workflows, or integrating via events.
analytics-events
Add product analytics events to track user interactions in the Metabase frontend
aggregating-event-datasets
Aggregate and summarize event datasets (logs) using OPAL statsby. Use when you need to count, sum, or calculate statistics across log events. Covers make_col for derived columns, statsby for aggregation, group_by for grouping, aggregation functions (count, sum, avg, percentile), and topk for top N results. Returns single summary row per group across entire time range. For time-series trends, see time-series-analysis skill.
acc-create-domain-event
Generates DDD Domain Events for PHP 8.5. Creates immutable event records with metadata, past-tense naming. Includes unit tests.