97e963e2ee5d1c7f5908747b2939a3127e41f678
配合端上「界面六条」,服务端只补三样数据:
① Family::slogan(fam, pid) —— 三层优先级
用户:「如果这个用户自己有标语,他可以写一句自己的标语;如果他有自己的标语,
这个地方就是用户自己自定义的标语。如果他没有标语,就用我们给他的这个标语。」
优先级:persons.slogan → families.motto → Family::DEFAULT_SLOGAN。
DEFAULT_SLOGAN = '一家人用岁月写成的一本书'(用户明确指定,别再改)。
与网页端 templates/home.php 的 heroSlogan 同一套规则,两边永远一致。
/login 与 /me 都返回 slogan —— 每次启动都会打 /me,所以网页端改了 slogan
手机下次启动就跟上,不必为此另加接口。
② /home 新增 recent_days —— 首页「最近纪念日」
用户:「未来最近的三个纪念日,包括每个人的生日,以及手动填写的各个纪念日。」
= Anniversary::upcoming(fam, pid, 370) 取前 3。
· 为什么是 370 天而不是网页端概述卡那样的 30 天:只取 30 天时,
一个"刚过完生日"的家庭会**一个都取不到**,模块直接空着 ——
而用户要的是一个永远的倒计时。取满一年保证"接下来的三个"一定有。
· 数据源 all() = 派生生日 + 自建纪念日(正好覆盖用户说的两样,
不必再去 Birthday:: 那套单独取一遍,否则迟早口径不一)。
· 每条带 days(倒计天数)、source(custom / birthday_solar / birthday_lunar),
顺序由服务端排好(最近的在前),端上不再排一遍。
③ 真实头像
用户:「右上角的头像应该是真实的。」
· /home 新增 me_avatar(当前登录者的 avatar_url());
· /login 的 person 增加 avatar_url。
avatar_url() 负责按线上存储驱动决定走 /uploads 还是 OSS 直链 ——
端上不自己拼路径(拼错了就是永远破图)。
验证:_fb_home_api.py 60/0(新增 16 条:recent_days 真数据/天数/排序/≤3 条、
me_avatar、slogan 三层优先级实测 —— 给 persons#1 写一句个人 slogan,
必须优先返回他那句);php -l 通过;部署脚本增「第59批形态」9 条。
真机实测:抽屉显示「修身,齐家」= 杨永全自己的 slogan(个人优先生效)。
FamilyBook
家书,记录家庭的全部生活,一本用岁月写成的家谱。
把一个家的「人」「日子」「去过的地方、看过的电影」收进同一本书里。
它是什么
一个自托管的家庭生活系统。它不是又一个待办清单,而是这个家的长期档案 —— 十年之后还能翻出孩子第一次观影的票根、那年暑假走过的路线。
围绕三个圈展开:
- 人:家庭成员、亲友通讯录,以及他们之间的共享关系
- 时间:日历、日程、提醒,以及任务的期限
- 事件:观影、旅行、其他活动 —— 一切都落在同一条时间轴上
它在做什么
| 阶段 | 主题 | 内容 |
|---|---|---|
| 0 | 地基 | 名册、账号、登录、权限模型、安装向导 |
| 1 | 通信 | 通讯录、共享给某个成员、CardDAV 服务端 |
| 2 | 时间 | 日历本、重复日程、提醒、CalDAV 服务端 |
| 3 | 归一 | 观影与旅行迁入统一事件模型 |
| 4 | 任务 | 任务管理,期限自动映射成日历事件 |
| 5 | 回看 | 统计、年度家书、时间轴 |
当前进度:阶段 0 起步,仓库里只有图标与脚手架。
技术选型
- PHP 7.4+(无框架、无 Composer,上传到站点目录即可运行)
- MySQL 5.7+ / 8.0(
utf8mb4) - 前端为原生 HTML / CSS / JavaScript,无构建步骤
⚠️ 注意 CalDAV / CardDAV 是双向协议,和单纯的 .ics 文件导出不是一个量级的东西。
部署
- 把代码放到站点根目录;
- 复制
config.example.php为config.php,填写数据库与app_key; - 访问站点根,按引导页确认 PHP 版本、扩展、配置、数据库连接四项都通过。
config.php 不入库(已在 .gitignore 中忽略),其中包含数据库口令与加密密钥。
⚠️ app_key 一旦开始记录数据就不能再改(换掉即解不开已有数据),
并且它必须单独备份 —— 密钥丢失等同于数据永久丢失。
隐私
身份证号、手机号属于敏感个人信息,一律加密存储。 (就家庭自用而言,身份证号其实没有多少必须存的场景,启用前请三思。)
图标
见 assets/icons/。概念是「这本书就是家」:屋顶即一本摊开的书,
屋顶下纸做的墙上,三行横线是这个家写下的日子。
开源协议
Languages
PHP
81.6%
JavaScript
9.3%
CSS
9.1%