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経由)
├── notify-worker/Pagesとは別の独立Worker(Cron Trigger専用)
│ ├── index.js15分おき通知バッチ + 毎朝6時のストレージ使用量チェック
│ └── wrangler.tomlnotify-worker専用のCloudflare設定(cronスケジュール等)
├── migrations/D1に流し込むSQL
│ ├── 0001_init.sql初期テーブル定義(8テーブル)
│ └── 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セットアップ手順・環境変数一覧