posimai-root/docs/EVENTS_MAPS_AUDIT_AND_ROADM...

12 KiB
Raw Blame History

Posimai Events / Maps 監査と完成ロードマップ

目的: 単体ミニマルアプリとしての現状整理・改善点の優先度付け・Maps/Events どちらを先に「完全体」にするかの方針。
前提: 機能を積み増ししすぎず、シンプルスタイリッシュを維持。既存アプリFeed / Brain / Readerとの整合性・Lucide アイコン統一を重視する。


1. デザインシステム共通チェック(全アプリ)

項目 Feed Brain Reader Maps Events
ヘッダー高さ 52px ○ (--topbar-h) - 要確認
Inter フォント - 要確認
:root / [data-theme="light"] -
--bg, --surface, --text, --accent, --radius: 8px -
Lucide のみ(絵文字・他アイコンなし) - 要修正
PWA manifest + theme-color -
テーマ切替sun/moon アイコン) -

結論: Events の「絞り込み」シート内の一部アイコン名が Lucide にない可能性あり(後述)。それ以外はおおむね統一されている。


2. Posimai Events — 現状と改善点

2.1 実装済み(維持する)

項目 内容
レイアウト 52px ヘッダー、タブ(今日/今週/すべて)、リスト+日付バッジ、ボトムシート詳細
データ モック JSON localStorage キャッシュオフライン表示、Synology API URL 対応
パーソナライズ 興味タグ・対象者タグ・オプション(無料/申込不要/屋外・屋内)の絞り込み、設定は localStorage で永続化
連携 Brain 保存URLtitle で開く、詳細リンク外部、場所→Google Maps 検索
PWA manifest.json, sw.js, インストール可能、オフラインでキャッシュ表示
テーマ ダーク/ライト切替、Events 専用アクセント #6EE7B7
Lucide ヘッダー・カード・シート・トーストで data-lucide を一貫使用

2.2 改善点(優先度順)

優先度:高(見た目・一貫性・信頼性)

# 内容 理由 工数目安
E1 Lucide アイコン名の検証・修正 絞り込みタグで beer, glass-water, circle-dollar-sign, door-open, hand-heart 等を使用。Lucide にない/名前違いがあると表示欠けやコンソールエラーの原因になる。 0.5h
E2 API フォールバック順の明確化 現状「Synology URL 優先 → 失敗時 Vercel /api/events」だが、Synology 未構築時は初回から失敗する。Vercel をデフォルトにし、設定で Synology URL を差し替える方が運用しやすい。 0.5h
E3 空状態・エラー時の文言統一 「この条件のイベントは見つかりません」等、Feed/Brain に近いトーンで簡潔に。 0.25h

優先度UX の磨き)

# 内容 理由 工数目安
E4 絞り込みシートの「適用」でシートを閉じる 現状どおりで問題なし。閉じたあとトーストで「絞り込みを適用しました」と出しているのでそのまま維持でよい。 -
E5 カードのタップ領域 カード全体タップで詳細、右端アイコンは別アクション。event.stopPropagation が効いているか確認。 0.25h
E6 キーボード・スクリーンリーダー ボタンに aria-label、シートに aria-modal="true" を追加し、既存アプリと水準を揃える。 0.5h

優先度:低(将来)

# 内容 理由
E7 API URL の設定 UI 開発者向け。設定パネルや localStorage のキー説明を README に記載すれば十分。UI は必須ではない。
E8 Maps 連携 「イベント場所→Maps で周辺飲食店」は、Maps 側で URL パラメータが固まってから実装。現状は Google Maps リンクで代替。

2.3 意図的にスコープ外(ミニマル維持)

  • イベントの編集・削除(管理画面は別)
  • 複数地域・複数カレンダー
  • プッシュ通知
  • ログイン・ユーザー別データ(単体アプリのまま)

3. Posimai Maps — 現状と改善点

3.1 実装済みOVERVIEW 等より)

項目 内容
コア Google Places API (New) searchNearby、最大20件、半径・タイプ・ランキング対応、moveend 再検索、0件時 UX
UI 地図右下に現在地・ズーム、ヘッダーに人気順/近い順、カテゴリタブ、店舗詳細パネル、テーマ切替
連携 Brain 保存、Google マップ連携、Carto タイル(ダーク/ライト)
PWA manifest, sw.js
Lucide locate, sun, utensils, x, map-pin, phone, sticky-note, clock 等を利用

3.2 改善点(優先度順)

優先度:高(負債解消・一貫性)

# 内容 理由 工数目安
M1 ラジアル UI の扱いを確定 CRITICAL_ACTION_PLAN 通り「削除」か「保留(触らない)」を決定。削除なら関連 JS/CSS を削り、スライダーのみで完成形に。 0.5h
M2 位置情報オプション enableHighAccuracy: true, timeout: 10000, maximumAge の調整OVERVIEW 1.3 の推奨)。 0.25h
M3 スライダー見た目 トラック 1.5px・ポインタ 16px リング型(未適用なら実施)。 0.25h
M4 Lucide の徹底 地図コントロール・リスト・詳細パネルで Lucide 以外のアイコンやインライン SVG が残っていれば Lucide に統一。 0.5h

