画面カタログ (47 ページ + Marketing Portal へ移管 2) Screen catalog (47 pages + 2 migrated to Marketing Portal)

管理者ポータルに存在する全ページの一覧です。URL、目的、主要UI、ユーザーが取れる操作、 そして呼び出される API 関数を記載しています。太字のエントリには詳細カードを下に添付しました。 SSoT は web/portal/admin/src/App.tsx のルートテーブルPARKING_ROUTES / USERS_OWNERS_ROUTES / CONTENT_REDIRECT_ROUTES / COMMERCE_ROUTES / GAMIFICATION_THEMES_ROUTES / SYSTEM_ROUTES)。

A complete inventory of every screen in the admin portal — with URL, purpose, key UI elements, user actions, and the API helpers each page calls. Selected screens have detailed cards underneath. The source of truth is the route table in web/portal/admin/src/App.tsx (split into PARKING_ROUTES / USERS_OWNERS_ROUTES / CONTENT_REDIRECT_ROUTES / COMMERCE_ROUTES / GAMIFICATION_THEMES_ROUTES / SYSTEM_ROUTES).

注記: 記事管理 (/articles) と広告管理 (/ads) は マーケティングポータルで管理する。 Admin Portal からこのパスへアクセスすると VITE_MARKETING_PORTAL_URLwindow.location.replace で自動リダイレクトされる(環境変数未設定時は alert 表示の上で / に戻る)。下表では参考として残してある。

Note: Article management (/articles) and ad management (/ads) live in the Marketing Portal. Hitting those paths in the admin portal does window.location.replace to VITE_MARKETING_PORTAL_URL (or alerts and bounces to / if the env var is missing). The entries are kept below for reference only.

画面マップ (サイドバー構成) Screen map (sidebar structure)

flowchart LR
  Login([/login]) --> Dash([/ Dashboard])
  PwReset([/password-reset]) --> Login
  PwResetC([/password-reset/confirm]) --> Login

  subgraph Parking["駐車場 / Parking"]
    PL[/parking/]
    PLD[/parking/:id/]
    PLI[/parking/import/]
    PLPG[/parking-lots/:lotId/pricing-groups/]
    PSpot[/parking-spots/]
    PSes[/sessions/]
    PErr[/error-reports/]
    PNF[/nearby-facilities/]
    PPD[/place-discounts/]
    PTag[/tags/]
    POp[/operators/]
  end

  subgraph UsersGrp["ユーザー / Users & Owners"]
    U[/users/]
    UD[/users/:id/]
    UA[/user-activity/]
    UV[/vehicles/]
    Ow[/owners/]
    OAp[/authority-requests/]
    OIn[/owner-registrations/]
    Cr[/credits/]
    Bo[/boosts/]
    Sp[/sponsors/]
  end

  subgraph Commerce["売上 / Commerce"]
    Sa[/sales/]
    SS[/store-sales/]
    Pl[/plans/]
    PC[/pricing-campaigns/]
    MD[/membership-dashboard/]
    Rv[/reviews/]
  end

  subgraph Game["ゲーミ・テーマ / Gamification & Themes"]
    Bd[/gamification/badges/]
    Ex[/gamification/exp/]
    Lv[/gamification/levels/]
    An[/gamification/anomalies/]
    Th[/customizations/themes/]
    TP[/customizations/parts/]
  end

  subgraph Content["コンテンツ / Content"]
    Ar[/articles → Marketing]
    Ad[/ads → Marketing]
    Nt[/notifications/]
  end

  subgraph SysGrp["システム / System"]
    AT[/admin-tasks/]
    Su[/support/]
    Ad2[/admins/]
    Rl[/roles/]
    AN[/admin-notifications/]
    AAc[/admin-activity/]
    As[/assets/]
    AI[/ai-providers/]
    I18[/i18n-messages/]
    St[/settings/]
  end

  Dash --> Parking
  Dash --> UsersGrp
  Dash --> Commerce
  Dash --> Game
  Dash --> Content
  Dash --> AT
  AT --> SysGrp
  PL --> PLD
  PL --> PLI
  PLD --> PLPG
  U --> UD

全ページ一覧表 Full page table

