全体構造
Speakeasy は、店舗と顧客をつなぐコミュニケーションプラットフォームです。Turborepo モノレポとして構成され、全サービスが Cloudflare Workers 上で稼働します。
| カテゴリ | 技術 |
|---|---|
| Monorepo | Turborepo + Bun |
| Frontend | Svelte 5 (Runes) + SvelteKit |
| Backend | Cloudflare Workers + Hono (Native RPC) |
| Database | PostgreSQL (Drizzle ORM v1.0 beta) + Hyperdrive |
| Auth | better-auth (Passkey, OAuth, 組織管理) |
| Styling | Tailwind CSS v4 + daisyUI 5 |
| Storage | Durable Objects + KV + R2 + Queues |
詳細は技術スタックを参照してください。
ディレクトリ構造
Section titled “ディレクトリ構造”speakeasy/├── apps/ # フロントエンドアプリケーション│ ├── counter/ # 店舗管理コックピット│ └── penthouse/ # 管理者コンソール├── gateways/ # API ゲートウェイ│ ├── door/ # 認証ゲートウェイ│ └── tap/ # 外部 API ゲートウェイ├── services/ # マイクロサービス (Hono)│ ├── proof/ # 認証サービス│ ├── fizz/ # チャット・一括配信エンジン│ ├── vintage/ # 連絡先・グループ管理│ ├── bell/ # 通知配信サービス│ └── base/ # 組織・アカウント基盤├── packages/ # 共有ライブラリ│ ├── cellar/ # 業務 DB (Drizzle ORM)│ ├── vault/ # 認証 DB (Drizzle ORM)│ ├── jigger/ # 共有スキーマ・型定義 (Zod)│ ├── glass/ # UI コンポーネント (Svelte 5 + Melt UI)│ ├── garnish/ # デザイントークン (Tailwind + daisyUI)│ └── purelovers-client/ # 外部連携クライアント└── docs/ # ドキュメント ├── developer/ # 開発者ドキュメント (このサイト) ├── menu/ # Storybook コンポーネントドキュメント └── card/ # Public API リファレンス (Scalar)アーキテクチャ図
Section titled “アーキテクチャ図”全サービス間の通信は Native RPC (Service Bindings) を使用しています。
データフロー
Section titled “データフロー”- クライアントが
Doorゲートウェイにリクエスト Doorが Service Binding 経由でProofを呼び出しProofがVaultDB でユーザーを検証、セッションを KV に保存- クッキーがクライアントに返却(クロスサブドメイン対応)
チャットフロー
Section titled “チャットフロー”- SvelteKit Remote Function が
Fizzを Native RPC で呼び出し - メッセージが
CellarDB に保存 - Durable Objects(UserInbox)経由で WebSocket でリアルタイム配信
- 通知が
notification-queue経由でBellに送信
一括配信フロー
Section titled “一括配信フロー”- Counter から
Fizzに配信リクエスト(Native RPC) - 配信条件に基づきターゲット顧客を算出
- Cron トリガーが SCHEDULED → QUEUED に移行(配信8時間前)
broadcast-queue経由で Fizz Queue Consumer が処理- チャットルームにメッセージを一括挿入(5,000件バッチ)
詳細はデータフローを参照してください。