返回 Skill 列表
extension
分类: AI Agent 能力无需 API Key

otaku-domain

为宅男奥德赛管理展会领域的知识。在实现与展会、参与者、供应商、赞助商、小组讨论或志愿者相关的功能时使用。

person作者: jakexiaohubgithub

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