Agent skill
otaku-domain
Convention management domain knowledge for Otaku Odyssey. Use when implementing features related to conventions, attendees, vendors, sponsors, panels, or volunteers.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/otaku-domain
SKILL.md
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:
typescript
conventionId: text("convention_id")
.notNull()
.references(() => conventions.id, { onDelete: "cascade" }),
Application Workflow Fields
typescript
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
typescript
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
typescript
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
typescript
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
tsx
// Always include:
// 1. Application details
// 2. Review history
// 3. Action buttons (Approve/Reject/Waitlist)
// 4. Notes field for reviewer comments
Status Badges
tsx
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:
typescript
// 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
typescript
// 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
Didn't find tool you were looking for?