コンテンツにスキップ

システム全体像(5分で読む)

この 1 枚で Greco の輪郭が分かることを目的にしています。詳細へは末尾の分岐から進んでください。

  • 一次情報は実コードです(supabase/migrations/** / apps/** / packages/**)。
  • 機械向けの不変条件は AGENTS.md(リポジトリルート)が正典です。本ページは人間向けの地図です。

1. 何をするシステムか

産業廃棄物マニフェスト管理の B2B SaaS です。処理業者(collector) の日次業務(配車 → 運搬 → 計量 → マニフェスト → 請求の手前まで)をデジタル化し、排出事業者(discharger) には自社の 回収状況を見せます。想定規模は約 100 社。

現在の本番稼働テナントは 共栄紙業(collector)西宮市(discharger) です。

2. 3 つのチャネル

誰が どこで 実体
事務(admin / normal) PC ブラウザ apps/web(Vite + React + Tailwind + shadcn/ui)
ドライバー スマホの PWA(ホーム画面に追加) 同じ apps/web/driver/** のルート群
排出事業者 PC ブラウザ 同じ apps/web/discharger/**

Expo(apps/mobile)は運用していません。 ドライバー向け機能は必ず PWA 側(apps/web)に 載せます。過去の設計文書に Expo 前提の記述が残っていることがあります。

3. データはどこを通るか

全画面で開く

業務データの経路(ブラウザ → プロキシ → DB)と API の service_role 経路。

押さえるべき 3 点:

  1. 業務データは基本ブラウザから直接 Supabase を読み書きします。 権限は API ではなく RLS (行レベルセキュリティ)が守ります。
  2. ブラウザは *.supabase.co を直接叩きません。 同一オリジンの /supabase/* プロキシを 通します(企業 DLP に遮断された実障害への対応・ADR 0018)。
  3. API(Workers)は service_role を使う= RLS をバイパスします。 そのため API 側の 全クエリは tenant_id を明示フィルタする決まりです。

4. 認可モデル(ここを間違えると事故になる)

  • テナント種別: collector / discharger / external_partner(委託先の閲覧専用テナント)
  • ロール: admin / normal / driver。加えて can_drive(事務職も運転を担当する)
  • 権威は JWT の app_metadatatenant_id / tenant_type / role / can_drive)。 DB の profiles.role表示用のコピーで、ずれることがあります。判定には使いません。
  • RLS には列マスクがありません。 ある表を「他テナントから読める」ようにすると、その表の 将来の全列を開示することになります。越境閲覧は列を明示列挙した RPC 経由に限ります (mig166)。
  • 越境の書込・特権列(role / soft-delete / 監査列)は DEFINER RPC か API 経由に限定し、 client の直接更新はトリガの列 guard で遮断します。

5. 日次業務の流れ(end-to-end)

全画面で開く

日次業務の流れ(配車 → 回収 → 計量 → JWNET 報告・集計)。

対応する操作手順書は operations-manual/(章番号がこの流れに沿っています)。

6. リリースと環境

環境 web API DB
dev CF Pages Preview(develop) Workers staging Supabase dev プロジェクト
本番 CF Pages Production(main) Workers production Supabase prod プロジェクト
  • dev と prod は完全に別プロジェクトで、相互配線は禁止です。
  • migration は CI が supabase db push します(手動 apply は禁止)。prod は厳格な順序なので、 番号の大きい migration を先にマージしてはいけません。
  • main へのマージは常に人間ゲートhuman-reviewed ラベル)。手順は runbooks/release.md

7. どこを読むか(分岐)

知りたいこと 行き先
機能が今どう動くか features/(機能別の現行仕様。1 機能 1 本)
なぜそう決めたか adr/(決定記録)
画面の操作手順 operations-manual/(事務・ドライバー向け)
人が実行する手順(リリース・デプロイ・鍵) runbooks/
機械が守る不変条件 AGENTS.md(リポジトリルート)
実装当時の検討過程 superpowers/specs superpowers/plans書き捨ての記録。現行仕様ではない)

層が矛盾したときの優先順位: 実コード > AGENTS.md > features/ > adr/ > superpowers/superpowers/ は当時の記録なので、現行と違っていても「間違い」ではありません。