ZED (My Islamic Reminders)
各ユーザー固有のスケジュールに合わせて、自動生成された音声ナレーションと詳細な配信アナリティクス付きで多言語のイスラム配信を届けるモバイルアプリおよびWeb管理コンソール。
Expo (React Native)
Next.js
Convex
OpenAI TTS
TanStack Table
Recharts

概要
ZEDは、単一のバックエンドを共有する3つの要素で構成されたモノレポ形式の宗教配信プラットフォームです。エンドユーザー向けのExpoモバイルアプリ、運営者向けのNext.js管理ダッシュボード、そしてデータを保持しスケジューリング、通知、アナリティクス、音声生成を担うConvexバックエンドで構築されています。ユーザーが希望する現地時間に合わせて選択した言語で短いイスラム配信を届け、再生時には自動生成されたナレーション音声と単語単位のハイライト表示を提供します。
課題
この製品の難しさは、コンテンツの表示そのものではなく、そのオーケストレーションにあります。ユーザーは、右横書き(RTL)言語を含む複数の言語から選択し、自身のタイムゾーンの指定時刻に配信されることを求めています。各配信はテキスト、音声、あるいは共有可能な形式で利用できる必要があります。管理者は、何が配信され、閲覧され、再生されたか、また音声生成が滞りなく行われているかなど、実際の稼働状況を把握する必要があります。そしてユーザーがコンテンツを見逃した際には、システムが自動でフォローアップを行わなければなりません。真の課題は、スケジュール配信、言語選択、音声生成、プッシュ通知、アナリティクスを一つの首尾一貫したシステムへとまとめ上げることでした。
役割とアプローチ
本件は別のエンジニアが主導したチームプロジェクトであり、私は開発者の一人として参画しました。モバイルアプリと管理ダッシュボードの双方が共有する信頼できる唯一の情報源(Single Source of Truth)としてConvexを中心に構築されたアーキテクチャの中で、焦点を絞った開発を担当しました。コードベース全体の設計原則として、スケジューリング、リトライ、音声生成ジョブ、アナリティクスなどのオーケストレーションはバックエンドが担い、2つのフロントエンドは薄い設計を維持して自動生成された同一のAPIからデータを取得する構成となっています。
技術スタック
主な機能
ギャラリー


課題と解決策
通知配信はこの製品において技術的に極めて要求水準の高い中核部分です。配信はユーザーごと、タイムゾーンごとにスケジュールに沿って行われるため、バックエンドではアドホックなトリガーではなくConvex cronジョブとバックグラウンドワークプールを介して処理を実行し、ユーザーのアクティビティに応じたリトライマーカーを追跡することで、見逃されたコンテンツも自動的にフォローアップされます。
音声生成もまた、高い信頼性が求められる重要な可動部分です。テキストを読み上げ音声に変換する処理は時間を要し、失敗する可能性もあるため、ローカライズされたコンテンツごとに生成ステータスとリトライ回数を追跡し、管理者がダッシュボードから進捗状況を確認して滞留したジョブを再実行できるようにしました。タイムスタンプ付きの配信・閲覧・再生イベントを記録するエンゲージメント追跡はデータモデルに直接組み込まれており、別のアナリティクスパイプラインを用意することなく同じデータストアから直接レポートを生成できます。
成果
ZEDは、単一のConvexバックエンドがエンドユーザー向けモバイルアプリと運用ダッシュボードの双方を駆動する、完全なクロスプラットフォームシステムです。パーソナライズされ、多言語に対応した自動音声付き配信をスケジュールし、配信の全行程をレポートします。アプリ側の処理をシンプルに保つためにバックエンドが高度なスケジューリングとメディア処理を担う、オーケストレーション重視のプロダクトエンジニアリングの好例です。