关于 recovery-social-features
recovery-social-features 是一项为成瘾康复应用设计社交功能的技能,面向重视匿名、隐私与社区安全的开发者。内容涵盖担保关系、互助群组、私密消息、问责分享和审核模式。
主要功能
- 01默认保护隐私并支持匿名身份
- 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 小时后过期)
- 默认私密——不公开显示
- 每个项目只能有一位赞助者,但可有不限数量的受助者
提供的 Hook:
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 | 仅成员 | 持有邀请代码者 |
提供的 Hook:
useMeetingGroup()- 创建、加入和退出群组
组件:
QuickMeetingGroup- 在会议中一键创建群组
参见:
references/groups.md了解完整实现
好友关系
无需层级关系的点对点联系。必须经过双方同意。
关键概念:
- 请求/接受流程(不会自动关注)
- 通过 Supabase 订阅实时更新
- 支持屏蔽(单向且不显眼)
- 状态:待处理、已接受、已屏蔽
提供的 Hook:
useFriendships()- 全面的好友关系管理,并支持实时同步
组件:
FriendRequestButton- 根据情境显示添加/待处理/已成为好友状态PendingFriendRequests- 接受/拒绝界面
参见:
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',
];
最佳实践:
- 非阻塞 - 危机提示应推荐资源,不要阻止发送消息
- 隐私优先 - 不要自动记录或报告危机关键词
- 语气友善 - 使用温和、不带评判的措辞
- 提供直接资源 - 链接到危机页面,而非外部网站
- 支持离线使用 - 缓存危机资源,以便离线访问
提供的 Hook:
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)
)
)
);
提供的 Hook:
useContentModeration()- 通过审核 API 检查内容useBlocking()- 屏蔽/取消屏蔽用户,并检查屏蔽状态
参见:
references/moderation.md,了解完整实现
快速参考
| 功能 | 默认隐私设置 | 可查看者 |
|---|---|---|
| 个人资料 | 仅朋友 | 可配置 |
| 戒断日期 | 隐藏 | 可配置 |
| 戒瘾导师关系 | 私密 | 仅双方 |
| 群组成员身份 | 群组成员 | 可针对每个群组配置 |
| 消息 | 仅参与者 | 永不公开 |
| 签到 | 私密 | 选择性分享 |
数据库架构
参见 supabase-admin/references/social-schema.md,查看完整的 Supabase 架构,包括:
- 带有 RLS 的好友关系表
- 带邀请代码的戒瘾指导关系
- 群组和群组成员
- 对话和消息
- 实时订阅模式
参考资料
/references/ 中的详细实现:
| 文件 | 内容 |
|---|---|
sponsor-sponsee.md | useSponsorInvite Hook、邀请 UI 组件、SponsorDashboard |
groups.md | useMeetingGroup Hook、QuickMeetingGroup 组件 |
friendships.md | 带实时更新的 useFriendships Hook、好友请求 UI |
messaging.md | useMessages Hook、带危机检测的 MessageInput |
accountability.md | ShareCheckIn、SobrietyVisibility 组件 |
moderation.md | useContentModeration、useBlocking Hook、RLS 策略 |