cloudflare-app/
├── public/Cloudflare Pagesがそのまま配信する静的ファイル一式
│ ├── index.htmlアプリ本体。画面・CSS・JSを1ファイルに統合
│ ├── infra-map.html運用基盤マップページ(ハンバーガーメニュー「参考」から)
│ └── spec.html仕様書ページ(同上)
├── functions/Cloudflare Pages Functions(サーバー処理)
│ ├── api.js全APIの入口。/api へのPOSTを{fn, args}形式で一手に処理
│ └── lib/api.js が使う実装本体
│ ├── config.js定数(テーブル名・ステータス値・役職順・D1容量上限)
│ ├── db.jsD1クエリの薄いラッパー(INSERT/UPDATE文の組み立て等)
│ ├── dates.js日付・時刻ユーティリティ(Asia/Tokyo基準)
│ ├── auth.jsパスワードハッシュ・署名付きチームトークン(Web Crypto API)
│ ├── repositories.jsUsers/Shifts/SalesChannels/Sessions等のCRUD
│ ├── settingsRepository.jsアプリ内設定(Key/Value)の読み書き
│ ├── notifications.jsLINE/Chatwork向け稼働通知メッセージの組み立て・送信
│ ├── storageService.jsD1ストレージ使用量の監視(Cloudflare API経由)
│ └── lineQuotaService.jsLINE月間メッセージ送信数の監視(LINE Messaging API経由)
├── notify-worker/Pagesとは別の独立Worker(Cron Trigger専用)
│ ├── index.js15分おき通知バッチ + 毎朝6時のストレージ使用量チェック
│ └── wrangler.tomlnotify-worker専用のCloudflare設定(cronスケジュール等)
├── migrations/D1に流し込むSQL
│ ├── 0001_init.sql初期テーブル定義(8テーブル)
│ ├── 0002_add_user_active_flag.sqlUsersに有効(ソフトデリート)フラグを追加
│ ├── 0003_shift_change_notifications.sql変更履歴の既読管理テーブル(UserHistoryRead)を追加
│ ├── 0004_shift_change_notify_levels.sql通知先4人指定→階層ON/OFF方式(通知ダイレクト有効ほか)に変更
│ ├── 0005_shift_change_read_entries.sql既読管理を一括既読(1本値)→エントリ単位(UserHistoryReadEntries)に変更
│ ├── 0006_history_and_logs_indexes.sqlShiftHistory/NotificationLogsに性能改善用インデックスを追加
│ ├── 0007_shifts_unique_user_date.sqlShiftsに(UserID,日付)のUNIQUE制約を追加(重複行の再発防止)
│ └── 9999_migrate_data.sqlGAS版スプレッドシートからのデータ移行用(実行済み)
├── scripts/手動実行用のNode.jsスクリプト
│ └── migrate-from-sheets.cjsGoogleスプレッドシート→D1移行SQLの生成(実行済み)
├── wrangler.tomlPagesプロジェクト全体の設定(D1バインディング等)
├── package.json依存パッケージ定義(googleapis, wrangler等)
├── db-dump.html生データダンプの生成物(ローカル控え、非公開)
└── README.mdセットアップ手順・環境変数一覧