posimai-root/docs/EVENTS_MAPS_AUDIT_AND_ROADM...

200 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | △ **要確認**(無ければ `wine``glass-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 完了で「クライアント完成」とし、データは別計画とする。
この方針で進めれば、機能を積み増しせず、シンプルな完成形を維持できます。