# パスPath ページ名Page 主な機能Primary purpose 主要APIKey APIs
1/login ログインLogin メール/パスワード認証Email + password auth supabase.auth.signInWithPassword()
2/password-reset, /password-reset/confirm パスワードリセットPassword reset リセットメール送信 (mode="request") と新パスワード確定 (mode="confirm")Request reset email (mode="request") and confirm new password (mode="confirm") supabase.auth.resetPasswordForEmail(), supabase.auth.updateUser()
3/ ダッシュボードDashboard KPI・トレンドグラフ・最新アクティビティKPIs, trend charts, latest activity fetchTablePage() × n, RPC aggregates
4/parking 駐車場一覧Parking list リスト/マップビュー、住所検索、新規作成List + map view, address search, create fetchParkingLots, fetchParkingLotEngagementStats, Mapbox
5/parking/import 駐車場インポートParking import CSV / 外部ソースから駐車場を一括取り込み。プレビュー → 重複チェック → コミット、進捗をジョブ単位で追跡。Bulk import lots from CSV / external sources. Preview → dedupe → commit with per-job progress tracking. importParkingLots, fetchParkingImportJobs
5b/parking-lots/:lotId/pricing-groups 料金グループ管理Pricing groups 2026-04-24 導入の parking_lot_pricing_groups CRUD。lot 内で料金体系を分け、各 spot を group に紐付ける。CRUD for the parking_lot_pricing_groups hierarchy introduced 2026-04-24. Splits pricing inside a lot; each spot binds to a group. BFF /v1/admin/parking-lots (pricing-groups handler)
5c/parking-spots 区画 (spot) 管理Parking spots 区画コード・寸法・EV 充電器・予約可否などを CRUD。parking_sessionsparking_spot_id NOT NULL のためマスタ整備に必須。CRUD for spot code, dimensions, EV charger, reservability, etc. Mandatory because parking_sessions.parking_spot_id is NOT NULL. BFF /v1/admin/parking-spots (adminParkingSpotsRoutes)
6/parking/:id 駐車場詳細Parking detail 基本情報・料金・画像・タグ・レビュー・報告Basics, pricing, images, tags, reviews, reports fetchParkingLot, updateParkingLot, addParkingLotImage, addParkingLotTag / removeParkingLotTag
7/sessions 駐車セッションParking sessions ユーザーの駐車履歴User parking history fetchParkingSessionsPage (BFF /v1/admin/parking-sessions)
8/error-reports 誤情報報告Error reports 報告の審査・担当割当・ステータス管理Triage, assign, status fetchErrorReportsPage, updateErrorReport, patchAdminTaskForRef
9/users ユーザー一覧User list 検索・フィルタ・詳細遷移Search, filter, drill into detail fetchAppUsersPage
10/users/:id ユーザー詳細User detail プロフィール、セッション、レビュー、バッジ、EXPProfile, sessions, reviews, badges, EXP fetchAppUser, fetchUserBadges, fetchUserLevelProgress
11/owners オーナー一覧Owners オーナーの CRUDOwner CRUD createOwner, updateOwner
12/authority-requests 既存オーナー権限申請Owner authority requests 既ログインオーナーが追加駐車場の管理権を申請する owner_applications を審査・承認。承認で parking_lot_owners を自動生成。Review and approve owner_applications from already-logged-in owners requesting management of additional lots. Approval wires up parking_lot_owners. BFF /v1/admin/authority-requests/owner-applications (adminOwnerApplicationsRoutes)
12b/owner-registrations オーナー LP 申込審査Owner LP inquiries /for-owners/ LP からの掲載申込 (owner_inquiries) を審査。書類アップロード URL 発行 → 承認 → Supabase Auth ユーザー作成 + 72h パスワード設定リンクメール送信を自動化。Review listing inquiries (owner_inquiries) submitted from /for-owners/. Issues an upload URL, then approval auto-creates a Supabase Auth user and emails a 72h password-setup link. BFF /v1/admin/owner-registrations (adminOwnerInquiriesRoutes)
13/credits クレジット管理Credits オーナー残高・チャージ・取引履歴Owner balance, charge, transactions owner_credits, credit_transactions
14/boosts ブースト(広告)Boosts 駐車場プロモーション・表示統計Lot promotions, impression stats boosts (CRUD)
15/sponsors エリアスポンサー管理Area sponsors スポンサー契約のある施設の一覧・作成・編集・削除。Mapbox位置検索、R2 サムネイルアップロード、カテゴリ別色分け。?open={id} でモーダル自動表示。「周辺施設」グループ配下。Sponsor-contracted facilities. Mapbox location search, R2 thumbnail upload, category color coding. ?open={id} auto-opens detail modal. Under "Surrounding facilities" group. area_places (is_sponsored=true のビュー)
16/nearby-facilities 周辺施設管理Surrounding facilities 駐車場周辺の店舗・スポットを統合管理 (スポンサー + Google Places 自動取込 + 手動)。詳細モーダル → 「編集」ボタンで読取↔編集を切替して誤操作を防止。Google Places 取込ボタンで Nearby Search を実行。show_on_map / show_as_facility をトグルで制御。Unified manager for facilities around a parking lot (sponsors + Google Places auto-import + manual). Detail modal → "Edit" button toggles read↔edit to prevent accidents. "Google Places Import" button triggers Nearby Search. show_on_map / show_as_facility via toggle switches. area_places, POST /v1/admin/places/import/lot/{id}
17/place-discounts 優待管理Discount management 施設×駐車場 単位の優待 (タイトル / 説明 / 利用条件 / 有効期間) を CRUD。詳細モーダル → 「編集」ボタンで安全に編集。期間内/期限切れ統計。モバイルへは nearby_places RPC の discount JSONB として配信。CRUD discounts per (place × lot): title, description, terms, valid period. Detail modal → "Edit" button for safe updates. Active/expired counters. Delivered to mobile as discount JSONB inside nearby_places RPC. place_discounts, nearby_places(lot_id)
18/tags タグ管理Tags タグマスターの CRUD・色設定Tag master CRUD + color createTag, updateTag, deleteTag
19/operators 運営会社管理Operators 駐車場運営会社(タイムズ・三井のリパーク等)のマスター CRUD。駐車場と N:1 で紐付き、統計タブで系列ごとの分析を行う。Master CRUD for parking operators (e.g. Times, Mitsui Repark). N:1 linked to parking lots; a stats tab analyzes performance by operator. fetchOperatorsPage, createOperator, updateOperator
/articles, /articles/new, /articles/:id/edit 記事管理(Marketing Portal 管轄)Articles (owned by Marketing Portal) 記事管理は マーケティングポータルで行う。admin 側はこのパスで VITE_MARKETING_PORTAL_URLwindow.location.replace するのみ。Article management lives in the Marketing Portal. The admin portal simply does window.location.replace to VITE_MARKETING_PORTAL_URL for this path. Marketing Portal へリダイレクトRedirects to Marketing Portal
20/notifications ユーザー通知User notifications プッシュ通知作成・スケジュール・送信Push notif create, schedule, send sendPushNotification (Edge)
/ads 広告管理(Marketing Portal 管轄)Ads (owned by Marketing Portal) 広告管理は マーケティングポータルで行う。admin 側はこのパスでリダイレクトするのみ。Ad management lives in the Marketing Portal; the admin portal just redirects. Marketing Portal へリダイレクトRedirects to Marketing Portal
21/sales 売上ダッシュボードSales 月別/取引別の売上分析Monthly + per-transaction revenue fetchRevenueAggregate, revenue_monthly_summary
22/store-sales ストア連携売上Store integrations Shopify 等の売上・レビュー同期External storefront sync (sales, reviews) fetchStoreSalesDaily, triggerStoreSync
23/plans サブスク計画Subscription plans プラン情報・購読者数Plan info + active subscribers fetchActiveSubscriberCountsByPlan
23b/pricing-campaigns 価格キャンペーンPricing campaigns Premium プランの期間限定特別単価 CRUD。CRUD for time-limited special pricing on the Premium plan. BFF /v1/admin/pricing-campaigns (adminCampaignsRoutes)
23c/membership-dashboard メンバーシップダッシュボードMembership dashboard サブスクリプション KPI(アクティブ・解約・MRR・コホート)の集計。read-only。Subscription KPIs (active / churn / MRR / cohorts). Read-only aggregations. BFF /v1/admin/membership-dashboard
24/reviews レビュー管理Review moderation 承認/却下・フラグApprove/reject, flag updateParkingReview, deleteParkingReview
25/gamification/badges バッジ管理Badges 定義・条件エディタ・進捗・バックフィルDefinitions, condition editor, progress, backfill createBadgeDefinition, backfillBadgeProgress
26/gamification/exp EXPルールEXP rules アクティビティ別EXP付与EXP granted per activity type activity_exp_rules
27/gamification/levels レベル定義Levels レベル閾値・再計算Thresholds + recalc upsertLevelDefinitions, recalculateAllUserLevels (RPC)
27b/gamification/anomalies 不正検知Gamification anomalies EXP / バッジの異常検知(短時間多発・GPS 不一致など)。read-only モニタリング。Detect EXP/badge anomalies (rapid bursts, GPS mismatches). Read-only monitoring. BFF /v1/admin/gamification/anomalies
28/customizations/themes テーマThemes 着せ替えテーマ・ギフト配布Customization themes, gifting replaceCustomizationThemeItems, giftThemeToUser
29/customizations/parts テーマパーツTheme parts ピン/アイコン/色/ローディングPin / icon / color / loading customization_theme_parts
30/user-activity ユーザーアクティビティUser activity Realtime ユーザー行動フィード(アプリ内イベント・駐車・レビュー等)Realtime user action feed (in-app events, parking, reviews, etc.) user_activity_logs + Realtime
31/vehicles 車両管理Vehicles ユーザー登録車両(車種・ナンバー・寸法)の一覧と管理。駐車場車両制限との突合に利用。List and manage user-registered vehicles (type, plate, dimensions). Used to cross-check against lot vehicle limits. fetchUserVehiclesPage (BFF /v1/admin/user-vehicles)
32/admin-tasks 管理者タスクAdmin tasks サポート/報告/申請/登録を統合Unified task inbox fetchAdminTasksList, updateAdminTask
33/support サポートSupport チケット一覧・返信・担当割当Tickets, replies, assignment fetchSupportTicketsPage, updateSupportTicket
34/admins 管理者アカウントAdmin accounts CRUD・初期PW発行・リセットCRUD, initial PW, reset createAdmin, resetAdminPassword
35/roles ロールと権限Roles 権限マトリックス一括設定Permission matrix setRolePermissions
36/admin-notifications 管理者通知Admin notifications 既読・削除・復元Read, delete, restore admin_notifications (Realtime)
37/admin-activity 管理者アクティビティログAdmin activity log 管理者の操作履歴(誰が何を何時にどこで実行したか)。監査用に admin_activity_logs を表示、フィルタ(管理者 / 対象テーブル / アクション種別 / 期間)と JSONB メタデータ展開に対応。Admin operation history (who did what, when, where). Renders admin_activity_logs for audit with filters (admin / target table / action type / date range) and JSONB metadata inspection. fetchAdminActivityLogsPage (BFF /v1/admin/activity-logs)
38/assets アセット管理Assets R2 ストレージ上の画像・メディアファイルの一覧とアップロード。キー検索、用途別フィルタ、参照先の紐付け表示。Inventory + upload for images and media files on R2. Key search, usage filter, reference-target cross-links. fetchAssetsPage, uploadAsset, R2 (Cloudflare Workers)
39/ai-providers AIプロバイダー設定AI provider settings LLMプロバイダーの有効/無効・モデル選択・優先順位・APIキー登録(Vault)+ 使用状況ダッシュボードLLM provider enable/disable, model selection, priority, API key registration (Vault) + usage dashboard fetchAIProviders, updateAIProvider, registerAIProviderKey (Cloudflare Workers), fetchAIUsageLogs
39b/i18n-messages i18n メッセージ管理i18n messages i18n_messages テーブルに保存される多言語文言の CRUD。アプリ内の動的テキストを DB 駆動で差し替える。CRUD over the i18n_messages table that powers DB-driven multilingual strings inside the apps. BFF /v1/admin/i18n-messages
40/settings システム設定System settings 機能フラグ、外部サービス設定、メンテナンス告知など全体設定Feature flags, external service settings, maintenance banners, and other global config system_settings

