qzl
2d46251220
chore(task): archive 04-17-feat-privacy-do-not-sell
2026-04-20 12:52:39 +08:00
qzl
5c4ba49ffc
chore: record journal
2026-04-20 12:52:35 +08:00
qzl
4a3fe85fc9
chore(task): archive 04-17-feat-user-feedback
2026-04-20 12:51:15 +08:00
qzl
ae7727a1c4
chore: record journal
2026-04-20 12:50:54 +08:00
qzl
6a2a9d2c87
feat(feedback): implement user feedback collection system with email reporting
...
Backend:
- Add user_feedback table with RLS policy
- Create feedback submission API (multipart/form-data)
- Implement xlsx report generation with embedded images
- Add scheduled email delivery via Feishu SMTP
- Create HTML email templates (daily_report, no_feedback)
Frontend:
- Add feedback screen with type selection and image picker
- Support anonymous submission via skipAuth flag
- Collect device info and app version
Protocol:
- Document feedback API contract and error codes
- Update http-error-codes.md with FEEDBACK_* codes
2026-04-20 12:49:54 +08:00
qzl
913ed26f8d
feat(privacy): add personalized ads toggle in settings
...
- Add PrivacySettings schema with can_sell field (default: false)
- Move privacy toggle to GeneralSettingsScreen with clear labeling
- Update l10n for zh/en/zh_hant with user-friendly copy
- Clean up redundant PrivacyNotificationSettingsScreen
- Update profile-protocol.md to reflect new privacy schema
- Fix basedpyright warnings in user.py
2026-04-17 13:11:09 +08:00
qzl
be30eb6eab
chore: record journal
2026-04-16 17:53:16 +08:00
qzl
c79c773d67
feat(notification): add target_mode enum constraint and merge register-notifications script
...
- Add NotificationTargetMode enum (new_users/exist_users/all_users/user_ids)
- Create Alembic migrations: drop duplicate indexes, add target_mode column
- Merge register-notifications.sh into dev-migrate.sh sync-notifications subcommand
- Shorten notification config path: static/notification/notifications -> static/notifications
- Update registration flow to dispatch notifications by target_mode
- Add is_first_registration to RegisterBonusResult for first-time user detection
- Remove dead code: link_published_notifications_to_user
- Update welcome_points.yaml to target new_users only
- Add 44 unit tests + 1 integration test, all passing
2026-04-16 17:50:57 +08:00
qzl
d91064835b
chore: record journal
2026-04-16 16:15:22 +08:00
qzl
d4919fe52a
chore(task): archive 04-16-starter-package-purchase-tracking
2026-04-16 16:14:51 +08:00
qzl
ff40ff9dd8
feat: 新人初始礼包购买追踪功能
...
- 数据库:添加 has_purchased_starter_pack 字段到 register_bonus_claims
- 后端:创建静态配置管理套餐信息,支持按国家/地区区分
- 后端:新增 GET /api/v1/points/packages API 返回可用套餐
- 后端:创建 utils/paths.py 统一路径管理
- 前端:动态获取套餐信息,移除硬编码
- 前端:添加 ProductCode 枚举约束,前后端类型安全
- 配置:Profile 默认国家改为 US(ISO 3166-1 alpha-2)
- 文档:更新协议文档说明新 API 和字段
2026-04-16 16:11:09 +08:00
qzl
aea514a9b5
chore: record journal
2026-04-16 10:15:17 +08:00
qzl
dcb955c6af
chore(task): archive 04-15-divination-tutorial-first-visit
2026-04-16 10:15:07 +08:00
qzl
69b34bd723
feat: 添加起卦教程首次访问追踪和Agent时间上下文
...
- 后端 ProfileSettingsV1 添加 DivinationTutorialSettings 字段
- 前端三个起卦页面添加首次访问检测,自动弹出教程
- 教程展示后更新 settings 标记,避免重复弹出
- 使用本地状态管理避免并发更新覆盖问题
- Agent 系统提示添加时间上下文信息
2026-04-15 18:56:41 +08:00
qzl
edafb4dc50
chore: record journal
2026-04-15 18:19:25 +08:00
qzl
0bb7d77a3f
chore(task): archive 04-15-session-deletion-anonymization
2026-04-15 18:19:20 +08:00
qzl
a244eaa666
chore: record journal
2026-04-15 16:50:29 +08:00
qzl
3fd983dc5b
chore(task): archive 04-15-liuyao-algorithm-fix
2026-04-15 16:49:49 +08:00
qzl
be686810d9
docs: 添加trellis任务文档
2026-04-15 16:48:09 +08:00
qzl
da947f9f08
chore: record journal
2026-04-13 12:46:37 +08:00
qzl
a2f010251d
chore: record journal
2026-04-13 12:04:36 +08:00
qzl
697d2c0fd6
chore: record journal
2026-04-13 11:29:38 +08:00
qzl
ed8c2e3058
chore: record journal
2026-04-13 11:26:23 +08:00
qzl
1cdaeb274e
chore: record journal
2026-04-10 19:23:13 +08:00
qzl
a38267caf7
chore: record journal
2026-04-10 18:51:30 +08:00
qzl
17ef460391
docs: 更新 HTTP 错误码、用户积分、占卜运行及用户资料协议文档
2026-04-10 16:45:45 +08:00
qzl
1bc8bc6a27
chore(task): archive 00-bootstrap-guidelines
2026-04-10 16:30:26 +08:00