ARTICLE · 1196641
WorkBuddy给仨娃做了个打卡 App,孩子喜欢得不得了
parenting & code
我给三个孩子做了个打卡 App,它成了我们家的规矩
呦呦 9 岁,悦悦和博博 6 岁。一个记录下来的故事 —— 关于规则、边界,和两个大人小孩都没输的争论。

这就是那个 App。上面三个头像,是它的全部用户。
今天早上我刚醒,老大就跑过来了。
她站在床边,眼圈有点红:「爸爸,我穿衣服的时候还没有七点,但是我打卡的时候已经过了一分钟。」
系统规定:「按时起床」要工作日 7:00 前完成,超时打卡,星星减半。她穿好衣服是 6 点 59 分,摸到手机点下去,7 点 01 分。
两颗星变成一颗。
那一分钟不怪她,怪我——我设计的是「记录打卡的那一刻」,而不是「记录她真正做完的那一刻」。她明明做到了,是系统没接住。
但心疼之后,我更高兴。
以前这个点儿,是我追着她问「起了没、衣服穿好没」。今天是她自己爬起来、自己穿好、自己跑去打卡,然后为了一颗星来找我「申诉」。
她不是在争那一颗星,她是在争「我明明做到了」。
那一刻我觉得,这两天半夜的加班没白费。
一、起因:我说话不算数
我们家三个孩子。呦呦 9 岁,悦悦和博博是双胞胎,6 岁。
每天晚上八点半,家里准时上演同一出戏。我抬头问一句:「今天书读了吗?」
三个孩子三种反应:呦呦眼珠一转,「读了吧」;悦悦点头;博博已经开始往房间跑。
我说过要弄个打卡表。打印了 A4 纸贴墙上,第一周很热闹,第二周开始有人忘记贴星星,第三周那张纸变成了墙上的背景板。
问题出在三个地方:
一是我自己记不住。谁哪天完成了什么,全在我脑子里,三天就乱。
二是标准不统一。姐姐读 30 分钟书和妹妹读 30 分钟书,难度差远了。用同一张表,姐姐觉得亏,妹妹觉得够不着。
三是我始终是那个「监工」。我得追着问、追着记、追着发奖励。孩子完成任务,成就感是给我的,不是给他们自己的。
我想要的其实不是一张打卡表,是一个让他们自己管自己的系统——我只需要偶尔看一眼。
二、先想清楚三件事,再动手
我没有一上来就写代码。动手之前,我把三件事想明白了,这三件事决定了后面所有的设计。
第一件:这是给谁用的?
不是给我用的,是给孩子用的。那我这个「家长视角」就不能是主场。
我原本想做那种很全的管理后台——今日概览、历史趋势、数据导出、批量操作。后来砍掉了大半。一个 6 岁的孩子点开应用,看见的应该是「今天还有 3 项,加油」,不是我那种表格。
所以最后的结构是:孩子打开就是打卡页,家长页面藏在最后一位。

孩子打开的第一屏

家长端的「今日抽查」
底部五个小图标,最右边那个才是家长的。数据看板那一套,全砍了。
第二件:奖励该怎么给?
我一开始想得很简单:完成一项给一颗星,攒够了换礼物。
写到一半我发现有个坑——如果奖励来自「完成」,那孩子会挑最容易的完成。
后来改成两条腿走路:
固定任务
每天必须做的(刷牙、阅读、按时睡觉),构成基本盘。
自主加分
拿到奖状、被老师表扬、主动做了好事,可以自己提交,但需要家长确认才到账。
第二条是我最满意的设计。它把「争取奖励」变成了一次主动表达——孩子得自己写一句说明,然后等我点头。这个过程本身就是一种正向强化,比星星本身重要。