代表的な画面の詳細 Detailed anatomy of key screens

04. 駐車場詳細 (/parking/:id) 04. Parking detail (/parking/:id)

ポータルで最も情報量が多い画面です。基本情報、料金ルール、画像、タグ、オーナー、セッション、 レビュー、誤情報、エンゲージメント、アクティビティログの全てを 1 画面でタブ切替します。

The most information-dense screen in the portal. One page, many tabs — basics, pricing rules, images, tags, owners, sessions, reviews, error reports, engagement stats, and activity log.

タブ構成Tabs

  • 基本情報 — 名前、住所、座標、収容数、構造、営業時間、車両制限 (高さ/幅/長さ/重量/最低地上高)
  • Basics — name, address, coordinates, capacity, structure, hours, vehicle limits (height/width/length/weight/clearance)
  • 営業時間window_type 別 (営業 / 入庫可能 / 出庫可能 / 営業外出庫可否) に曜日・時間帯を inline 編集。PUT /v1/admin/parking-lots/{id}/hours で window_type 単位で全置換。日付オーバーライドも同画面で CRUD — 祝日 / イベント日 (例: 花火大会) に営業時間・料金を差し替え、POST は UPSERT (parking_lot_id + override_date が natural key)。hours は window_type 毎の map、pricing は JSON 配列。現在の営業ステータス(営業中 / 入庫可 / 出庫可)もバッジ表示。
  • Hours — Inline edit per window_type (business / entry / exit / after-hours exit). PUT /v1/admin/parking-lots/{id}/hours replaces one window_type wholesale. Date overrides CRUD on the same tab — swap hours/pricing for specific dates (holidays / events). POST is UPSERT keyed by (parking_lot_id, override_date). Hours is a per-window_type map, pricing is a JSON array. Current open/entry/exit derived status also surfaces as badges.
  • 料金ルール — 時間帯/曜日別ユニット料金 + キャップ料金。ルール計算機付き
  • Pricing — time-of-day / day-of-week unit charges plus cap rules, with a live calculator
  • タグ・属性 — 複数タグ + キー・値ペアの属性
  • Tags & attributes — multiple tags plus free-form key/value attributes
  • 画像 — アップロード、順序、メイン画像選択
  • Images — upload, reorder, pick main image
  • オーナー — 紐付くオーナーの一覧
  • Owners — owners associated with this lot
  • セッション — 駐車履歴と売上
  • Sessions — parking history & revenue
  • レビュー — 星評価とモデレーション
  • Reviews — star ratings with moderation
  • 誤情報報告 — 報告とその対応状況
  • Error reports — incoming reports and their state
  • エンゲージメント — 保存数・セッション数・検索数
  • Engagement — saves, sessions, search counts
  • アクティビティログ — 変更履歴
  • Activity log — change history
