🎵 dizical
竹笛课程管理 + 缴费提醒 + Apple Reminders 双向同步 + iPad 儿童练习助手
<p align="center" <img src="https://img.shields.io/badge/python-3.12-blue.svg" alt="Python" <img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License" <img src="https://img.shields.io/badge/tests-505%20passed-brightgreen" alt="Tests" <img src="https://img.shields.io/badge/sprint-v3.3.4-blue" alt="Sprint" <img src="https://img.shields.io/badge/badges-V2.10-ff69b4" alt="Badge Engine v2.10" </p
📝 最近变更 (2026-08-12, v3.3.4): Phase 1 web user auth 收尾 (loginpage + register + 3 套环境密码同步) · CHANGELOG 修正文档引用 · GitHub 隐私清理 (STATUS/vibe/handoff 不再上 gh). 详见 docs/CHANGELOG.md.
---
🤔 为什么叫 dizical?
dizi + cal(endar) = dizical
竹笛 日历 ↓
发音 ≈ Descartes(笛卡尔)
📅 管它什么哲学,我只要管好我的竹笛课表 🎵---
✨ Features
Badge 引擎(V2.10,2026-07)
- 🏆 40 枚 Enamel Pin 风格徽章 —— 连击/累计/段位/排行/节日/特殊 6 类
- 🔄 实时 calc + 自动解锁 —— calcall() 计算结果立刻持久化到 achievementstats 表
- 📜 小朋友视角文案 —— "你在 2025-10-03 第一次连着打卡 7 天" 而不是工程术语
- 🖼️ 图像替换 API —— POST /config/api/badge/replace-image-from-draft 换老图不写 achievements;老图保留 (iscurrent=0)
- 🧒 视觉设计 —— chibi girl + 笛子 + 高音谱号 + 星星/爱心装饰;1024×1024 RGBA + 硬 alpha mask 干净透明
- 📋 来源: dizical 后端 + ~/.hermes/profiles/dizical/skills/badge-image (跨 profile symlinked)
Web 用户认证(v3.3.4, 2026-08)
- 🔐 登录页 —— /login 路由 + iPad 友好的卡片布局
- 🆕 注册页 —— 自助注册 (Phase 1 内网环境, 3 套环境密码同步)
- 🔑 密码哈希 —— PBKDF2-SHA256 (salted), 最低 6 位
- 🚪 登出 —— 清除 session, 跳转回登录
- 📱 响应式 —— iPhone Safari(440 CSS)/ iPad mini(744 竖 / 1133 横)/ MacBook Pro 16"(1728)同一套 kid-app HTML;窄屏汉堡抽屉
课程管理
- 📅 自动排课 - 每周六自动生成课程,节假日冲突检测
- 💰 缴费管理 - 自动统计欠缴/已缴,最后一节课当天提醒
- 📊 可视化课表 - 表格视图 + ASCII 日历视图
练习追踪
- 🎵 打卡 - 空格/逗号分隔多条记录,支持指定日期补录
- 📝 进展记录 - 每次打卡可附上详细练习进展(--log)
- 🔍 模糊匹配 - 打卡时只记得名字的一部分也能识别(如"单吐"匹配"单吐练习")
- 🗓️ 日历热力图 - 月度练习日历,颜色深浅表示练习量
- 📈 统计 - 月度练习时长、每日练习曲线