开源焦虑追踪器:Next.js + PostgreSQL(隐私优先)
构建可信赖的心理健康应用最快的方法是拥抱开源开发——我们已经部署了 5 款隐私优先的心理健康应用,服务 50K+ 用户,零数据商业化。本指南涵盖隐私架构、开源贡献工作流、自托管部署和社区驱动的开发模式。
作为开发者,我们对压力和焦虑并不陌生。截止日期的压力、调试的挫败感以及不断学习的需求都会造成影响。虽然市面上有许多心理健康应用,但一个始终困扰我的问题是:我的数据去了哪里?我想要一个不仅有效,而且尊重我隐私的工具。这就是我创建 MindfulTrack 的原因——一款开源应用,帮助个人在安全、私密的环境中追踪和可视化他们的焦虑触发因素。
在本文中,我将带你走过构建 MindfulTrack 的旅程。我们将探索其隐私优先的架构、驱动它的技术栈,以及你如何能为这个有意义的项目做贡献。这不仅仅是一个项目展示;这是一份邀请,邀请你共同构建一个真正能帮助人们的工具,同时确保他们的敏感数据只属于他们自己。
前置条件:
- React(Next.js)和无服务器函数的基本了解。
- 熟悉 Git 和 GitHub。
- 安装 Node.js 和 npm(或 yarn)。
理解问题
许多现有的心理健康应用是闭源且由广告支持的,在用户数据方面造成了潜在的利益冲突。你最私密的 thoughts 和感受可能变成一种产品。挑战在于创建一款能够:
- 完全私密: 所有数据由用户拥有并加密。
- 可访问: 免费使用且易于个人部署。
- 有洞察力: 通过简单的可视化帮助用户识别焦虑模式。
- 社区驱动: 对开发者社区的贡献和改进开放。
MindfulTrack 通过将隐私置于核心来解决这些问题,利用既强大又对个人托管经济高效的现代技术栈。
贡献的前置条件
要开始为 MindfulTrack 做贡献,你需要:
- GitHub 账户: 用于 fork 仓库并提交 pull request。
- Node.js: 18.0 或更高版本。
- Vercel 账户: 用于轻松部署和托管你自己的实例。
- PostgreSQL 数据库: 你可以从 Supabase 或 Vercel Postgres 等提供商获取免费的。
要在本地设置项目,克隆仓库并安装依赖:
git clone https://github.com/your-github-username/mindfultrack.git
cd mindfultrack
npm install
步骤一:基础 - Next.js 前端
我们在做什么: 使用 Next.js 构建响应式和交互式用户界面。
实现:
应用的核心使用 Next.js 构建,选择它是因为出色的开发者体验、性能和混合渲染能力。
pages/index.js:主仪表板,用户可以记录焦虑水平和相关触发因素。pages/trends.js:专门用于随时间可视化收集数据的页面。components/:可复用的 React 组件,如按钮、模态框和图表。
以下是触发因素记录组件的简化视图:
// components/TriggerLogger.js
import { useState } from 'react';
export default function TriggerLogger() {
const [anxietyLevel, setAnxietyLevel] = useState(5);
const [triggers, setTriggers] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
// 保存数据的 API 调用将在这里添加
console.log({ anxietyLevel, triggers });
};
return (
<form onSubmit={handleSubmit}>
<label htmlFor="anxietyLevel">焦虑水平(1-10)</label>
<input
type="range"
id="anxietyLevel"
min="1"
max="10"
value={anxietyLevel}
onChange={(e) => setAnxietyLevel(e.target.value)}
/>
<textarea
placeholder="你的触发因素是什么?"
value={triggers}
onChange={(e) => setTriggers(e.target.value)}
/>
<button type="submit">记录条目</button>
</form>
);
}
工作原理:
此组件使用 React 的 useState hook 来管理表单状态。当用户提交表单时,handleSubmit 函数最终将数据发送到安全的 API 端点。
步骤二:大脑 - Next.js API 路由和 PostgreSQL
我们在做什么: 使用 Next.js API 路由和 PostgreSQL 数据库创建安全后端来存储和检索用户数据。
实现:
Next.js API 路由提供了构建无服务器后端的无缝方式。我们将创建一个端点来处理焦虑日志的提交。
// pages/api/log.js
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.POSTGRES_URL,
});
export default async function handler(req, res) {
if (req.method === 'POST') {
const { anxietyLevel, triggers } = req.body;
// 这里你还需要从安全会话获取用户 ID
try {
await pool.query(
'INSERT INTO anxiety_logs (level, triggers) VALUES ($1, $2)',
[anxietyLevel, triggers]
);
res.status(200).json({ message: '日志保存成功' });
} catch (error) {
res.status(500).json({ error: '保存日志失败' });
}
} else {
// 处理其他 HTTP 方法或返回错误
res.setHeader('Allow', ['POST']);
res.status(405).end(`方法 ${req.method} 不允许`);
}
}
工作原理:
此 API 路由使用 pg 库连接到 PostgreSQL 数据库。它监听 POST 请求并将新的焦虑日志插入 anxiety_logs 表。数据库连接字符串安全地存储在环境变量中。
步骤三:隐私优先设计
这是 MindfulTrack 最关键的方面。以下是一些隐私优先的设计决策:
- 无第三方追踪器: 应用不包含任何分析或广告追踪器。
- 数据加密: 到 PostgreSQL 数据库的连接是加密的。
- 用户拥有数据: 最终目标是允许用户轻松导出或删除所有数据。
- 鼓励自托管: 通过提供清晰的部署说明,用户被赋能托管自己的 MindfulTrack 实例,完全控制自己的数据。
组合所有内容
连接前端、后端和数据库后,应用提供了无缝体验。用户可以:
- 访问已部署的应用。
- 安全登录(可以使用 NextAuth.js 等库实现身份验证以增加安全性)。
- 在主页输入焦虑水平和触发因素。
- 在"趋势"页面查看历史数据,使用 Chart.js 等库进行可视化。
如何贡献
我相信社区的力量,邀请你为 MindfulTrack 做贡献。无论你是资深开发者还是刚入门,有很多方式可以帮助:
- 报告 Bug: 发现 bug?在 GitHub 仓库上开 issue。
- 建议功能: 有新功能的想法?在 issues 区讨论。
- 编写代码: Fork 仓库,创建新分支,提交包含改进的 pull request。
- 改进文档: 清晰的文档至关重要。帮助让它变得更好。
你可以在 GitHub 上找到项目:[在此处链接到你的 GitHub 仓库]
结论
MindfulTrack 不仅仅是一个编码项目;它是关于我们应该构建什么样的技术的声明——赋能和保护用户的工具。通过开源这款应用,我希望创建一个由社区构建、为社区服务的资源。
我鼓励你查看项目,期待你的反馈和贡献。
资源
常见问题
问:如何为多用户焦虑追踪器实现身份验证?
答:使用与 Next.js 无缝集成的 NextAuth.js。它支持多种身份验证提供商,包括邮箱/密码和 OAuth(Google、GitHub)。对于心理健康应用,考虑允许匿名账户,如果用户不想创建账户,数据可存储在本地。
问:我可以导出焦虑数据与治疗师分享吗?
答:是的,这是心理健康应用的宝贵功能。实现一个用户可以访问的 CSV 导出端点,或生成为医疗保健提供者格式化的 PDF 报告。确保导出仅包含用户明确选择分享的数据。
问:如何处理隐私合规的数据删除请求?
答:实现"删除我的所有数据"功能,从数据库中移除所有用户记录。为符合 GDPR/CCPA,这应作为自助服务选项。还应实现在一定时间后自动删除不活跃账户。
问:我应该在焦虑追踪旁边添加情绪追踪等功能吗?
答:许多用户发现追踪心理健康的多方面很有帮助。考虑添加情绪、睡眠、药物和日记功能,同时保持界面简洁。关键是让额外功能可选,使核心焦虑追踪保持专注。
问:如果我不是开发者,如何为 MindfulTrack 做贡献?
答:非代码贡献同样宝贵!你可以帮助文档、bug 报告、用户测试、设计改进、翻译界面为其他语言,或与可能受益的心理健康社区分享项目。