コンテンツにスキップ

モバイル拡張ロードマップ (排出業者 / 処理業者 + タブレット対応)

apps/mobile (Expo / React Native / expo-router) を、ドライバー専用から 3 ロール対応へ 段階的に広げるための計画。Web (apps/web, 23 画面) との機能差を埋めていく。

アーキテクチャ方針

実装
認証/ロール src/contexts/AuthContexttenantId / tenantType / roleapp_metadata から公開
ルーティング src/lib/routing.ts#homeForRole() でロール別初期ルート。app/_layout.tsxAuthGate がセッション変化で遷移
ルートグループ app/(auth) / app/(discharger) / app/(collector) / app/(driver)
レスポンシブ src/lib/responsive.ts#useResponsive()(isTablet≥768 / numColumns / contentMaxWidth / hPadding)
データ取得 各画面で supabase を直接呼ぶ inline 方式(Web の lib/db 相当の共通化は未。将来 src/lib/db に切り出し候補)
RLS discharger=自社 jobs / collector=自社 assignment + 担当 job (migration 9)

完了済み (このイテレーション)

  • 基盤: AuthContext ロール対応 / useResponsive / homeForRole / ロール別 AuthGateindex
  • app/(discharger)/index.tsx — 案件一覧ホーム(実データ・ステータスバッジ・タブレット2カラム)
  • app/(collector)/index.tsx — 管理者ダッシュボード(受託待ち/今日の配車/進行中 KPI + 配車予定リスト・実データ・レスポンシブ)
  • ドライバー既存画面 + サインインのタブレット・レスポンシブ対応(中央寄せ最大幅 / タブレット2カラム)

残タスク (Web パリティに向けた段階計画)

Phase A — 排出業者コア

  • [ ] 案件詳細 (discharger)/jobs/[id](assignment 一覧・状態可視化)
  • [ ] 案件作成フォーム(waste type / 数量 / 回収先 / 希望日)
  • [ ] AI マッチング結果表示(match_collectors_for_job RPC)
  • [ ] マニフェスト一覧 / 詳細
  • [ ] マニフェスト作成 + カメラ OCR(expo-camera/expo-image-picker 導入済み。POST /manifests/ocr 連携 → モバイルが最も価値を出せる機能)
  • [ ] 処理業者ディレクトリ / 詳細・依頼送信

Phase B — 処理業者コア

  • [ ] 受託待ち(inbound)の受託/辞退アクション
  • [ ] スケジュール(週表示。タブレットはカレンダーグリッドが有効)
  • [ ] 自社プロファイル(許可証 / 対応エリア / 車両 / 料金 の 4 CRUD)
  • [ ] メンバー招待

Phase C — 共通 / ナビゲーション

  • [ ] ロール別ボトムタブナビ(現状は Stack のみ。各ロールに _layout.tsx + Tabs を追加)
  • [ ] 設定(アカウント / 通知 / セキュリティ)
  • [ ] 共通データ層 src/lib/db(Web の mappers/hooks 相当を RN 向けに整理。@tanstack/react-query 導入も検討)

タブレット最適化 (Phase 横断)

  • [ ] master-detail(一覧 + 詳細の左右分割)を案件一覧・スケジュールで採用
  • [ ] useResponsive の breakpoint を端末で実測調整(横向きタブレット / 分割表示)

留意点

  • EXPO_PUBLIC_* はビルド/OTA 公開時にバンドルへ埋め込まれる(接続先は preview=staging)。
  • 認証・遷移は AuthGate 一箇所に集約。新グループ追加時は _layout の Stack 登録 + homeForRole を更新。
  • 各画面は Web の対応ページ(apps/web/src/pages/**)とドメインロジック(ステータス値・ラベル)を揃える。ステータスの正準値は apps/web/src/lib/constants / packages/shared