機能カタログ · 17モジュール

機能カタログ

新イベントは create-event-app --features=… で機能を選んで生成する。 以後の変更は src/event.config.ts の boolean を倒すだけ — nav と route が自動で追従する。

cms

コンテンツ CMS@event/cms実装済み

schema 駆動 admin。ResourceSchema を書くだけで一覧/編集/保存/CSV インポートが動く。locked フィールドは二層防御。

  1. event.config.ts で cms: true
  2. lib/cms.ts に ResourceSchema を宣言
  3. ADMIN_PASSWORD(+ 本番は GITHUB_TOKEN)
ch.12ch.13ch.14new-eventadd-cms-resource

sessionCard

セッションカード@event/session-card実装済みrequires: cms

1A–10A photo-first カード + 手動最終調整エディタ(DnD / 改行上書き / scale)。engine は元実装と挙動差分ゼロ。

  1. sessionCard: true
  2. FOURS_EVENT_SLUG + FOURS_PUBLIC_READ=1
  3. テーマは themes prop に CardTheme を登録
ch.18ch.19new-eventadd-session-cards

surveys

サーベイ & リーダーボード@event/feedback実装済み

匿名アンケート(uaHash upsert・二段送信)+ IMDb 加重ランキング(校正済み・数値等価検証済み)。

  1. surveys: true
  2. BLOB_READ_WRITE_TOKEN
  3. createSubmitHandler に resolveUnit を注入
ch.26ch.27add-surveys

live

ライブ投票@event/feedback実装済み

主催主導のライブ poll。状態は KV に一元化(本番 Upstash / dev in-memory shim)、リアルタイムはポーリング × 3 系統 rev(viewRev/promptRev/results.rev)。host key は秘密から導出(保存しない・定数時間比較)。

  1. live: true
  2. LIVE_HOST_SECRET(無ければ ADMIN_PASSWORD から導出)
  3. recipe add-live(/live + /api/live + /admin/live を転写)
ch.28add-live

db

リレーショナル DB@event/crm-schema実装済み

MCP-first 二層 DB。固定コア(手書き SQL migration)+ 拡張レイヤ(meta jsonb + Field Manifest)。org/member/user/entity_lp/audit/compliance。

  1. db: true
  2. DATABASE_URL(Neon)
  3. migrations/0001_init.sql を pg で適用
ch.15add-databaseadd-mcp

mcp

MCP 連携@event/mcp実装済み

この app を MCP server として公開。設定画面から URL・公開ツールを設定し stdio + HTTP 両方で接続可能。ツール: content(CMS 読み書き)/ fourS(照会)/ db(schema_addField=カラム追加・migration_propose=人間承認)。全 DB 書き込みに manifest ガード + 楽観ロック + audit。

  1. mcp: true
  2. MCP_BEARER_TOKEN(HTTP を使うなら)
  3. 設定画面 /admin/settings/mcp で URL・ツールを設定 → 接続 .mcp.json をコピー
ch.15add-databaseadd-mcp

visuals

ビジュアル生成@event/visuals実装済み

SNS/印刷/会場ビジュアルの generator framework — EventBrand トークン(--vis-* 変数)+ TemplateRegistry + FormatRegistry(SNS + A1/A2/A3・√2 印刷拡大)+ chrome プリミティブ。capture は @event/asset-kit に構造互換で接続。

  1. visuals: true
  2. EventBrand を resolveBrand で定義
  3. defineTemplate でテンプレを登録 → asset-kit の exportPng/Pdf へ
ch.17ch.20ch.21ch.22add-visualsadd-cutout

booking

予約 & 見積@event/booking実装済み

スロット制予約(capacity/waitlist・冪等 dedup・partial UNIQUE・kill-switch・IP rate-limit)+ 見積(basis-point tax・内税/外税・Blob|Neon driver)。resourceKey で booth/seat/table/session を汎用化。

  1. booking: true
  2. DATABASE_URL(予約テーブル)
  3. createReservationStore + createBookingActions を配線
ch.29ch.30add-booking

networking

マッチング & ディレクトリ@event/networking実装済み

entity-linking(Jaro-Winkler + Dice、多段照合 + decide ガード)+ PII 最小 registry factory + privacy trio(consent gating / whitelist 射影 / k-anonymity K=5)+ referral tier。

  1. networking: true
  2. createRegistrySchema({prefix}) でテーブル生成
  3. matchName + evaluateListingGrants + applyKAnonymity を配線
