[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-CodeWithCJ--SparkyFitness":3,"tool-CodeWithCJ--SparkyFitness":62},[4,18,26,36,46,54],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160411,2,"2026-04-18T23:33:24",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,45],"插件",{"id":47,"name":48,"github_repo":49,"description_zh":50,"stars":51,"difficulty_score":32,"last_commit_at":52,"category_tags":53,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":32,"last_commit_at":60,"category_tags":61,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[45,13,15,14],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":68,"readme_en":69,"readme_zh":70,"quickstart_zh":71,"use_case_zh":72,"hero_image_url":73,"owner_login":74,"owner_name":75,"owner_avatar_url":76,"owner_bio":75,"owner_company":75,"owner_location":75,"owner_email":75,"owner_twitter":75,"owner_website":75,"owner_url":77,"languages":78,"stars":111,"forks":112,"last_commit_at":113,"license":114,"difficulty_score":32,"env_os":115,"env_gpu":116,"env_ram":116,"env_deps":117,"category_tags":122,"github_topics":123,"view_count":32,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":134,"updated_at":135,"faqs":136,"releases":166},9431,"CodeWithCJ\u002FSparkyFitness","SparkyFitness","SparkyFitness: Built for Families. Powered by AI. Track food, fitness, water, and health — together.","SparkyFitness 是一款专为家庭设计的开源健康追踪平台，旨在让用户在完全掌控个人数据的前提下，记录饮食、运动、饮水、睡眠及各项身体指标。它解决了主流健康应用（如 MyFitnessPal）依赖第三方服务器、存在隐私泄露风险且订阅费用高昂的痛点，通过“自托管”模式将数据存储权交还给用户自己。\n\n无论是关注全家健康的普通家庭用户，还是注重数据隐私的技术爱好者，都能从中受益。普通用户可以利用其简洁的界面进行日常打卡、设定目标并查看长期趋势图表；开发者则能享受部署在自己服务器上的自由，灵活配置后端与前端。\n\nSparkyFitness 的核心亮点在于其强大的兼容性与隐私优先架构。它不仅支持 iOS 和 Android 原生应用，还能无缝同步 Apple Health、Google Health Connect、Fitbit、Garmin 等数十种主流设备与平台的数据。此外，项目引入了可选的 AI 对话功能（SparkyAI），让用户能通过自然语言轻松完成记录。配合多重安全认证机制（如 Passkey、MFA），SparkyFitness 在保障数据安全的同时，为家庭成员提供了一个温馨","SparkyFitness 是一款专为家庭设计的开源健康追踪平台，旨在让用户在完全掌控个人数据的前提下，记录饮食、运动、饮水、睡眠及各项身体指标。它解决了主流健康应用（如 MyFitnessPal）依赖第三方服务器、存在隐私泄露风险且订阅费用高昂的痛点，通过“自托管”模式将数据存储权交还给用户自己。\n\n无论是关注全家健康的普通家庭用户，还是注重数据隐私的技术爱好者，都能从中受益。普通用户可以利用其简洁的界面进行日常打卡、设定目标并查看长期趋势图表；开发者则能享受部署在自己服务器上的自由，灵活配置后端与前端。\n\nSparkyFitness 的核心亮点在于其强大的兼容性与隐私优先架构。它不仅支持 iOS 和 Android 原生应用，还能无缝同步 Apple Health、Google Health Connect、Fitbit、Garmin 等数十种主流设备与平台的数据。此外，项目引入了可选的 AI 对话功能（SparkyAI），让用户能通过自然语言轻松完成记录。配合多重安全认证机制（如 Passkey、MFA），SparkyFitness 在保障数据安全的同时，为家庭成员提供了一个温馨、私密且功能全面的健康管理空间。","\u003Cdiv align=\"right\">\n  \u003Cdetails>\n    \u003Csummary >🌐 Language\u003C\u002Fsummary>\n    \u003Cdiv>\n      \u003Cdiv align=\"right\">\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=en\">English\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=zh-CN\">简体中文\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=zh-TW\">繁體中文\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ja\">日本語\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ko\">한국어\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=hi\">हिन्दी\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=th\">ไทย\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=fr\">Français\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=de\">Deutsch\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=es\">Español\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=it\">Italiano\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ru\">Русский\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=pt\">Português\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=nl\">Nederlands\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=pl\">Polski\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ar\">العربية\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=fa\">فارسی\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=tr\">Türkçe\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=vi\">Tiếng Việt\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=id\">Bahasa Indonesia\u003C\u002Fa>\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdetails>\n\u003C\u002Fdiv>\n\n# SparkyFitness\n\nA self-hosted, privacy-first alternative to MyFitnessPal. Track nutrition, exercise, body metrics, and health data while keeping full control of your data.\n\n![Screenshot](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_9554c6124fb0.png)\n\nSparkyFitness is a self-hosted fitness tracking platform made up of:\n\n- A backend server (API + data storage)\n- A web-based frontend\n- Native mobile apps for iOS and Android\n\nIt stores and manages health data on infrastructure you control, without relying on third party services.\n\n## Core Features\n\n- Nutrition, exercise, hydration, sleep, fasting, mood and body measurement tracking\n- Goal setting and daily check-ins\n- Interactive charts and long-term reports\n- Multiple user profiles and family access\n- Light and dark themes\n- OIDC, TOTP, Passkey, MFA etc.\n\n## Health & Device Integrations\n\nSparkyFitness can sync data from multiple health and fitness platforms:\n\n- **Apple Health** (iOS)\n- **Google Health Connect** (Android)\n- **Fitbit**\n- **Garmin Connect**\n- **Withings**\n- **Polar Flow** (partially tested)\n- **Hevy** (not tested)\n- **OpenFoodFacts**\n- **USDA**\n- **Fatsecret**\n- **Nutritioninx**\n- **Mealie**\n- **Tandoor**\n- **Strava** (partially tested)\n\nIntegrations automatically sync activity data such as steps, workouts, and sleep, along with health metrics like weight and body measurements, to your SparkyFitness server.\n\n## Optional AI Features (Beta)\n\nSparkyAI provides a conversational interface for logging data and reviewing progress.\n\n- Log food, exercise, body stats, and steps via chat\n- Upload food images for automatic meal logging\n- Retains conversation history for follow ups\n\nNote: AI features are currently in beta.\n\n## Quick Start (Server)\n\nGet a SparkyFitness server running in minutes using Docker Compose.\n\n```bash\n# 1. Create a new folder\nmkdir sparkyfitness && cd sparkyfitness\n\n# 2. Download Docker files only\ncurl -L -o docker-compose.yml https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.prod.yml\ncurl -L -o .env https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdefault.env.example\n\n# 3. (Optional) Edit .env to customize database credentials, ports, etc.\n\n# 4. Start the app\ndocker compose pull && docker compose up -d\n\n# Access application at http:\u002F\u002Flocalhost:8080\n```\n\n\n## 🎥 Video Tutorial\n\n[![Watch the video](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_bdd3bbc9a991.jpg)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=B13IiL2DeQc)\n\nQuick 2-minute tutorial showing how to install SparkyFitness (self-hosted fitness tracker).\n\n\n## Documentation\n\nFor full installation guides, configuration options, and development docs, please visit our [Documentation Site](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002F).\n\n### Quick Links\n\n- **[Installation Guide](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fdocker-compose)** - Deployment and configurations\n- **[Features Overview](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Ffeatures)** - Complete feature documentation\n- **[Development Workflow](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Fdeveloper\u002Fgetting-started)** - Developer guide and contribution process\n- **[iOS App Info](https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fwiki\u002FApple-Health-Integration)** and **[Android App Info](https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fwiki\u002FAndroid-Mobile-App)**\n\n### Need Help?\n\n- Post in Github issues\u002Fdiscussion.\n- For faster response and get help from other community memebers **[Join our Discord](https:\u002F\u002Fdiscord.gg\u002FvcnMT5cPEA)**\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#CodeWithCJ\u002FSparkyFitness&Date\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png&theme=dark\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png\" \u002F>\n    \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png\" width=\"100%\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n## Translations\n\n**[Weblate Translations](https:\u002F\u002Fhosted.weblate.org\u002Fengage\u002Fsparkyfitness)**\n\n\u003Ca href=\"https:\u002F\u002Fhosted.weblate.org\u002Fengage\u002Fsparkyfitness\u002F\">\n\u003Cimg src=\"https:\u002F\u002Fhosted.weblate.org\u002Fwidget\u002Fsparkyfitness\u002Fsparkyfitness-translations\u002Fmulti-auto.svg\" alt=\"Translation status\" \u002F>\n\u003C\u002Fa>\n\n## Repository activity\n\n![Alt](https:\u002F\u002Frepobeats.axiom.co\u002Fapi\u002Fembed\u002F828203d3070ff56c8873c727b6873b684c4ed399.svg \"Repobeats analytics image\")\n\n## Contributors\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_d65796c9f4f8.png\" width=\"100%\"\u002F>\n\u003C\u002Fa>\n\n## ⚠️ Known Issues \u002F Beta Features ⚠️\n\nSparkyFitness is under active development.\nBreaking changes may occur between releases.\n\n- Auto-updating containers is not recommended\n- Always review release notes before upgrading\n\nThe following features are currently in beta and may not have been thoroughly tested. Expect potential bugs or incomplete functionality:\n\n- AI Chatbot\n- Family & Friends access\n- API documentation\n","\u003Cdiv align=\"right\">\n  \u003Cdetails>\n    \u003Csummary >🌐 语言\u003C\u002Fsummary>\n    \u003Cdiv>\n      \u003Cdiv align=\"right\">\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=en\">英语\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=zh-CN\">简体中文\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=zh-TW\">繁體中文\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ja\">日本語\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ko\">한국어\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=hi\">हिन्दी\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=th\">ไทย\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=fr\">Français\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=de\">Deutsch\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=es\">Español\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=it\">Italiano\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ru\">Русский\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=pt\">Português\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=nl\">Nederlands\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=pl\">Polski\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=ar\">العربية\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=fa\">فارسی\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=tr\">Türkçe\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=vi\">Tiếng Việt\u003C\u002Fa>\u003C\u002Fp>\n        \u003Cp>\u003Ca href=\"https:\u002F\u002Fopenaitx.github.io\u002Fview.html?user=CodeWithCJ&project=SparkyFitness&lang=id\">Bahasa Indonesia\u003C\u002Fa>\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdetails>\n\u003C\u002Fdiv>\n\n# SparkyFitness\n\n一款以隐私为先的自托管 MyFitnessPal 替代品。追踪营养、运动、身体指标和健康数据，同时完全掌控您的数据。\n\n![截图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_9554c6124fb0.png)\n\nSparkyFitness 是一个自托管的健身追踪平台，由以下部分组成：\n\n- 后端服务器（API + 数据存储）\n- 基于 Web 的前端\n- iOS 和 Android 原生移动应用\n\n它将健康数据存储并管理在您控制的基础设施上，无需依赖第三方服务。\n\n## 核心功能\n\n- 营养、运动、水分摄入、睡眠、禁食、情绪和身体测量的追踪\n- 目标设定和每日打卡\n- 交互式图表和长期报告\n- 多用户个人资料和家庭共享访问权限\n- 浅色与深色主题\n- OIDC、TOTP、Passkey、MFA 等\n\n## 健康与设备集成\n\nSparkyFitness 可以从多个健康和健身平台同步数据：\n\n- **Apple Health**（iOS）\n- **Google Health Connect**（Android）\n- **Fitbit**\n- **Garmin Connect**\n- **Withings**\n- **Polar Flow**（部分测试）\n- **Hevy**（未测试）\n- **OpenFoodFacts**\n- **USDA**\n- **Fatsecret**\n- **Nutritioninx**\n- **Mealie**\n- **Tandoor**\n- **Strava**（部分测试）\n\n这些集成会自动同步活动数据，如步数、锻炼和睡眠，以及健康指标，如体重和身体测量，到您的 SparkyFitness 服务器。\n\n## 可选 AI 功能（测试版）\n\nSparkyAI 提供了一个用于记录数据和回顾进展的对话式界面。\n\n- 通过聊天记录食物、运动、身体数据和步数\n- 上传食物图片以自动记录餐食\n- 保留对话历史以便后续跟进\n\n注意：AI 功能目前处于测试阶段。\n\n## 快速入门（服务器）\n\n使用 Docker Compose，您可以在几分钟内启动一个 SparkyFitness 服务器。\n\n```bash\n# 1. 创建新文件夹\nmkdir sparkyfitness && cd sparkyfitness\n\n# 2. 仅下载 Docker 文件\ncurl -L -o docker-compose.yml https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.prod.yml\ncurl -L -o .env https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdefault.env.example\n\n# 3. （可选）编辑 .env 文件以自定义数据库凭据、端口等。\n\n# 4. 启动应用\ndocker compose pull && docker compose up -d\n\n# 访问应用：http:\u002F\u002Flocalhost:8080\n```\n\n\n## 🎥 视频教程\n\n[![观看视频](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_bdd3bbc9a991.jpg)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=B13IiL2DeQc)\n\n一段 2 分钟的快速教程，展示如何安装 SparkyFitness（自托管健身追踪器）。\n\n\n## 文档\n\n有关完整的安装指南、配置选项和开发文档，请访问我们的 [文档网站](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002F)。\n\n### 快速链接\n\n- **[安装指南](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fdocker-compose)** - 部署和配置\n- **[功能概述](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Ffeatures)** - 完整的功能文档\n- **[开发流程](https:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Fdeveloper\u002Fgetting-started)** - 开发者指南和贡献流程\n- **[iOS 应用信息](https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fwiki\u002FApple-Health-Integration)** 和 **[Android 应用信息](https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fwiki\u002FAndroid-Mobile-App)**\n\n### 需要帮助？\n\n- 在 Github 的问题\u002F讨论区发帖。\n- 如需更快响应并获得其他社区成员的帮助，请 **[加入我们的 Discord](https:\u002F\u002Fdiscord.gg\u002FvcnMT5cPEA)**。\n\n## 星标历史\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#CodeWithCJ\u002FSparkyFitness&Date\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png&theme=dark\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png\" \u002F>\n    \u003Cimg alt=\"星标历史图\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_e0b525ff386a.png\" width=\"100%\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n## 翻译\n\n**[Weblate 翻译](https:\u002F\u002Fhosted.weblate.org\u002Fengage\u002Fsparkyfitness)**\n\n\u003Ca href=\"https:\u002F\u002Fhosted.weblate.org\u002Fengage\u002Fsparkyfitness\u002F\">\n\u003Cimg src=\"https:\u002F\u002Fhosted.weblate.org\u002Fwidget\u002Fsparkyfitness\u002Fsparkyfitness-translations\u002Fmulti-auto.svg\" alt=\"翻译状态\" \u002F>\n\u003C\u002Fa>\n\n## 仓库活动\n\n![Alt](https:\u002F\u002Frepobeats.axiom.co\u002Fapi\u002Fembed\u002F828203d3070ff56c8873c727b6873b684c4ed399.svg \"Repobeats 分析图像\")\n\n## 贡献者\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_readme_d65796c9f4f8.png\" width=\"100%\"\u002F>\n\u003C\u002Fa>\n\n## ⚠️ 已知问题 \u002F 测试版功能 ⚠️\n\nSparkyFitness 目前正处于积极开发中。\n不同版本之间可能会出现破坏性变更。\n\n- 不建议自动更新容器\n- 升级前请务必查看发布说明\n\n以下功能目前处于测试阶段，可能尚未经过充分测试。您可能会遇到一些 bug 或功能不完整的情况：\n\n- AI 聊天机器人\n- 家人与朋友访问权限\n- API 文档","# SparkyFitness 快速上手指南\n\nSparkyFitness 是一个自托管、隐私优先的健身追踪平台，可作为 MyFitnessPal 的替代方案。它允许您在完全掌控数据的前提下，追踪营养、运动、身体指标及健康数据。\n\n## 环境准备\n\n在开始之前，请确保您的服务器满足以下要求：\n\n*   **操作系统**：支持 Docker 的 Linux 发行版（如 Ubuntu, Debian, CentOS）或 macOS。\n*   **核心依赖**：\n    *   [Docker](https:\u002F\u002Fdocs.docker.com\u002Fget-docker\u002F) (推荐最新稳定版)\n    *   [Docker Compose](https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Finstall\u002F) (通常包含在 Docker Desktop 或新版 Docker 引擎中)\n*   **网络要求**：服务器需能访问 GitHub 以拉取镜像和配置文件。\n    *   *国内用户提示*：若拉取 GitHub 资源缓慢，建议配置 Docker 镜像加速器（如阿里云、腾讯云等国内源），或在 hosts 文件中优化 GitHub 域名解析。\n\n## 安装步骤\n\n使用 Docker Compose 可在几分钟内完成部署。请在终端执行以下命令：\n\n```bash\n# 1. 创建项目目录并进入\nmkdir sparkyfitness && cd sparkyfitness\n\n# 2. 下载 Docker Compose 配置文件和环境变量示例\n# 注意：国内网络若无法直接访问 GitHub，请使用代理或手动下载后上传\ncurl -L -o docker-compose.yml https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.prod.yml\ncurl -L -o .env https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Freleases\u002Flatest\u002Fdownload\u002Fdefault.env.example\n\n# 3. (可选) 自定义配置\n# 编辑 .env 文件以修改数据库凭证、端口号等设置\n# nano .env  或  vim .env\n\n# 4. 拉取镜像并启动服务\ndocker compose pull && docker compose up -d\n```\n\n启动完成后，应用将在 `http:\u002F\u002Flocalhost:8080` 运行。若通过远程服务器访问，请将 `localhost` 替换为服务器 IP 地址。\n\n## 基本使用\n\n1.  **初始化账户**：\n    在浏览器中访问 `http:\u002F\u002F\u003C您的服务器 IP>:8080`，按照页面指引创建管理员账户。\n\n2.  **记录数据**：\n    登录后，您即可在 Web 端或通过移动端 App（iOS\u002FAndroid）开始记录：\n    *   **营养与饮食**：手动输入或通过集成的数据库（如 OpenFoodFacts, USDA）搜索食物。\n    *   **运动与健康**：记录锻炼、睡眠、体重及身体围度。\n    *   **设备同步**：在设置中绑定 Apple Health、Google Health Connect、Fitbit 或 Garmin 等设备，自动同步步数、卡路里及睡眠数据。\n\n3.  **体验 AI 功能 (Beta)**：\n    进入聊天界面，尝试使用自然语言记录数据（例如：“我刚才吃了两个苹果”或“上传食物照片”）。系统会自动解析并录入相关信息。\n\n> **注意**：本项目处于活跃开发阶段，部分功能（如 AI 聊天、家庭共享）标记为 Beta 版本。升级前请务必阅读发布说明，且不建议开启容器自动更新，以免发生破坏性变更。","李先生一家四口正试图共同改善饮食习惯并管理体重，但分散的数据和隐私担忧让他们的健康计划难以坚持。\n\n### 没有 SparkyFitness 时\n- **数据孤岛严重**：父亲的 Garmin 手表、母亲的 Apple Health 和孩子的学校体育数据分散在不同 App 中，无法汇总分析，家庭整体运动量是一笔糊涂账。\n- **隐私安全焦虑**：使用主流商业健身应用时，担心详细的身体指标、饮食记录甚至位置信息被第三方公司收集并用于广告画像。\n- **协作效率低下**：全家无法共享食谱或互相监督饮水打卡，只能靠微信群口头提醒，缺乏可视化的进度图表，难以形成合力。\n- **手动记录繁琐**：遇到非标准餐食时，需手动查询营养成分并逐个输入，耗时耗力，导致家人很快放弃记录。\n\n### 使用 SparkyFitness 后\n- **全平台自动同步**：SparkyFitness 通过后端接口自动拉取 Garmin、Apple Health 等多源设备数据，生成统一的家庭健康仪表盘，实时展示每位成员的运动与睡眠趋势。\n- **数据完全自主可控**：李先生将 SparkyFitness 部署在自家 NAS 上，所有敏感健康数据仅存储在本地局域网，彻底杜绝了云端泄露风险。\n- **家庭互动可视化**：利用多用户配置文件，全家人可在同一界面查看彼此的目标完成度，系统生成的互动图表让“喝水比赛”和“步数挑战”变得直观有趣。\n- **AI 辅助便捷录入**：借助内置的 SparkyAI 对话功能，家人只需拍照或语音描述晚餐，系统即可自动识别食材并计算营养数值，大幅降低记录门槛。\n\nSparkyFitness 通过私有化部署与 AI 智能化整合，让家庭健康管理在确保绝对隐私的前提下，实现了从“各自为战”到“数据驱动的共同成长”的转变。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FCodeWithCJ_SparkyFitness_9554c612.png","CodeWithCJ",null,"https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FCodeWithCJ_90b51ae1.png","https:\u002F\u002Fgithub.com\u002FCodeWithCJ",[79,83,87,90,94,98,101,104,108],{"name":80,"color":81,"percentage":82},"TypeScript","#3178c6",93.9,{"name":84,"color":85,"percentage":86},"PLpgSQL","#336790",4.4,{"name":88,"color":89,"percentage":42},"Python","#3572A5",{"name":91,"color":92,"percentage":93},"JavaScript","#f1e05a",0.2,{"name":95,"color":96,"percentage":97},"CSS","#663399",0.1,{"name":99,"color":100,"percentage":97},"Go Template","#00ADD8",{"name":102,"color":103,"percentage":97},"Shell","#89e051",{"name":105,"color":106,"percentage":107},"Batchfile","#C1F12E",0,{"name":109,"color":110,"percentage":107},"HTML","#e34c26",3218,153,"2026-04-18T20:28:23","NOASSERTION","Linux, macOS, Windows","未说明",{"notes":118,"python":116,"dependencies":119},"该工具主要通过 Docker Compose 进行部署，支持自托管。核心功能不依赖特定 GPU 或 Python 环境。可选的 AI 功能（SparkyAI）目前处于 Beta 阶段，用于对话式数据记录和图像识别，但 README 中未明确列出其具体的本地硬件或依赖库要求。建议在升级前查看发布说明，且不推荐开启容器自动更新。",[120,121],"Docker","Docker Compose",[13,14,15],[124,125,126,127,128,129,130,131,132,133],"ai","artificial-intelligence","fitness","fitness-app","fitness-tracker","health","health-coaching","healthcheck","self-hosted","selfhosted","2026-03-27T02:49:30.150509","2026-04-19T09:15:03.487285",[137,142,147,152,157,162],{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},42326,"Fitbit 集成同步后，步数和健康指标（如静息心率、SpO2）显示缺失或不准确怎么办？","该问题通常是由于 Docker 容器未更新到最新版本导致的。请确保将 SparkyFitness 的 Docker 镜像更新到最新版。维护者确认在更新 Docker 镜像后，步数和健康指标的同步问题已得到修复。如果更新后仍有问题，请重新开启 Issue 并提供相关日志。","https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fissues\u002F664",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},42327,"使用 OIDC 登录时出现 \"checks.state argument is missing\" 错误如何解决？","此错误通常与浏览器缓存或会话状态有关。如果是新实例或配置变更后出现，建议尝试清除浏览器缓存并重试。对于使用 Pocket-ID 等外部身份验证提供商的用户，请确保正确配置了回调地址和 CORS 设置。如果问题持续，尝试新建一个实例测试以排除旧数据干扰。","https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fissues\u002F52",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},42328,"更新到 v0.15.8.3 后食物条目 API 报错 \"Authentication: No token...\" 导致日记无法加载怎么办？","这是版本 v0.15.8.3 的一个已知问题，已在 v0.15.8.4 中修复。请执行以下操作：\n1. 拉取最新的 Docker 镜像（标签为 latest 或显式指定 v0.15.8.4）。\n2. 强制清除浏览器缓存（Ctrl+Shift+R 或手动清除）。\n注意：即使页面底部仍显示旧版本号，只要拉取了最新镜像并清除了缓存，功能通常即可恢复正常。","https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fissues\u002F268",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},42329,"添加自定义营养素（如 \"Vitamin D\"）后，历史数据图表消失或报错如何处理？","某些特定名称或长度的自定义营养素可能导致数据库查询错误，从而使图表无法显示。若遇到此问题，可以通过执行以下 SQL 命令清除数据库中残留的自定义营养素数据来修复：\n\nUPDATE public.food_entries SET custom_nutrients=null;\nUPDATE public.food_variants SET custom_nutrients = null;\n\n执行后重启服务即可恢复图表显示。建议在添加自定义营养素时避免使用可能引发冲突的特定命名格式。","https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fissues\u002F675",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},42330,"新安装配置外部数据库时，启动报错 \"permission denied for function pg_stat_statements_reset\" 怎么办？","此错误表明配置的数据库用户权限不足，无法执行特定的管理函数。在安装 SparkyFitness 时，请确保使用的数据库用户（例如 'sparky'）拥有足够的权限。如果是 PostgreSQL 数据库，可能需要超级用户权限来初始化某些扩展或函数。检查数据库用户的授权情况，或者尝试使用具有更高权限的管理员账户进行初始化和授权，然后再切换回应用专用账户。","https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fissues\u002F710",{"id":163,"question_zh":164,"answer_zh":165,"source_url":151},42331,"Docker 部署更新后版本号显示未变但功能已修复，这是什么原因？","有时维护者在发布修复补丁时可能忘记更新前端显示的版本号字符串，但后端代码实际上已经更新。如果您使用的是 `latest` 标签拉取镜像，并且已经清除了浏览器缓存，即使界面底部显示的版本号仍是旧的（例如显示 15.8.3 但实际是 15.8.4），只要功能恢复正常，即可视为更新成功。这通常是版本号元数据未及时同步导致的视觉误差。",[167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262],{"id":168,"version":169,"summary_zh":170,"released_at":171},334425,"v0.16.5.8","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新页面或清除浏览器缓存。\n⚠️ Android 应用——Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 虽然您无需立即升级，但在接下来的几个月内，Postgres 升级将成为强制要求。\n请务必谨慎操作。以下指南可能存在缺陷，请在执行升级前自行研究确认。\nhttps:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fpostgres-upgrade\n\n💙 支持 SparkyFitness\n\n如果您觉得 SparkyFitness 有用，请支持其开发——项目剩余经费为 282 美元。\n\n## 变更内容\n* chore：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1113 中完成，从 CommonJS 迁移到 ESM，并从 Jest 迁移到 Vitest。\n* refactor：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1118 中完成，使用 ts-migrate 将服务器端代码迁移到 TypeScript。\n* refactor（练习）：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1125 中完成，缩短文件长度。\n* fix（1033）、refactor：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1126 中完成，改进 Garmin 集成。\n* refactor：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1131 中完成，优化练习搜索、CSV 导入和训练计划功能。\n* feat（1102）：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1132 中完成，改进训练和训练计划的设计。\n* fix：由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1133 中完成，修复深色模式下输入框箭头显示为白色的错误。\n* Add unit 'whole'：由 @cygnim 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1128 中完成，新增“整数”单位。\n* fix：加载练习进度数据；feat：添加描述文本框——由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1135 中完成。\n* feat（1107）：编辑食物条目的餐次类型——由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1136 中完成。\n* App：新增“打开时同步”选项——由 @BryceKrispiess 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1120 中完成。\n* 自动重新加载过时的前端模块——由 @BryceKrispiess 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1138 中完成，确保应用更新后前端资源及时刷新。\n* 使目标必须明确指定用户 ID——由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1119 中完成。\n* fix（helm）：无效的加密密钥生成——由 @wiiaam 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1140 中完成。\n* feat（849）：重新排序食品供应商——由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1141 中完成。\n* feat（946）：当注册功能被禁用时隐藏注册入口——由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1142 中完成。\n\n## 新贡献者\n* @cygnim 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1128 中完成了首次贡献。\n* @wiiaam 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1140 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.5.7...v0.16.5.8","2026-04-18T05:34:10",{"id":173,"version":174,"summary_zh":175,"released_at":176},334426,"v0.16.5.7","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新或清除浏览器缓存。\n⚠️ Android 应用 — Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 虽然您无需立即升级，但在接下来的几个月内，Postgres 升级将被强制执行。\n请务必谨慎。以下指南可能存在缺陷。在执行升级前，请自行研究确认。\nhttps:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fpostgres-upgrade\n\n💙 支持 SparkyFitness\n\n如果您觉得 SparkyFitness 有用，请支持其开发——项目剩余开支为 $293。\n\n## 变更内容\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1064 中修复了运动相关错误。\n* feat(1052)：点击对话框外部不再立即关闭对话框…由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1068 中实现。\n* fix(1065)：onChange 时单位转换会导致异常行为，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1069 中修复。\n* App Health Connect 睡眠阶段修复、运动条目距离调整，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1072 中完成。\n* App 仪表盘卡路里计算，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1074 中实现。\n* ci：添加 PR 验证工作流并更新贡献指南，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1076 中完成。\n* fix(1061)：共享包中缺少文件扩展名，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1077 中修复。\n* App：增加更多营养成分 + 食物搜索更新，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1078 中完成。\n* 修复从 UTC 转换导致的日期偏移问题，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1083 中修复。\n* 重构：将运动相关逻辑拆分为自定义 Hook，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1084 中完成。\n* App：卡路里计算 + 食品设置 - OFF 备用偏好，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1092 中实现。\n* 修复现有本地条形码 Zod 验证搜索错误，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1095 中修复。\n* fix(1085)：锻炼热图 UI 问题，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1098 中修复。\n* feat：添加 v2 TypeScript 水分摄入路由（更新版），由 @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1093 中完成。\n* feat：添加 v2 TypeScript 目标预设路由（更新版），由 @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1094 中完成。\n* App：修复连接旧服务器时的崩溃问题，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1103 中完成。\n* lint：修复服务器 ESLint 错误，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1097 中完成。\n* App：优雅地处理错误而非直接崩溃，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1104 中实现。\n* fix：更新将 PostgreSQL 从 15 升级到 18.3 的说明，由 @Scorch038 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1108 中完成。\n* tests：修复所有服务器测试并重新启用 CI，由 @Sim-sat 在 https:\u002F\u002Fgithu","2026-04-12T06:13:11",{"id":178,"version":179,"summary_zh":180,"released_at":181},334427,"v0.16.5.6","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新页面或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 虽然您无需立即升级，但在接下来的几个月内，Postgres 升级将被强制执行。\n请务必谨慎操作。以下指南可能存在缺陷，请在执行升级前自行研究确认。\nhttps:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fpostgres-upgrade\n\n💙 支持 SparkyFitness\n\n\n## 变更内容\n* 服务器端步数卡路里计算，由 @BryceKrispiess 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F991 中实现\n* 时区支持，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1025 中实现\n* 解决 CORS 与可信来源变量相关问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1026 中修复\n* 自定义食物表单重构，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1032 中完成\n* 应用表格中的条形码扫描按钮及文本错误修复，由 @BryceKrispiess 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1031 中完成\n* 修复报告部分缺失身高与体脂百分比的问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1036 中修复\n* 解决 Fitbit 单位换算问题，由 @skooj 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1038 中完成\n* 修复签到页面无效页错误，并新增禁食开始时间支持及改进报告功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1039 中完成\n* 修复（Helm）：通过 values 配置前端 Service 类型、端口及注解，由 @aminerachyd 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1040 中完成\n* 聊天机器人食物和饮水记录相关修复，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1042 中完成\n* 修复聊天机器人 JSON 错误，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1043 中完成\n* 条形码扫描器 UI 括号及手动条形码输入功能，由 @BryceKrispiess 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1037 中完成\n* 修复（1046）：日记中缺失膳食目标，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1048 中完成\n* 修复（1047）：运动详情 Zod 验证错误，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1049 中完成\n* 移动端应用 - 训练重构，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1053 中完成\n* 移动端应用代理说明，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1054 中完成\n* 训练\u002F活动界面动画，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1057 中完成\n\n## 新贡献者\n* @skooj 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1038 中完成了首次贡献\n* @aminerachyd 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1040 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.5.5...v0.16.5.6","2026-04-01T23:44:29",{"id":183,"version":184,"summary_zh":185,"released_at":186},334428,"v0.16.5.5","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新页面或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 虽然您无需立即升级，但在接下来的几个月内，Postgres 升级将被强制执行。\n请务必谨慎。以下指南可能存在缺陷。在执行升级前，请自行做好调研。\nhttps:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fpostgres-upgrade\n\n\n💙 支持 SparkyFitness\n\n## 变更内容\n* 后端代码格式化改进，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F997 中完成\n* 修复：在仪表盘中显示 Body Battery 的当前值，而非始终显示…，由 @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1000 中完成\n* 每日总结 API 端点，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1002 中添加\n* 修复 ToTP 的启用与禁用功能，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1005 中完成\n* 更好的身份验证 MFA 同步修复，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1006 中完成\n* 修复：显示微量矿物质相关的错误信息，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1008 中完成\n* 应用登录重构及引导流程，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1010 中完成\n* 修复 GetMeals 接口缺失的功能，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1011 中完成\n* 更新手动 Docker 工作流，将标签改为 dev 而非软件包版本，以避免与生产环境冲突，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1012 中完成\n* 软件包版本更新，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F1013 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.5.4...v0.16.5.5","2026-03-28T00:41:25",{"id":188,"version":189,"summary_zh":190,"released_at":191},334429,"v0.16.5.4","⚠️ 升级前请备份。如果您看不到最新更新，请刷新或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 虽然您无需立即升级，但在接下来的几个月内，Postgres 升级将被强制执行。\n请务必谨慎。以下指南可能存在缺陷。在执行升级前，请自行研究。\nhttps:\u002F\u002Fcodewithcj.github.io\u002FSparkyFitness\u002Finstall\u002Fpostgres-upgrade\n\n\n💙 支持 SparkyFitness\n\n\n## 变更内容\n* @Thovi98 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F938 中更新 release-assets，以同时打包后端。\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F942 中修复了 Garmin 同步和饮水记录问题。\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F923 中重构了 ExerciseReportsDashboard 和 ActivityReportVisualizer。\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F947 中修复了 FatSecret 的单位映射、变体拆分以及搜索结果缩放问题。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F949 中修复了 Garmin 同步中的心率字段名称、距离双重转换以及多用户错误隔离问题。\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F952 中完成了 Postgres 18.3 的升级。\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F954 中为锻炼条目添加了 Zod 验证。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F957 中修复了 Garmin 同一天重复活动会互相覆盖而非创建独立条目的问题。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F958 中将 Garmin 健康数据和活动同步拆分为独立阶段。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F959 中将 print() 替换为日志记录器，并在 clean_garmin_data 中对静默数据丢失发出警告。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F960 中将 Garmin 连接状态中显示的过期时间从刷新令牌改为访问令牌。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F961 中增加了在访问 OAuth2Token 的 [1] 索引之前验证 garth 令牌转储结构的步骤。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F962 中将 fetchGarminActivitiesAndWorkouts 提前至 module.exports 之前。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F963 中修复了日记中 Garmin 及其他同步活动的正确时长显示问题。\n* @Soulplayer 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F964 中修正了指标索引映射，并使活动图表中的 sumDistance 成为可选参数。\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F956 中移除了上一个 PR 中的多余代码。\n* @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F968 中优化了应用同步功能。\n* @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F969 中修复了“添加锻炼”功能。\n* 修复(948)：保持连接代理导致的内存泄漏","2026-03-25T23:36:05",{"id":193,"version":194,"summary_zh":195,"released_at":196},334430,"v0.16.5.3","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新页面或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n⚠️ 注意：better-auth 和 tailwindcss 已升级至最新版本。尽管我已经进行了测试，但仍有可能遗漏某些问题。请确保您有办法在出现问题时恢复到之前的版本。\n\n\n## 变更内容\n* 重构：标准化测量精度并优化 UI 布局，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F915 中完成\n* 修复 (tdee)：解决反向卡路里目标的 bug，并提高计算透明度，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F916 中完成\n* 修复 (auth)：为 OIDC 资料同步向用户表添加缺失的图片列，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F917 中完成\n* 修复 (auth)：全面改进 OIDC\u002FSSO 集成及数据库模式修复，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F918 中完成\n* 应用端运动管理功能，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F919 中完成\n* 修复：切换用户上下文时清除查询缓存，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F926 中完成\n* 用户管理相关提示框修复，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F928 中完成\n* 修复 (oidc)：解决令牌认证方式、UserInfo 声明提取及组同步问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F929 中完成\n* better-auth 升级至 1.5.5，以及其他若干依赖包升级，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F930 中完成\n* Tailwindcss 升级至 v4，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F934 中完成\n* 修复：解决 Garmin 的全局同步问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F935 中完成\n* 更新了用于 mock_data 创建的 Garmin 显示界面，并新增了前端构建的 tar 包，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F936 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.5.2...v0.16.5.3","2026-03-17T02:20:42",{"id":198,"version":199,"summary_zh":200,"released_at":201},334431,"v0.16.5.2","⚠️ 升级前请先备份。如果您看不到最新更新，请刷新页面或清除浏览器缓存。\n⚠️ 安卓应用 – Google Play 封闭测试的链接已更改。请参考维基中的更新链接。\n\n💙 支持 SparkyFitness\n\n## 变更内容\n* 由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F912 中修复 Helm Chart 工作流问题\n* 修复：由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F914 中解决的 Docker 服务器崩溃问题\n* 由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F913 中实现 OpenFoodFacts 的本地化食品名称映射\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.5.1...v0.16.5.2","2026-03-14T19:27:19",{"id":203,"version":204,"summary_zh":205,"released_at":206},334432,"v0.16.5.1","⚠️ 升级前请备份。如果您看不到最新更新，请刷新或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n\n💙 支持 SparkyFitness\n\n如果您觉得 SparkyFitness 很有用，请考虑支持其持续开发。您的捐助将用于支付基础设施、Apple 和 Android 开发者计划费用以及其他项目开支，以确保项目能够得到积极维护，并继续免费提供自托管服务。\n\n目前的目标是帮助抵消剩余的 706 美元项目开支，包括开发硬件、Apple 和 Google 开发者计划费用以及 LLM 订阅费用。\n\n## 变更内容\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F873 中为 aiServiceSettings 添加了 Zod 验证\n* feat(tandoor): 修复营养导入并添加语言无关的属性映射，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F877 中完成\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F879 中新增了对 USDA 和 Fatsecret 条形码的支持\n* @rbritton 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F878 中修复了认证路由的限流器，并移除了重复条目\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F880 中修复了条形码编辑和添加功能\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F881 中撤销了“修复认证路由限流器，移除重复条目”的更改\n* @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F882 中实现了 MFA 限流及限流测试\n* @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F885 中完成了统一的食物搜索——文本和条形码\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F886 中为 CustomCategories、CustomMeasurements 和 CheckInMeasurements 添加了 Zod 验证\n* @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F891 中进行了多项修复，主要涉及数据同步\n* @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F892 中为 Sleep Science 添加了 Zod 验证\n* @ikogan 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F896 中通过进一步调整 Chart 版本号来修复 Helm 打包问题\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F900 中修复了在将食物添加到日记时缺少自定义营养素的问题\n* feat: 实现多水源饮水追踪及智能同步功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F901 中完成\n* 更新移动应用，使其在与服务器同步时将 Healthkit\u002FHealth Connect 作为数据来源发送，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F902 中完成\n* feat: 为 OpenFoodFacts 实现本地化食物搜索和条形码查询功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F903 中完成\n* feat: 在食物日记中实现快速切换水容器的选择器，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F904 中完成\n* @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F905 中修复了饮水量测试脚本中的 Lint 错误\n* 应用 UI 调整","2026-03-14T14:09:34",{"id":208,"version":209,"summary_zh":210,"released_at":211},334433,"v0.16.5.0","⚠️ 升级前请备份。如果您看不到最新更新，请刷新或清除浏览器缓存。\n⚠️ Android 应用 – Google Play 封闭测试的 URL 已更改。请参考 Wiki 中的更新链接。\n\n## 变更内容\n* 无未使用变量，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F844 中完成\n* 文档更新，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F848 中完成\n* 应用端食物管理优化及 bug 修复，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F851 中完成\n* 严格的空值检查，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F852 中完成\n* 功能（睡眠报告）：统一睡眠计算、修复图表并提升数据准确性，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F854 中完成\n* 日期偏移问题修复，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F855 中完成\n* 前端体重显示格式一致性改进，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F856 中完成\n* 餐食计划模板修复，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F857 中完成\n* 功能：设置工作区、生成模式以及概念验证，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F859 中完成\n* 为移动端应用添加邮箱\u002F密码登录功能，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F860 中完成\n* 添加了删除食物条目以及在删除自定义营养素时一并删除相关目标的功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F861 中完成\n* 功能：保留餐次分组，并在食物日记中新增“复制全天”功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F862 中完成\n* 功能（集成）：为数据同步添加可自定义日期范围选择功能，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F863 中完成\n* 移动端自定义代理，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F864 中完成\n* Android 应用的 Bundle Identifier 更改，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F867 中完成\n* 应用健康免责声明，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F870 中完成\n* 应用血糖同步 - HealthKit 观察者，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F871 中完成\n* 功能：实现对石\u002F磅以及英尺\u002F英寸单位的全局支持，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F872 中完成\n* 更新 Android 工作流以支持 pnpm 工作区，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F874 中完成\n* pnpm 版本更新，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F875 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.9...v0.16.5.0","2026-03-09T15:43:51",{"id":213,"version":214,"summary_zh":215,"released_at":216},334434,"v0.16.4.9","⚠️升级前请备份。如果您看不到最新更新，请刷新或清除浏览器缓存。\n\n## 变更内容\n* 修复：移动端视图，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F811 中完成\n* 自适应 TDEE 实现，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F813 中完成\n* 修复食物变体中的自动缩放问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F815 中完成\n* 新特性：实现全栈自适应 TDEE，并增强卡路里调整模式，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F818 中完成\n* 修复（818）：无法创建自定义食物，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F820 中完成\n* 新特性：记住上次选择的摄像头用于条形码扫描，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F822 中完成\n* 修复（lint）：移除第一批显式 any 类型，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F823 中完成\n* 条形码改进，App AI 营养标签扫描功能，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F824 中完成\n* 修复（lint）：api\u002FCheckIn 中禁止使用显式 any 类型，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F826 中完成\n* 修复（lint）：api\u002Fchat 中禁止使用显式 any 类型，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F827 中完成\n* 修复（lint）：auth 模块中禁止使用显式 any 类型，并移除 magiclink 方法，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F828 中完成\n* 修复：每日进度查询失效问题，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F831 中完成\n* 修复（lint）：Diary、Exercises、Foods、Settings 模块中禁止使用显式 any 类型，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F832 中完成\n* 修复（lint）：components、hooks、lib 模块中禁止使用显式 any 类型，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F834 中完成\n* 移动端应用编辑食物界面，由 @apedley 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F836 中完成\n* 修复（lint）：修复剩余的 no-explicit-any 错误，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F837 中完成\n* 修复：条形码扫描无加载指示器问题，由 @Sim-sat 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F838 中完成\n* 修复 MFA 和 TOTP 码相关问题，由 @CodeWithCJ 在 https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F840 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.8...v0.16.4.9","2026-03-05T00:03:18",{"id":218,"version":219,"summary_zh":220,"released_at":221},334435,"v0.16.4.8","⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n\r\n## What's Changed\r\n* Withing Integration sync improvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F775\r\n* Barcode Food Duplication Fix by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F777\r\n* doc update for proxmox script by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F778\r\n* doc update by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F779\r\n* Fix Meal Serving Sizing Logic by @Gtt1229 in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F763\r\n* feat(error-handling): implemenation of error boundaries by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F783\r\n* feat(sparkyfitness): Added Helm Chart to deploy application by @Haferbeck-IT in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F782\r\n* feat: unify sleep reports and implement industry-standard \"Wake-up Rule\" by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F784\r\n* Android Self Signed Certificate Support by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F787\r\n* Polar Sync issue fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F789\r\n* Pr 785 feat(ci): Added github actions to publish helm chart by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F790\r\n* feat(ci): Added github actions to publish helm chart by @Haferbeck-IT in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F785\r\n* doc path update for kubernetes by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F791\r\n* Flexible Exercise Calorie Adjustments by @BryceKrispiess in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F776\r\n* Mobile app Sleep sync fix - fixed entry_date fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F793\r\n* build error due to exercise & calculation tsx type error by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F794\r\n* fix(lint): no unsafe function types by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F796\r\n* fix(lint): no require imports by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F797\r\n* fix(lint): only-export-components by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F798\r\n* fix(lint): fix Set state in useEffect by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F799\r\n* feat(helm): Added features\u002Ffixes to helm chart by @Haferbeck-IT in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F802\r\n* App Barcode Scan and Dash Charts by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F800\r\n* switched docker to use pnpm instead of npm by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F805\r\n* fix(lint): fix react-hooks lint errors by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F804\r\n* copied pnpm workspace file for docker deployment by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F806\r\n* build: fix frontend docker build and runtime errors by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F809\r\n* removal of duplicate declaration in root package and vite manual chun… by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F810\r\n\r\n## New Contributors\r\n* @Haferbeck-IT made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F782\r\n* @BryceKrispiess made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F776\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.6...v0.16.4.8","2026-03-01T18:20:58",{"id":223,"version":224,"summary_zh":225,"released_at":226},334436,"v0.16.4.6","⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n\r\n## What's Changed\r\n* Doc: Grant execute permission for functions to sparky_admin by @toddejohnson in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F722\r\n* SparkyFitnessMCP Server POC by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F725\r\n* fix(723): water unit update fails by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F726\r\n* fix: update weight and distance handling in exercise history import by @estuputraaa in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F736\r\n* refactor(settings): migrated setting to TSQ and refactor large components by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F738\r\n* Fixed respecting safe area around the ios navigation bar by @mr-woodapple in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F739\r\n* Revert \"Fixed respecting safe area around the ios navigation bar\" by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F742\r\n* Env vars for OIDC setup by @nikpcenicni in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F737\r\n* MCP food related workflow updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F748\r\n* Pr 740 fix format by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F749\r\n* feat(sleep-science): refinements - reorder sections and fix logic by @thiagosian in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F740\r\n* Add \"Add New\" dialog Food Log option by @Gtt1229 in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F743\r\n* Mobile App - Add Food and Misc Fixes by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F744\r\n* Fixed respecting safe area around the ios navigation bar by @mr-woodapple in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F745\r\n* fix(foodEntryService): forward meal_type_id to repository in createFoodEntryMeal by @marcelosj3 in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F746\r\n* MCP Server improvements for food & exercise by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F751\r\n* added check-in for body measurements, custom measurements, sleep and … by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F752\r\n* Mobile App Extend Sync Range to 1 Year by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F755\r\n* refactor(chat): migrated chat to tanstack Query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F756\r\n* MCP updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F758\r\n* doc for MCP by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F759\r\n* ported MCP to http stream instead of SSE by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F761\r\n* fix on RLS by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F764\r\n* neutralized two critical SQL injection vulnerabilities in measurementRepository.js: by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F765\r\n* sleep hour format updated to HH:MM by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F766\r\n* withing updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F767\r\n* App UI cleanup for testing by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F768\r\n* refactor(onboarding, misc): migration to tsq and removal of axios calls by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F769\r\n* fix for \u002Fhealth api endpoint warning in docker deployment by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F771\r\n* Migrate efs by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F770\r\n* update translation and docker health command updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F772\r\n* refactor(types): moved types to types directory and add eslint rules by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F773\r\n* App Performance + Diagnostic Report by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F774\r\n\r\n## New Contributors\r\n* @estuputraaa made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F736\r\n* @mr-woodapple made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F739\r\n* @thiagosian made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F740\r\n* @marcelosj3 made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F746\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.5...v0.16.4.6","2026-02-27T21:58:54",{"id":228,"version":229,"summary_zh":230,"released_at":231},334437,"v0.16.4.5","⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n📢I added integration for Starva. But as I don't have their subscription, not much I can test. So share me anonymized mock_data to improve this integration.\r\n\r\n## What's Changed\r\n* refactor(checkin): migrate checkin in tanstack query and restructure by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F700\r\n* fix(sleep): saving sleep edit by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F701\r\n* Fibit sync imporvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F706\r\n* fix for 14 day mini chart color fix for progress bar by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F708\r\n* updates to ai chatbot by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F709\r\n* [Feature] Strava Integration Polish and Architectural Standardization by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F712\r\n* Update grantPermissions.js to use double quotes by @toddejohnson in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F711\r\n* migration(reports): migrate reports to tsq and split refactor reports… by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F714\r\n* fix(db\u002Fauth): resolve migration syntax errors and refactor initialization by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F716\r\n* Dev QoL on Fedora fixes by @toddejohnson in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F715\r\n* Mobile App UI and storage fixes, Exercise Sets Fix  by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F717\r\n* feat: global health data sync and comprehensive UI refresh fixes by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F718\r\n* udpated Polar, Fitbit, hevy, Starva and withings to store raw files instead of saving processed file for better mock data sharing. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F719\r\n* cors fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F721\r\n\r\n## New Contributors\r\n* @toddejohnson made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F711\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.4...v0.16.4.5","2026-02-22T22:56:57",{"id":233,"version":234,"summary_zh":235,"released_at":236},334438,"v0.16.4.4","⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n\r\n📢📢SparkyFitness will soon be available in Homepage dashboard. But I need your help!!!\r\nVote this directly in their feature request so I can submit the PR. It needs minimum 20 votes but more the better.\r\n\r\nhttps:\u002F\u002Fgithub.com\u002Fgethomepage\u002Fhomepage\u002Fdiscussions\u002F6344\r\n\r\n\u003Cimg width=\"512\" height=\"132\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F36c675f1-32a1-4b54-9233-b582d4a2d9e4\" \u002F>\r\n\r\n\r\n## What's Changed\r\n* refactor: improve auth types by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F677\r\n* refactor: migrate goals to TanStack Query and modularize UI components by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F679\r\n* fix(680): add food cropped on small monitors by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F681\r\n* Fix for missing Nutrition details while adding meal to diary by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F682\r\n* Fixes related to custom nutrition for Diary, Goal and Report sections. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F683\r\n* fix: resolve numeric input syntax error for custom nutrients by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F685\r\n* refactor(exercises): migration to tanstack query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F686\r\n* Global ai config by @nikpcenicni in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F684\r\n* fitbit data sync optimization by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F690\r\n* format & lint updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F691\r\n* refactor(diary): migrate diary to tanstack query and fix bugs by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F692\r\n* Sorting not working in Food Database by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F695\r\n* fix: centralized secret loading for preflight checks (#554) by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F696\r\n* fix for \"Sync Past Entries\" fails after changing an exercise #544\" by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F697\r\n* integration with homepage dashboard widget by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F699\r\n\r\n## New Contributors\r\n* @nikpcenicni made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F684\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.3...v0.16.4.4","2026-02-20T23:53:25",{"id":238,"version":239,"summary_zh":240,"released_at":241},334439,"v0.16.4.3","📢 SparkyFitness App Update - Integration with Polar Flow (Partially tested) and Hevy (not tested) now available.\r\n⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n\r\n## What's Changed\r\n* fix (652): weird behaviour of decimal input in exercise entry edit by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F653\r\n* Update README.md by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F654\r\n* feat: TanStack Query Migration for Food\u002FMeal Management by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F655\r\n* Feat: CSV import textfield and minor ui improvments by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F656\r\n* refactor(onboarding): Migrate onboarding services to Tanstack Query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F659\r\n* refactor(integrations): Migrate integrations to Tanstack Query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F661\r\n* refactor(auth): Migrate auth to Tanstack Query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F662\r\n* Integration with PolarFlow by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F663\r\n* migration(polar): migrate polar flow to TS Query and check for prettier by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F665\r\n* chore: fix all linting errors and enforce zero-warning policy for CI by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F667\r\n* BUG666: pass SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS to backend container by @deddc23efb in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F668\r\n* chore: update docs for architectural changes and new code quality sta… by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F669\r\n* chore: add eslintignore and prettierignore by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F671\r\n* integration with hevy by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F670\r\n* Fix for direct addition of custom exercise from Diary page. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F672\r\n* fix for oauth and \u002Fhealth-data to handle exercise sets. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F674\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.2...v0.16.4.3","2026-02-16T01:18:46",{"id":243,"version":244,"summary_zh":245,"released_at":246},334440,"v0.16.4.2","📢 SparkyFitness App Update – Good News & Android Update\r\n\r\n\u003Cimg width=\"1452\" height=\"761\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F0d73c716-4bc8-4764-8406-bcec869854a3\" \u002F>\r\n\r\n\r\n✅ Good News:\r\nThe SparkyFitness iOS app is now live on the Apple App Store! 🎉\r\nIf you have an iPhone, you can download it here:\r\nhttps:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fsparkyfitness\u002Fid6757314392\r\n\r\nPlease note: New features will often appear first in TestFlight before they make it to the live production app, since Apple’s approval process can take time.\r\n\r\n@chorkpop is actively working on bringing many web functionality directly to mobile app — including food tracking, exercise , check-ins, and more. More updates coming soon!\r\n\r\n⚠️ Android Update:\r\nAfter several weeks of back-and-forth with Google and multiple requested changes, we were informed that publishing publicly requires an Organizational Google Play account, which is currently a blocker.\r\n\r\nFor now, the Android app will continue to be available through:\r\n\r\n- [x] Google Closed Testing (via joining the Google Group)\r\n- [x] Direct GitHub releases\r\n- [ ] We’re also exploring a possible release on F-Droid\r\n\r\nWe’ll keep everyone posted as this progresses.\r\n\r\n🙏 Thank You\r\n\r\nThank you to everyone who has supported the project through GitHub sponsorships. We’re about halfway toward covering the initial setup and development expenses such as Mac Mini, Apple & Google developer fees etc.\r\nAny additional support are hightly helpful!!! Thank you for being part of the journey 🚀\r\n\r\n\r\n## What's Changed\r\n* Cleanup Frontend and use typescript checks by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F646\r\n* Mobile app expansion (uniwind, dashboard\u002Fdiary) by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F645\r\n* refactor (admin): admin page to tanstack query by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F650\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.1...v0.16.4.2\r\n\r\n\r\n\r\n","2026-02-12T23:40:35",{"id":248,"version":249,"summary_zh":250,"released_at":251},334441,"v0.16.4.1","🚨 BREAKING CHANGE – READ BEFORE UPGRADING 🚨\r\n\r\n⚠️ Your MFA will be reset. You will need to configure again. Releasing this before the planned date as some are having MFA in earlier version.\r\n\r\n⚠️Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n\r\n## What's Changed\r\n* fix (exercise): #590 incorrect rep count when exercise has no weight\u002Freps by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F607\r\n* fix for TOTP & email MFA by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F611\r\n* fix: default .env download path in docs by @StephenFluin in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F608\r\n* package version and readme curl command fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F612\r\n* Readme Updates by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F613\r\n* Background Task Migration by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F614\r\n* ci: add CI test infrastructure with working frontend tests by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F559\r\n* fix: return proper HTTP status codes from auth middleware by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F615\r\n* fix: set sane API key rate-limit defaults by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F616\r\n* chore: remove console.log printing huge json files by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F617\r\n* fix(health-data): apply default units for HealthConnect sync (fixes #567) by @JosephDoUrden in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F621\r\n* fix: docker dev environment frontend auto-reload by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F618\r\n* Integration of React router by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F619\r\n* Fix mobile view  by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F624\r\n* fix (test): add matchMedia to test env for useisMobile hook by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F625\r\n* chore: use eslint to remove unused imports by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F626\r\n* Removed unused file and fixed typescript checks by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F627\r\n* Add visibility toggle for meal types and update related components from  @shantnudon   by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F631\r\n* Add visibility toggle for meal types and update related components by @shantnudon in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F569\r\n* background color fix for main tab navigation and removal of duplicate .env.example file by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F634\r\n* added provider type and provider id in food API end points by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F635\r\n* auto setup wger, openfoodfacts and freeexercisedb when a new user is created. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F636\r\n* fix for body compisition by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F637\r\n* feat #630: add optional private network CORS support by @deddc23efb in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F632\r\n* IP detection for CORS Origin improvement by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F638\r\n* added support for SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F639\r\n* Fix cache (like) problems by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F640\r\n* Breaking!: New folder structure and removal of unused files by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F641\r\n* Passkey reload fix & withings json file creation by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F644\r\n\r\n## New Contributors\r\n* @StephenFluin made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F608\r\n* @JosephDoUrden made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F621\r\n* @deddc23efb made their first contribution in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F632\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.4.0...v0.16.4.1","2026-02-09T23:49:52",{"id":253,"version":254,"summary_zh":255,"released_at":256},334442,"v0.16.4.0","### 🚨 BREAKING CHANGE – READ BEFORE UPGRADING 🚨\r\n**This is the second breaking change in the last 8 months.**\r\n\r\n- Backup your data before upgrading to v0.16.4.0\r\n- JWT authentication removed → switched to Better-Auth\r\n- OIDC, MFA\u002FTOTP, API Keys may break → reconfiguration required\r\n- OAuth callback URLs changed → update your OIDC\r\n- Some API endpoints have changed\r\n- I’ve tested extensively, but bugs may still exist\r\n\r\n👉 Ensure email\u002Fpassword login works before upgrading.\r\n👉 If unsure about backup\u002Frestore, consider waiting a few days.\r\n\r\nYour upgrades help catch issues early, which benefits everyone.\r\nIn my PROD environment, I only had to reconfigure OIDC; MFA\u002FTOTP hasn’t affected me, and no other issues observed so far.\r\n\r\n\r\n## What's Changed\r\n* App Deduplication Fix by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F543\r\n* Fitbit sync of breathing rate and sleep duration fixes by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F549\r\n* fix: getDailyNutritionSummary returning zeros when custom_nutrients is empty by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F551\r\n* Mobile App Onboarding and Privacy by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F552\r\n* Add Jest testing infrastructure to backend server by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F553\r\n* feat: Add configurable nginx rate limiting with smart IP detection by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F555\r\n* Add CI testing workflow for all components by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F556\r\n* addition of ascAppId in Mobile eas.json file by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F557\r\n* removal of unused variables in mobile by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F558\r\n* Update rate limiting documentation for expanded auth endpoints by @asmello in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F561\r\n* Fix Android Permissions by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F568\r\n* Migration from custom authentication to better-auth system with passkey support by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F571\r\n* minor edits to MFASettings and AppContent components by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F572\r\n* vite issue fix and docker file improvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F573\r\n* docker file improvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F574\r\n* docker file improvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F575\r\n* nginx revert to default worker connections by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F576\r\n* nginx issues by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F577\r\n* proxy issue retry by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F578\r\n* auth udpates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F579\r\n* code refractor MFA by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F580\r\n* trust proxy from internal nginx by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F581\r\n* proxy issue troubleshooting in docker deployment by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F582\r\n* nginx auth troubleshooting by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F583\r\n* test by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F584\r\n* nginx updates by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F586\r\n* cleanup dead sessions by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F595\r\n* fix(garmin): #593 only use active calories instead of total calories by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F596\r\n* App: Add platform-specific notices for health data by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F599\r\n* fix on dup;licate exercise addition to preset while importing exercise from online option. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F600\r\n* preserve sort order of exercises in workout presets and plans by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F601\r\n* fix (garmin): #492 garmin activity minutes off by factor 60 by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F603\r\n* fix ui: some fields have light background in oidc settings by @Sim-sat in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F602\r\n* auto set first user as admin & updated preflightcheck to show better error message. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F604\r\n* updated preflightcheck to show better error message. by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F605\r\n* withing endpoint fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F606\r\n\r\n## New Contributors\r\n* @asmello made their first contribution in","2026-02-06T21:20:01",{"id":258,"version":259,"summary_zh":260,"released_at":261},334443,"v0.16.3.6","⚠️ Important Notices\r\n⚠️ Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n⚠️OIDC & Family & Friends module has been updated. If any of the sharing is not working, raise a issue via Github\r\n⚠️ Android and iOS apps are available for testing via Google Group Play Store access and TestFlight. If you’re not familiar with the process, please refer to the GitHub Wiki for instructions.\r\n\r\n\u003Cimg width=\"50\" height=\"50\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F8fd9e43d-c665-4617-811b-19accd3a8797\" \u002F>  Fitbit integration is now available. Read note & instruction in Github Wiki below. As its first release, might have some flaws\r\n\r\nhttps:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fwiki\u002FSample-Fitbit-Setup\r\n\r\n\r\n## What's Changed\r\n* calendar year range fix by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F537\r\n* Swagger URL fix for nginx config by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F538\r\n* fitbit integration by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F541\r\n* fitbit updates & nginx fix for swagger url by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F542\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.3.5...v0.16.3.6","2026-01-23T20:09:03",{"id":263,"version":264,"summary_zh":265,"released_at":266},334444,"v0.16.3.5","⚠️ Important Notices\r\n⚠️ Backup before upgrading. If you don’t see the latest updates, please refresh or clear your browser cache.\r\n⚠️OIDC & Family & Friends module has been updated. If any of the sharing is not working, raise a issue via Github\r\n⚠️ Android and iOS apps are available for testing via Google Group Play Store access and TestFlight. If you’re not familiar with the process, please refer to the GitHub Wiki for instructions.\r\n\r\n## What's Changed\r\n* Mobile app - updated aggregate functions timezone function by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F526\r\n* Mobile Data and Background Sync Fixes by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F528\r\n* CSV import - sanitized input values by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F530\r\n* Barcode scanner improvements by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F531\r\n* user profile switching access issue fix for diary page by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F532\r\n* Mobile App Log, UI, Icon Updates by @apedley in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F533\r\n* OIDC improvements & Switch to family user account  by @CodeWithCJ in https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fpull\u002F534\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002FCodeWithCJ\u002FSparkyFitness\u002Fcompare\u002Fv0.16.3.4...v0.16.3.5","2026-01-19T21:47:39"]