已稳定运行 3+ 年 · 最后更新:2026年5月10日

督友 DuYou

一款为“强迫症”设计的轻社群自律监督应用。
采用 混合云架构,核心解决弱网 / 断网环境下的数据确定性问题。

产品内核与规划

“有人盯,才坚持;坚持着,就遇见”

隐私优先

习惯内容、目标与进度仅自己可见。在群组内仅同步“已打卡/未打卡”状态,既保护隐私,又利用社交压力形成强约束。

双社交场景

结合熟人社交的高粘性监督与陌生人社交的兴趣匹配,把“变好”和“交友”深度绑定。

演进路线图

阶段 01 / MVP
极简自用版
  • • 私密习惯管理
  • • 日历热力图统计
  • • 微信群机器人同步
阶段 02 / 社交化
兴趣社交化
  • • 熟人小群 / 兴趣群
  • • 补签卡 / 连胜保护
  • • 属性勋章系统
阶段 03 / 商业化
商业化探索
  • • 保证金挑战赛
  • • 个性化增值服务
  • • 高端行业 / 兴趣圈子
API 优先

RESTful 架构 / Spring Boot 驱动

自动降级

弱网环境下 0 感知切换本地存储

云端托管

微信云托管容器化部署 / MySQL 持久化

系统架构设计

“架构的价值不仅仅在于功能的实现,更在于系统在极端边界情况下的鲁棒性。”

01 用户界面层

原生微信小程序开发,包括首页打卡、习惯管理、多维统计及个人中心,目标是实现稳定顺滑的高频交互。

02 存储与中间件层

核心策略是 API 优先加本地缓存双模式,通过统一的 storage.js 屏蔽读写细节,保证离线时的数据连续性。

03 基础设施层

基于微信云托管部署,后端采用 Spring Boot 微服务,数据库使用云托管 MySQL,兼顾扩展性与稳定性。

应用界面(小程序)
API 客户端
本地存储
微信云托管容器
SPRING BOOT + MYSQL

核心逻辑:自动降级机制

当 API 请求失败(由于网络波动或环境异常)时,系统会自动切换至本地持久化层。

utils/storage.js
// 网络请求失败时自动降级
async function getHabits() {
  if (useApi) {
    try {
      const habits = await api.getHabits();
      wx.setStorageSync('habits', habits); // 成功后同步缓存
      return habits;
    } catch (error) {
      console.warn('API 访问失败,自动回退到离线模式');
      return wx.getStorageSync('habits') || []; // 离线降级
    }
  }
  return wx.getStorageSync('habits') || [];
}

“我们无法预知用户何时断网,
但我们可以预知此时代码该如何优雅处理。”