ch.32ch.33ch.34add-networkingrun-newsletter-opscollect-web-leadsharvest-mailbox-contacts

spatial

マップ & タイムテーブル@event/spatial実装済み

SvgHotspotLayer(FloorMap/OverallMap/StartupZoneMap/FloorPlan の4コピー統合。inline SVG + overlay + hit-test + deep-link)+ lane-packing タイムテーブル + booth grid。

  1. spatial: true
  2. SpatialConfig に venue SVG + hotspot 座標
  3. SvgHotspotLayer / packTimeslots を配線
ch.35add-spatial

mailer

メール@event/mailer実装済み

Resend transactional + branded shell(brand トークン駆動)+ template slot registry(invitation/otp/notify)+ Slack Block Kit。missing-key 挙動は noop/throw で選択。

  1. mailer: true
  2. RESEND_API_KEY(省略時は noop)
  3. createMailer({ from, brand }) で template を register
ch.36add-mailerrun-newsletter-ops

leads

リード獲得@event/leads実装済み

公開フォーム → honeypot → rate-limit → 検証(zod) → persist-first → fan-out(Slack/メール)。通知が失敗してもリードを失わない。dev は content/leads.json、通知キー未設定は no-op。

  1. leads: true
  2. recipe add-leads(/contact + /api/lead + /admin/leads を転写)
  3. SLACK_WEBHOOK_URL / RESEND_API_KEY + LEAD_NOTIFY_TO(任意)
ch.31add-leadsrun-newsletter-opscollect-web-leadsharvest-mailbox-contacts

i18n

多言語 i18n@event/i18n実装済み

pickLang({ja,en} record と {value,valueEn} 対の2形対応)+ LangProvider/useLang/useT + cookie 永続。4S languages.en fallback 規則に整合。基盤層のため feature flag は不要。

  1. recipe add-i18n(flag 不要)
  2. layout.tsx を LangProvider で包む(cookie から SSR 初期言語解決)
  3. CMS リソースに titleEn 等の EN フィールドを足す
ch.16add-i18n

design

デザイントークン層 + Worldview@event/design実装済み

defineDesign でトークンを型付き宣言 → tokensToCssVars が globals.css の実 CSS 変数へ写像。さらに defineWorldview で世界観(パレット/書体/ムード)を1回宣言すれば、サイト/ビジュアル/セッションカード/メールの4面へ純関数で派生する(トークンが対象。ページ構成やモーションは対象外)。

  1. recipe apply-worldview(flag 不要・推奨)
  2. src/worldview.ts に defineWorldview({...}) → 4面の lib が派生を読む
  3. 単面だけなら recipe add-design の defineDesign 直書きも可
ch.44add-designapply-worldview

shareCard

OG 共有カードnext/og + @event/fours-sdk実装済み

4S user → 1200×630 の OG 画像を動的生成(next/og ImageResponse・Next 内蔵・外部モデル不要)。/share/[slug] が generateMetadata で og:image を配線。フォント/アバター/プロフィールの三段フォールバック。

  1. recipe add-share-card(flag 不要・公開ページ)
  2. /api/og/[slug] route + /share/[slug] page を転写
  3. NEXT_PUBLIC_SITE_URL(絶対 URL 解決・Vercel は自動)
ch.24add-share-card

cutout

スピーカー切り抜き@event/visuals実装済みrequires: visuals

pluggable CutoutBackend(透過 PNG Blob 契約)+ zero-dep canvas フォールバック(しきい値/羽化)。MODNet / @imgly は差し込み口のみ = 依存導入後に第2引数を差し替えるだけで UI 無改修。

  1. visuals: true(add-visuals 済み前提)
  2. recipe add-cutout(/admin/cutout を転写)
  3. 本番品質は onnxruntime-web 等の backend を注入
ch.25add-cutout

motion

モーショングラフィックス@event/motion実装済み

Reveal(入場 stagger)/ CountUp / ネイティブ CSS scroll-driven([data-scroll-fade])/ spring easing トークン。連動は CSS・発火は IntersectionObserver の 2026 構成。reduced-motion で全停止。基盤層のため feature flag は不要。

  1. recipe add-motion(flag 不要)
  2. layout に <MotionStyles /> を1回
  3. <Reveal>/<CountUp>/[data-scroll-fade] を置くだけ
ch.47add-motion