機能カテゴリ別まとめ
Features by category
画面を横断して、管理者ポータルが提供する機能を11のカテゴリに整理しました。
「何ができるか」を把握してから、必要なページを 画面カタログ で探す流れを想定しています。
A cross-cutting grouping of what the portal can actually do, across 11 categories.
Start here to understand capability, then jump to the screen catalog for the exact page.
1. 駐車場の管理Parking lot management
| 機能Capability |
画面Screen |
概要Details |
| リスト/マップ表示List / map view | /parking | Mapbox 地図とリストを併用。住所/座標で検索可能。Mapbox map plus list, searchable by address or coords. |
| 詳細編集Detail edit | /parking/:id | 基本情報・画像・ルール・タグ・属性・支払い方法を1画面で編集。All fields edited from a single screen with tabs. |
| 料金ルールPricing rules | /parking/:id | 時間帯/曜日別ユニット料金 + キャップ料金。計算機で検証可能。Unit + cap rules by time / day, verifiable via calculator. |
| 画像管理Image management | /parking/:id | Cloudflare R2 へ署名URLでアップロード、メイン設定、並び替え。Signed-URL upload to Cloudflare R2, main image, reorder. |
| エンゲージメントEngagement | /parking/:id | 保存数・セッション数・検索数を RPC で集計。Saves / sessions / searches rolled up via RPC. |
2. ユーザー管理User management
| ja/en | Screen | Details |
| 一覧検索Search / filter | /users | 名前・メール・ステータス・車種・プランで絞り込み。Filter by name, email, status, vehicle, plan. |
| 360°詳細360° detail | /users/:id | プロフィール / 保存駐車場 / セッション / レビュー / チケット / 報告 / ゲーミをタブ切替。Profile / saved / sessions / reviews / tickets / reports / gamification tabs. |
| バッジとEXP表示Badges & EXP | /users/:id | バッジ進捗、獲得一覧、現在レベル、次レベルまでの進捗バー。Badge progress, unlocks, current level, progress bar. |
3. オーナーとクレジットOwners & credits
| Capability | Screen | Details |
| オーナーCRUD + 認証管理Owner CRUD + auth | /owners | 個人/法人の区別、会社情報、ステータス。詳細モーダル「認証」タブからパスワード設定リンク履歴の確認と再送信が可能。Individual / business split, company info, status. Detail modal's "Auth" tab shows password-setup token history and lets you resend the link. |
| LP 申込審査LP inquiry review | /owner-registrations | LP /for-owners/ から送信された掲載申込を審査。書類アップロード URL 発行 → 承認 → Supabase Auth ユーザー作成 + パスワード設定リンク(72h)メール送信、までを自動化。Review listing inquiries submitted from /for-owners/. Issue document upload URL → approve → Supabase Auth user creation + 72h password-setup link email, all automated. |
| 既存オーナー申請審査Existing-owner application review | /authority-requests | 既ログインオーナーが追加駐車場のオーナー権を申請する owner_applications を審査。承認で parking_lot_owners を自動生成。Review owner_applications from already-logged-in owners requesting management of additional lots. Approval wires up parking_lot_owners. |
| パスワードリセットPassword reset | /owners | オーナー一覧の 鍵 アイコン or 詳細「認証」タブから、72 時間有効のパスワード設定リンクを再発行 + メール送信。既存の有効リンクは自動で無効化される。From the key icon on the owners list or the detail "Auth" tab, re-issue a 72h password-setup link and send by email. Any existing valid link is auto-invalidated. |
| 残高管理Credit balance | /credits | admin_charge / purchase / consumption / refund の4種トランザクション。4 transaction types: admin_charge / purchase / consumption / refund. |
4. 売上と収益Revenue & sales
| Capability | Screen | Details |
| 月別サマリーMonthly summary | /sales | revenue_monthly_summary ビューを使用。Backed by the revenue_monthly_summary view. |
| 取引明細Transactions | /sales | チャネル (subscription / parking / boost) とタイプでフィルタ。Filter by channel (subscription / parking / boost) and type. |
| 外部ストア連携External storefronts | /store-sales | Shopify 等の日次売上・指標・レビュー・同期履歴を確認。Daily sales, app metrics, reviews, and sync run history. |
5. サポートと誤情報対応Support & moderation
| Capability | Screen | Details |
| チケット管理Tickets | /support | 件名・メール・優先度・ステータスで絞込、担当割当、期限設定。Filter, assign, priority, due date. |
| 誤情報報告Error reports | /error-reports | 誤登録情報の報告→訂正フロー。Flag incorrect lot info and track remediation. |
| 統合インボックスUnified inbox | /admin-tasks | 5 種類のタスク (support / misinformation_report / owner_application / parking_new_registration / parking_fee_mismatch) を 1 画面に集約。admin.admin_tasks テーブルで統一管理。Merges 5 task kinds (support / misinformation_report / owner_application / parking_new_registration / parking_fee_mismatch) into one stream via the admin.admin_tasks table. |
6. 通知Notifications
| Capability | Screen | Details |
| ユーザー向けプッシュUser push | /notifications | タイプ(system/info/promo)、ターゲット(all/segment)、即時/予約配信。user_notifications + user_push_tokens。type=system/info/promo, target=all/segment, immediate or scheduled. Backed by user_notifications + user_push_tokens. |
| 送信実行Send execution | — | POST /v1/admin/user-notifications/{id}/send が token を 500 件/バッチで parky-fcm-dispatch Queue に投入。consumer が FCM v1 API へ並列 fetch(Supabase Edge Functions は不使用)。POST /v1/admin/user-notifications/{id}/send chunks tokens 500/batch into the parky-fcm-dispatch Queue; the consumer fans out to FCM v1 (no Supabase Edge Functions). |
| 管理者通知Admin-facing | /admin-notifications | admin.admin_notifications を Realtime 購読してヘッダーバッジに即時反映。ソフトデリート (deleted_at) + ゴミ箱画面で復元可能。Header badge subscribes to admin.admin_notifications via Realtime. Soft-deletable (deleted_at) with a trash view for restore. |
通知配信フロー (Mermaid)Notification dispatch flow (Mermaid)
flowchart LR
Op[Admin operator] --> UI[/notifications page]
UI --> UN[(user_notifications
status=pending)]
UI --> Send[POST /v1/admin/user-notifications/:id/send]
Send --> Tok[(user_push_tokens
500 / batch)]
Send --> Q[parky-fcm-dispatch Queue]
Q --> Cons[queue consumer]
Cons --> KV[(KV parky-cache
OAuth access_token)]
Cons --> FCM[FCM v1 API]
FCM --> Dev[End-user device]
Cons --> UN
Op -. Realtime .-> AN[(admin_notifications)]
AN -. WS .-> Hdr[Header badge]
7. 周辺施設Surrounding facilities
駐車場周辺の店舗・スポット (エリアスポンサー / Google Places 自動取込 / 手動登録) を統合管理。サイドバーの「周辺施設」グループに集約。
Unified management of facilities around parking lots (area sponsors, Google Places auto-import, manual entries). Grouped under "Surrounding facilities" in the sidebar.
| Capability | Screen | Details |
| 周辺施設 CRUDFacility CRUD | /nearby-facilities | 駐車場を選択 → 周辺の area_places 一覧。詳細モーダルから「編集」ボタンで読取↔編集を切替 (誤操作防止)。手動追加・ソフトデリートも同モーダル。Pick a parking lot → list of area_places in radius. Detail modal switches read↔edit via "Edit" button (prevents accidental changes). Manual add and soft delete in the same modal. |
| Google Places 取込Google Places import | /nearby-facilities | 「Google Places 取込」ボタン → 半径 1km の店舗を Nearby Search で取得し UPSERT。show_on_map / show_as_facility をカテゴリ別ヒューリスティックで初期化。"Google Places Import" button → Nearby Search within 1km, UPSERT into area_places. Category-based defaults set show_on_map / show_as_facility automatically. |
| 表示フラグVisibility flags | /nearby-facilities | 地図表示 / 周辺施設リスト表示を施設ごとに ON/OFF (BooleanToggleSwitch)。モバイル nearby_places / map_places_in_bbox RPC が即反映。Per-facility on/off for map markers and surrounding-list (BooleanToggleSwitch). Reflected immediately by mobile nearby_places / map_places_in_bbox RPCs. |
| エリアスポンサー CRUDSponsor CRUD | /sponsors | スポンサー契約のある施設を専用画面で管理。施設情報・位置(Mapbox Search Box)・課金・通知。Cloudflare R2 サムネイルアップロード。Sponsor-contracted facilities. Facility info, Mapbox Search Box location, billing, notifications. Cloudflare R2 thumbnail upload. |
| 優待管理Discount management | /place-discounts | 施設×駐車場 の優待 (タイトル / 説明 / 利用条件 / 有効期間) を CRUD。詳細モーダル → 編集ボタンで安全に編集。モバイルは nearby_places RPC の discount JSONB として配信。CRUD discounts per (place × lot): title, description, terms, valid period. Detail modal → Edit button for safe updates. Mobile receives them as discount JSONB inside the nearby_places RPC. |
| マップ表示Map markers | /parking (map) | 駐車場マップ上にカテゴリ別アイコン (Canvas SVG) でスポンサー表示。クリックで /sponsors?open={id} へ遷移。Sponsor markers with category-specific SVG icons on parking map. Click navigates to /sponsors?open={id}. |
| 近接通知(モバイル側 geofence)Proximity notifications (mobile geofence) | — | 近接検知は OS ネイティブ geofence + flutter_local_notifications でモバイル側が行う(サーバー側 cron は使わない)。発火ログは POST /v1/sponsors/{id}/notification で sponsor_notification_logs + area_places.total_notifications_sent に蓄積する。Proximity detection runs on-device via OS-native geofence + flutter_local_notifications (no server-side cron). Firings are recorded via POST /v1/sponsors/{id}/notification into sponsor_notification_logs + area_places.total_notifications_sent. |
8. ゲーミフィケーションGamification
| Capability | Screen | Details |
| バッジ定義Badge definitions | /gamification/badges | カテゴリ、条件JSON、アイコン(S3)、進捗サマリ。Category, condition JSON, icon (S3), progress summary. |
| バックフィルBackfill | /gamification/badges | 条件変更後の全ユーザー再集計。単体 / 全バッジ対応。Re-run progress for all users after a condition change. |
| EXPルールEXP rules | /gamification/exp | アクティビティ型ごとの付与量。How much EXP each activity type grants. |
| レベルLevels | /gamification/levels | レベル閾値の upsert と全ユーザー再計算 (RPC)。レベル別ユーザー数集計と特定レベル所属ユーザーの一覧表示にも対応。Upsert thresholds and recalculate all users via RPC. Includes per-level user count aggregation and lookup of users at a specific level. |
| ユーザー別バッジ/進捗Per-user badges & progress | /users/:id | ユーザー詳細「ゲーミフィケーション」タブで獲得済みバッジ・未獲得バッジ進捗・レベル進捗をまとめて表示。User detail "Gamification" tab shows earned badges, unearned badge progress, and level progress in one view. |
9. カスタマイズ (着せ替え)Customization (theming)
| Capability | Screen | Details |
| テーマ作成Create themes | /customizations/themes | 複数パーツを組み合わせて 1 テーマに。Compose several parts into one theme. |
| パーツ管理Part management | /customizations/parts | 駐車場ピン / 目的地ピン / 現在地 / 色 / ローディング。Parking pin, destination pin, current location, colors, loading effects. |
| ギフト配布Gift to user | /customizations/themes | gift_theme_to_user() RPC で user_themes に追加。Appends to user_themes via the gift_theme_to_user() RPC. |
10. コンテンツと広告Content & ads
/articles と /ads の運用 UI は Marketing Portal に移管済。Admin Portal にアクセスすると VITE_MARKETING_PORTAL_URL へ window.location.replace される。
The runtime UI for /articles and /ads now lives in the Marketing Portal. The admin portal does window.location.replace to VITE_MARKETING_PORTAL_URL for those paths.
| Capability | Screen | Details |
| 記事エディタArticle editor | /articles/:id/edit → Marketing | marked + DOMPurify ベースのエディタは Marketing Portal 側で稼働。Admin の /v1/admin/articles ルートは互換のため残置。The marked + DOMPurify editor now lives in the Marketing Portal. The /v1/admin/articles route is kept for back-compat. |
| 広告枠Ad slots | /ads → Marketing | バナー・リンク・統計の管理は Marketing Portal。Admin BFF 側 /v1/admin/ads も残置。Banner / link / stats now in Marketing. Admin BFF still exposes /v1/admin/ads. |
| タグTags | /tags | 駐車場タグマスタ。色・並び順を CRUD(記事タグは Marketing Portal)。Parking-lot tag master. Color and sort order CRUD (article tags live in the Marketing Portal). |
11. システム設定System
| Capability | Screen | Details |
| 管理者アカウントAdmin accounts | /admins | Auth ユーザー + admins テーブルの同期、初期パスワード発行。Sync of Auth user + admins table, initial password generation. |
| ロールと権限Roles & permissions | /roles | 30+ の権限キーをチェックボックスで一括設定。30+ permission keys managed via a matrix UI. |
12. 分析とリアルタイムAnalytics & realtime
| Capability | Screen | Details |
| KPIKPIs | / | ユーザー数・駐車場数・セッション数・売上・エラー数を期間フィルタ可能。User / lot / session / revenue / error counts with time-range filter. |
| アクティビティフィードActivity feed | /user-activity | Realtime 購読で最新ログが即座に流れる。New logs stream in live via Realtime subscriptions. |
13. AI検索AI search
| Capability | Screen | Details |
| AI検索(駐車場)AI search (parking) | /parking | 検索フィルター内の「AI検索」ボタンからモーダルを開き、自然言語 or 音声で条件入力。LLM がパースした結果で目的地・半径・料金・時刻・ソートを自動設定。Opens via "AI Search" button in filter bar. Natural language or voice input → LLM parses into destination, radius, price, time, sort conditions. |
| AIプロバイダー設定AI provider settings | /ai-providers | Claude / Gemini / OpenAI の有効/無効・モデル選択(ドロップダウン)・優先順位変更・APIキー登録(Vault暗号化)。編集ボタンで編集モードに切替。Enable/disable Claude / Gemini / OpenAI, model dropdown, priority reorder, API key registration (Vault encrypted). Edit mode toggle. |
| AI使用状況AI usage dashboard | /ai-providers | リクエスト数・成功率・推定コスト・平均レイテンシ・エラー率のKPIカード、プロバイダー別集計、リクエストログテーブル。KPI cards (requests, success rate, cost, latency, error rate), per-provider breakdown, request log table. |
設計のコツDesign tip:
機能はカテゴリをまたぐ場合が多い (ユーザー詳細 ↔ ゲーミフィケーション など)。テーブル単位での責務分離ではなく、ユーザーの「仕事の流れ」単位で画面を設計しているのが特徴です。
Capabilities often span categories (user detail ↔ gamification, for example). Screens are carved up by user workflow, not by table ownership.