SALON BOARD同期サーバー
Cloudflare Workersを同一ドメインの同期APIとして利用し、店舗ごとのSALON BOARD取得 → Supabase保存まで自動化します
予約スケジュール
未接続
出勤者のみ30分単位で空枠計算
※ API URLやTokenの手入力は不要です。SALON BOARDのID・パスワードやSupabase Service Role KeyはWorkers Secretsで管理します。
本番実装チェックリスト
Cloudflareへ公開して実運用へ移るための残タスクを、実装単位で整理しています
Pagesこのダッシュボードを静的配信。Supabase URL / Anon Keyはビルド時環境変数から注入します。
Workers API/api/health と /api/sync を実装し、SALON BOARD取得とSupabase保存をサーバー側で行います。
Cron Triggers毎日の自動同期をWorkersから実行し、失敗時はsync_runsへ記録して再試行します。
必要なCloudflare環境変数 / Secrets
SUPABASE_URL
SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY (Secret)
SALON_BOARD_* 認証情報 (Secret)
Workers API
GET /api/health
POST /api/sync
フロント側では pages/config.jsにFC専用SupabaseのURLと公開キーを設定します。
Cloudflare Workers 実装ひな型
/api/health・/api/sync・Cron・Supabase保存までを1つのWorkerで実装する本番ベースです
FCオーナー対応版の設定は、同梱README.mdとsql/01_bootstrap.sqlを参照してください。
FCオーナー対応版の設定は、同梱README.mdとsql/01_bootstrap.sqlを参照してください。
ログインアダプター
SALON BOARDの認証リクエスト、Cookie、CSRFトークン、追加認証の有無を確認してWorker側へ実装します。
仕様確認待ち
売上取得アダプター
日別売上集計画面または内部通信から、純売上・客数・新規・再来・客単価・指名などを取得します。
仕様確認待ち
予約取得アダプター
予約管理スケジュールから出勤スタッフと予約時間帯を取得し、30分=1枠で空枠数・空枠率を算出します。
仕様確認待ち
SALON BOARD実装確認
本番同期に必要な3箇所の仕様を確認するため、ログイン後のブラウザ開発者ツールで下記を確認します
ログイン
Network → Doc / Fetch
送信先URL、POST項目名、Cookie、CSRFトークン、追加認証の有無を確認します。
日別売上集計
Network → Fetch/XHR
期間・店舗・スタッフ変更時に動くリクエストを確認し、レスポンス内の売上・客数・新規・再来項目を特定します。
予約スケジュール
Network → Fetch/XHR
日付変更時の通信から、スタッフ名・勤務時間・予約開始/終了・休憩/ブロック時間を特定します。
次に必要な確認データ
SALON BOARDの画面を開いた状態で、Chrome DevToolsのNetworkから下記3操作をHARで保存すると、Workers側の実装へそのまま落とし込めます
1. ログイン
ログイン操作のHAR
ID・パスワードそのものは共有不要です。送信先、項目名、CSRF、Cookie遷移を確認します。
2. 日別売上
日付変更時のHAR
日別売上集計を開き、日付を1日変更した際のXHR/Fetchを保存します。
3. 予約管理
日付変更時のHAR
予約管理で日付を1日変更し、スタッフ勤務・予約枠を返す通信を保存します。
取得仕様の登録
通信仕様が確認できたらここへ登録し、Workers実装へそのまま反映できるようにします
URLだけでなく、必要に応じてHTTPメソッド・フォーム項目名・CSRF・レスポンス形式もWorkers側へ実装します。認証情報そのものはここには保存しません。
Supabase設定
まずSupabaseを先に実装します。Auth・Database・RLSを完成させてからCloudflare連携へ進みます
実装順:Supabase → Cloudflare → SALON BOARD
① Supabaseプロジェクト作成 → ② 下記SQLを実行 → ③ FCオーナー・本部ログインユーザー作成 → ④ 接続確認、の順で進めます。Project URL・Anon Keyはログイン画面では入力しません。
※ Project URL・Anon Key・Service Role KeyはCloudflare側の環境変数/Secretsで管理し、この画面では入力しません。
1. FCオーナー・本部ログインSupabase Authとfc_profilesに本部・オーナーを登録します。未ログイン時は表示しません。
2. DB初期化stores / daily_metrics / daily_overrides / monthly_goals / staff_daily / sync_runs を作成して保存先を確定します。
3. RLS保護本部はFC3店舗、各オーナーは自分の担当店舗だけを参照・入力できます。
Supabase初期SQL
FC専用の新規プロジェクトで、同梱sql/01_bootstrap.sqlを実行してください
FCオーナー対応版の設定は、同梱README.mdとsql/01_bootstrap.sqlを参照してください。
FCオーナー・本部用運用のため、fc_profilesと担当店舗を使って閲覧・編集範囲を制限します。SALON BOARDのID・パスワードはこのDBには平文保存せず、サーバー側Secretで管理します。
同期履歴
店舗ごとの最終取得結果を確認し、失敗時は再取得できる想定です