ZED (My Islamic Reminders)
一个移动应用加上 Web 管理控制台,按每个用户的个人日程安排提供多语言的伊斯兰播报,带有自动生成的配音音频和完整的分发分析。
Expo (React Native)
Next.js
Convex
OpenAI TTS
TanStack Table
Recharts

概览
ZED 是一个精神播报平台,作为 monorepo 构建,包含三个共享一个后端的部分:面向最终用户的 Expo 移动应用、面向运行人员的 Next.js 管理员仪表盘,以及保存数据并执行调度、通知、分析和音频生成的 Convex 后端。该产品在用户首选的当地时间、以他们选择的语言向用户发送简短的伊斯兰播报,并在播放时自动将其转换为带有逐词高亮的配音音频。
问题
该产品的难点不在于展示内容,而在于编排。用户希望播报在他们自己时区的特定时间发送,并使用包括从右到左脚本在内的几种语言之一。每个播报都应该可以作为文本、音频或可分享的内容来消费。管理员需要看到实际发生的情况:已发送、已查看和已播放的内容,以及音频生成是否跟上。当有人错过内容时,系统应该自行跟进。真正的工作是将预定分发、语言选择、音频生成、推送通知和分析整合到一个连贯的系统中。
我的角色与方法
这是一个主要由另一位工程师领导的团队项目,我作为其中的一名开发人员做出了贡献。我的参与是专注的而非主要的,在围绕 Convex 作为移动应用和管理员仪表盘共享的单一真相来源构建的架构中。整个代码库的设计原则是后端拥有编排,包括调度、重试、音频作业和分析,而两个前端保持轻量并从生成的相同 API 中读取。
技术栈
主要功能
图集


挑战与解决方案
通知分发是该产品对技术要求很高的核心。因为播报是按用户、按时区在时间表上发出的,所以后端通过 Convex cron 作业和后台工作池而不是临时触发器来处理分发,并针对每个用户的活动跟踪重试标记,以便自动跟进错过的内容。
音频生成是另一个必须保持可靠的移动部分。将文本转换为配音音频很慢并且可能会失败,因此每段本地化内容都会跟踪自己的生成状态和重试次数,管理员可以从仪表盘看到进度并重新运行停滞的作业。参与度跟踪,即记录带有时间戳的送达、查看和播放事件,直接内置到数据模型中,这意味着报表直接来自同一存储,无需单独的分析流水线。
成果
ZED 是一个完整的跨平台系统,其中单个 Convex 后端同时驱动消费者移动应用和运营仪表盘。它调度个性化的、多语言的、自动配音的播报,并报告其分发的每一步。这是一个编排繁重的产品工程的有力例子,后端完成艰苦的调度和媒体工作,以便应用程序可以保持简单。