画面カタログ (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_URL に window.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_sessions は parking_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_URL に window.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}/hoursreplaces one window_type wholesale. Date overrides CRUD on the same tab — swap hours/pricing for specific dates (holidays / events).POSTis 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.