優先度:中

# 内容 理由
M5 カテゴリと API の連携 タブ選択で includedTypes を変え、カテゴリごとに最大20件を取得OVERVIEW 推奨)。
M6 取得幅の設定 歯車で範囲mを設定・保存する場合は、既存「1.5km 固定」を維持しつつオプションとして追加。

優先度:低

# 内容
M7 20件超の表示
M8 営業時間なしの表記

3.3 意図的にスコープ外Phase 1 完全体の範囲外)

  • ラジアルの「改良」(削除 or 保留のみ)
  • Phase 2 の SNS/Web 営業時間補完
  • レビュー・写真の表示API 次第)

4. Lucide アイコン統一チェック

Events で使用しているアイコン名(絞り込みタグ含む)

用途 指定名 Lucide での存在
日本酒 wine ○ あり
クラフトビール beer 要確認(無ければ wineglass-water で代替)
ワイン・お酒 glass-water ○ あり
ボランティア hand-heart ○ あり
無料 circle-dollar-sign ○ あり
申込不要 door-open ○ あり

対応: ビルドまたはブラウザで実際に表示を確認し、存在しない名前だけ lucide.dev で正式名に差し替える。

全アプリ共通ルール

  • アイコンは Lucide のみ。絵文字・Font Awesome・インライン SVG は使わない。
  • サイズは width/height または CSS で統一(例: ヘッダー 18px、リスト 14px
  • 色は color: var(--text2) / var(--accent) 等、テーマ変数に合わせる。

5. Maps と Events のどちらを先に「完全体」にするか

判定の観点

観点 Maps Events
バックエンド 既存Google Places API + Vercel serverlessで完結。Synology 不要。 本番データは Synologyn8n + PostgreSQLが前提。未構築ならモックのまま。
負債 ラジアルの削除/保留の決定が未了。 なし(新規プロトタイプ)。
スコープ 検索・表示・連携まで一通り実装済み。あとは整理と仕様確定。 UI/UX と絞り込みはある。実データは n8n+DB 構築が必要。
ユーザー価値 「今空いている飲食店」は単体で価値が明確。 「自分用イベント一覧」はデータが入って初めて価値が立つ。
工数 ラジアル処理位置情報スライダーLucide で 1〜2h 程度。 Lucide 修正API デフォルト+軽微 UX で 1h 以内。Synology 側は別計画。

推奨方針:Maps を先に「完全体」にする

  1. 完了の定義がはっきりしている
    「ラジアル削除 or 保留」「位置情報・スライダー・Lucide 統一」をやれば、Phase 1 として完成と宣言しやすい。

  2. バックエンドに依存しない
    Maps は既存 API のまま完成形にできる。Events の完全体は Synology の n8n + DB が前提で、工数と前提が大きい。

  3. 1アプリずつ仕上げる
    まず Maps を「完成」にし、そのあと Events は「UI/UX とクライアント側は完成 → データは Synology 構築で実化」と段階を分けられる。

  4. Events は「見た目と動きは完成、データはモック or 任意 Synology」
    Lucide 修正・API デフォルト・アクセシビリティだけ整え、単体ミニマルアプリとして完成とする。実データは別タスクn8n + Synology APIで対応。

ロードマップ(案)

Phase A: Maps 完全体1〜2h
  M1 ラジアル削除 or 保留確定 → 実装
  M2 位置情報オプション
  M3 スライダー見た目(未適用なら)
  M4 Lucide 徹底

Phase B: Events クライアント完成1h 以内)
  E1 Lucide アイコン名検証・修正
  E2 API フォールバック順Vercel デフォルト)
  E3 空状態・エラー文言
  E6 アクセシビリティaria

Phase C: ドキュメント・計画の更新
  CRITICAL_ACTION_PLAN に「Maps 完全体済み」「Events クライアント完成」を反映
  Events の実データn8n + Synologyは別ロードマップで計画

6. まとめ

アプリ 現状 完全体の定義 優先度
Maps 機能はほぼ揃っている。ラジアル・位置情報・スライダー・Lucide の整理が残り。 ラジアル処理済み・位置情報推奨値・スライダー見た目・Lucide 統一。Phase 1 として宣言。 先に完了
Events UI/UX・絞り込み・PWA・Brain 連携まで実装。モック or Synology で表示。 クライアント: Lucide 修正・API デフォルト・文言・aria。実データは n8n+Synology で別対応。 Maps の次
  • シンプル&スタイリッシュ: 新機能の追加は行わず、上記の「高」と「中」の改善に絞る。
  • 整合性: ヘッダー 52px、Inter、CSS 変数、Lucide のみ、PWA、テーマ切替は全アプリで揃える。
  • 完成の切り分け: Maps このドキュメントの Phase A 完了で「完全体」。Events Phase B 完了で「クライアント完成」とし、データは別計画とする。

この方針で進めれば、機能を積み増しせず、シンプルな完成形を維持できます。