08. ユーザー詳細 (/users/:id) 08. User detail (/users/:id)

タブ構成でユーザーの 360° ビューを提供します: Profile / Vehicles / Saved / Search Presets / Sessions / Reviews / Tickets / Reports / Activity / Gamification。

A 360° view of a single user via tabs: Profile / Vehicles / Saved / Search Presets / Sessions / Reviews / Tickets / Reports / Activity / Gamification.

検索プリセット (Search Presets): ユーザーが登録した駐車場検索条件プリセットを追加・閲覧・編集・削除・デフォルト切替できるタブ。追加・編集は 16 項目の構造化フォーム(schemas/search-query.ts と 1:1 対応)。全操作は admin_activity_logs に記録されます(user.view_search_presets / user.create_search_preset / user.update_search_preset / user.delete_search_preset / user.set_default_search_preset)。

Search Presets: Add, view, edit, delete, and toggle the default for a user's saved search presets. Add/edit uses a 16-field structured form (1:1 with schemas/search-query.ts). All operations are recorded to admin_activity_logs.

22. バッジ管理 (/gamification/badges) 22. Badge management (/gamification/badges)

バッジ定義、条件エディタ (JSONベース)、バッジ進捗の可視化、全ユーザー/単体のバックフィル処理を提供します。 条件は user_activity_logs.metadata のドット記法パスで指定し、AND 結合で評価されます。

Provides definitions, a JSON-based condition editor, progress visualization, and single / all-badge backfill jobs. Conditions use dot-notation paths into user_activity_logs.metadata and are AND-combined at evaluation time.

28. 管理者タスク (/admin-tasks) 28. Admin tasks (/admin-tasks)

サポートチケット・誤情報報告・オーナー申請・駐車場新規登録 — 4つの異なるタスクソースを 1 つの統合インボックスにまとめる画面。「全て / 未割当 / 自分 / その他」のタブで絞り込み可能。

A unified inbox that merges four different task sources — support tickets, misinformation reports, owner applications, and new parking-lot registrations. Filter via tabs: All / Unassigned / Mine / Others.