记录页上半部分是系统统计(按时起床 100%、阅读还差 50%),下半部分是「自己加个分」:选类型、写一句说明,提交后等爸妈确认。
第三件:兄弟姐妹之间要不要横向比?
不要。这是我删掉的第一个功能。
我原本做了一张三个人排名的榜单。试了两天就发现苗头不对:博博发现自己总是最后一名,第三天就不想打卡了。
所以进步页只做纵向对比——本周的自己 vs 上周的自己。页面上写了一句:「只跟自己的上周比,不比兄弟姐妹。」
而在「家庭共同目标」那一块,我把三个人又合起来了——本周三个人的星星加在一起算,攒满 175 颗,全家一起去公园。
竞争改成合作,家庭内部就不打架了。
三、几个具体的设计决定
1. 超时打卡,星星减半,但不归零
按时起床(工作日 7:00 前)、按时睡觉(工作日 22:00 前),这两项是有时限的。
如果孩子 22:20 才睡,该不该给星星?
完全不给,会打击积极性——孩子会想「反正没用了,那就彻底不睡」;照给不误,规则就形同虚设。
最后定的规则是:超时任务星星减半,但最低保底 1 颗。
页面上会明确告诉他:「『按时上床睡觉』要求在 22:00 前完成,你在 22:20 打卡,这次记 1 颗星(平时 2 颗)。明天早点哦,星星就满了。」
有惩罚,有理由,有出口。周末还单独放宽:睡觉改成 23:30,起床不限。
但今早那一分钟,暴露了这套规则真正的漏洞。
她 6:59 穿好衣服,7:01 才点下去。系统记的是「打卡时刻」,不是「完成时刻」。规则越严格,这种误差越刺眼——孩子会觉得不是自己没做到,是系统不讲理。
所以我打算补一条宽限期:超出时限 5 分钟以内,仍然算满星。真正的拖延是半小时、一小时,不是一分钟。规则该拦的是「磨蹭」,不是「手慢」。
这大概就是做自家工具的好处——规则不合理,改一行代码就行,不用开会。
2. 时限不是摆设,得有「还剩多久」的紧迫感
光写「7:00 前」没什么感觉。所以我加了实时倒计时:
距时限 1 小时以上 → 灰色「还剩 43 分钟」
1 小时以内 → 橙色「还剩 25 分钟」
已经过了 → 红色「已过点 20 分钟」
孩子看一眼颜色就知道现在是什么状态。这个细节看着小,实际上让「按时」从一个抽象要求,变成了看得见的倒计时。
3. 姐姐和妹妹的任务,难度要对齐,而不是数量对齐
呦呦 9 岁,悦悦博博 6 岁。任务量当然不一样:姐姐 12 项,两个小的各 11 项。
但我的原则是:同类任务的星星价值要对齐难度,不是对齐数量。
姐姐「阅读 30 分钟」和妹妹「阅读 15 分钟」,都是 2 颗星。对 6 岁的孩子来说,安静读 15 分钟,难度不比 9 岁读 30 分钟低。
这条原则不提前定好,后面很难改——孩子对「公平」这件事敏感得超乎想象。
4. 兑换清单分人定制
兑换奖励不是一张通用清单。姐姐想要「和妈妈单独逛书店」,弟弟想要「和爸爸单独出门玩」。
这三个字很重要:单独。
对多孩家庭来说,「独占父母」本身就是最稀缺的资源。我把它做成 10 颗星就能换的低门槛项目,其他像「多看 30 分钟动画」要 30 颗,「周末约同学来家玩」要 60 颗。
分层之后,孩子随时都能看到「我很快就能换到点什么」,而不是攒很久都够不着。

兑换页:上方是星星余额,下方是清单。「和妈妈单独逛书店」10 颗,多看 30 分钟动画 30 颗,约同学来家玩 60 颗。底部还有一块「我想要的奖励」——孩子自己填,攒够了爸妈同意就加星。
5. 家长需要有两把「锁」
家长密码
清空数据
防的是谁
家里的孩子
误操作
触发条件
进家长页
密码解锁 + 两次确认
孩子误进家长页还好,误点「清空全部记录」就麻烦了——那是几个月的数据。所以清空按钮做了双层保护。

家长区要先过四位数密码。底下那些被糊掉的,是系统自动加的隐私蒙版。
四、从单机版到「家里随时能开」
第一版做完,是个单文件网页,数据存在浏览器本地。
用了几天,问题来了:iPad 上打的卡,手机上看不见。三个孩子有时候用我的手机,有时候用平板,数据各存各的。Safari 清理缓存,数据就没了。
于是往下走了三步:
第一步:改成服务端同步。家里有台飞牛 OS 的 NAS,我把服务跑在上面,加了一个很轻的后端和 SQLite 数据库。浏览器只管展示,数据统一存到 NAS,谁用哪台设备打开,看到的都是同一份记录。
第二步:加了访问密码。服务一旦能让外网访问,就必须考虑安全——里面有孩子的名字、每天的作息、什么时候在家。所以加了登录认证,密码不写在代码里,存在环境变量里,用的是不可逆哈希。
第三步:全家人的配色。三个人三种颜色:呦呦橙色、悦悦粉色、博博蓝色。切换孩子,整个界面主色跟着变。
小朋友对颜色特别敏感。博博第一次看到「自己的蓝色页面」时那种「这是我的」的表情,比任何功能都更能让他愿意打开。
现在它长这样:局域网内 https://192.168.1.8:8443/,外网也能访问(IPv6 直连,不用买域名、不用续费)。三个孩子一人一个入口,家长页在最后一位。

