Muhammad Arslan
Нанять меня
Назад к проектам

ZED (My Islamic Reminders)

Мобильное приложение и веб-консоль администратора для доставки мультиязычных исламских трансляций по персональному расписанию каждого пользователя с автоматической генерацией озвучки и детальной аналитикой доставки.

Роль: Contributing developer (team project, led by another engineer)Сроки: 2025-2026Тип: Cross-platform app + admin

Expo (React Native)

Next.js

Convex

OpenAI TTS

TanStack Table

Recharts

Дашборд администратора ZED с примерами графиков роста пользователей, вовлеченности и используемых языков

Обзор

ZED — это платформа духовного вещания, реализованная в виде монорепозитория из трех компонентов с единым бэкендом: мобильного приложения на Expo для конечных пользователей, панели администратора на Next.js для управления и бэкенда на Convex, который хранит данные, управляет расписанием, уведомлениями, аналитикой и генерацией аудио. Продукт отправляет пользователям короткие исламские трансляции в удобное для них местное время, на выбранном языке, и автоматически преобразует каждую из них в аудио с дикторским голосом и построчной подсветкой слов при воспроизведении.

Проблема

Сложность этого продукта заключается не в отображении контента, а в оркестрации. Пользователям требуется доставка трансляций в определенное время в их часовом поясе, на одном из нескольких языков, включая языки с письмом справа налево. Каждая трансляция должна быть доступна в виде текста, аудио или материала, которым можно поделиться. Администраторам необходимо видеть реальную картину: что было доставлено, просмотрено и воспроизведено, а также справляется ли генерация аудио. А когда кто-то пропускает контент, система должна напоминать о нем автоматически. Настоящая работа заключалась в объединении доставки по расписанию, выбора языка, генерации аудио, push-уведомлений и аналитики в единую согласованную систему.

Моя роль и подход

Это был командный проект под руководством другого ведущего инженера, в котором я участвовал в качестве одного из разработчиков. Мой вклад был сфокусированным, в рамках архитектуры, построенной вокруг Convex как единого источника истины для мобильного приложения и панели администратора. Принцип проектирования кодовой базы заключается в том, что бэкенд берет на себя оркестрацию — включая расписание, повторные попытки, задачи генерации аудио и аналитику, — в то время как оба фронтенда остаются компактными и работают через один сгенерированный API.

Стек технологий

МобильныйExpo and React Native with Expo Router, Jotai, expo-audio, expo-notifications
АдминистрированиеNext.js with React, TanStack Table, Recharts, Sonner, and a shadcn-style UI
БэкендConvex for data, queries, mutations, storage, cron jobs, and a background work pool
МедиаOpenAI text-to-speech for narrated audio generation
Уведомленияpush delivery with a retry policy

Ключевые особенности

Персонализированная доставка по расписаниютрансляция каждого пользователя приходит в выбранное им местное время с привязкой к его часовому поясу.
Мультиязычный контенттрансляции на нескольких языках, включая полную поддержку чтения справа налево, с выбором оптимального варианта на основе предпочтений пользователя.
Автоматически генерируемая озвучкаevery broadcast is turned into audio through text-to-speech, with word timings so the text highlights in sync as it plays.
Удобный формат воспроизведенияна экране смартфона воспроизводится аудио с дикторским голосом, подсвечиваются слова по мере чтения, и пользователи могут делиться текстом.
Операционная консоль администраторапанели мониторинга пользователей, доставки, просмотров, воспроизведений и статуса генерации аудио, а также отчеты о росте и языковой статистике.
Управление трансляциями и контентомсоздание и редактирование трансляций, повторный запуск зависших задач генерации аудио, а также управление локализованными текстами приложения и ссылками на магазины приложений.
Управление пользователями и настройкиуправление ролями и статусом активности, выбор режима одиночных или множественных напоминаний и отправка тестовых уведомлений.

Галерея

Дашборд администратора ZED с синтетической статистикой по пользователям, контенту и доставке
Графики вовлеченности и языков в ZED с примерами активности трансляций

Сложности и решения

Доставка уведомлений — технически требовательное ядро продукта. Поскольку трансляции отправляются каждому пользователю индивидуально, с учетом часового пояса и расписания, бэкенд осуществляет доставку через cron-задачи Convex и фоновый пул воркеров, а не разовые триггеры, фиксируя маркеры повторных попыток на основе активности пользователя для автоматической отправки пропущенных материалов.

Генерация аудио — еще одна динамическая часть, требующая абсолютной надежности. Преобразование текста в озвученное аудио требует времени и может завершаться ошибкой, поэтому для каждой единицы локализованного контента отслеживается собственный статус генерации и количество повторных попыток, а администраторы могут просматривать прогресс и повторно запускать зависшие задачи прямо из дашборда. Отслеживание вовлеченности — запись событий доставки, просмотра и воспроизведения с временными метками — встроено непосредственно в модель данных, что позволяет формировать отчеты напрямую из того же хранилища без отдельного конвейера аналитики.

Результат

ZED — это целостная кроссплатформенная система, где единый бэкенд на Convex обслуживает как пользовательское мобильное приложение, так и операционный дашборд. Она организует доставку персонализированных, мультиязычных и автоматически озвученных трансляций по расписанию и формирует отчеты по каждому этапу их доставки. Это наглядный пример продуктовой разработки со сложной оркестрацией, где бэкенд берет на себя трудоемкие задачи по планированию и медиа, позволяя клиентским приложениям оставаться простыми.

Столкнулись с похожей продуктовой задачей?

Расскажите о текущем состоянии продукта, необходимом результате и имеющихся ограничениях. На основе этого я сформулирую понятный первый этап.

Нанять full stack разработчика
Заполнить бриф проекта
Все проектыСледующий проектSchooliee
ZED (My Islamic Reminders): Кроссплатформенная платформа вещания | Muhammad Arslan