Skip to content

リーダーコリー (leader-collie)

Slack コミュニティ向けのイベント日程調整・管理ツール。apps/leader-collie/ に置かれた React Router v7 (framework モード) アプリケーションで、Cloudflare Workers 上で SSR する。

tied-inc/tied-event (Next.js + Turso + S3 on Vercel) からの移植版。移植にあたり、フレームワークと外部依存インフラを Cloudflare ファーストで置き換えている。

機能

  • 📅 イベント作成(確定 / 日程調整の 2 タイプ)
  • 🗳️ 候補日時への投票(◎△✕)と集計
  • 👥 メンバー一覧・プロフィール(Slack 同期)
  • 📝 イベントレポート(リッチエディタ、画像・動画添付、AI ドラフト生成)
  • 📊 Slack 投稿の分析ダッシュボード(投稿量、リアクション、関係性ネットワーク)
  • 🗓️ Google カレンダー連携(確定イベントを参加者のカレンダーへ追加)
  • 🔐 Slack OAuth ログイン(better-auth)

旧スタックとの対応(設計の不変条件)

役割旧 (tied-event)新 (leader-collie)
フレームワークNext.js 16 App Router (RSC / Server Actions)React Router v7 framework モード (loader / action / resource routes)
実行環境VercelCloudflare Workers (@cloudflare/vite-plugin + wrangler)
メイン DBTurso (LibSQL)D1 binding DB + drizzle-orm/d1
分析 DBTurso (別 DB)D1 binding ANALYSIS_DB(libsql 互換の execute アダプタで分析リポジトリは無変更)
メディア保存S3 + Vercel OIDCR2 binding REPORTS_BUCKET(presign は aws4fetch + S3 互換 API)
認証ガードmiddleware.tsapp/routes/protected.tsx(pathless layout の loader)
Server Actions"use server"lib/actions/*.server.ts + POST /api/actions/:domain + 同名クライアントラッパー
Google APIgoogleapis パッケージfetch ベースの REST 呼び出し(Workers で動かすため)
AIOpenAI 直叩きAI SDK + OpenAI。OPENAI_BASE_URLAI Gateway 経由に切替可
アナリティクスVercel Analytics撤去(必要なら Cloudflare Web Analytics をダッシュボードで有効化)

維持している不変条件:

  • 認証は better-auth (Slack OAuth)。アプリは Cloudflare Access のの公開 Worker (一般メンバーがログインして使うため)
  • API の URL (/api/...) は旧 Next.js 時代と互換
  • レイヤー構成は routes (loader/action) → services → repositories → D1
  • D1 は対話型トランザクション非対応のため、db.transaction は使わない
  • UI は v0.app 由来の shadcn/ui。大規模な UI 変更は慎重に行う
  • next/link / next/navigation 互換レイヤー(components/link.tsx / hooks/use-router.ts)で コンポーネント層の差分を最小化している

ドキュメント

アプリ内にも詳細ドキュメントがある: apps/leader-collie/README.mdapps/leader-collie/CLAUDE.mdapps/leader-collie/docs/(DB 設計・テスト方針・Slack OAuth 設定)。