recovery-social-features について
recovery-social-featuresは、匿名性、プライバシー、コミュニティの安全を重視した依存症回復アプリ向けソーシャル機能のスキルです。スポンサー関係、グループ、プライベートメッセージ、記録共有、モデレーションを扱います。
主な機能
- 01プライバシーを初期設定とし匿名IDに対応
- 02スポンサーとスピーシーの関係管理
- 03ミーティンググループと仲間のつながり
- 04危機時の案内を含むメッセージ機能
- 05回復記録の共有とモデレーション設定
活用シーン
- 01回復アプリで非公開のスポンサー関係を構築する
- 02ミーティングを中心に支援グループを作る
- 03危機リソースの案内を含むメッセージに対応する
- 04選んだ相手に日々のチェックインを共有する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill recovery-social-featuresインストール後、Claude Code で/recovery-social-featuresを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accountability.mdfriendships.mdgroups.mdmessaging.mdmoderation.mdsponsor-sponsee.md詳細
回復に重点を置いたソーシャル機能
依存症からの回復を支援するアプリ向けに、プライバシーを最優先したソーシャル機能を構築します。これらのパターンでは、匿名性、安全性、回復コミュニティ特有の人間関係を重視します。
使用する場面
✅ このスキルを使用する場面:
- スポンサー/被支援者の関係システム
- 回復に重点を置いたグループ機能(ミーティンググループ、アカウンタビリティサークル)
- 相互同意を必要とする、プライバシーを最優先した友人とのつながり
- 回復仲間同士の安全なメッセージング
- 匿名性を保護するプロフィールシステム
❌ 使用しない場面:
- 一般的なソーシャルメディアのパターン → 標準のソーシャル機能ドキュメントを使用してください
- デートや恋愛目的のつながり機能 → 回復の文脈には適していません
- 公開プロフィール → 回復アプリでは、デフォルトでプライバシーを保護してください
- コンテンツ推薦アルゴリズム → コンテンツの安全性には
recovery-community-moderatorを使用してください
基本原則
デフォルトでプライバシーを保護
回復アプリでは機微なデータを扱います。デフォルトでは最大限のプライバシーを保護し、ユーザーが自分で公開範囲を選べるようにしてください。
interface PrivacySettings {
profileVisibility: 'private' | 'friends' | 'community';
showSobrietyDate: boolean;
showProgram: boolean; // AA, NA, CMA, etc.
showLocation: 'none' | 'city' | 'region';
allowMessages: 'none' | 'friends' | 'sponsors' | 'all';
anonymousInGroups: boolean; // Use display name only
}
// Default to most private
const DEFAULT_PRIVACY: PrivacySettings = {
profileVisibility: 'friends',
showSobrietyDate: false,
showProgram: false,
showLocation: 'none',
allowMessages: 'friends',
anonymousInGroups: true,
};
匿名性のサポート
多くのユーザーは完全な匿名性を必要としています。実際の身元とは別の表示名を使えるようにしてください。
interface Profile {
id: string;
// Private - never exposed publicly
email: string;
realName?: string;
// Public-facing identity
displayName: string; // "JohnD" or "GratefulMember"
avatarType: 'initials' | 'icon' | 'custom';
avatarIcon?: string; // Predefined icon set
// Recovery-specific
sobrietyDate?: Date;
programs: ('aa' | 'na' | 'cma' | 'smart' | 'refuge' | 'other')[];
homeGroup?: string; // Primary meeting
}
機能の概要
スポンサー/被支援者の関係
スポンサーとの関係は上下関係を伴い、非公開です。当事者以外には知られないようにしてください。
主な概念:
- 招待ベースのつながり(スポンサーがコードを生成し、被支援者が承認)
- 有効期限付きの招待コード(24 時間で期限切れ)
- 設計上非公開で、一般には公開されません
- プログラムごとにスポンサーは 1 人、被支援者は無制限
提供されるフック:
useSponsorInvite()- 招待コードの生成と承認useSponsorRelationships()- スポンサーと被支援者の一覧表示
コンポーネント:
GenerateSponsorInvite- スポンサーが共有可能なコードを作成AcceptSponsorInvite- 被支援者がコードを入力してつながるSponsorDashboard- スポンサー/被支援者の関係をすべて表示
参照: 完全な実装については
references/sponsor-sponsee.mdを参照してください
ミーティングベースのグループ
ミーティングを中心に自然に形成されるグループです。デフォルトでは一時的ですが、恒久的なグループにもできます。
主な概念:
- 特定のミーティングに関連付けるか、単独のグループとして作成
- 一時的なグループは 24 時間後に自動削除
- 公開範囲の選択肢:公開、非公開、招待制
- メンバー数の上限で過密化を防止
グループ設定:
interface GroupSettings {
name: string;
meetingId?: string; // Link to meeting
visibility: 'public' | 'private' | 'invite';
ephemeral: boolean; // Auto-delete after 24h
maxMembers: number; // Member limit
}
| 公開範囲 | 閲覧できるユーザー | 参加できるユーザー |
|---|---|---|
public | 誰でも | 誰でも |
private | メンバーのみ | 招待されたユーザーのみ |
invite | メンバーのみ | 招待コードを持つユーザー |
提供されるフック:
useMeetingGroup()- グループの作成、参加、退出
コンポーネント:
QuickMeetingGroup- ミーティング中にワンタップでグループを作成
参照: 完全な実装については
references/groups.mdを参照してください
友人とのつながり
上下関係のない、ユーザー同士のつながりです。相互の同意が必要です。
主な概念:
- リクエスト/承認のフロー(自動フォローなし)
- Supabase のサブスクリプションによるリアルタイム更新
- ブロックに対応(片方向で、相手に気づかれない)
- ステータス:保留中、承認済み、ブロック済み
提供されるフック:
useFriendships()- リアルタイム同期を含む、友人関係の包括的な管理
コンポーネント:
FriendRequestButton- 状況に応じて「追加」「保留中」「友人」の状態を表示PendingFriendRequests- 承認/拒否の UI
参照: 完全な実装については
references/friendships.mdを参照してください
安全なメッセージ機能
危機検出と安全機能を備えた、回復を支援するメッセージ機能です。
主な概念:
- Supabase によるリアルタイムのメッセージ配信
- 危機を示すキーワードの検出(ブロックせず、リソースを表示)
- ソフト削除(メッセージは非表示になりますが、削除されません)
- プライバシー優先(既定では既読通知なし)
危機を示すキーワード(リソースのプロンプトを表示):
const CRISIS_KEYWORDS = [
// Suicidal ideation
'suicide', 'kill myself', 'want to die', 'end it all',
// Relapse indicators
'relapse', 'using again', 'fell off the wagon',
// Self-harm
'hurt myself', 'cutting', 'self-harm',
];
ベストプラクティス:
- ブロックしない - 危機に関するプロンプトではリソースを提案し、メッセージをブロックしません
- プライバシー優先 - 危機を示すキーワードを自動で記録または報告しないでください
- 思いやりのある口調 - 穏やかで、相手を責めない表現を使います
- 直接リソースを案内 - 外部サイトではなく、危機対応ページにリンクします
- オフライン対応 - オフラインでもアクセスできるよう、危機対応リソースをキャッシュします
提供されるフック:
useMessages()- Supabase のサブスクリプションによるリアルタイムのメッセージスレッド
コンポーネント:
MessageInput- 危機検出オーバーレイを備えた入力欄
参照: 完全な実装については
references/messaging.mdをご覧ください
アカウンタビリティ機能
信頼できるつながりのある人と回復の進捗を共有します。
チェックインの共有:
- 選択したスポンサーと毎日のチェックインを共有
- HALT の記録(空腹、怒り、孤独、疲労)
- 気分と感謝の記録
断酒状況の公開設定:
| レベル | 閲覧できる人 | 使用例 |
|---|---|---|
private | 本人のみ | 最大限のプライバシー |
sponsors | 本人とスポンサー | アカウンタビリティを重視 |
friends | 本人、スポンサー、友人 | 仲間同士のサポート |
community | アプリの全ユーザー | 節目の達成を公開して祝う |
HALT チェックインデータ:
interface DailyCheckIn {
date: string;
mood: 1 | 2 | 3 | 4 | 5; // 1=worst, 5=best
halt: {
hungry: boolean;
angry: boolean;
lonely: boolean;
tired: boolean;
};
gratitude?: string;
notes?: string;
}
コンポーネント:
ShareCheckIn- 共有するスポンサーを選択SobrietyVisibility- プライバシーレベルの選択
参照: 完全な実装については
references/accountability.mdをご覧ください
安全とモデレーション
安全なコミュニティのためのコンテンツモデレーションとユーザーのブロック機能です。
モデレーションカテゴリ:
| カテゴリ | 説明 | アクション |
|---|---|---|
crisis | 自殺念慮、自傷行為 | リソースを表示し、ブロックしない |
sourcing | 薬物の入手希望、売買 | ブロックし、確認のためにフラグを設定 |
harassment | 個人攻撃、脅迫 | ブロックし、確認のためにフラグを設定 |
spam | 宣伝コンテンツ | ブロック |
explicit | 性的または露骨なコンテンツ | ブロック |
ブロック時の動作:
- ブロックされたユーザーはメッセージを送信できません
- ブロックされたユーザーは、ブロックしたユーザーのプロフィールを閲覧できません
- ブロックされたユーザーは、グループ内でブロックしたユーザーを閲覧できません
- 既存のメッセージは非表示になります(削除されません)
- ブロックは一方向です(ブロックされたユーザーには通知されません)
RLS ポリシーパターン:
-- Hide content from blocked users
CREATE POLICY "Hide messages from blocked users" ON messages
FOR SELECT USING (
NOT EXISTS (
SELECT 1 FROM friendships
WHERE status = 'blocked'
AND (
(requester_id = auth.uid() AND addressee_id = sender_id)
OR (addressee_id = auth.uid() AND requester_id = sender_id)
)
)
);
提供されるフック:
useContentModeration()- モデレーション API に照らしてコンテンツを確認useBlocking()- ユーザーのブロック/ブロック解除、ブロック状態の確認
参照: 完全な実装については
references/moderation.mdをご覧ください
クイックリファレンス
| 機能 | 既定のプライバシー設定 | 閲覧できる人 |
|---|---|---|
| プロフィール | 友人のみ | 設定可能 |
| 断酒開始日 | 非表示 | 設定可能 |
| スポンサー関係 | 非公開 | 当事者の 2 人のみ |
| グループへの参加 | グループメンバー | グループごとに設定可能 |
| メッセージ | 参加者のみ | 公開されません |
| チェックイン | 非公開 | オプトインで共有 |
データベーススキーマ
完全な Supabase スキーマについては supabase-admin/references/social-schema.md をご覧ください。以下を含みます。
- RLS を備えた友人関係テーブル
- 招待コードを備えたスポンサー関係
- グループとグループメンバー
- 会話とメッセージ
- リアルタイムのサブスクリプションパターン
参考資料
詳細な実装は /references/ にあります。
| ファイル | 内容 |
|---|---|
sponsor-sponsee.md | useSponsorInvite フック、招待 UI コンポーネント、SponsorDashboard |
groups.md | useMeetingGroup フック、QuickMeetingGroup コンポーネント |
friendships.md | リアルタイム機能を備えた useFriendships フック、友人リクエスト UI |
messaging.md | useMessages フック、危機検出機能を備えた MessageInput |
accountability.md | ShareCheckIn、SobrietyVisibility コンポーネント |
moderation.md | useContentModeration、useBlocking フック、RLS ポリシー |