ZED (My Islamic Reminders)
Un'app mobile e una console web di amministrazione che trasmette contenuti islamici multilingue secondo la programmazione personale di ciascun utente, con audio narrato generato automaticamente e analisi complete sulla consegna.
Expo (React Native)
Next.js
Convex
OpenAI TTS
TanStack Table
Recharts

Panoramica
ZED è una piattaforma di trasmissione spirituale realizzata come monorepo in tre parti che condividono un unico backend: un'app mobile Expo per gli utenti finali, una dashboard di amministrazione Next.js per chi gestisce il servizio e un backend Convex che conserva i dati e gestisce programmazione, notifiche, analisi e generazione dell'audio. Il prodotto invia agli utenti brevi trasmissioni islamiche all'orario locale preferito, nella lingua scelta, e trasforma automaticamente ciascuna trasmissione in audio narrato con evidenziazione parola per parola durante la riproduzione.
Il problema
La parte difficile di questo prodotto non è mostrare i contenuti. È l'orchestrazione. Gli utenti vogliono ricevere le trasmissioni a un orario specifico nel proprio fuso orario, in una tra diverse lingue, compresi i testi da destra a sinistra. Ogni trasmissione deve poter essere fruita come testo, audio o come contenuto condivisibile. Gli amministratori devono poter vedere cosa sta realmente accadendo: cosa è stato consegnato, visualizzato e riprodotto, e se la generazione dell'audio tiene il passo. E quando qualcuno perde un contenuto, il sistema deve effettuare il follow-up in autonomia. Il vero lavoro consiste nel riunire recapito programmato, selezione della lingua, generazione dell'audio, notifiche push e analisi in un unico sistema coerente.
Il mio ruolo e approccio
Questo è stato un progetto di team guidato principalmente da un altro ingegnere, a cui ho contribuito come uno degli sviluppatori. Il mio ruolo è stato mirato anziché primario, all'interno di un'architettura basata su Convex come unica fonte di verità condivisa sia dall'app mobile sia dalla dashboard di amministrazione. Il principio progettuale dell'intero codebase prevede che il backend gestisca l'orchestrazione, inclusi pianificazione, tentativi di retry, elaborazioni audio e analisi, mentre i due front end rimangono snelli e leggono dalla medesima API generata.
Stack tecnologico
Funzionalità chiave
Galleria


Sfide e soluzioni
Il recapito delle notifiche è il nucleo tecnicamente più esigente del prodotto. Poiché le trasmissioni vengono inviate per singolo utente, per fuso orario e secondo una programmazione, il backend gestisce il recapito tramite cron job di Convex e un pool di lavoro in background anziché trigger estemporanei, con marcatori di retry tracciati sull'attività di ciascun utente in modo da recuperare automaticamente i contenuti non fruiti.
La generazione dell'audio è l'altra parte dinamica che deve rimanere affidabile. Convertire il testo in audio narrato è lento e può fallire, quindi ogni elemento di contenuto localizzato tiene traccia del proprio stato di generazione e del conteggio dei tentativi; inoltre, gli amministratori possono visualizzare lo stato di avanzamento e riavviare i job bloccati direttamente dalla dashboard. Il monitoraggio dell'engagement — con la registrazione degli eventi di consegna, visualizzazione e riproduzione corredati di timestamp — è integrato direttamente nel modello dati, il che significa che i report provengono direttamente dallo stesso archivio senza bisogno di una pipeline di analisi separata.
Risultato
ZED è un sistema multipiattaforma completo in cui un unico backend Convex alimenta sia un'app mobile per gli utenti finali sia una dashboard operativa. Pianifica trasmissioni personalizzate, multilingue e con narrazione automatica, fornendo report su ogni passaggio del recapito. È un solido esempio di ingegneria di prodotto a elevata orchestrazione, in cui il backend gestisce il lavoro complesso di programmazione e contenuti multimediali, consentendo alle app di rimanere snelle.
Hai un problema di prodotto simile?
Condividi il prodotto attuale, il risultato di cui hai bisogno e i vincoli già presenti. Li utilizzerò per definire un primo milestone sensato.
Assumere uno sviluppatore full stack