Claude Code Plugins

Community-maintained marketplace

Feedback

Convention management domain knowledge for Otaku Odyssey. Use when implementing features related to conventions, attendees, vendors, sponsors, panels, or volunteers.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name otaku-domain
description Convention management domain knowledge for Otaku Odyssey. Use when implementing features related to conventions, attendees, vendors, sponsors, panels, or volunteers.
allowed-tools Read, Write, Edit, Bash

Otaku Odyssey Domain Knowledge

Core Domain Concepts

Convention Lifecycle

Planning → Pre-Registration → Active Registration → Convention Days → Post-Convention

Applicant Types & Workflows

All applicant types follow a similar workflow but with domain-specific variations:

Attendees (Badge Holders)

Register → Select Badge Type → Payment → Confirmation → Check-in at Convention
  • Badge types: Weekend, Single Day (Fri/Sat/Sun), VIP, Child, Comp
  • Status: registered, paid, checked_in, cancelled

Vendors (Booth Holders)

Application → Review → Approval/Waitlist → Payment → Booth Assignment → Convention
  • Booth types: Standard, Corner, Island, Artist Alley
  • Status: draft, submitted, under_review, approved, rejected, waitlisted, confirmed

Sponsors (Financial Partners)

Application → Tier Selection → Review → Approval → Payment → Benefit Fulfillment
  • Tiers: Bronze ($250), Silver ($500), Gold ($1000), Platinum ($2000), Diamond ($3000)
  • Benefits: Logo placement, vendor tables, weekend passes, hotel accommodations
  • Status: draft, submitted, approved, rejected, active, completed

Panelists (Content Creators)

Panel Proposal → Review → Approval → Room/Time Assignment → Convention
  • Panel types: Discussion, Workshop, Q&A, Screening, Performance
  • Status: proposed, under_review, approved, scheduled, completed, cancelled

Volunteers (Staff)

Application → Training Assignment → Shift Selection → Convention Work → Hours Tracking
  • Departments: Registration, Security, Events, Tech, Guest Relations
  • Status: applied, approved, trained, active, inactive

Schema Relationships

Convention (root)
├── Attendees (via badges)
├── Vendors (via applications)
│   └── Vendor Products
├── Sponsors (via applications)
│   └── Sponsor Tier Benefits
├── Panels (via proposals)
│   └── Panelists (many-to-many)
├── Volunteers (via applications)
│   └── Volunteer Shifts
├── Hotels (partnerships)
│   └── Room Blocks
└── Schedule
    └── Events/Sessions

Common Field Patterns

Convention Reference

Every convention-scoped entity needs:

conventionId: text("convention_id")
  .notNull()
  .references(() => conventions.id, { onDelete: "cascade" }),

Application Workflow Fields

status: applicationStatusEnum("status").default("draft").notNull(),
submittedAt: timestamp("submitted_at"),
reviewedAt: timestamp("reviewed_at"),
reviewedBy: text("reviewed_by").references(() => users.id),
reviewNotes: text("review_notes"),

Payment Integration

stripePaymentIntentId: text("stripe_payment_intent_id"),
stripeCustomerId: text("stripe_customer_id"),
paymentStatus: paymentStatusEnum("payment_status").default("pending"),
paidAt: timestamp("paid_at"),
amountPaid: decimal("amount_paid", { precision: 10, scale: 2 }),

Contact Fields

contactName: text("contact_name").notNull(),
contactEmail: text("contact_email").notNull(),
contactPhone: text("contact_phone"),

Pricing Logic

Badge Pricing

  • Early bird discount before cutoff date
  • Child badges free under age 6
  • Group discounts for 10+ badges
  • Comped badges for sponsors/volunteers

Vendor Pricing

  • Base price by booth type
  • Corner premium (+25%)
  • Electricity add-on
  • Multi-day discount

Sponsor Tiers

const SPONSOR_TIERS = {
  bronze: { price: 250, passCount: 2, tableCount: 0 },
  silver: { price: 500, passCount: 4, tableCount: 1 },
  gold: { price: 1000, passCount: 6, tableCount: 2 },
  platinum: { price: 2000, passCount: 8, tableCount: 2, hotelNights: 2 },
  diamond: { price: 3000, passCount: 10, tableCount: 3, hotelNights: 3 },
};

UI Patterns

Dashboard Layout

/(dashboard)/
├── conventions/[id]/
│   ├── overview/          # Stats, recent activity
│   ├── attendees/         # Badge management
│   ├── vendors/           # Vendor applications
│   ├── sponsors/          # Sponsor management
│   ├── panels/            # Panel scheduling
│   ├── volunteers/        # Staff management
│   ├── schedule/          # Event calendar
│   └── settings/          # Convention config

Application Review Flow

// Always include:
// 1. Application details
// 2. Review history
// 3. Action buttons (Approve/Reject/Waitlist)
// 4. Notes field for reviewer comments

Status Badges

const statusColors = {
  draft: "gray",
  submitted: "blue",
  under_review: "yellow",
  approved: "green",
  rejected: "red",
  waitlisted: "orange",
};

Business Rules

Vendor Capacity

  • Maximum vendors per convention (configurable)
  • Waitlist when capacity reached
  • Auto-promote from waitlist on cancellation

Panel Scheduling

  • No speaker double-booking
  • Room capacity validation
  • Time slot conflict detection

Volunteer Shifts

  • Minimum shift length: 2 hours
  • Maximum hours per day: 8
  • Required rest between shifts: 8 hours

Sponsor Benefits

  • Benefits tied to tier, not individual
  • Pro-rated benefits for late sponsors
  • Rollover logic for unused benefits

Error Messages

Use domain-appropriate error messages:

// Good
throw new TRPCError({
  code: "BAD_REQUEST",
  message: "Cannot submit application: required fields missing",
});

// Bad
throw new TRPCError({
  code: "BAD_REQUEST", 
  message: "Validation failed",
});

Testing Patterns

// Test data factories
const createTestConvention = () => ({
  name: "Test Con 2025",
  startDate: new Date("2025-06-15"),
  endDate: new Date("2025-06-17"),
});

const createTestVendor = (conventionId: string) => ({
  conventionId,
  businessName: "Test Vendor",
  contactEmail: "test@vendor.com",
  boothType: "standard",
});

Checklist for Domain Features

  • Follows applicant workflow pattern
  • Includes convention reference
  • Has appropriate status enum
  • Includes audit timestamps
  • Has payment fields if applicable
  • Contact information captured
  • Review workflow fields present
  • Status-appropriate validation