mcpField
R
recovery-social-features

recovery-social-features

github.com/curiositech開発257132 回インストール2 日前に更新
リポジトリ

recovery-social-features について

recovery-social-featuresは、匿名性、プライバシー、コミュニティの安全を重視した依存症回復アプリ向けソーシャル機能のスキルです。スポンサー関係、グループ、プライベートメッセージ、記録共有、モデレーションを扱います。

主な機能

  1. 01プライバシーを初期設定とし匿名IDに対応
  2. 02スポンサーとスピーシーの関係管理
  3. 03ミーティンググループと仲間のつながり
  4. 04危機時の案内を含むメッセージ機能
  5. 05回復記録の共有とモデレーション設定

活用シーン

  1. 01回復アプリで非公開のスポンサー関係を構築する
  2. 02ミーティングを中心に支援グループを作る
  3. 03危機リソースの案内を含むメッセージに対応する
  4. 04選んだ相手に日々のチェックインを共有する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/curiositech/some_claude_skills --skill recovery-social-features

インストール後、Claude Code で/recovery-social-featuresを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
accountability.md
friendships.md
groups.md
messaging.md
moderation.md
sponsor-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',
];

ベストプラクティス:

  1. ブロックしない - 危機に関するプロンプトではリソースを提案し、メッセージをブロックしません
  2. プライバシー優先 - 危機を示すキーワードを自動で記録または報告しないでください
  3. 思いやりのある口調 - 穏やかで、相手を責めない表現を使います
  4. 直接リソースを案内 - 外部サイトではなく、危機対応ページにリンクします
  5. オフライン対応 - オフラインでもアクセスできるよう、危機対応リソースをキャッシュします

提供されるフック:

  • 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.mduseSponsorInvite フック、招待 UI コンポーネント、SponsorDashboard
groups.mduseMeetingGroup フック、QuickMeetingGroup コンポーネント
friendships.mdリアルタイム機能を備えた useFriendships フック、友人リクエスト UI
messaging.mduseMessages フック、危機検出機能を備えた MessageInput
accountability.mdShareCheckIn、SobrietyVisibility コンポーネント
moderation.mduseContentModeration、useBlocking フック、RLS ポリシー

コメント