リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: エンディングノート LastLetter
入力内容の「見直しリマインダー」機能の追加
## 1. 目的
エンディングノートは一度書いたら終わりではなく、定期的な見直しが重要です。しかし現状は更新を促す仕組みがなく、古い情報が放置されやすいという課題があります。本機能は「最後に保存してからN日経過した場合に、次回アクセス時に見直しを促すバナーを表示する」ことで、継続的な利用と情報の鮮度維持を促します。
## 2. 具体的な仕様
### 2-1. リマインダーバナーの表示条件
- LocalStorage に `lastSavedAt`(ISO 8601形式の日時文字列)を既存の自動保存処理で記録する(既存の最終更新日時機能と同じキーを利用・共有)
- ページ読み込み時に `lastSavedAt` と現在日時を比較し、**90日以上経過**していればリマインダーバナーを表示する
- バナーを「今は見ない」で閉じた場合は `reminderDismissedAt` を LocalStorage に保存し、**30日間は再表示しない**
- 初回アクセス(`lastSavedAt` が未設定)はバナーを表示しない
### 2-2. バナーのUI
- 表示位置:ページ最上部(ヘッダーの直下)に固定表示(スクロールしても追従しない、ページ内上部に静的挿入)
- 背景色:アンバー系(例:`#FFF3CD`)、左端にアイコン(📅 または 🔔)
- テキスト例:「最後の更新から **{経過日数}日** が経ちました。内容に変わりはありませんか?大切な情報を最新の状態に保ちましょう。」(経過日数は動的に計算して挿入)
- ボタンを2つ配置:
- 「内容を見直す」→バナーを閉じてページ最上部のセクション一覧へスクロール
- 「今は見ない(30日後に通知)」→バナーを閉じて `reminderDismissedAt` を保存
- スマホでは2ボタンを縦並び、PCでは横並びで表示
- バナーの右上に「×」ボタンも設置し、「今は見ない」と同じ動作をする
### 2-3. リマインダー設定パネル(設定欄への追加)
- 既存の設定・オプション系UIがある場合はその近くに、なければページ下部のFAQセクション付近に「リマインダー設定」欄を追加する
- ラジオボタンまたはセレクトボックスで通知タイミングを選択可能にする:
- 30日後・60日後・90日後(デフォルト)・通知しない
- 選択値は `reminderIntervalDays` として LocalStorage に保存する
- 「通知しない」を選択した場合はバナーを永久に表示しない
### 2-4. JSONエクスポート/インポートとの整合
- `reminderIntervalDays` および `reminderDismissedAt` はエクスポートJSONに含める(任意フィールドとして追加)
- インポート時にこれらのキーが存在すれば復元し、存在しなければデフォルト値(90日・未設定)を使用する
## 3. 既存機能との整合(壊さない点)
- `lastSavedAt` は既存の「最終更新日時の表示」機能で既に利用しているキーを流用するため、自動保存ロジックへの変更は不要(読み取るだけ)
- バナーはDOMの最上部に動的に挿入するのみで、既存のHTML構造・セクション・進捗バー・印刷レイアウトには一切影響しない
- 印刷用CSSに `@media print { .reminder-banner { display: none; } }` を追加し、印刷時にバナーが出力されないようにする
- LocalStorageのキー名は既存キーと衝突しないよう `ll_reminderDismissedAt`・`ll_reminderIntervalDays` のようにアプリ固有プレフィックスを付与する
エンディングノートは一度書いたら終わりではなく、定期的な見直しが重要です。しかし現状は更新を促す仕組みがなく、古い情報が放置されやすいという課題があります。本機能は「最後に保存してからN日経過した場合に、次回アクセス時に見直しを促すバナーを表示する」ことで、継続的な利用と情報の鮮度維持を促します。
## 2. 具体的な仕様
### 2-1. リマインダーバナーの表示条件
- LocalStorage に `lastSavedAt`(ISO 8601形式の日時文字列)を既存の自動保存処理で記録する(既存の最終更新日時機能と同じキーを利用・共有)
- ページ読み込み時に `lastSavedAt` と現在日時を比較し、**90日以上経過**していればリマインダーバナーを表示する
- バナーを「今は見ない」で閉じた場合は `reminderDismissedAt` を LocalStorage に保存し、**30日間は再表示しない**
- 初回アクセス(`lastSavedAt` が未設定)はバナーを表示しない
### 2-2. バナーのUI
- 表示位置:ページ最上部(ヘッダーの直下)に固定表示(スクロールしても追従しない、ページ内上部に静的挿入)
- 背景色:アンバー系(例:`#FFF3CD`)、左端にアイコン(📅 または 🔔)
- テキスト例:「最後の更新から **{経過日数}日** が経ちました。内容に変わりはありませんか?大切な情報を最新の状態に保ちましょう。」(経過日数は動的に計算して挿入)
- ボタンを2つ配置:
- 「内容を見直す」→バナーを閉じてページ最上部のセクション一覧へスクロール
- 「今は見ない(30日後に通知)」→バナーを閉じて `reminderDismissedAt` を保存
- スマホでは2ボタンを縦並び、PCでは横並びで表示
- バナーの右上に「×」ボタンも設置し、「今は見ない」と同じ動作をする
### 2-3. リマインダー設定パネル(設定欄への追加)
- 既存の設定・オプション系UIがある場合はその近くに、なければページ下部のFAQセクション付近に「リマインダー設定」欄を追加する
- ラジオボタンまたはセレクトボックスで通知タイミングを選択可能にする:
- 30日後・60日後・90日後(デフォルト)・通知しない
- 選択値は `reminderIntervalDays` として LocalStorage に保存する
- 「通知しない」を選択した場合はバナーを永久に表示しない
### 2-4. JSONエクスポート/インポートとの整合
- `reminderIntervalDays` および `reminderDismissedAt` はエクスポートJSONに含める(任意フィールドとして追加)
- インポート時にこれらのキーが存在すれば復元し、存在しなければデフォルト値(90日・未設定)を使用する
## 3. 既存機能との整合(壊さない点)
- `lastSavedAt` は既存の「最終更新日時の表示」機能で既に利用しているキーを流用するため、自動保存ロジックへの変更は不要(読み取るだけ)
- バナーはDOMの最上部に動的に挿入するのみで、既存のHTML構造・セクション・進捗バー・印刷レイアウトには一切影響しない
- 印刷用CSSに `@media print { .reminder-banner { display: none; } }` を追加し、印刷時にバナーが出力されないようにする
- LocalStorageのキー名は既存キーと衝突しないよう `ll_reminderDismissedAt`・`ll_reminderIntervalDays` のようにアプリ固有プレフィックスを付与する
💬 返信 (3)
🛠 開発を開始しました (機能追加 (lastletter))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「エンディングノート LastLetter」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=lastletter
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/lastletter/
ご利用ありがとうございます!
ご要望いただいた「エンディングノート LastLetter」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=lastletter
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/lastletter/
ご利用ありがとうございます!
Echo
Iris