手机浏览器打开就是这一屏。顶上那行地址是 IPv6 公网地址,换成你家路由器上的那一串就行。
五、用了之后,家里的变化
第一个变化,是我闭嘴了。
以前我每天要问三遍「作业写完了吗」「书读了吗」「怎么还不睡」。现在我只在孩子主动来要加分的时候说话。
有一天晚上 9 点 40,博博突然从房间跑出来——因为他想起来「按时睡觉」还没点。自己点完,还回头看了一眼倒计时。
我不用催了,是倒计时在催。
第二个变化,是「进步页」真的被看。
我原以为孩子只关心星星余额。结果发现悦悦最常翻的是「进步」那一页——因为那页会显示「连续坚持 5 天 🔥」。
有个周末她跑来跟我说:「爸爸,我连续 8 天了。」那个语气,比换了奖励还高兴。

进步页只有一张表:本周 vs 上周。页脚那句「只跟自己的上周比,不比兄弟姐妹」我写死在代码里,改不了。下面那块「连续坚持」,是悦悦唯一会主动提的东西。
第三个变化,是那张 175 颗星的目标。
「家庭共同目标」是我加得最随意的功能,效果却出乎意料。
三个人每周星星合起来算,姐姐会主动去帮妹妹:「你那个玩具归位点了没,点了我们这周就够了。」——原本相互比较的三个孩子,因为这个共同目标学会了配合。
上周他们达成了,全家去了趟公园。回来路上博博问:「下周目标是多少?」
第四个变化,是孩子开始跟我讲道理了。
就是开头那一分钟。
以前我和孩子之间没有「申诉」这回事——我说她起晚了,她说没有,然后吵起来,最后变成「你还顶嘴」。
现在不一样了。她有证据(穿衣服确实没到七点),我有规则(超时减半),我们可以对着一条明确的规则讨论:「那这一分钟到底算不算?」
规则不是用来压孩子的,是给孩子一个跟我讲道理的地方。
那颗星我最后还是给她补上了——不是因为规则不对,是因为她说得对。
六、如果你也想做,几个建议
1. 先想清楚是给谁用的,再动手。
家长视角很容易喧宾夺主。想想孩子点开时应该看到什么——大概率不是数据看板。
2. 规则要在动手前定好。
特别是三条:超时怎么办、兄弟姐妹之间比不比、奖励由谁说了算。这三条一旦定下来,后面所有功能都是从它们推导出来的。中途改,前面做的都得推倒。
3. 把「惩罚」设计成「有出口的惩罚」。
减分、超时、扣星都可以有,但一定要留一条路——「明天早点,星星就满了」。纯惩罚只会让孩子放弃。
4. 给规则留一点宽容量。
这是那「一分钟」教我的。规则太精确,就会惩罚掉那些其实做到了、只是手慢的人。
5. 让奖励有短期可达的选项。
10 颗星能换到的东西,比 100 颗星才能换的有用十倍。孩子需要即时反馈。
6. 从单文件开始,别一上来就搞全家桶。
先做一个双击就能打开、数据存本地的网页,跑两周。真用起来了,再考虑同步、多设备、外网访问。工具是长出来的,不是一次设计好的。
我们家这个,到现在还在改。博博上周提了个需求:「能不能加一个『今天帮家里做家务』的加分?」
我说,能。
就在今天早上,我又在改宽限期。
孩子会告诉你下一步该做什么——只要你给他们的反馈留一个出口。
— 全文完 —
写在最后文中的 App 是给自己家用的。如果你也想做一个,欢迎在公众号后台留言——我会挑几个具体的问题逐条回复。如果这篇对你有一点点用,欢迎点个「赞」和「在看」,让更多正在跟娃斗智斗勇的爸爸看到。















































































